diff --git a/.appveyor.yml b/.appveyor.yml index 9f20f6d835..527c96a92d 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -67,12 +67,3 @@ build_script: >- test: off deploy: off - -# irc notification via notifico -notifications: -- provider: Webhook - url: http://n.tkte.ch/h/4848/0nqixIBiOFzf-S_N2PY83dGB - method: GET - on_build_success: false - on_build_failure: false - on_build_status_changed: true diff --git a/.github/workflows/build.yaml b/.github/workflows/build.yaml index 5e11108335..57ee6639f5 100644 --- a/.github/workflows/build.yaml +++ b/.github/workflows/build.yaml @@ -22,7 +22,7 @@ jobs: run: | # XXX: cygwin still uses gcc v11 so we get new warnings with v13, # resulting in errors due to -Werror. Disable them for now. - export CXXFLAGS="-Wno-error=stringop-truncation -Wno-error=array-bounds -Wno-error=overloaded-virtual -Wno-narrowing -Wno-use-after-free" + export CXXFLAGS="-Wno-error=stringop-truncation -Wno-error=array-bounds -Wno-error=overloaded-virtual -Wno-narrowing -Wno-use-after-free -Wno-error=maybe-uninitialized" (cd winsup && ./autogen.sh) ./configure --disable-dependency-tracking make -j8 diff --git a/.github/workflows/cygwin.yml b/.github/workflows/cygwin.yml index 69511ec3a4..e780428035 100644 --- a/.github/workflows/cygwin.yml +++ b/.github/workflows/cygwin.yml @@ -14,37 +14,75 @@ jobs: pkgarch: 64 name: Fedora cross ${{ matrix.target }} + env: + HAS_SSH_KEY: ${{ secrets.SSH_KEY != '' }} + steps: - uses: actions/checkout@v4 # install build tools - - run: dnf install -y autoconf automake make patch perl - - run: dnf install -y mingw${{ matrix.pkgarch }}-gcc-c++ mingw${{ matrix.pkgarch }}-winpthreads-static mingw${{ matrix.pkgarch }}-zlib-static + - name: Install build tools + run: | + dnf install -y autoconf automake make patch perl mingw${{ matrix.pkgarch }}-gcc-c++ mingw${{ matrix.pkgarch }}-winpthreads-static mingw${{ matrix.pkgarch }}-zlib-static # enable 'dnf copr' - - run: dnf install -y dnf-plugins-core - - # cocom isn't packaged in Fedora, so we install from a copr - - run: dnf copr enable -y jturney/cocom - - run: dnf install -y cocom + - name: Enable 'dnf copr' + run: | + dnf install -y dnf-plugins-core # install cross-cygwin toolchain and libs from copr - - run: dnf copr enable -y yselkowitz/cygwin - - run: dnf install -y cygwin${{ matrix.pkgarch }}-gcc-c++ cygwin${{ matrix.pkgarch }}-gettext cygwin${{ matrix.pkgarch }}-libbfd cygwin${{ matrix.pkgarch }}-libiconv cygwin${{ matrix.pkgarch }}-zlib + - name: Install cross-cygwin toolchain and libs and cocom from copr + run: | + dnf copr enable -y yselkowitz/cygwin + dnf install -y cygwin${{ matrix.pkgarch }}-gcc-c++ cygwin${{ matrix.pkgarch }}-gettext cygwin${{ matrix.pkgarch }}-libbfd cygwin${{ matrix.pkgarch }}-libiconv cygwin${{ matrix.pkgarch }}-zlib cocom # install doc tools - - run: dnf install -y dblatex docbook2X docbook-xsl xmlto - - run: dnf install -y python3 python3-lxml python3-ply - - run: fmtutil-sys --byfmt pdflatex && texhash + - name: Install doc tools + run: | + dnf install -y dblatex docbook2X docbook-xsl xmlto python3 python3-lxml python3-ply openssh-clients + fmtutil-sys --byfmt pdflatex && texhash # build - - run: mkdir build install - - run: cd winsup && ./autogen.sh - - run: cd build && ../configure --target=${{ matrix.target }} --prefix=$(realpath $(pwd)/../install) - - run: make -C build - - run: make -C build/*/newlib info man - - run: make -C build install - - run: make -C build/*/newlib install-info install-man + - name: Configure, build and install + run: | + mkdir build install + (cd winsup && ./autogen.sh) + (cd build && ../configure --target=${{ matrix.target }} --prefix=$(realpath $(pwd)/../install) ) + make -C build + make -C build/*/newlib info man + make -C build install + make -C build/*/newlib install-info install-man + + # deploy documentation + - name: Deploy documentation + env: + SSH_AUTH_SOCK: /tmp/ssh_agent.sock + run: | + # pushes to main are deployed as preview + # pushes to cygwin-n.n.n (but not 'cygwin-n.n.n.dev') tags are deployed as stable + # other references are ignored by this step + case "${{ github.ref }}" in + refs/heads/main) + DEST='preview' + ;; + refs/tags/cygwin-[0-9.]*) + DEST='stable' + ;; + *) + exit 0 + ;; + esac + # unfuck github fuckery of HOME in a container + unset HOME + # add the hosts public key to known_hosts + mkdir -p ~/.ssh/ + echo "cygwin.com ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKoejTnTCbXaIIMYfbX7t4tYUOQ2bTxZC3e/td3BageF" >> ~/.ssh/known_hosts + # load the key (restricted to scp only) into ssh-agent + ssh-agent -a $SSH_AUTH_SOCK > /dev/null + ssh-add - <<< "${{ secrets.SSH_KEY }}" + # 'make install' doesn't install faq, so instead just deploy from build directory + scp -pr build/*/winsup/doc/{cygwin-api,cygwin-ug-net,faq} cygwin-admin@cygwin.com:/sourceware/www/sourceware/htdocs/cygwin/doc/${DEST}/ + if: env.HAS_SSH_KEY == 'true' windows-build: runs-on: windows-latest @@ -52,7 +90,8 @@ jobs: fail-fast: false matrix: include: - - pkgarch: x86_64 + - target: x86_64-pc-cygwin + pkgarch: x86_64 name: Windows native ${{ matrix.pkgarch }} steps: @@ -70,7 +109,9 @@ jobs: packages: >- autoconf, automake, + busybox, cocom, + cygutils-extra, dblatex, dejagnu, docbook-xml45, @@ -102,9 +143,33 @@ jobs: (cd winsup; ./autogen.sh) && cd build && ../configure --prefix=$(realpath $(pwd)/../install) -v && - export MAKEFLAGS=-j$(ncores) && + export MAKEFLAGS=-j$(nproc) && make && make install && (cd */newlib; make info man) && (cd */newlib; make install-info install-man) shell: C:\cygwin\bin\bash.exe --noprofile --norc -eo pipefail '{0}' + + # test + - name: Test Cygwin + run: >- + export PATH=/usr/bin:$(cygpath ${SYSTEMROOT})/system32 && + export MAKEFLAGS=-j$(nproc) && + cd build && + (export PATH=${{ matrix.target }}/winsup/testsuite/testinst/bin:${PATH} && cmd /c $(cygpath -wa ${{ matrix.target }}/winsup/cygserver/cygserver) &) && + (cd ${{ matrix.target }}/winsup; make check AM_COLOR_TESTS=always) + shell: C:\cygwin\bin\bash.exe --noprofile --norc -eo pipefail '{0}' + + # upload test logs to facilitate investigation of problems + - name: Upload test logs + uses: actions/upload-artifact@v3 + with: + name: testlogs + path: | + build/${{ matrix.target }}/winsup/testsuite/**/*.log + build/${{ matrix.target }}/winsup/testsuite/**/*.trs + if: ${{ !cancelled() }} + + # workaround problems with actions/checkout post-run step using cygwin git + - name: Avoid actions/checkout post-run step using Cygwin git + run: bash -c 'rm /usr/bin/git.exe' diff --git a/COPYING.NEWLIB b/COPYING.NEWLIB index 2d1473639b..176b3a4706 100644 --- a/COPYING.NEWLIB +++ b/COPYING.NEWLIB @@ -762,7 +762,9 @@ SUCH DAMAGE. (35) - Arm Ltd - Copyright (c) 2009-2018 Arm Ltd + SPDX-License-Identifier: BSD-3-Clause + + Copyright (c) 2009-2022 Arm Ltd All rights reserved. Redistribution and use in source and binary forms, with or without @@ -1289,3 +1291,253 @@ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +(56) MIT OR Apache-2.0 WITH LLVM-exception (newlib/libc/machine/aarch64) + +SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception + + +MIT License +----------- + +Copyright (c) 1999-2023, Arm Limited. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + + +Apache-2.0 WITH LLVM-exception +------------------------------ + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + + +--- LLVM Exceptions to the Apache 2.0 License ---- + +As an exception, if, as a result of your compiling your source code, portions +of this Software are embedded into an Object form of such source code, you +may redistribute such embedded portions in such Object form without complying +with the conditions of Sections 4(a), 4(b) and 4(d) of the License. + +In addition, if you combine or link compiled forms of this Software with +software that is licensed under the GPLv2 ("Combined Software") and if a +court of competent jurisdiction determines that the patent provision (Section +3), the indemnity provision (Section 9) or other Section of the License +conflicts with the conditions of the GPLv2, you may retroactively and +prospectively choose to deem waived or otherwise exclude such Section(s) of +the License, but only in their entirety and only with respect to the Combined +Software. diff --git a/config/mt-d30v b/config/mt-d30v index d34b774b3f..f5081aef5d 100644 --- a/config/mt-d30v +++ b/config/mt-d30v @@ -1,4 +1,4 @@ # Build libraries optimizing for space, not speed. # Turn off warnings about symbols named the same as registers - CFLAGS_FOR_TARGET = -g -Os -Wa,-C - CXXFLAGS_FOR_TARGET = -g -Os -Wa,-C + CFLAGS_FOR_TARGET += -g -Os -Wa,-C + CXXFLAGS_FOR_TARGET += -g -Os -Wa,-C diff --git a/configure b/configure index 0badc34cba..1474838bd6 100755 --- a/configure +++ b/configure @@ -755,6 +755,7 @@ infodir docdir oldincludedir includedir +runstatedir localstatedir sharedstatedir sysconfdir @@ -822,6 +823,7 @@ enable_stage1_languages enable_objc_gc with_build_sysroot with_debug_prefix_map +with_tooldir with_build_config enable_vtable_verify enable_serial_configure @@ -915,6 +917,7 @@ datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' +runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' @@ -1167,6 +1170,15 @@ do | -silent | --silent | --silen | --sile | --sil) silent=yes ;; + -runstatedir | --runstatedir | --runstatedi | --runstated \ + | --runstate | --runstat | --runsta | --runst | --runs \ + | --run | --ru | --r) + ac_prev=runstatedir ;; + -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ + | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ + | --run=* | --ru=* | --r=*) + runstatedir=$ac_optarg ;; + -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1304,7 +1316,7 @@ fi for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir + libdir localedir mandir runstatedir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1464,6 +1476,7 @@ Fine tuning of the installation directories: --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] + --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -1592,6 +1605,7 @@ Optional Packages: use sysroot as the system root during the build --with-debug-prefix-map='A=B C=D ...' map A to B, C to D ... in debug information + --with-tooldir=PATH use given path to install target tools after build --with-build-config='NAME NAME2...' use config/NAME.mk build configuration --with-build-time-tools=PATH @@ -7057,7 +7071,21 @@ esac # Some systems (e.g., one of the i386-aix systems the gas testers are # using) don't handle "\$" correctly, so don't use it here. -tooldir='${exec_prefix}'/${target_noncanonical} + +# Check whether --with-tooldir was given. +if test "${with_tooldir+set}" = set; then : + withval=$with_tooldir; case x"$withval" in #( + x/*) : + ;; #( + *) : + as_fn_error $? "argument to --with-tooldir must be an absolute path" "$LINENO" 5 ;; +esac + +else + with_tooldir='${exec_prefix}'/${target_noncanonical} +fi + +tooldir=${with_tooldir} build_tooldir=${tooldir} # Create a .gdbinit file which runs the one in srcdir diff --git a/configure.ac b/configure.ac index f7fc8e974d..3ed8a1b888 100644 --- a/configure.ac +++ b/configure.ac @@ -2599,7 +2599,15 @@ esac # Some systems (e.g., one of the i386-aix systems the gas testers are # using) don't handle "\$" correctly, so don't use it here. -tooldir='${exec_prefix}'/${target_noncanonical} +AC_ARG_WITH([tooldir], + [AS_HELP_STRING([--with-tooldir=PATH], + [use given path to install target tools after build])], + [AS_CASE([x"$withval"], + [x/*],, + [AC_MSG_ERROR([argument to --with-tooldir must be an absolute path])]) + ], + [with_tooldir='${exec_prefix}'/${target_noncanonical}]) +tooldir=${with_tooldir} build_tooldir=${tooldir} # Create a .gdbinit file which runs the one in srcdir diff --git a/include/ansidecl.h b/include/ansidecl.h index ceb356e74e..653d91869e 100644 --- a/include/ansidecl.h +++ b/include/ansidecl.h @@ -1,5 +1,5 @@ -/* ANSI and traditional C compatability macros - Copyright (C) 1991-2015 Free Software Foundation, Inc. +/* Compiler compatibility macros + Copyright (C) 1991-2024 Free Software Foundation, Inc. This file is part of the GNU C Library. This program is free software; you can redistribute it and/or modify @@ -16,18 +16,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA 02110-1301, USA. */ -/* ANSI and traditional C compatibility macros - - ANSI C is assumed if __STDC__ is #defined. - - Macro ANSI C definition Traditional C definition - ----- ---- - ---------- ----------- - ---------- - PTR `void *' `char *' - const not defined `' - volatile not defined `' - signed not defined `' - - For ease of writing code which uses GCC extensions but needs to be +/* For ease of writing code which uses GCC extensions but needs to be portable to other compilers, we provide the GCC_VERSION macro that simplifies testing __GNUC__ and __GNUC_MINOR__ together, and various wrappers around __attribute__. Also, __extension__ will be #defined @@ -62,24 +51,10 @@ So instead we use the macro below and test it against specific values. */ #define GCC_VERSION (__GNUC__ * 1000 + __GNUC_MINOR__) #endif /* GCC_VERSION */ -#if defined (__STDC__) || defined(__cplusplus) || defined (_AIX) || (defined (__mips) && defined (_SYSTYPE_SVR4)) || defined(_WIN32) -/* All known AIX compilers implement these things (but don't always - define __STDC__). The RISC/OS MIPS compiler defines these things - in SVR4 mode, but does not define __STDC__. */ -/* eraxxon@alumni.rice.edu: The Compaq C++ compiler, unlike many other - C++ compilers, does not define __STDC__, though it acts as if this - was so. (Verified versions: 5.7, 6.2, 6.3, 6.5) */ - -#define PTR void * - -#undef const -#undef volatile -#undef signed - /* inline requires special treatment; it's in C99, and GCC >=2.7 supports it too, but it's not in C89. */ #undef inline -#if __STDC_VERSION__ >= 199901L || defined(__cplusplus) || (defined(__SUNPRO_C) && defined(__C99FEATURES__)) +#if (!defined(__cplusplus) && __STDC_VERSION__ >= 199901L) || defined(__cplusplus) || (defined(__SUNPRO_C) && defined(__C99FEATURES__)) /* it's a keyword */ #else # if GCC_VERSION >= 2007 @@ -89,22 +64,6 @@ So instead we use the macro below and test it against specific values. */ # endif #endif -#else /* Not ANSI C. */ - -#define PTR char * - -/* some systems define these in header files for non-ansi mode */ -#undef const -#undef volatile -#undef signed -#undef inline -#define const -#define volatile -#define signed -#define inline - -#endif /* ANSI C. */ - /* Define macros for some gcc attributes. This permits us to use the macros freely, and know that they will come into play for the version of gcc in which they are supported. */ @@ -252,7 +211,7 @@ So instead we use the macro below and test it against specific values. */ # endif /* GNUC >= 3.0 */ #endif /* ATTRIBUTE_ALIGNED_ALIGNOF */ -/* Useful for structures whose layout must much some binary specification +/* Useful for structures whose layout must match some binary specification regardless of the alignment and padding qualities of the compiler. */ #ifndef ATTRIBUTE_PACKED # define ATTRIBUTE_PACKED __attribute__ ((packed)) @@ -356,15 +315,38 @@ So instead we use the macro below and test it against specific values. */ #define ENUM_BITFIELD(TYPE) unsigned int #endif - /* This is used to mark a class or virtual function as final. */ -#if __cplusplus >= 201103L -#define GCC_FINAL final -#elif GCC_VERSION >= 4007 -#define GCC_FINAL __final +#if defined(__cplusplus) && __cpp_constexpr >= 200704 +#define CONSTEXPR constexpr #else -#define GCC_FINAL +#define CONSTEXPR #endif +/* A macro to disable the copy constructor and assignment operator. + When building with C++11 and above, the methods are explicitly + deleted, causing a compile-time error if something tries to copy. + For C++03, this just declares the methods, causing a link-time + error if the methods end up called (assuming you don't + define them). For C++03, for best results, place the macro + under the private: access specifier, like this, + + class name_lookup + { + private: + DISABLE_COPY_AND_ASSIGN (name_lookup); + }; + + so that most attempts at copy are caught at compile-time. */ + +#if defined(__cplusplus) && __cplusplus >= 201103 +#define DISABLE_COPY_AND_ASSIGN(TYPE) \ + TYPE (const TYPE&) = delete; \ + void operator= (const TYPE &) = delete + #else +#define DISABLE_COPY_AND_ASSIGN(TYPE) \ + TYPE (const TYPE&); \ + void operator= (const TYPE &) +#endif /* __cplusplus >= 201103 */ + #ifdef __cplusplus } #endif diff --git a/newlib/libc/machine/arm/acle-compat.h b/include/arm-acle-compat.h similarity index 100% rename from newlib/libc/machine/arm/acle-compat.h rename to include/arm-acle-compat.h diff --git a/include/elf/epiphany.h b/include/elf/epiphany.h old mode 100755 new mode 100644 diff --git a/include/opcode/bfin.h b/include/opcode/bfin.h old mode 100755 new mode 100644 diff --git a/libgloss/MAINTAINERS b/libgloss/MAINTAINERS new file mode 100644 index 0000000000..7c64baabc1 --- /dev/null +++ b/libgloss/MAINTAINERS @@ -0,0 +1,13 @@ + libgloss Maintainers + +libgloss is part of Newlib project, so see the file newlib/MAINTAINERS +for more people. This file is intended to find libgloss-specific people +where it makes sense. + + + Blanket Write Privileges + +The official maintainers of libgloss: + +Jeff Johnston jjohnstn@redhat.com +Mike Frysinger vapier@gentoo.org diff --git a/libgloss/Makefile.am b/libgloss/Makefile.am index 5464eb8bdb..77a199e965 100644 --- a/libgloss/Makefile.am +++ b/libgloss/Makefile.am @@ -6,15 +6,18 @@ ACLOCAL_AMFLAGS = -I . -I .. -I ../config bin_PROGRAMS = check_PROGRAMS = info_TEXINFOS = +CLEANFILES = PHONY = SUBDIRS = @subdirs@ . +srcroot = $(top_srcdir)/.. tooldir = $(exec_prefix)/$(target_alias) multilibtooldir = $(tooldir)/lib$(MULTISUBDIR) multilibtool_DATA = multilibtool_LIBRARIES = +multilibtool_PROGRAMS = includetooldir = $(tooldir)/include includetool_DATA = @@ -22,11 +25,29 @@ includetool_DATA = includesystooldir = $(tooldir)/include/sys includesystool_DATA = +# These are useful for standalone object files like crt0.o. +AM_CFLAGS = $(AM_CFLAGS_$(subst /,_,$(@D))) $(AM_CFLAGS_$(subst /,_,$(@D)_$( $@ +%.bin: % + $(AM_V_GEN)$(OBJCOPY) -O binary $< $@ +%.hex: % + $(AM_V_GEN)$(OBJCOPY) -O ihex $< $@ +%.srec: % + $(AM_V_GEN)$(OBJCOPY) -O srec $< $@ + ## These are roughly topologically sorted in order to make porting more ## streamlined. FLAGS_TO_PASS = \ @@ -59,9 +80,45 @@ TEXINFO_TEX = ../texinfo/texinfo.tex if HAVE_DOC include doc/Makefile.inc endif +if CONFIG_AARCH64 +include aarch64/Makefile.inc +endif +if CONFIG_ARC +include arc/Makefile.inc +endif +if CONFIG_ARM +include arm/Makefile.inc +endif if CONFIG_BFIN include bfin/Makefile.inc endif +if CONFIG_CR16 +include cr16/Makefile.inc +endif +if CONFIG_CSKY +include csky/Makefile.inc +endif +if CONFIG_D30V +include d30v/Makefile.inc +endif +if CONFIG_EPIPHANY +include epiphany/Makefile.inc +endif +if CONFIG_FR30 +include fr30/Makefile.inc +endif +if CONFIG_FRV +include frv/Makefile.inc +endif +if CONFIG_FT32 +include ft32/Makefile.inc +endif +if CONFIG_I386 +include i386/Makefile.inc +endif +if CONFIG_I960 +include i960/Makefile.inc +endif if CONFIG_IQ2000 include iq2000/Makefile.inc endif @@ -71,9 +128,69 @@ endif if CONFIG_LM32 include lm32/Makefile.inc endif +if CONFIG_M32R +include m32r/Makefile.inc +endif +if CONFIG_MCORE +include mcore/Makefile.inc +endif +if CONFIG_MICROBLAZE +include microblaze/Makefile.inc +endif +if CONFIG_MN10200 +include mn10200/Makefile.inc +endif +if CONFIG_MN10300 +include mn10300/Makefile.inc +endif +if CONFIG_MOXIE +include moxie/Makefile.inc +endif +if CONFIG_MSP430 +include msp430/Makefile.inc +endif +if CONFIG_NDS32 +include nds32/Makefile.inc +endif +if CONFIG_NIOS2 +include nios2/Makefile.inc +endif +if CONFIG_OR1K +include or1k/Makefile.inc +endif +if CONFIG_PRU +include pru/Makefile.inc +endif if CONFIG_RISCV include riscv/Makefile.inc endif +if CONFIG_RL78 +include rl78/Makefile.inc +endif +if CONFIG_RX +include rx/Makefile.inc +endif +if CONFIG_SPARC +include sparc/Makefile.inc +endif +if CONFIG_SPARC_LEON +include sparc_leon/Makefile.inc +endif +if CONFIG_TIC6X +include tic6x/Makefile.inc +endif +if CONFIG_V850 +include v850/Makefile.inc +endif +if CONFIG_VISIUM +include visium/Makefile.inc +endif if CONFIG_WINCE include wince/Makefile.inc endif +if CONFIG_XSTORMY16 +include xstormy16/Makefile.inc +endif +if CONFIG_XTENSA +include xtensa/Makefile.inc +endif diff --git a/libgloss/Makefile.in b/libgloss/Makefile.in index 36ab3fbd34..a3e5bc4bfa 100644 --- a/libgloss/Makefile.in +++ b/libgloss/Makefile.in @@ -91,15 +91,41 @@ build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ bin_PROGRAMS = $(am__EXEEXT_1) -check_PROGRAMS = $(am__EXEEXT_2) $(am__EXEEXT_3) +check_PROGRAMS = $(am__EXEEXT_2) $(am__EXEEXT_3) $(am__EXEEXT_4) \ + $(am__EXEEXT_5) $(am__EXEEXT_6) +multilibtool_PROGRAMS = $(am__EXEEXT_7) @HAVE_DOC_TRUE@am__append_1 = doc/porting.texi +@CONFIG_AARCH64_TRUE@am__append_2 = aarch64/librdimon.a +@CONFIG_AARCH64_TRUE@am__append_3 = \ +@CONFIG_AARCH64_TRUE@ aarch64/crt0.o \ +@CONFIG_AARCH64_TRUE@ aarch64/rdimon-crt0.o \ +@CONFIG_AARCH64_TRUE@ $(aarch64_SPECS) + +@CONFIG_AARCH64_TRUE@am__append_4 = $(aarch64_SPECS) \ +@CONFIG_AARCH64_TRUE@ $(aarch64_cpu_initcpuinit_DATA) +@CONFIG_ARC_TRUE@am__append_5 = arc/libnsim.a +@CONFIG_ARC_TRUE@am__append_6 = \ +@CONFIG_ARC_TRUE@ arc/crt0.o \ +@CONFIG_ARC_TRUE@ arc/gcrt0.o \ +@CONFIG_ARC_TRUE@ arc/nano.specs \ +@CONFIG_ARC_TRUE@ arc/nsim.specs + +@CONFIG_ARM_TRUE@@MAY_SUPPLY_SYSCALLS_FALSE@am__append_7 = arm/crt0.o +@CONFIG_ARM_TRUE@am__append_8 = arm/linux-crt0.o arm/redboot-crt0.o \ +@CONFIG_ARM_TRUE@ arm/redboot-syscalls.o arm/rdpmon-crt0.o \ +@CONFIG_ARM_TRUE@ arm/rdimon-crt0.o arm/rdimon-crt0-v2m.o \ +@CONFIG_ARM_TRUE@ $(arm_SPECS) +@CONFIG_ARM_TRUE@am__append_9 = arm/libgloss-linux.a arm/librdpmon.a \ +@CONFIG_ARM_TRUE@ arm/librdimon.a arm/librdimon-v2m.a +@CONFIG_ARM_TRUE@am__append_10 = $(arm_SPECS) \ +@CONFIG_ARM_TRUE@ $(arm_cpu_initcpuinit_DATA) # Here is all of the simulator stuff. -@CONFIG_BFIN_TRUE@am__append_2 = bfin/libsim.a bfin/libbfinbsp.a -@CONFIG_BFIN_TRUE@am__append_3 = bfin/sim-test +@CONFIG_BFIN_TRUE@am__append_11 = bfin/libsim.a bfin/libbfinbsp.a +@CONFIG_BFIN_TRUE@am__append_12 = bfin/sim-test # Here is all of the development board stuff. -@CONFIG_BFIN_TRUE@am__append_4 = \ +@CONFIG_BFIN_TRUE@am__append_13 = \ @CONFIG_BFIN_TRUE@ bfin/crt0.o \ @CONFIG_BFIN_TRUE@ bfin/basiccrt.o \ @CONFIG_BFIN_TRUE@ bfin/basiccrts.o \ @@ -110,11 +136,11 @@ check_PROGRAMS = $(am__EXEEXT_2) $(am__EXEEXT_3) # bfin/basiccrt60x.o \ # bfin/basiccrt60xs.o \ # bfin/basiccrt60xc1.o -@CONFIG_BFIN_TRUE@am__append_5 = \ +@CONFIG_BFIN_TRUE@am__append_14 = \ @CONFIG_BFIN_TRUE@ bfin/crt0.S \ @CONFIG_BFIN_TRUE@ bfin/basiccrt.S -@CONFIG_BFIN_TRUE@@HAVE_MULTISUBDIR_FALSE@am__append_6 = \ +@CONFIG_BFIN_TRUE@@HAVE_MULTISUBDIR_FALSE@am__append_15 = \ @CONFIG_BFIN_TRUE@@HAVE_MULTISUBDIR_FALSE@ bfin/bfin-common-sc.ld bfin/bfin-common-mc.ld bfin/bfin-common-mc0.ld \ @CONFIG_BFIN_TRUE@@HAVE_MULTISUBDIR_FALSE@ bfin/bf504.ld bfin/bf506.ld \ @CONFIG_BFIN_TRUE@@HAVE_MULTISUBDIR_FALSE@ bfin/bf512.ld bfin/bf514.ld bfin/bf516.ld bfin/bf518.ld \ @@ -130,40 +156,338 @@ check_PROGRAMS = $(am__EXEEXT_2) $(am__EXEEXT_3) @CONFIG_BFIN_TRUE@@HAVE_MULTISUBDIR_FALSE@ bfin/bf609.ld bfin/bf609c0.ld bfin/bf609c1.ld bfin/bf609m.ld \ @CONFIG_BFIN_TRUE@@HAVE_MULTISUBDIR_FALSE@ bfin/bf592.ld -@CONFIG_BFIN_TRUE@@HAVE_MULTISUBDIR_FALSE@am__append_7 = $(wildcard $(srcdir)/bfin/include/*.h) -@CONFIG_BFIN_TRUE@@HAVE_MULTISUBDIR_FALSE@am__append_8 = $(wildcard $(srcdir)/bfin/include/sys/*.h) -@CONFIG_IQ2000_TRUE@am__append_9 = iq2000/crt0.o iq2000/sim.ld -@CONFIG_IQ2000_TRUE@am__append_10 = iq2000/libeval.a -@CONFIG_IQ2000_TRUE@am__append_11 = iq2000/crt0.S iq2000/test.o -@CONFIG_IQ2000_TRUE@am__append_12 = iq2000/test -@CONFIG_LIBNOSYS_TRUE@am__append_13 = libnosys/nosys.specs -@CONFIG_LIBNOSYS_TRUE@am__append_14 = libnosys/libnosys.a -@CONFIG_LM32_TRUE@am__append_15 = lm32/crt0.o lm32/sim.ld -@CONFIG_LM32_TRUE@am__append_16 = lm32/libgloss.a -@CONFIG_LM32_TRUE@am__append_17 = lm32/crt0.S -@CONFIG_RISCV_TRUE@am__append_18 = \ +@CONFIG_BFIN_TRUE@@HAVE_MULTISUBDIR_FALSE@am__append_16 = $(wildcard $(srcdir)/bfin/include/*.h) +@CONFIG_BFIN_TRUE@@HAVE_MULTISUBDIR_FALSE@am__append_17 = $(wildcard $(srcdir)/bfin/include/sys/*.h) +@CONFIG_CR16_TRUE@am__append_18 = cr16/crti.o cr16/crtn.o cr16/crt1.o \ +@CONFIG_CR16_TRUE@ cr16/sim.ld +@CONFIG_CR16_TRUE@am__append_19 = \ +@CONFIG_CR16_TRUE@ cr16/crti.S \ +@CONFIG_CR16_TRUE@ cr16/crtn.S \ +@CONFIG_CR16_TRUE@ cr16/crt1.S + +@CONFIG_CR16_TRUE@am__append_20 = cr16/libh.a cr16/libsim.a +@CONFIG_CSKY_TRUE@am__append_21 = \ +@CONFIG_CSKY_TRUE@ csky/crt0.o + +@CONFIG_CSKY_TRUE@am__append_22 = \ +@CONFIG_CSKY_TRUE@ csky/crt0.S + +@CONFIG_CSKY_TRUE@am__append_23 = csky/libsemi.a +@CONFIG_D30V_TRUE@am__append_24 = d30v/libsim.a +@CONFIG_D30V_TRUE@am__append_25 = \ +@CONFIG_D30V_TRUE@ d30v/crt0.o + +@CONFIG_EPIPHANY_TRUE@am__append_26 = epiphany/crt0.o +@CONFIG_EPIPHANY_TRUE@am__append_27 = epiphany/crt0.S +@CONFIG_EPIPHANY_TRUE@am__append_28 = epiphany/libepiphany.a +@CONFIG_FR30_TRUE@am__append_29 = fr30/crt0.o +@CONFIG_FR30_TRUE@am__append_30 = fr30/crt0.s +@CONFIG_FR30_TRUE@am__append_31 = fr30/libsim.a +@CONFIG_FRV_TRUE@am__append_32 = frv/crt0.o +@CONFIG_FRV_TRUE@am__append_33 = frv/crt0.S +@CONFIG_FRV_TRUE@am__append_34 = frv/libsim.a +@CONFIG_FT32_TRUE@@HAVE_MULTISUBDIR_FALSE@am__append_35 = \ +@CONFIG_FT32_TRUE@@HAVE_MULTISUBDIR_FALSE@ ft32/sim.ld + +@CONFIG_FT32_TRUE@am__append_36 = ft32/crt0.o +@CONFIG_FT32_TRUE@am__append_37 = ft32/crt0.S +@CONFIG_FT32_TRUE@am__append_38 = ft32/libsim.a +@CONFIG_I386_TRUE@am__append_39 = i386/cygmon.ld i386/cygmon-crt0.o +@CONFIG_I386_TRUE@am__append_40 = i386/cygmon-crt0.S +@CONFIG_I386_TRUE@am__append_41 = i386/libcygmon.a +@CONFIG_I960_TRUE@am__append_42 = i960/crt0.o i960/mon960.ld +@CONFIG_I960_TRUE@am__append_43 = \ +@CONFIG_I960_TRUE@ i960/crt0.c + +@CONFIG_I960_TRUE@am__append_44 = i960/libmon960.a +@CONFIG_IQ2000_TRUE@am__append_45 = iq2000/crt0.o iq2000/sim.ld +@CONFIG_IQ2000_TRUE@am__append_46 = iq2000/libeval.a +@CONFIG_IQ2000_TRUE@am__append_47 = iq2000/crt0.S iq2000/test.o +@CONFIG_IQ2000_TRUE@am__append_48 = iq2000/test +@CONFIG_LIBNOSYS_TRUE@am__append_49 = libnosys/nosys.specs +@CONFIG_LIBNOSYS_TRUE@am__append_50 = libnosys/libnosys.a +@CONFIG_LM32_TRUE@am__append_51 = lm32/crt0.o lm32/sim.ld +@CONFIG_LM32_TRUE@am__append_52 = lm32/libgloss.a +@CONFIG_LM32_TRUE@am__append_53 = lm32/crt0.S +@CONFIG_M32R_TRUE@@HAVE_MULTISUBDIR_FALSE@am__append_54 = \ +@CONFIG_M32R_TRUE@@HAVE_MULTISUBDIR_FALSE@ m32r/eva.ld \ +@CONFIG_M32R_TRUE@@HAVE_MULTISUBDIR_FALSE@ m32r/eva-stub.ld \ +@CONFIG_M32R_TRUE@@HAVE_MULTISUBDIR_FALSE@ m32r/mon.specs + +@CONFIG_M32R_TRUE@am__append_55 = m32r/crt0.o m32r/m32r-lib.o \ +@CONFIG_M32R_TRUE@ m32r/m32r-stub.o +@CONFIG_M32R_TRUE@am__append_56 = m32r/crt0.S m32r/m32r-lib.c \ +@CONFIG_M32R_TRUE@ m32r/m32r-stub.c +@CONFIG_M32R_TRUE@am__append_57 = m32r/libgloss.a m32r/libmon.a +@CONFIG_MCORE_TRUE@@MCORE_BUILD_ELF_TRUE@am__append_58 = \ +@CONFIG_MCORE_TRUE@@MCORE_BUILD_ELF_TRUE@ mcore/cmb.ld \ +@CONFIG_MCORE_TRUE@@MCORE_BUILD_ELF_TRUE@ mcore/cmb.specs + +@CONFIG_MCORE_TRUE@@MCORE_BUILD_PE_TRUE@am__append_59 = \ +@CONFIG_MCORE_TRUE@@MCORE_BUILD_PE_TRUE@ mcore/cmb.ld \ +@CONFIG_MCORE_TRUE@@MCORE_BUILD_PE_TRUE@ mcore/cmb.specs + +@CONFIG_MCORE_TRUE@am__append_60 = mcore/crt0.o +@CONFIG_MCORE_TRUE@am__append_61 = mcore/crt0.S +@CONFIG_MCORE_TRUE@am__append_62 = mcore/libsim.a mcore/libcmb.a +@CONFIG_MICROBLAZE_TRUE@@HAVE_MULTISUBDIR_FALSE@am__append_63 = \ +@CONFIG_MICROBLAZE_TRUE@@HAVE_MULTISUBDIR_FALSE@ microblaze/xilinx.ld + +@CONFIG_MICROBLAZE_TRUE@am__append_64 = \ +@CONFIG_MICROBLAZE_TRUE@ microblaze/elf-gloss-linux.specs \ +@CONFIG_MICROBLAZE_TRUE@ microblaze/crt0.o microblaze/crt1.o \ +@CONFIG_MICROBLAZE_TRUE@ microblaze/crt2.o microblaze/crt3.o \ +@CONFIG_MICROBLAZE_TRUE@ microblaze/crt4.o microblaze/crtinit.o \ +@CONFIG_MICROBLAZE_TRUE@ microblaze/pgcrtinit.o \ +@CONFIG_MICROBLAZE_TRUE@ microblaze/sim-crtinit.o \ +@CONFIG_MICROBLAZE_TRUE@ microblaze/sim-pgcrtinit.o \ +@CONFIG_MICROBLAZE_TRUE@ microblaze/linux-crt0.o +@CONFIG_MICROBLAZE_TRUE@am__append_65 = \ +@CONFIG_MICROBLAZE_TRUE@ microblaze/crt0.S \ +@CONFIG_MICROBLAZE_TRUE@ microblaze/crt1.S \ +@CONFIG_MICROBLAZE_TRUE@ microblaze/crt2.S \ +@CONFIG_MICROBLAZE_TRUE@ microblaze/crt3.S \ +@CONFIG_MICROBLAZE_TRUE@ microblaze/crt4.S \ +@CONFIG_MICROBLAZE_TRUE@ microblaze/crtinit.S \ +@CONFIG_MICROBLAZE_TRUE@ microblaze/pgcrtinit.S \ +@CONFIG_MICROBLAZE_TRUE@ microblaze/sim-crtinit.S \ +@CONFIG_MICROBLAZE_TRUE@ microblaze/sim-pgcrtinit.S \ +@CONFIG_MICROBLAZE_TRUE@ microblaze/linux-crt0.S + +@CONFIG_MICROBLAZE_TRUE@am__append_66 = microblaze/libgloss.a \ +@CONFIG_MICROBLAZE_TRUE@ microblaze/libgloss-linux.a +@CONFIG_MN10200_TRUE@am__append_67 = mn10200/eval.ld mn10200/sim.ld \ +@CONFIG_MN10200_TRUE@ mn10200/crt0.o +@CONFIG_MN10200_TRUE@am__append_68 = mn10200/crt0.S +@CONFIG_MN10200_TRUE@am__append_69 = mn10200/libeval.a +@CONFIG_MN10200_TRUE@am__append_70 = mn10200/test +@CONFIG_MN10300_TRUE@am__append_71 = \ +@CONFIG_MN10300_TRUE@ mn10300/eval.ld \ +@CONFIG_MN10300_TRUE@ mn10300/sim.ld + +@CONFIG_MN10300_TRUE@@MN10300_BUILD_LIBCYGMON_TRUE@am__append_72 = \ +@CONFIG_MN10300_TRUE@@MN10300_BUILD_LIBCYGMON_TRUE@ mn10300/asb2303.ld \ +@CONFIG_MN10300_TRUE@@MN10300_BUILD_LIBCYGMON_TRUE@ mn10300/asb2305.ld + +@CONFIG_MN10300_TRUE@am__append_73 = \ +@CONFIG_MN10300_TRUE@ mn10300/crt0.o \ +@CONFIG_MN10300_TRUE@ mn10300/crt0_cygmon.o \ +@CONFIG_MN10300_TRUE@ mn10300/crt0_redboot.o + +@CONFIG_MN10300_TRUE@am__append_74 = \ +@CONFIG_MN10300_TRUE@ mn10300/crt0.S \ +@CONFIG_MN10300_TRUE@ mn10300/crt0_cygmon.S \ +@CONFIG_MN10300_TRUE@ mn10300/crt0_redboot.S + +@CONFIG_MN10300_TRUE@am__append_75 = mn10300/libeval.a +@CONFIG_MN10300_TRUE@@MN10300_BUILD_LIBCYGMON_TRUE@am__append_76 = mn10300/libcygmon.a +@CONFIG_MN10300_TRUE@am__append_77 = mn10300/test +@CONFIG_MOXIE_TRUE@@HAVE_MULTISUBDIR_FALSE@am__append_78 = \ +@CONFIG_MOXIE_TRUE@@HAVE_MULTISUBDIR_FALSE@ moxie/moxie-elf-common.ld \ +@CONFIG_MOXIE_TRUE@@HAVE_MULTISUBDIR_FALSE@ moxie/qemu.ld \ +@CONFIG_MOXIE_TRUE@@HAVE_MULTISUBDIR_FALSE@ moxie/sim.ld \ +@CONFIG_MOXIE_TRUE@@HAVE_MULTISUBDIR_FALSE@ moxie/moxiebox.ld + +@CONFIG_MOXIE_TRUE@@MOXIE_BUILD_CRT0_TRUE@am__append_79 = moxie/crt0.o +@CONFIG_MOXIE_TRUE@am__append_80 = \ +@CONFIG_MOXIE_TRUE@ moxie/crt0.S + +@CONFIG_MOXIE_TRUE@am__append_81 = moxie/libsim.a moxie/libqemu.a +@CONFIG_MSP430_TRUE@am__append_82 = msp430/msp430-sim.ld \ +@CONFIG_MSP430_TRUE@ msp430/msp430xl-sim.ld \ +@CONFIG_MSP430_TRUE@ msp430/intr_vectors.ld msp430/gcrt0.o \ +@CONFIG_MSP430_TRUE@ msp430/crt0.o +@CONFIG_MSP430_TRUE@am__append_83 = \ +@CONFIG_MSP430_TRUE@ msp430/gcrt0.S \ +@CONFIG_MSP430_TRUE@ msp430/crt0.S + +@CONFIG_MSP430_TRUE@am__append_84 = msp430/libsim.a msp430/libnosys.a \ +@CONFIG_MSP430_TRUE@ msp430/libcrt.a +@CONFIG_NDS32_TRUE@am__append_85 = \ +@CONFIG_NDS32_TRUE@ nds32/crt0.o \ +@CONFIG_NDS32_TRUE@ nds32/crt1.o + +@CONFIG_NDS32_TRUE@am__append_86 = \ +@CONFIG_NDS32_TRUE@ nds32/crt0.S \ +@CONFIG_NDS32_TRUE@ nds32/crt1.S + +@CONFIG_NDS32_TRUE@am__append_87 = nds32/libgloss.a +@CONFIG_NIOS2_TRUE@am__append_88 = \ +@CONFIG_NIOS2_TRUE@ nios2/qemu-hosted.ld + +@CONFIG_NIOS2_TRUE@am__append_89 = nios2/libnios2.a +@CONFIG_OR1K_TRUE@am__append_90 = or1k/crt0.o +@CONFIG_OR1K_TRUE@am__append_91 = or1k/crt0.S +@CONFIG_OR1K_TRUE@am__append_92 = \ +@CONFIG_OR1K_TRUE@ or1k/include/or1k-asm.h \ +@CONFIG_OR1K_TRUE@ or1k/include/or1k-nop.h \ +@CONFIG_OR1K_TRUE@ or1k/include/or1k-sprs.h \ +@CONFIG_OR1K_TRUE@ or1k/include/or1k-support.h + +@CONFIG_OR1K_TRUE@am__append_93 = or1k/libor1k.a or1k/libboard-atlys.a \ +@CONFIG_OR1K_TRUE@ or1k/libboard-de0_nano.a \ +@CONFIG_OR1K_TRUE@ or1k/libboard-ml501.a \ +@CONFIG_OR1K_TRUE@ or1k/libboard-optimsoc.a \ +@CONFIG_OR1K_TRUE@ or1k/libboard-or1ksim.a \ +@CONFIG_OR1K_TRUE@ or1k/libboard-or1ksim-uart.a \ +@CONFIG_OR1K_TRUE@ or1k/libboard-ordb1a3pe1500.a \ +@CONFIG_OR1K_TRUE@ or1k/libboard-ordb2a.a \ +@CONFIG_OR1K_TRUE@ or1k/libboard-orpsocrefdesign.a +@CONFIG_PRU_TRUE@am__append_94 = \ +@CONFIG_PRU_TRUE@ pru/crt0.o \ +@CONFIG_PRU_TRUE@ pru/crt0-minrt.o + +@CONFIG_PRU_TRUE@am__append_95 = \ +@CONFIG_PRU_TRUE@ pru/crt0.S \ +@CONFIG_PRU_TRUE@ pru/crt0-minrt.S + +@CONFIG_PRU_TRUE@am__append_96 = pru/libgloss.a +@CONFIG_RISCV_TRUE@am__append_97 = \ @CONFIG_RISCV_TRUE@ riscv/nano.specs \ @CONFIG_RISCV_TRUE@ riscv/sim.specs \ @CONFIG_RISCV_TRUE@ riscv/semihost.specs \ @CONFIG_RISCV_TRUE@ riscv/crt0.o -@CONFIG_RISCV_TRUE@am__append_19 = riscv/libgloss.a \ +@CONFIG_RISCV_TRUE@am__append_98 = riscv/libgloss.a riscv/libsim.a \ @CONFIG_RISCV_TRUE@ riscv/libsemihost.a -@CONFIG_WINCE_TRUE@am__append_20 = $(gdbdir) -@CONFIG_WINCE_TRUE@am__append_21 = wince/stub.exe +@CONFIG_RL78_TRUE@am__append_99 = rl78/rl78.ld rl78/rl78-sim.ld \ +@CONFIG_RL78_TRUE@ rl78/gcrt0.o rl78/crt0.o rl78/crtn.o +@CONFIG_RL78_TRUE@am__append_100 = \ +@CONFIG_RL78_TRUE@ rl78/gcrt0.S \ +@CONFIG_RL78_TRUE@ rl78/crt0.S \ +@CONFIG_RL78_TRUE@ rl78/crtn.S + +@CONFIG_RL78_TRUE@am__append_101 = rl78/libsim.a +@CONFIG_RX_TRUE@am__append_102 = rx/rx.ld rx/rx-sim.ld rx/gcrt0.o \ +@CONFIG_RX_TRUE@ rx/crt0.o rx/crtn.o +@CONFIG_RX_TRUE@am__append_103 = \ +@CONFIG_RX_TRUE@ rx/gcrt0.S \ +@CONFIG_RX_TRUE@ rx/crt0.S \ +@CONFIG_RX_TRUE@ rx/crtn.S + +@CONFIG_RX_TRUE@am__append_104 = rx/libsim.a +@CONFIG_SPARC_TRUE@am__append_105 = sparc/crt0.o sparc/erc32-crt0.o +@CONFIG_SPARC_TRUE@am__append_106 = sparc/crt0.S sparc/erc32-crt0.S +@CONFIG_SPARC_TRUE@am__append_107 = sparc/liberc32.a +@CONFIG_SPARC_TRUE@@SPARC_BUILD_CYGMON_TRUE@am__append_108 = \ +@CONFIG_SPARC_TRUE@@SPARC_BUILD_CYGMON_TRUE@ sparc/cygmon.ld \ +@CONFIG_SPARC_TRUE@@SPARC_BUILD_CYGMON_TRUE@ sparc/cygmon-crt0.o \ +@CONFIG_SPARC_TRUE@@SPARC_BUILD_CYGMON_TRUE@ sparc/cygmon-salib.o +@CONFIG_SPARC_TRUE@@SPARC_BUILD_CYGMON_TRUE@am__append_109 = sparc/cygmon-crt0.S +@CONFIG_SPARC_TRUE@@SPARC_BUILD_CYGMON_TRUE@am__append_110 = sparc/libcygmon.a +@CONFIG_SPARC_TRUE@@SPARC_BUILD_SLITE_TRUE@am__append_111 = \ +@CONFIG_SPARC_TRUE@@SPARC_BUILD_SLITE_TRUE@ sparc/ex930.ld \ +@CONFIG_SPARC_TRUE@@SPARC_BUILD_SLITE_TRUE@ sparc/ex931.ld \ +@CONFIG_SPARC_TRUE@@SPARC_BUILD_SLITE_TRUE@ sparc/ex934.ld \ +@CONFIG_SPARC_TRUE@@SPARC_BUILD_SLITE_TRUE@ sparc/sparc86x.ld \ +@CONFIG_SPARC_TRUE@@SPARC_BUILD_SLITE_TRUE@ sparc/elfsim.ld \ +@CONFIG_SPARC_TRUE@@SPARC_BUILD_SLITE_TRUE@ sparc/traps.o + +@CONFIG_SPARC_TRUE@@SPARC_BUILD_SLITE_TRUE@am__append_112 = \ +@CONFIG_SPARC_TRUE@@SPARC_BUILD_SLITE_TRUE@ sparc/libslite930.a \ +@CONFIG_SPARC_TRUE@@SPARC_BUILD_SLITE_TRUE@ sparc/libslite931.a \ +@CONFIG_SPARC_TRUE@@SPARC_BUILD_SLITE_TRUE@ sparc/libslite934.a \ +@CONFIG_SPARC_TRUE@@SPARC_BUILD_SLITE_TRUE@ sparc/libslite86x.a + +@CONFIG_SPARC_TRUE@@SPARC_BUILD_SPLET_TRUE@am__append_113 = \ +@CONFIG_SPARC_TRUE@@SPARC_BUILD_SPLET_TRUE@ sparc/tsc701.ld \ +@CONFIG_SPARC_TRUE@@SPARC_BUILD_SPLET_TRUE@ sparc/crt0-701.S +@CONFIG_SPARC_TRUE@@SPARC_BUILD_SPLET_TRUE@am__append_114 = sparc/crt0-701.S +@CONFIG_SPARC_TRUE@@SPARC_BUILD_SPLET_TRUE@am__append_115 = sparc/libsplet701.a +@CONFIG_SPARC_TRUE@am__append_116 = sparc/erc32-test sparc/ex930-test \ +@CONFIG_SPARC_TRUE@ sparc/ex931-test sparc/ex934-test +@CONFIG_SPARC_LEON_TRUE@am__append_117 = sparc_leon/libleonbare.a \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/liblbthread.a \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/libsmall.a +@CONFIG_SPARC_LEON_TRUE@am__append_118 = \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/crt0.o \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/pnpinit.o \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/pnpinit_simple.o \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/locore_svt.o \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/locore_mvt.o + +@CONFIG_SPARC_LEON_TRUE@am__append_119 = \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/crt0.S \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/pnpinit.c \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/pnpinit_simple.c \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/locore_svt.S \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/locore_mvt.S + +@CONFIG_TIC6X_TRUE@am__append_120 = tic6x/crt0.o +@CONFIG_TIC6X_TRUE@am__append_121 = tic6x/crt0.S +@CONFIG_TIC6X_TRUE@am__append_122 = tic6x/libsim.a +@CONFIG_V850_TRUE@am__append_123 = v850/crt0.o +@CONFIG_V850_TRUE@am__append_124 = v850/crt0.S +@CONFIG_V850_TRUE@am__append_125 = v850/libsim.a +@CONFIG_VISIUM_TRUE@am__append_126 = visium/crt0.o +@CONFIG_VISIUM_TRUE@am__append_127 = visium/crt0.S +@CONFIG_VISIUM_TRUE@am__append_128 = visium/libserial.a \ +@CONFIG_VISIUM_TRUE@ visium/libsim.a visium/libdebug.a +@CONFIG_WINCE_TRUE@am__append_129 = $(gdbdir) +@CONFIG_WINCE_TRUE@am__append_130 = wince/stub.exe +@CONFIG_XSTORMY16_TRUE@am__append_131 = xstormy16/crt0.o \ +@CONFIG_XSTORMY16_TRUE@ xstormy16/crti.o xstormy16/crtn.o \ +@CONFIG_XSTORMY16_TRUE@ xstormy16/sim_high.ld \ +@CONFIG_XSTORMY16_TRUE@ xstormy16/sim_rom.ld \ +@CONFIG_XSTORMY16_TRUE@ xstormy16/eva_app.ld \ +@CONFIG_XSTORMY16_TRUE@ xstormy16/eva_stub.hex +@CONFIG_XSTORMY16_TRUE@am__append_132 = \ +@CONFIG_XSTORMY16_TRUE@ xstormy16/crt0.s \ +@CONFIG_XSTORMY16_TRUE@ xstormy16/crti.s \ +@CONFIG_XSTORMY16_TRUE@ xstormy16/crtn.s + +@CONFIG_XSTORMY16_TRUE@am__append_133 = xstormy16/libsim.a \ +@CONFIG_XSTORMY16_TRUE@ xstormy16/libeva_app.a +@CONFIG_XSTORMY16_TRUE@am__append_134 = xstormy16/eva_stub.elf +@CONFIG_XSTORMY16_TRUE@am__append_135 = xstormy16/eva_stub.hex +@CONFIG_XTENSA_TRUE@am__append_136 = \ +@CONFIG_XTENSA_TRUE@ xtensa/default.specs \ +@CONFIG_XTENSA_TRUE@ xtensa/nano.specs \ +@CONFIG_XTENSA_TRUE@ xtensa/sim.elf.specs \ +@CONFIG_XTENSA_TRUE@ xtensa/board.elf.specs \ +@CONFIG_XTENSA_TRUE@ xtensa/sys.qemu.specs \ +@CONFIG_XTENSA_TRUE@ xtensa/sys.openocd.specs \ +@CONFIG_XTENSA_TRUE@ xtensa/crt0.o + +@CONFIG_XTENSA_TRUE@am__append_137 = \ +@CONFIG_XTENSA_TRUE@ xtensa/crt0.S \ +@CONFIG_XTENSA_TRUE@ xtensa/crt1-sim.S \ +@CONFIG_XTENSA_TRUE@ xtensa/crt1-boards.S + +@CONFIG_XTENSA_TRUE@am__append_138 = xtensa/libgloss.a +@CONFIG_XTENSA_TRUE@@HAVE_XTENSA_BOARD_ESP_TRUE@am__append_139 = \ +@CONFIG_XTENSA_TRUE@@HAVE_XTENSA_BOARD_ESP_TRUE@ xtensa/app.elf.ld \ +@CONFIG_XTENSA_TRUE@@HAVE_XTENSA_BOARD_ESP_TRUE@ xtensa/crt1-sim.o \ +@CONFIG_XTENSA_TRUE@@HAVE_XTENSA_BOARD_ESP_TRUE@ xtensa/crt1-boards.o + +@CONFIG_XTENSA_TRUE@@HAVE_XTENSA_BOARD_ESP_TRUE@am__append_140 = xtensa/libsys_qemu.a \ +@CONFIG_XTENSA_TRUE@@HAVE_XTENSA_BOARD_ESP_TRUE@ xtensa/libsys_openocd.a +@CONFIG_XTENSA_TRUE@@HAVE_XTENSA_BOARD_ESP32_TRUE@@HAVE_XTENSA_BOARD_ESP_TRUE@am__append_141 = xtensa/boards/esp32/memory.elf.ld +@CONFIG_XTENSA_TRUE@@HAVE_XTENSA_BOARD_ESP32_TRUE@@HAVE_XTENSA_BOARD_ESP_TRUE@am__append_142 = xtensa/boards/esp32/board.c +@CONFIG_XTENSA_TRUE@@HAVE_XTENSA_BOARD_ESP32_TRUE@@HAVE_XTENSA_BOARD_ESP_TRUE@am__append_143 = -I$(srcdir)/xtensa/boards/esp32/include +@CONFIG_XTENSA_TRUE@@HAVE_XTENSA_BOARD_ESP32_TRUE@@HAVE_XTENSA_BOARD_ESP_TRUE@am__append_144 = -I$(srcdir)/xtensa/boards/esp32/include +@CONFIG_XTENSA_TRUE@@HAVE_XTENSA_BOARD_ESP32_TRUE@@HAVE_XTENSA_BOARD_ESP_TRUE@am__append_145 = -I$(srcdir)/xtensa/boards/esp32/include +@CONFIG_XTENSA_TRUE@@HAVE_XTENSA_BOARD_ESP32S3_TRUE@@HAVE_XTENSA_BOARD_ESP_TRUE@am__append_146 = xtensa/boards/esp32s3/memory.elf.ld +@CONFIG_XTENSA_TRUE@@HAVE_XTENSA_BOARD_ESP32S3_TRUE@@HAVE_XTENSA_BOARD_ESP_TRUE@am__append_147 = xtensa/boards/esp32s3/board.c +@CONFIG_XTENSA_TRUE@@HAVE_XTENSA_BOARD_ESP32S3_TRUE@@HAVE_XTENSA_BOARD_ESP_TRUE@am__append_148 = -I$(srcdir)/xtensa/boards/esp32s3/include +@CONFIG_XTENSA_TRUE@@HAVE_XTENSA_BOARD_ESP32S3_TRUE@@HAVE_XTENSA_BOARD_ESP_TRUE@am__append_149 = -I$(srcdir)/xtensa/boards/esp32s3/include +@CONFIG_XTENSA_TRUE@@HAVE_XTENSA_BOARD_ESP32S3_TRUE@@HAVE_XTENSA_BOARD_ESP_TRUE@am__append_150 = -I$(srcdir)/xtensa/boards/esp32s3/include subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/../config/depstand.m4 \ $(top_srcdir)/../config/lead-dot.m4 \ $(top_srcdir)/../config/multi.m4 \ $(top_srcdir)/../config/override.m4 \ - $(top_srcdir)/i386/acinclude.m4 \ + $(top_srcdir)/aarch64/acinclude.m4 \ + $(top_srcdir)/arm/acinclude.m4 $(top_srcdir)/i386/acinclude.m4 \ $(top_srcdir)/libnosys/acinclude.m4 \ $(top_srcdir)/m68k/acinclude.m4 \ $(top_srcdir)/mcore/acinclude.m4 \ $(top_srcdir)/mips/acinclude.m4 \ $(top_srcdir)/mn10300/acinclude.m4 \ - $(top_srcdir)/moxie/acinclude.m4 $(top_srcdir)/configure.ac + $(top_srcdir)/moxie/acinclude.m4 \ + $(top_srcdir)/sparc/acinclude.m4 \ + $(top_srcdir)/xtensa/acinclude.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ @@ -172,17 +496,10 @@ am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(SHELL) $(top_srcdir)/../mkinstalldirs CONFIG_HEADER = config.h -CONFIG_CLEAN_FILES = arc/Makefile csky/Makefile epiphany/Makefile \ - i386/Makefile m32r/Makefile m68hc11/Makefile nds32/Makefile \ - m68k/Makefile pa/Makefile i960/Makefile sparc_leon/Makefile \ - sparc/Makefile mips/Makefile rs6000/Makefile mn10200/Makefile \ - mn10300/Makefile cr16/Makefile cris/Makefile crx/Makefile \ - d30v/Makefile fr30/Makefile frv/Makefile ft32/Makefile \ - mcore/Makefile mep/Makefile moxie/Makefile microblaze/Makefile \ - mt/Makefile v850/Makefile visium/Makefile xc16x/Makefile \ - xstormy16/Makefile m32c/Makefile msp430/Makefile rl78/Makefile \ - rx/Makefile spu/Makefile tic6x/Makefile or1k/Makefile \ - pru/Makefile nios2/Makefile +CONFIG_CLEAN_FILES = m68hc11/Makefile m68k/Makefile pa/Makefile \ + mips/Makefile rs6000/Makefile cris/Makefile crx/Makefile \ + mep/Makefile mt/Makefile m32c/Makefile spu/Makefile \ + sparc/libsys/Makefile CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ @@ -212,18 +529,75 @@ am__uninstall_files_from_dir = { \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(multilibtooldir)" "$(DESTDIR)$(bindir)" \ - "$(DESTDIR)$(infodir)" "$(DESTDIR)$(includemachinetooldir)" \ + "$(DESTDIR)$(multilibtooldir)" "$(DESTDIR)$(infodir)" \ + "$(DESTDIR)$(aarch64_cpu_initcpuinitdir)" \ + "$(DESTDIR)$(arm_cpu_initcpuinitdir)" \ + "$(DESTDIR)$(includemachinetooldir)" \ "$(DESTDIR)$(includesystooldir)" "$(DESTDIR)$(includetooldir)" \ - "$(DESTDIR)$(multilibtooldir)" + "$(DESTDIR)$(includetoolasmleondir)" \ + "$(DESTDIR)$(multilibtooldir)" \ + "$(DESTDIR)$(pru_devicespecsdir)" LIBRARIES = $(multilibtool_LIBRARIES) $(noinst_LIBRARIES) ARFLAGS = cru AM_V_AR = $(am__v_AR_@AM_V@) am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@) am__v_AR_0 = @echo " AR " $@; am__v_AR_1 = +aarch64_librdimon_a_AR = $(AR) $(ARFLAGS) +aarch64_librdimon_a_LIBADD = +am__dirstamp = $(am__leading_dot)dirstamp +@CONFIG_AARCH64_TRUE@am_aarch64_librdimon_a_OBJECTS = aarch64/aarch64_librdimon_a-_exit.$(OBJEXT) \ +@CONFIG_AARCH64_TRUE@ aarch64/aarch64_librdimon_a-_kill.$(OBJEXT) \ +@CONFIG_AARCH64_TRUE@ aarch64/aarch64_librdimon_a-ftruncate.$(OBJEXT) \ +@CONFIG_AARCH64_TRUE@ aarch64/aarch64_librdimon_a-libcfunc.$(OBJEXT) \ +@CONFIG_AARCH64_TRUE@ aarch64/aarch64_librdimon_a-syscalls.$(OBJEXT) \ +@CONFIG_AARCH64_TRUE@ aarch64/aarch64_librdimon_a-truncate.$(OBJEXT) +aarch64_librdimon_a_OBJECTS = $(am_aarch64_librdimon_a_OBJECTS) +arc_libnsim_a_AR = $(AR) $(ARFLAGS) +arc_libnsim_a_LIBADD = +@CONFIG_ARC_TRUE@am_arc_libnsim_a_OBJECTS = arc/libcfunc.$(OBJEXT) \ +@CONFIG_ARC_TRUE@ arc/mcount.$(OBJEXT) \ +@CONFIG_ARC_TRUE@ arc/nsim-syscalls.$(OBJEXT) \ +@CONFIG_ARC_TRUE@ arc/sbrk.$(OBJEXT) +arc_libnsim_a_OBJECTS = $(am_arc_libnsim_a_OBJECTS) +arm_libgloss_linux_a_AR = $(AR) $(ARFLAGS) +arm_libgloss_linux_a_LIBADD = +@CONFIG_ARM_TRUE@am_arm_libgloss_linux_a_OBJECTS = \ +@CONFIG_ARM_TRUE@ arm/linux-syscalls0.$(OBJEXT) \ +@CONFIG_ARM_TRUE@ arm/linux-syscalls1.$(OBJEXT) +arm_libgloss_linux_a_OBJECTS = $(am_arm_libgloss_linux_a_OBJECTS) +arm_librdimon_v2m_a_AR = $(AR) $(ARFLAGS) +arm_librdimon_v2m_a_LIBADD = +@CONFIG_ARM_TRUE@am__objects_1 = \ +@CONFIG_ARM_TRUE@ arm/arm_librdimon_v2m_a-_exit.$(OBJEXT) \ +@CONFIG_ARM_TRUE@ arm/arm_librdimon_v2m_a-_kill.$(OBJEXT) \ +@CONFIG_ARM_TRUE@ arm/arm_librdimon_v2m_a-ftruncate.$(OBJEXT) \ +@CONFIG_ARM_TRUE@ arm/arm_librdimon_v2m_a-libcfunc.$(OBJEXT) \ +@CONFIG_ARM_TRUE@ arm/arm_librdimon_v2m_a-syscalls.$(OBJEXT) \ +@CONFIG_ARM_TRUE@ arm/arm_librdimon_v2m_a-trap.$(OBJEXT) \ +@CONFIG_ARM_TRUE@ arm/arm_librdimon_v2m_a-truncate.$(OBJEXT) +@CONFIG_ARM_TRUE@am_arm_librdimon_v2m_a_OBJECTS = $(am__objects_1) +arm_librdimon_v2m_a_OBJECTS = $(am_arm_librdimon_v2m_a_OBJECTS) +arm_librdimon_a_AR = $(AR) $(ARFLAGS) +arm_librdimon_a_LIBADD = +@CONFIG_ARM_TRUE@am__objects_2 = arm/arm_librdimon_a-_exit.$(OBJEXT) \ +@CONFIG_ARM_TRUE@ arm/arm_librdimon_a-_kill.$(OBJEXT) \ +@CONFIG_ARM_TRUE@ arm/arm_librdimon_a-ftruncate.$(OBJEXT) \ +@CONFIG_ARM_TRUE@ arm/arm_librdimon_a-libcfunc.$(OBJEXT) \ +@CONFIG_ARM_TRUE@ arm/arm_librdimon_a-syscalls.$(OBJEXT) \ +@CONFIG_ARM_TRUE@ arm/arm_librdimon_a-trap.$(OBJEXT) \ +@CONFIG_ARM_TRUE@ arm/arm_librdimon_a-truncate.$(OBJEXT) +@CONFIG_ARM_TRUE@am_arm_librdimon_a_OBJECTS = $(am__objects_2) +arm_librdimon_a_OBJECTS = $(am_arm_librdimon_a_OBJECTS) +arm_librdpmon_a_AR = $(AR) $(ARFLAGS) +arm_librdpmon_a_LIBADD = +@CONFIG_ARM_TRUE@am_arm_librdpmon_a_OBJECTS = arm/_exit.$(OBJEXT) \ +@CONFIG_ARM_TRUE@ arm/_kill.$(OBJEXT) arm/ftruncate.$(OBJEXT) \ +@CONFIG_ARM_TRUE@ arm/libcfunc.$(OBJEXT) arm/syscalls.$(OBJEXT) \ +@CONFIG_ARM_TRUE@ arm/trap.$(OBJEXT) arm/truncate.$(OBJEXT) +arm_librdpmon_a_OBJECTS = $(am_arm_librdpmon_a_OBJECTS) bfin_libbfinbsp_a_AR = $(AR) $(ARFLAGS) bfin_libbfinbsp_a_LIBADD = -am__dirstamp = $(am__leading_dot)dirstamp @CONFIG_BFIN_TRUE@am_bfin_libbfinbsp_a_OBJECTS = bfin/bfin_libbfinbsp_a-clear_cache_range.$(OBJEXT) \ @CONFIG_BFIN_TRUE@ bfin/bfin_libbfinbsp_a-_exit.$(OBJEXT) bfin_libbfinbsp_a_OBJECTS = $(am_bfin_libbfinbsp_a_OBJECTS) @@ -232,6 +606,134 @@ bfin_libsim_a_LIBADD = @CONFIG_BFIN_TRUE@am_bfin_libsim_a_OBJECTS = bfin/bfin_libsim_a-clear_cache_range.$(OBJEXT) \ @CONFIG_BFIN_TRUE@ bfin/bfin_libsim_a-syscalls.$(OBJEXT) bfin_libsim_a_OBJECTS = $(am_bfin_libsim_a_OBJECTS) +cr16_libh_a_AR = $(AR) $(ARFLAGS) +cr16_libh_a_LIBADD = +@CONFIG_CR16_TRUE@am_cr16_libh_a_OBJECTS = cr16/intable.$(OBJEXT) \ +@CONFIG_CR16_TRUE@ cr16/dvz_hndl.$(OBJEXT) \ +@CONFIG_CR16_TRUE@ cr16/flg_hndl.$(OBJEXT) \ +@CONFIG_CR16_TRUE@ cr16/iad_hndl.$(OBJEXT) \ +@CONFIG_CR16_TRUE@ cr16/svc_hndl.$(OBJEXT) \ +@CONFIG_CR16_TRUE@ cr16/und_hndl.$(OBJEXT) +cr16_libh_a_OBJECTS = $(am_cr16_libh_a_OBJECTS) +cr16_libsim_a_AR = $(AR) $(ARFLAGS) +cr16_libsim_a_LIBADD = +@CONFIG_CR16_TRUE@am_cr16_libsim_a_OBJECTS = cr16/_exit.$(OBJEXT) \ +@CONFIG_CR16_TRUE@ cr16/close.$(OBJEXT) cr16/_getenv.$(OBJEXT) \ +@CONFIG_CR16_TRUE@ cr16/lseek.$(OBJEXT) cr16/open.$(OBJEXT) \ +@CONFIG_CR16_TRUE@ cr16/read.$(OBJEXT) cr16/_rename.$(OBJEXT) \ +@CONFIG_CR16_TRUE@ cr16/sbrk.$(OBJEXT) cr16/time.$(OBJEXT) \ +@CONFIG_CR16_TRUE@ cr16/unlink.$(OBJEXT) cr16/write.$(OBJEXT) \ +@CONFIG_CR16_TRUE@ cr16/stat.$(OBJEXT) cr16/putnum.$(OBJEXT) \ +@CONFIG_CR16_TRUE@ cr16/kill.$(OBJEXT) cr16/getpid.$(OBJEXT) \ +@CONFIG_CR16_TRUE@ cr16/isatty.$(OBJEXT) cr16/fstat.$(OBJEXT) +cr16_libsim_a_OBJECTS = $(am_cr16_libsim_a_OBJECTS) +csky_libsemi_a_AR = $(AR) $(ARFLAGS) +csky_libsemi_a_LIBADD = +@CONFIG_CSKY_TRUE@am_csky_libsemi_a_OBJECTS = \ +@CONFIG_CSKY_TRUE@ csky/csky_libsemi_a-io-semi.$(OBJEXT) \ +@CONFIG_CSKY_TRUE@ csky/csky_libsemi_a-sbrk.$(OBJEXT) \ +@CONFIG_CSKY_TRUE@ csky/csky_libsemi_a-io-gdb.$(OBJEXT) \ +@CONFIG_CSKY_TRUE@ csky/csky_libsemi_a-io-exit.$(OBJEXT) \ +@CONFIG_CSKY_TRUE@ csky/csky_libsemi_a-io-close.$(OBJEXT) \ +@CONFIG_CSKY_TRUE@ csky/csky_libsemi_a-io-fstat.$(OBJEXT) \ +@CONFIG_CSKY_TRUE@ csky/csky_libsemi_a-io-gettimeofday.$(OBJEXT) \ +@CONFIG_CSKY_TRUE@ csky/csky_libsemi_a-io-lseek.$(OBJEXT) \ +@CONFIG_CSKY_TRUE@ csky/csky_libsemi_a-io-read.$(OBJEXT) \ +@CONFIG_CSKY_TRUE@ csky/csky_libsemi_a-io-system.$(OBJEXT) \ +@CONFIG_CSKY_TRUE@ csky/csky_libsemi_a-io-unlink.$(OBJEXT) \ +@CONFIG_CSKY_TRUE@ csky/csky_libsemi_a-io-exit.$(OBJEXT) \ +@CONFIG_CSKY_TRUE@ csky/csky_libsemi_a-io-gdb.$(OBJEXT) \ +@CONFIG_CSKY_TRUE@ csky/csky_libsemi_a-io-isatty.$(OBJEXT) \ +@CONFIG_CSKY_TRUE@ csky/csky_libsemi_a-io-open.$(OBJEXT) \ +@CONFIG_CSKY_TRUE@ csky/csky_libsemi_a-io-rename.$(OBJEXT) \ +@CONFIG_CSKY_TRUE@ csky/csky_libsemi_a-io-stat.$(OBJEXT) \ +@CONFIG_CSKY_TRUE@ csky/csky_libsemi_a-io-time.$(OBJEXT) \ +@CONFIG_CSKY_TRUE@ csky/csky_libsemi_a-io-write.$(OBJEXT) \ +@CONFIG_CSKY_TRUE@ csky/csky_libsemi_a-kill.$(OBJEXT) \ +@CONFIG_CSKY_TRUE@ csky/csky_libsemi_a-getpid.$(OBJEXT) +csky_libsemi_a_OBJECTS = $(am_csky_libsemi_a_OBJECTS) +d30v_libsim_a_AR = $(AR) $(ARFLAGS) +d30v_libsim_a_LIBADD = +@CONFIG_D30V_TRUE@am_d30v_libsim_a_OBJECTS = isatty.$(OBJEXT) \ +@CONFIG_D30V_TRUE@ print.$(OBJEXT) putnum.$(OBJEXT) \ +@CONFIG_D30V_TRUE@ sbrk.$(OBJEXT) d30v/inbyte.$(OBJEXT) \ +@CONFIG_D30V_TRUE@ d30v/outbyte.$(OBJEXT) \ +@CONFIG_D30V_TRUE@ d30v/syscalls.$(OBJEXT) +d30v_libsim_a_OBJECTS = $(am_d30v_libsim_a_OBJECTS) +epiphany_libepiphany_a_AR = $(AR) $(ARFLAGS) +epiphany_libepiphany_a_LIBADD = +@CONFIG_EPIPHANY_TRUE@am_epiphany_libepiphany_a_OBJECTS = \ +@CONFIG_EPIPHANY_TRUE@ epiphany/access.$(OBJEXT) \ +@CONFIG_EPIPHANY_TRUE@ epiphany/close.$(OBJEXT) \ +@CONFIG_EPIPHANY_TRUE@ epiphany/environ.$(OBJEXT) \ +@CONFIG_EPIPHANY_TRUE@ epiphany/execve.$(OBJEXT) \ +@CONFIG_EPIPHANY_TRUE@ epiphany/fork.$(OBJEXT) \ +@CONFIG_EPIPHANY_TRUE@ epiphany/fstat.$(OBJEXT) \ +@CONFIG_EPIPHANY_TRUE@ epiphany/getpid.$(OBJEXT) \ +@CONFIG_EPIPHANY_TRUE@ epiphany/gettimeofday.$(OBJEXT) \ +@CONFIG_EPIPHANY_TRUE@ epiphany/_isatty.$(OBJEXT) \ +@CONFIG_EPIPHANY_TRUE@ epiphany/kill.$(OBJEXT) \ +@CONFIG_EPIPHANY_TRUE@ epiphany/link.$(OBJEXT) \ +@CONFIG_EPIPHANY_TRUE@ epiphany/lseek.$(OBJEXT) \ +@CONFIG_EPIPHANY_TRUE@ epiphany/open.$(OBJEXT) \ +@CONFIG_EPIPHANY_TRUE@ epiphany/read.$(OBJEXT) \ +@CONFIG_EPIPHANY_TRUE@ epiphany/sbrk.$(OBJEXT) \ +@CONFIG_EPIPHANY_TRUE@ epiphany/stat.$(OBJEXT) \ +@CONFIG_EPIPHANY_TRUE@ epiphany/times.$(OBJEXT) \ +@CONFIG_EPIPHANY_TRUE@ epiphany/unlink.$(OBJEXT) \ +@CONFIG_EPIPHANY_TRUE@ epiphany/wait.$(OBJEXT) \ +@CONFIG_EPIPHANY_TRUE@ epiphany/write.$(OBJEXT) \ +@CONFIG_EPIPHANY_TRUE@ epiphany/_exit.$(OBJEXT) \ +@CONFIG_EPIPHANY_TRUE@ epiphany/epiphany-syscalls.$(OBJEXT) \ +@CONFIG_EPIPHANY_TRUE@ epiphany/epiphany-ivthandlers.$(OBJEXT) +epiphany_libepiphany_a_OBJECTS = $(am_epiphany_libepiphany_a_OBJECTS) +fr30_libsim_a_AR = $(AR) $(ARFLAGS) +fr30_libsim_a_LIBADD = +@CONFIG_FR30_TRUE@am_fr30_libsim_a_OBJECTS = fr30/syscalls.$(OBJEXT) \ +@CONFIG_FR30_TRUE@ putnum.$(OBJEXT) unlink.$(OBJEXT) +fr30_libsim_a_OBJECTS = $(am_fr30_libsim_a_OBJECTS) +frv_libsim_a_AR = $(AR) $(ARFLAGS) +frv_libsim_a_LIBADD = +@CONFIG_FRV_TRUE@am_frv_libsim_a_OBJECTS = frv/fstat.$(OBJEXT) \ +@CONFIG_FRV_TRUE@ frv/getpid.$(OBJEXT) frv/isatty.$(OBJEXT) \ +@CONFIG_FRV_TRUE@ frv/kill.$(OBJEXT) frv/putnum.$(OBJEXT) \ +@CONFIG_FRV_TRUE@ frv/sbrk.$(OBJEXT) frv/sim-close.$(OBJEXT) \ +@CONFIG_FRV_TRUE@ frv/sim-exit.$(OBJEXT) \ +@CONFIG_FRV_TRUE@ frv/sim-inbyte.$(OBJEXT) \ +@CONFIG_FRV_TRUE@ frv/sim-lseek.$(OBJEXT) \ +@CONFIG_FRV_TRUE@ frv/sim-open.$(OBJEXT) frv/sim-read.$(OBJEXT) \ +@CONFIG_FRV_TRUE@ frv/sim-time.$(OBJEXT) \ +@CONFIG_FRV_TRUE@ frv/sim-unlink.$(OBJEXT) \ +@CONFIG_FRV_TRUE@ frv/sim-write.$(OBJEXT) frv/stat.$(OBJEXT) +frv_libsim_a_OBJECTS = $(am_frv_libsim_a_OBJECTS) +ft32_libsim_a_AR = $(AR) $(ARFLAGS) +ft32_libsim_a_LIBADD = +@CONFIG_FT32_TRUE@am_ft32_libsim_a_OBJECTS = ft32/fstat.$(OBJEXT) \ +@CONFIG_FT32_TRUE@ ft32/getpid.$(OBJEXT) ft32/isatty.$(OBJEXT) \ +@CONFIG_FT32_TRUE@ ft32/kill.$(OBJEXT) ft32/sbrk.$(OBJEXT) \ +@CONFIG_FT32_TRUE@ ft32/sim-close.$(OBJEXT) \ +@CONFIG_FT32_TRUE@ ft32/sim-exit.$(OBJEXT) \ +@CONFIG_FT32_TRUE@ ft32/sim-inbyte.$(OBJEXT) \ +@CONFIG_FT32_TRUE@ ft32/sim-lseek.$(OBJEXT) \ +@CONFIG_FT32_TRUE@ ft32/sim-open.$(OBJEXT) \ +@CONFIG_FT32_TRUE@ ft32/sim-read.$(OBJEXT) \ +@CONFIG_FT32_TRUE@ ft32/sim-time.$(OBJEXT) \ +@CONFIG_FT32_TRUE@ ft32/sim-unlink.$(OBJEXT) \ +@CONFIG_FT32_TRUE@ ft32/sim-write.$(OBJEXT) ft32/stat.$(OBJEXT) +ft32_libsim_a_OBJECTS = $(am_ft32_libsim_a_OBJECTS) +i386_libcygmon_a_AR = $(AR) $(ARFLAGS) +i386_libcygmon_a_LIBADD = +@CONFIG_I386_TRUE@am_i386_libcygmon_a_OBJECTS = i386/i386_libcygmon_a-cygmon-salib.$(OBJEXT) \ +@CONFIG_I386_TRUE@ i386/i386_libcygmon_a-cygmon-gmon.$(OBJEXT) +i386_libcygmon_a_OBJECTS = $(am_i386_libcygmon_a_OBJECTS) +i960_libmon960_a_AR = $(AR) $(ARFLAGS) +i960_libmon960_a_LIBADD = +@CONFIG_I960_TRUE@am_i960_libmon960_a_OBJECTS = putnum.$(OBJEXT) \ +@CONFIG_I960_TRUE@ unlink.$(OBJEXT) i960/mon-read.$(OBJEXT) \ +@CONFIG_I960_TRUE@ i960/mon-write.$(OBJEXT) \ +@CONFIG_I960_TRUE@ i960/mon-syscalls.$(OBJEXT) \ +@CONFIG_I960_TRUE@ i960/mon960.$(OBJEXT) +i960_libmon960_a_OBJECTS = $(am_i960_libmon960_a_OBJECTS) iq2000_libeval_a_AR = $(AR) $(ARFLAGS) iq2000_libeval_a_LIBADD = @CONFIG_IQ2000_TRUE@am_iq2000_libeval_a_OBJECTS = \ @@ -282,22 +784,402 @@ libnosys_libnosys_a_LIBADD = @CONFIG_LIBNOSYS_TRUE@ libnosys/unlink.$(OBJEXT) \ @CONFIG_LIBNOSYS_TRUE@ libnosys/wait.$(OBJEXT) \ @CONFIG_LIBNOSYS_TRUE@ libnosys/write.$(OBJEXT) \ +@CONFIG_LIBNOSYS_TRUE@ libnosys/getentropy.$(OBJEXT) \ @CONFIG_LIBNOSYS_TRUE@ libnosys/_exit.$(OBJEXT) libnosys_libnosys_a_OBJECTS = $(am_libnosys_libnosys_a_OBJECTS) libobjs_a_AR = $(AR) $(ARFLAGS) libobjs_a_LIBADD = -@CONFIG_BFIN_TRUE@am__objects_1 = bfin/crt0.$(OBJEXT) \ +@CONFIG_BFIN_TRUE@am__objects_3 = bfin/crt0.$(OBJEXT) \ @CONFIG_BFIN_TRUE@ bfin/basiccrt.$(OBJEXT) -@CONFIG_IQ2000_TRUE@am__objects_2 = iq2000/crt0.$(OBJEXT) -@CONFIG_LM32_TRUE@am__objects_3 = lm32/crt0.$(OBJEXT) -am_libobjs_a_OBJECTS = $(am__objects_1) $(am__objects_2) \ - $(am__objects_3) +@CONFIG_CR16_TRUE@am__objects_4 = cr16/crti.$(OBJEXT) \ +@CONFIG_CR16_TRUE@ cr16/crtn.$(OBJEXT) cr16/crt1.$(OBJEXT) +@CONFIG_CSKY_TRUE@am__objects_5 = csky/crt0.$(OBJEXT) +@CONFIG_EPIPHANY_TRUE@am__objects_6 = epiphany/crt0.$(OBJEXT) +@CONFIG_FR30_TRUE@am__objects_7 = fr30/crt0.$(OBJEXT) +@CONFIG_FRV_TRUE@am__objects_8 = frv/crt0.$(OBJEXT) +@CONFIG_FT32_TRUE@am__objects_9 = ft32/crt0.$(OBJEXT) +@CONFIG_I386_TRUE@am__objects_10 = i386/cygmon-crt0.$(OBJEXT) +@CONFIG_I960_TRUE@am__objects_11 = i960/crt0.$(OBJEXT) +@CONFIG_IQ2000_TRUE@am__objects_12 = iq2000/crt0.$(OBJEXT) +@CONFIG_LM32_TRUE@am__objects_13 = lm32/crt0.$(OBJEXT) +@CONFIG_M32R_TRUE@am__objects_14 = m32r/crt0.$(OBJEXT) \ +@CONFIG_M32R_TRUE@ m32r/m32r-lib.$(OBJEXT) \ +@CONFIG_M32R_TRUE@ m32r/m32r-stub.$(OBJEXT) +@CONFIG_MCORE_TRUE@am__objects_15 = mcore/crt0.$(OBJEXT) +@CONFIG_MICROBLAZE_TRUE@am__objects_16 = microblaze/crt0.$(OBJEXT) \ +@CONFIG_MICROBLAZE_TRUE@ microblaze/crt1.$(OBJEXT) \ +@CONFIG_MICROBLAZE_TRUE@ microblaze/crt2.$(OBJEXT) \ +@CONFIG_MICROBLAZE_TRUE@ microblaze/crt3.$(OBJEXT) \ +@CONFIG_MICROBLAZE_TRUE@ microblaze/crt4.$(OBJEXT) \ +@CONFIG_MICROBLAZE_TRUE@ microblaze/crtinit.$(OBJEXT) \ +@CONFIG_MICROBLAZE_TRUE@ microblaze/pgcrtinit.$(OBJEXT) \ +@CONFIG_MICROBLAZE_TRUE@ microblaze/sim-crtinit.$(OBJEXT) \ +@CONFIG_MICROBLAZE_TRUE@ microblaze/sim-pgcrtinit.$(OBJEXT) \ +@CONFIG_MICROBLAZE_TRUE@ microblaze/linux-crt0.$(OBJEXT) +@CONFIG_MN10200_TRUE@am__objects_17 = mn10200/crt0.$(OBJEXT) +@CONFIG_MN10300_TRUE@am__objects_18 = mn10300/crt0.$(OBJEXT) \ +@CONFIG_MN10300_TRUE@ mn10300/crt0_cygmon.$(OBJEXT) \ +@CONFIG_MN10300_TRUE@ mn10300/crt0_redboot.$(OBJEXT) +@CONFIG_MOXIE_TRUE@am__objects_19 = moxie/crt0.$(OBJEXT) +@CONFIG_MSP430_TRUE@am__objects_20 = msp430/gcrt0.$(OBJEXT) \ +@CONFIG_MSP430_TRUE@ msp430/crt0.$(OBJEXT) +@CONFIG_NDS32_TRUE@am__objects_21 = nds32/crt0.$(OBJEXT) \ +@CONFIG_NDS32_TRUE@ nds32/crt1.$(OBJEXT) +@CONFIG_OR1K_TRUE@am__objects_22 = or1k/crt0.$(OBJEXT) +@CONFIG_PRU_TRUE@am__objects_23 = pru/crt0.$(OBJEXT) \ +@CONFIG_PRU_TRUE@ pru/crt0-minrt.$(OBJEXT) +@CONFIG_RL78_TRUE@am__objects_24 = rl78/gcrt0.$(OBJEXT) \ +@CONFIG_RL78_TRUE@ rl78/crt0.$(OBJEXT) rl78/crtn.$(OBJEXT) +@CONFIG_RX_TRUE@am__objects_25 = rx/gcrt0.$(OBJEXT) rx/crt0.$(OBJEXT) \ +@CONFIG_RX_TRUE@ rx/crtn.$(OBJEXT) +@CONFIG_SPARC_TRUE@am__objects_26 = sparc/crt0.$(OBJEXT) \ +@CONFIG_SPARC_TRUE@ sparc/erc32-crt0.$(OBJEXT) +@CONFIG_SPARC_TRUE@@SPARC_BUILD_CYGMON_TRUE@am__objects_27 = sparc/cygmon-crt0.$(OBJEXT) +@CONFIG_SPARC_TRUE@@SPARC_BUILD_SPLET_TRUE@am__objects_28 = sparc/crt0-701.$(OBJEXT) +@CONFIG_SPARC_LEON_TRUE@am__objects_29 = sparc_leon/crt0.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/pnpinit.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/pnpinit_simple.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/locore_svt.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/locore_mvt.$(OBJEXT) +@CONFIG_TIC6X_TRUE@am__objects_30 = tic6x/crt0.$(OBJEXT) +@CONFIG_V850_TRUE@am__objects_31 = v850/crt0.$(OBJEXT) +@CONFIG_VISIUM_TRUE@am__objects_32 = visium/crt0.$(OBJEXT) +@CONFIG_XSTORMY16_TRUE@am__objects_33 = xstormy16/crt0.$(OBJEXT) \ +@CONFIG_XSTORMY16_TRUE@ xstormy16/crti.$(OBJEXT) \ +@CONFIG_XSTORMY16_TRUE@ xstormy16/crtn.$(OBJEXT) +@CONFIG_XTENSA_TRUE@am__objects_34 = xtensa/crt0.$(OBJEXT) \ +@CONFIG_XTENSA_TRUE@ xtensa/crt1-sim.$(OBJEXT) \ +@CONFIG_XTENSA_TRUE@ xtensa/crt1-boards.$(OBJEXT) +am_libobjs_a_OBJECTS = $(am__objects_3) $(am__objects_4) \ + $(am__objects_5) $(am__objects_6) $(am__objects_7) \ + $(am__objects_8) $(am__objects_9) $(am__objects_10) \ + $(am__objects_11) $(am__objects_12) $(am__objects_13) \ + $(am__objects_14) $(am__objects_15) $(am__objects_16) \ + $(am__objects_17) $(am__objects_18) $(am__objects_19) \ + $(am__objects_20) $(am__objects_21) $(am__objects_22) \ + $(am__objects_23) $(am__objects_24) $(am__objects_25) \ + $(am__objects_26) $(am__objects_27) $(am__objects_28) \ + $(am__objects_29) $(am__objects_30) $(am__objects_31) \ + $(am__objects_32) $(am__objects_33) $(am__objects_34) libobjs_a_OBJECTS = $(am_libobjs_a_OBJECTS) lm32_libgloss_a_AR = $(AR) $(ARFLAGS) lm32_libgloss_a_LIBADD = @CONFIG_LM32_TRUE@am_lm32_libgloss_a_OBJECTS = lm32/isatty.$(OBJEXT) \ @CONFIG_LM32_TRUE@ lm32/scall.$(OBJEXT) lm32_libgloss_a_OBJECTS = $(am_lm32_libgloss_a_OBJECTS) +m32r_libgloss_a_AR = $(AR) $(ARFLAGS) +m32r_libgloss_a_LIBADD = +@CONFIG_M32R_TRUE@am__objects_35 = m32r/chmod.$(OBJEXT) \ +@CONFIG_M32R_TRUE@ m32r/close.$(OBJEXT) m32r/exit.$(OBJEXT) \ +@CONFIG_M32R_TRUE@ m32r/fstat.$(OBJEXT) m32r/getpid.$(OBJEXT) \ +@CONFIG_M32R_TRUE@ m32r/isatty.$(OBJEXT) m32r/kill.$(OBJEXT) \ +@CONFIG_M32R_TRUE@ m32r/lseek.$(OBJEXT) m32r/open.$(OBJEXT) \ +@CONFIG_M32R_TRUE@ m32r/raise.$(OBJEXT) m32r/read.$(OBJEXT) \ +@CONFIG_M32R_TRUE@ m32r/sbrk.$(OBJEXT) m32r/stat.$(OBJEXT) \ +@CONFIG_M32R_TRUE@ m32r/unlink.$(OBJEXT) m32r/utime.$(OBJEXT) \ +@CONFIG_M32R_TRUE@ m32r/write.$(OBJEXT) +@CONFIG_M32R_TRUE@am_m32r_libgloss_a_OBJECTS = m32r/trap0.$(OBJEXT) \ +@CONFIG_M32R_TRUE@ $(am__objects_35) +m32r_libgloss_a_OBJECTS = $(am_m32r_libgloss_a_OBJECTS) +m32r_libmon_a_AR = $(AR) $(ARFLAGS) +m32r_libmon_a_LIBADD = +@CONFIG_M32R_TRUE@am_m32r_libmon_a_OBJECTS = m32r/trapmon0.$(OBJEXT) \ +@CONFIG_M32R_TRUE@ $(am__objects_35) +m32r_libmon_a_OBJECTS = $(am_m32r_libmon_a_OBJECTS) +mcore_libcmb_a_AR = $(AR) $(ARFLAGS) +mcore_libcmb_a_LIBADD = +@CONFIG_MCORE_TRUE@am__objects_36 = mcore/fstat.$(OBJEXT) \ +@CONFIG_MCORE_TRUE@ mcore/getpid.$(OBJEXT) isatty.$(OBJEXT) \ +@CONFIG_MCORE_TRUE@ mcore/kill.$(OBJEXT) mcore/raise.$(OBJEXT) \ +@CONFIG_MCORE_TRUE@ mcore/putnum.$(OBJEXT) mcore/stat.$(OBJEXT) \ +@CONFIG_MCORE_TRUE@ mcore/unlink.$(OBJEXT) +@CONFIG_MCORE_TRUE@am_mcore_libcmb_a_OBJECTS = mcore/open.$(OBJEXT) \ +@CONFIG_MCORE_TRUE@ mcore/close.$(OBJEXT) mcore/lseek.$(OBJEXT) \ +@CONFIG_MCORE_TRUE@ mcore/sbrk.$(OBJEXT) mcore/read.$(OBJEXT) \ +@CONFIG_MCORE_TRUE@ mcore/write.$(OBJEXT) mcore/print.$(OBJEXT) \ +@CONFIG_MCORE_TRUE@ mcore/cmb-exit.$(OBJEXT) \ +@CONFIG_MCORE_TRUE@ mcore/cmb-inbyte.$(OBJEXT) \ +@CONFIG_MCORE_TRUE@ mcore/cmb-outbyte.$(OBJEXT) \ +@CONFIG_MCORE_TRUE@ $(am__objects_36) +mcore_libcmb_a_OBJECTS = $(am_mcore_libcmb_a_OBJECTS) +mcore_libsim_a_AR = $(AR) $(ARFLAGS) +mcore_libsim_a_LIBADD = +@CONFIG_MCORE_TRUE@am_mcore_libsim_a_OBJECTS = \ +@CONFIG_MCORE_TRUE@ mcore/syscalls.$(OBJEXT) $(am__objects_36) +mcore_libsim_a_OBJECTS = $(am_mcore_libsim_a_OBJECTS) +microblaze_libgloss_linux_a_AR = $(AR) $(ARFLAGS) +microblaze_libgloss_linux_a_LIBADD = +@CONFIG_MICROBLAZE_TRUE@am_microblaze_libgloss_linux_a_OBJECTS = \ +@CONFIG_MICROBLAZE_TRUE@ microblaze/linux-syscalls.$(OBJEXT) \ +@CONFIG_MICROBLAZE_TRUE@ microblaze/linux-syscalls-wrap.$(OBJEXT) \ +@CONFIG_MICROBLAZE_TRUE@ microblaze/linux-outbyte.$(OBJEXT) \ +@CONFIG_MICROBLAZE_TRUE@ microblaze/linux-inbyte.$(OBJEXT) +microblaze_libgloss_linux_a_OBJECTS = \ + $(am_microblaze_libgloss_linux_a_OBJECTS) +microblaze_libgloss_a_AR = $(AR) $(ARFLAGS) +microblaze_libgloss_a_LIBADD = +@CONFIG_MICROBLAZE_TRUE@am_microblaze_libgloss_a_OBJECTS = \ +@CONFIG_MICROBLAZE_TRUE@ fstat.$(OBJEXT) getpid.$(OBJEXT) \ +@CONFIG_MICROBLAZE_TRUE@ isatty.$(OBJEXT) kill.$(OBJEXT) \ +@CONFIG_MICROBLAZE_TRUE@ lseek.$(OBJEXT) print.$(OBJEXT) \ +@CONFIG_MICROBLAZE_TRUE@ putnum.$(OBJEXT) stat.$(OBJEXT) \ +@CONFIG_MICROBLAZE_TRUE@ unlink.$(OBJEXT) open.$(OBJEXT) \ +@CONFIG_MICROBLAZE_TRUE@ close.$(OBJEXT) read.$(OBJEXT) \ +@CONFIG_MICROBLAZE_TRUE@ write.$(OBJEXT) \ +@CONFIG_MICROBLAZE_TRUE@ microblaze/sbrk.$(OBJEXT) \ +@CONFIG_MICROBLAZE_TRUE@ microblaze/timer.$(OBJEXT) \ +@CONFIG_MICROBLAZE_TRUE@ microblaze/_exception_handler.$(OBJEXT) \ +@CONFIG_MICROBLAZE_TRUE@ microblaze/_hw_exception_handler.$(OBJEXT) \ +@CONFIG_MICROBLAZE_TRUE@ microblaze/_interrupt_handler.$(OBJEXT) \ +@CONFIG_MICROBLAZE_TRUE@ microblaze/_program_clean.$(OBJEXT) \ +@CONFIG_MICROBLAZE_TRUE@ microblaze/_program_init.$(OBJEXT) \ +@CONFIG_MICROBLAZE_TRUE@ microblaze/xil_malloc.$(OBJEXT) \ +@CONFIG_MICROBLAZE_TRUE@ microblaze/xil_sbrk.$(OBJEXT) \ +@CONFIG_MICROBLAZE_TRUE@ microblaze/xil_printf.$(OBJEXT) +microblaze_libgloss_a_OBJECTS = $(am_microblaze_libgloss_a_OBJECTS) +mn10200_libeval_a_AR = $(AR) $(ARFLAGS) +mn10200_libeval_a_LIBADD = +@CONFIG_MN10200_TRUE@am_mn10200_libeval_a_OBJECTS = \ +@CONFIG_MN10200_TRUE@ mn10200/_exit.$(OBJEXT) \ +@CONFIG_MN10200_TRUE@ mn10200/access.$(OBJEXT) \ +@CONFIG_MN10200_TRUE@ mn10200/chmod.$(OBJEXT) \ +@CONFIG_MN10200_TRUE@ mn10200/close.$(OBJEXT) \ +@CONFIG_MN10200_TRUE@ mn10200/crt1.$(OBJEXT) \ +@CONFIG_MN10200_TRUE@ mn10200/fstat.$(OBJEXT) \ +@CONFIG_MN10200_TRUE@ mn10200/getpid.$(OBJEXT) \ +@CONFIG_MN10200_TRUE@ mn10200/isatty.$(OBJEXT) \ +@CONFIG_MN10200_TRUE@ mn10200/kill.$(OBJEXT) \ +@CONFIG_MN10200_TRUE@ mn10200/lseek.$(OBJEXT) \ +@CONFIG_MN10200_TRUE@ mn10200/open.$(OBJEXT) \ +@CONFIG_MN10200_TRUE@ mn10200/read.$(OBJEXT) \ +@CONFIG_MN10200_TRUE@ mn10200/sbrk.$(OBJEXT) \ +@CONFIG_MN10200_TRUE@ mn10200/stat.$(OBJEXT) \ +@CONFIG_MN10200_TRUE@ mn10200/time.$(OBJEXT) \ +@CONFIG_MN10200_TRUE@ mn10200/trap.$(OBJEXT) \ +@CONFIG_MN10200_TRUE@ mn10200/unlink.$(OBJEXT) \ +@CONFIG_MN10200_TRUE@ mn10200/utime.$(OBJEXT) \ +@CONFIG_MN10200_TRUE@ mn10200/write.$(OBJEXT) +mn10200_libeval_a_OBJECTS = $(am_mn10200_libeval_a_OBJECTS) +mn10300_libcygmon_a_AR = $(AR) $(ARFLAGS) +mn10300_libcygmon_a_LIBADD = +@CONFIG_MN10300_TRUE@am__objects_37 = mn10300/_exit.$(OBJEXT) \ +@CONFIG_MN10300_TRUE@ mn10300/access.$(OBJEXT) \ +@CONFIG_MN10300_TRUE@ mn10300/chmod.$(OBJEXT) \ +@CONFIG_MN10300_TRUE@ mn10300/close.$(OBJEXT) \ +@CONFIG_MN10300_TRUE@ mn10300/crt1.$(OBJEXT) \ +@CONFIG_MN10300_TRUE@ mn10300/fstat.$(OBJEXT) \ +@CONFIG_MN10300_TRUE@ mn10300/getpid.$(OBJEXT) \ +@CONFIG_MN10300_TRUE@ mn10300/isatty.$(OBJEXT) \ +@CONFIG_MN10300_TRUE@ mn10300/kill.$(OBJEXT) \ +@CONFIG_MN10300_TRUE@ mn10300/lseek.$(OBJEXT) \ +@CONFIG_MN10300_TRUE@ mn10300/open.$(OBJEXT) \ +@CONFIG_MN10300_TRUE@ mn10300/read.$(OBJEXT) \ +@CONFIG_MN10300_TRUE@ mn10300/sbrk.$(OBJEXT) \ +@CONFIG_MN10300_TRUE@ mn10300/stat.$(OBJEXT) \ +@CONFIG_MN10300_TRUE@ mn10300/time.$(OBJEXT) \ +@CONFIG_MN10300_TRUE@ mn10300/times.$(OBJEXT) \ +@CONFIG_MN10300_TRUE@ mn10300/unlink.$(OBJEXT) \ +@CONFIG_MN10300_TRUE@ mn10300/utime.$(OBJEXT) \ +@CONFIG_MN10300_TRUE@ mn10300/write.$(OBJEXT) +@CONFIG_MN10300_TRUE@@MN10300_BUILD_LIBCYGMON_TRUE@am_mn10300_libcygmon_a_OBJECTS = $(am__objects_37) \ +@CONFIG_MN10300_TRUE@@MN10300_BUILD_LIBCYGMON_TRUE@ mn10300/cygmon.$(OBJEXT) +mn10300_libcygmon_a_OBJECTS = $(am_mn10300_libcygmon_a_OBJECTS) +mn10300_libeval_a_AR = $(AR) $(ARFLAGS) +mn10300_libeval_a_LIBADD = +@CONFIG_MN10300_TRUE@am_mn10300_libeval_a_OBJECTS = $(am__objects_37) \ +@CONFIG_MN10300_TRUE@ mn10300/trap.$(OBJEXT) +mn10300_libeval_a_OBJECTS = $(am_mn10300_libeval_a_OBJECTS) +moxie_libqemu_a_AR = $(AR) $(ARFLAGS) +moxie_libqemu_a_LIBADD = +@CONFIG_MOXIE_TRUE@am_moxie_libqemu_a_OBJECTS = \ +@CONFIG_MOXIE_TRUE@ moxie/qemu-write.$(OBJEXT) \ +@CONFIG_MOXIE_TRUE@ moxie/qemu-time.$(OBJEXT) \ +@CONFIG_MOXIE_TRUE@ moxie/sim-exit.$(OBJEXT) \ +@CONFIG_MOXIE_TRUE@ moxie/sbrk.$(OBJEXT) \ +@CONFIG_MOXIE_TRUE@ moxie/sim-close.$(OBJEXT) \ +@CONFIG_MOXIE_TRUE@ moxie/fstat.$(OBJEXT) \ +@CONFIG_MOXIE_TRUE@ moxie/getpid.$(OBJEXT) \ +@CONFIG_MOXIE_TRUE@ moxie/isatty.$(OBJEXT) moxie/kill.$(OBJEXT) \ +@CONFIG_MOXIE_TRUE@ moxie/putnum.$(OBJEXT) \ +@CONFIG_MOXIE_TRUE@ moxie/sim-lseek.$(OBJEXT) \ +@CONFIG_MOXIE_TRUE@ moxie/sim-read.$(OBJEXT) +moxie_libqemu_a_OBJECTS = $(am_moxie_libqemu_a_OBJECTS) +moxie_libsim_a_AR = $(AR) $(ARFLAGS) +moxie_libsim_a_LIBADD = +@CONFIG_MOXIE_TRUE@am_moxie_libsim_a_OBJECTS = moxie/fstat.$(OBJEXT) \ +@CONFIG_MOXIE_TRUE@ moxie/getpid.$(OBJEXT) \ +@CONFIG_MOXIE_TRUE@ moxie/isatty.$(OBJEXT) moxie/kill.$(OBJEXT) \ +@CONFIG_MOXIE_TRUE@ moxie/putnum.$(OBJEXT) moxie/sbrk.$(OBJEXT) \ +@CONFIG_MOXIE_TRUE@ moxie/sim-close.$(OBJEXT) \ +@CONFIG_MOXIE_TRUE@ moxie/sim-exit.$(OBJEXT) \ +@CONFIG_MOXIE_TRUE@ moxie/sim-inbyte.$(OBJEXT) \ +@CONFIG_MOXIE_TRUE@ moxie/sim-lseek.$(OBJEXT) \ +@CONFIG_MOXIE_TRUE@ moxie/sim-open.$(OBJEXT) \ +@CONFIG_MOXIE_TRUE@ moxie/sim-read.$(OBJEXT) \ +@CONFIG_MOXIE_TRUE@ moxie/sim-time.$(OBJEXT) \ +@CONFIG_MOXIE_TRUE@ moxie/sim-unlink.$(OBJEXT) \ +@CONFIG_MOXIE_TRUE@ moxie/sim-write.$(OBJEXT) \ +@CONFIG_MOXIE_TRUE@ moxie/stat.$(OBJEXT) +moxie_libsim_a_OBJECTS = $(am_moxie_libsim_a_OBJECTS) +msp430_libcrt_a_AR = $(AR) $(ARFLAGS) +msp430_libcrt_a_LIBADD = +@CONFIG_MSP430_TRUE@am_msp430_libcrt_a_OBJECTS = \ +@CONFIG_MSP430_TRUE@ msp430/crt_bss.$(OBJEXT) \ +@CONFIG_MSP430_TRUE@ msp430/crt_high_bss.$(OBJEXT) \ +@CONFIG_MSP430_TRUE@ msp430/crt_movedata.$(OBJEXT) \ +@CONFIG_MSP430_TRUE@ msp430/crt_move_highdata.$(OBJEXT) \ +@CONFIG_MSP430_TRUE@ msp430/crt_main.$(OBJEXT) \ +@CONFIG_MSP430_TRUE@ msp430/crt_callexit.$(OBJEXT) \ +@CONFIG_MSP430_TRUE@ msp430/crt_run_init_array.$(OBJEXT) \ +@CONFIG_MSP430_TRUE@ msp430/crt_run_preinit_array.$(OBJEXT) \ +@CONFIG_MSP430_TRUE@ msp430/crt_run_fini_array.$(OBJEXT) \ +@CONFIG_MSP430_TRUE@ msp430/crt_run_array.$(OBJEXT) +msp430_libcrt_a_OBJECTS = $(am_msp430_libcrt_a_OBJECTS) +msp430_libnosys_a_AR = $(AR) $(ARFLAGS) +msp430_libnosys_a_LIBADD = +@CONFIG_MSP430_TRUE@am_msp430_libnosys_a_OBJECTS = \ +@CONFIG_MSP430_TRUE@ msp430/ciosyscalls.$(OBJEXT) \ +@CONFIG_MSP430_TRUE@ msp430/cio.$(OBJEXT) \ +@CONFIG_MSP430_TRUE@ msp430/write.$(OBJEXT) \ +@CONFIG_MSP430_TRUE@ msp430/unlink.$(OBJEXT) \ +@CONFIG_MSP430_TRUE@ msp430/sbrk.$(OBJEXT) +msp430_libnosys_a_OBJECTS = $(am_msp430_libnosys_a_OBJECTS) +msp430_libsim_a_AR = $(AR) $(ARFLAGS) +msp430_libsim_a_LIBADD = +@CONFIG_MSP430_TRUE@am_msp430_libsim_a_OBJECTS = \ +@CONFIG_MSP430_TRUE@ msp430/syscalls.$(OBJEXT) \ +@CONFIG_MSP430_TRUE@ msp430/cio.$(OBJEXT) \ +@CONFIG_MSP430_TRUE@ msp430/write.$(OBJEXT) \ +@CONFIG_MSP430_TRUE@ msp430/unlink.$(OBJEXT) \ +@CONFIG_MSP430_TRUE@ msp430/sbrk.$(OBJEXT) +msp430_libsim_a_OBJECTS = $(am_msp430_libsim_a_OBJECTS) +nds32_libgloss_a_AR = $(AR) $(ARFLAGS) +nds32_libgloss_a_LIBADD = +@CONFIG_NDS32_TRUE@am_nds32_libgloss_a_OBJECTS = \ +@CONFIG_NDS32_TRUE@ nds32/_exit.$(OBJEXT) nds32/_open.$(OBJEXT) \ +@CONFIG_NDS32_TRUE@ nds32/_close.$(OBJEXT) \ +@CONFIG_NDS32_TRUE@ nds32/_read.$(OBJEXT) \ +@CONFIG_NDS32_TRUE@ nds32/_write.$(OBJEXT) \ +@CONFIG_NDS32_TRUE@ nds32/_lseek.$(OBJEXT) \ +@CONFIG_NDS32_TRUE@ nds32/_unlink.$(OBJEXT) \ +@CONFIG_NDS32_TRUE@ nds32/_getpid.$(OBJEXT) \ +@CONFIG_NDS32_TRUE@ nds32/_kill.$(OBJEXT) \ +@CONFIG_NDS32_TRUE@ nds32/_fstat.$(OBJEXT) \ +@CONFIG_NDS32_TRUE@ nds32/_argvlen.$(OBJEXT) \ +@CONFIG_NDS32_TRUE@ nds32/_argv.$(OBJEXT) \ +@CONFIG_NDS32_TRUE@ nds32/_chdir.$(OBJEXT) \ +@CONFIG_NDS32_TRUE@ nds32/_stat.$(OBJEXT) \ +@CONFIG_NDS32_TRUE@ nds32/_chmod.$(OBJEXT) \ +@CONFIG_NDS32_TRUE@ nds32/_utime.$(OBJEXT) \ +@CONFIG_NDS32_TRUE@ nds32/_time.$(OBJEXT) \ +@CONFIG_NDS32_TRUE@ nds32/_gettimeofday.$(OBJEXT) \ +@CONFIG_NDS32_TRUE@ nds32/_times.$(OBJEXT) \ +@CONFIG_NDS32_TRUE@ nds32/_link.$(OBJEXT) \ +@CONFIG_NDS32_TRUE@ nds32/_rename.$(OBJEXT) \ +@CONFIG_NDS32_TRUE@ nds32/_isatty.$(OBJEXT) \ +@CONFIG_NDS32_TRUE@ nds32/_system.$(OBJEXT) \ +@CONFIG_NDS32_TRUE@ nds32/_sbrk.$(OBJEXT) \ +@CONFIG_NDS32_TRUE@ nds32/syscall_error_handler.$(OBJEXT) +nds32_libgloss_a_OBJECTS = $(am_nds32_libgloss_a_OBJECTS) +nios2_libnios2_a_AR = $(AR) $(ARFLAGS) +nios2_libnios2_a_LIBADD = +@CONFIG_NIOS2_TRUE@am_nios2_libnios2_a_OBJECTS = \ +@CONFIG_NIOS2_TRUE@ nios2/nios2_libnios2_a-crt0.$(OBJEXT) \ +@CONFIG_NIOS2_TRUE@ nios2/nios2_libnios2_a-io-close.$(OBJEXT) \ +@CONFIG_NIOS2_TRUE@ nios2/nios2_libnios2_a-io-exit.$(OBJEXT) \ +@CONFIG_NIOS2_TRUE@ nios2/nios2_libnios2_a-io-fstat.$(OBJEXT) \ +@CONFIG_NIOS2_TRUE@ nios2/nios2_libnios2_a-io-gdb.$(OBJEXT) \ +@CONFIG_NIOS2_TRUE@ nios2/nios2_libnios2_a-io-gettimeofday.$(OBJEXT) \ +@CONFIG_NIOS2_TRUE@ nios2/nios2_libnios2_a-io-isatty.$(OBJEXT) \ +@CONFIG_NIOS2_TRUE@ nios2/nios2_libnios2_a-io-lseek.$(OBJEXT) \ +@CONFIG_NIOS2_TRUE@ nios2/nios2_libnios2_a-io-nios2.$(OBJEXT) \ +@CONFIG_NIOS2_TRUE@ nios2/nios2_libnios2_a-io-open.$(OBJEXT) \ +@CONFIG_NIOS2_TRUE@ nios2/nios2_libnios2_a-io-read.$(OBJEXT) \ +@CONFIG_NIOS2_TRUE@ nios2/nios2_libnios2_a-io-rename.$(OBJEXT) \ +@CONFIG_NIOS2_TRUE@ nios2/nios2_libnios2_a-io-stat.$(OBJEXT) \ +@CONFIG_NIOS2_TRUE@ nios2/nios2_libnios2_a-io-system.$(OBJEXT) \ +@CONFIG_NIOS2_TRUE@ nios2/nios2_libnios2_a-io-time.$(OBJEXT) \ +@CONFIG_NIOS2_TRUE@ nios2/nios2_libnios2_a-io-unlink.$(OBJEXT) \ +@CONFIG_NIOS2_TRUE@ nios2/nios2_libnios2_a-io-write.$(OBJEXT) \ +@CONFIG_NIOS2_TRUE@ nios2/nios2_libnios2_a-getpid.$(OBJEXT) \ +@CONFIG_NIOS2_TRUE@ nios2/nios2_libnios2_a-kill.$(OBJEXT) \ +@CONFIG_NIOS2_TRUE@ nios2/nios2_libnios2_a-sbrk.$(OBJEXT) +nios2_libnios2_a_OBJECTS = $(am_nios2_libnios2_a_OBJECTS) +or1k_libboard_atlys_a_AR = $(AR) $(ARFLAGS) +or1k_libboard_atlys_a_LIBADD = +@CONFIG_OR1K_TRUE@am_or1k_libboard_atlys_a_OBJECTS = \ +@CONFIG_OR1K_TRUE@ or1k/boards/atlys.$(OBJEXT) +or1k_libboard_atlys_a_OBJECTS = $(am_or1k_libboard_atlys_a_OBJECTS) +or1k_libboard_de0_nano_a_AR = $(AR) $(ARFLAGS) +or1k_libboard_de0_nano_a_LIBADD = +@CONFIG_OR1K_TRUE@am_or1k_libboard_de0_nano_a_OBJECTS = \ +@CONFIG_OR1K_TRUE@ or1k/boards/de0_nano.$(OBJEXT) +or1k_libboard_de0_nano_a_OBJECTS = \ + $(am_or1k_libboard_de0_nano_a_OBJECTS) +or1k_libboard_ml501_a_AR = $(AR) $(ARFLAGS) +or1k_libboard_ml501_a_LIBADD = +@CONFIG_OR1K_TRUE@am_or1k_libboard_ml501_a_OBJECTS = \ +@CONFIG_OR1K_TRUE@ or1k/boards/ml501.$(OBJEXT) +or1k_libboard_ml501_a_OBJECTS = $(am_or1k_libboard_ml501_a_OBJECTS) +or1k_libboard_optimsoc_a_AR = $(AR) $(ARFLAGS) +or1k_libboard_optimsoc_a_LIBADD = +@CONFIG_OR1K_TRUE@am_or1k_libboard_optimsoc_a_OBJECTS = \ +@CONFIG_OR1K_TRUE@ or1k/boards/optimsoc.$(OBJEXT) +or1k_libboard_optimsoc_a_OBJECTS = \ + $(am_or1k_libboard_optimsoc_a_OBJECTS) +or1k_libboard_or1ksim_uart_a_AR = $(AR) $(ARFLAGS) +or1k_libboard_or1ksim_uart_a_LIBADD = +@CONFIG_OR1K_TRUE@am_or1k_libboard_or1ksim_uart_a_OBJECTS = \ +@CONFIG_OR1K_TRUE@ or1k/boards/or1ksim-uart.$(OBJEXT) +or1k_libboard_or1ksim_uart_a_OBJECTS = \ + $(am_or1k_libboard_or1ksim_uart_a_OBJECTS) +or1k_libboard_or1ksim_a_AR = $(AR) $(ARFLAGS) +or1k_libboard_or1ksim_a_LIBADD = +@CONFIG_OR1K_TRUE@am_or1k_libboard_or1ksim_a_OBJECTS = \ +@CONFIG_OR1K_TRUE@ or1k/boards/or1ksim.$(OBJEXT) +or1k_libboard_or1ksim_a_OBJECTS = \ + $(am_or1k_libboard_or1ksim_a_OBJECTS) +or1k_libboard_ordb1a3pe1500_a_AR = $(AR) $(ARFLAGS) +or1k_libboard_ordb1a3pe1500_a_LIBADD = +@CONFIG_OR1K_TRUE@am_or1k_libboard_ordb1a3pe1500_a_OBJECTS = \ +@CONFIG_OR1K_TRUE@ or1k/boards/ordb1a3pe1500.$(OBJEXT) +or1k_libboard_ordb1a3pe1500_a_OBJECTS = \ + $(am_or1k_libboard_ordb1a3pe1500_a_OBJECTS) +or1k_libboard_ordb2a_a_AR = $(AR) $(ARFLAGS) +or1k_libboard_ordb2a_a_LIBADD = +@CONFIG_OR1K_TRUE@am_or1k_libboard_ordb2a_a_OBJECTS = \ +@CONFIG_OR1K_TRUE@ or1k/boards/ordb2a.$(OBJEXT) +or1k_libboard_ordb2a_a_OBJECTS = $(am_or1k_libboard_ordb2a_a_OBJECTS) +or1k_libboard_orpsocrefdesign_a_AR = $(AR) $(ARFLAGS) +or1k_libboard_orpsocrefdesign_a_LIBADD = +@CONFIG_OR1K_TRUE@am_or1k_libboard_orpsocrefdesign_a_OBJECTS = \ +@CONFIG_OR1K_TRUE@ or1k/boards/orpsocrefdesign.$(OBJEXT) +or1k_libboard_orpsocrefdesign_a_OBJECTS = \ + $(am_or1k_libboard_orpsocrefdesign_a_OBJECTS) +or1k_libor1k_a_AR = $(AR) $(ARFLAGS) +or1k_libor1k_a_LIBADD = +@CONFIG_OR1K_TRUE@am_or1k_libor1k_a_OBJECTS = or1k/syscalls.$(OBJEXT) \ +@CONFIG_OR1K_TRUE@ or1k/or1k_uart.$(OBJEXT) \ +@CONFIG_OR1K_TRUE@ or1k/outbyte.$(OBJEXT) \ +@CONFIG_OR1K_TRUE@ or1k/caches-asm.$(OBJEXT) \ +@CONFIG_OR1K_TRUE@ or1k/exceptions.$(OBJEXT) \ +@CONFIG_OR1K_TRUE@ or1k/exceptions-asm.$(OBJEXT) \ +@CONFIG_OR1K_TRUE@ or1k/interrupts.$(OBJEXT) \ +@CONFIG_OR1K_TRUE@ or1k/interrupts-asm.$(OBJEXT) \ +@CONFIG_OR1K_TRUE@ or1k/mmu-asm.$(OBJEXT) or1k/timer.$(OBJEXT) \ +@CONFIG_OR1K_TRUE@ or1k/sbrk.$(OBJEXT) or1k/impure.$(OBJEXT) \ +@CONFIG_OR1K_TRUE@ or1k/util.$(OBJEXT) or1k/sync-asm.$(OBJEXT) +or1k_libor1k_a_OBJECTS = $(am_or1k_libor1k_a_OBJECTS) +pru_libgloss_a_AR = $(AR) $(ARFLAGS) +pru_libgloss_a_LIBADD = +@CONFIG_PRU_TRUE@am_pru_libgloss_a_OBJECTS = \ +@CONFIG_PRU_TRUE@ pru/do_global_dtors.$(OBJEXT) \ +@CONFIG_PRU_TRUE@ pru/gettimeofday.$(OBJEXT) \ +@CONFIG_PRU_TRUE@ pru/isatty.$(OBJEXT) pru/putnum.$(OBJEXT) \ +@CONFIG_PRU_TRUE@ pru/raise.$(OBJEXT) pru/inbyte.$(OBJEXT) \ +@CONFIG_PRU_TRUE@ pru/outbyte.$(OBJEXT) pru/sbrk.$(OBJEXT) \ +@CONFIG_PRU_TRUE@ pru/stat.$(OBJEXT) pru/syscalls.$(OBJEXT) +pru_libgloss_a_OBJECTS = $(am_pru_libgloss_a_OBJECTS) riscv_libgloss_a_AR = $(AR) $(ARFLAGS) riscv_libgloss_a_LIBADD = @CONFIG_RISCV_TRUE@am_riscv_libgloss_a_OBJECTS = riscv/riscv_libgloss_a-sys_access.$(OBJEXT) \ @@ -362,20 +1244,358 @@ riscv_libsemihost_a_LIBADD = @CONFIG_RISCV_TRUE@ riscv/riscv_libsemihost_a-semihost-sys_unlink.$(OBJEXT) \ @CONFIG_RISCV_TRUE@ riscv/riscv_libsemihost_a-semihost-sys_write.$(OBJEXT) riscv_libsemihost_a_OBJECTS = $(am_riscv_libsemihost_a_OBJECTS) +riscv_libsim_a_AR = $(AR) $(ARFLAGS) +riscv_libsim_a_LIBADD = +@CONFIG_RISCV_TRUE@am__objects_38 = \ +@CONFIG_RISCV_TRUE@ riscv/riscv_libsim_a-sys_access.$(OBJEXT) \ +@CONFIG_RISCV_TRUE@ riscv/riscv_libsim_a-sys_chdir.$(OBJEXT) \ +@CONFIG_RISCV_TRUE@ riscv/riscv_libsim_a-sys_chmod.$(OBJEXT) \ +@CONFIG_RISCV_TRUE@ riscv/riscv_libsim_a-sys_chown.$(OBJEXT) \ +@CONFIG_RISCV_TRUE@ riscv/riscv_libsim_a-sys_close.$(OBJEXT) \ +@CONFIG_RISCV_TRUE@ riscv/riscv_libsim_a-sys_conv_stat.$(OBJEXT) \ +@CONFIG_RISCV_TRUE@ riscv/riscv_libsim_a-sys_execve.$(OBJEXT) \ +@CONFIG_RISCV_TRUE@ riscv/riscv_libsim_a-sys_exit.$(OBJEXT) \ +@CONFIG_RISCV_TRUE@ riscv/riscv_libsim_a-sys_faccessat.$(OBJEXT) \ +@CONFIG_RISCV_TRUE@ riscv/riscv_libsim_a-sys_fork.$(OBJEXT) \ +@CONFIG_RISCV_TRUE@ riscv/riscv_libsim_a-sys_fstat.$(OBJEXT) \ +@CONFIG_RISCV_TRUE@ riscv/riscv_libsim_a-sys_fstatat.$(OBJEXT) \ +@CONFIG_RISCV_TRUE@ riscv/riscv_libsim_a-sys_ftime.$(OBJEXT) \ +@CONFIG_RISCV_TRUE@ riscv/riscv_libsim_a-sys_getcwd.$(OBJEXT) \ +@CONFIG_RISCV_TRUE@ riscv/riscv_libsim_a-sys_getpid.$(OBJEXT) \ +@CONFIG_RISCV_TRUE@ riscv/riscv_libsim_a-sys_gettimeofday.$(OBJEXT) \ +@CONFIG_RISCV_TRUE@ riscv/riscv_libsim_a-sys_isatty.$(OBJEXT) \ +@CONFIG_RISCV_TRUE@ riscv/riscv_libsim_a-sys_kill.$(OBJEXT) \ +@CONFIG_RISCV_TRUE@ riscv/riscv_libsim_a-sys_link.$(OBJEXT) \ +@CONFIG_RISCV_TRUE@ riscv/riscv_libsim_a-sys_lseek.$(OBJEXT) \ +@CONFIG_RISCV_TRUE@ riscv/riscv_libsim_a-sys_lstat.$(OBJEXT) \ +@CONFIG_RISCV_TRUE@ riscv/riscv_libsim_a-sys_open.$(OBJEXT) \ +@CONFIG_RISCV_TRUE@ riscv/riscv_libsim_a-sys_openat.$(OBJEXT) \ +@CONFIG_RISCV_TRUE@ riscv/riscv_libsim_a-sys_read.$(OBJEXT) \ +@CONFIG_RISCV_TRUE@ riscv/riscv_libsim_a-sys_sbrk.$(OBJEXT) \ +@CONFIG_RISCV_TRUE@ riscv/riscv_libsim_a-sys_stat.$(OBJEXT) \ +@CONFIG_RISCV_TRUE@ riscv/riscv_libsim_a-sys_sysconf.$(OBJEXT) \ +@CONFIG_RISCV_TRUE@ riscv/riscv_libsim_a-sys_times.$(OBJEXT) \ +@CONFIG_RISCV_TRUE@ riscv/riscv_libsim_a-sys_unlink.$(OBJEXT) \ +@CONFIG_RISCV_TRUE@ riscv/riscv_libsim_a-sys_utime.$(OBJEXT) \ +@CONFIG_RISCV_TRUE@ riscv/riscv_libsim_a-sys_wait.$(OBJEXT) \ +@CONFIG_RISCV_TRUE@ riscv/riscv_libsim_a-sys_write.$(OBJEXT) +@CONFIG_RISCV_TRUE@am_riscv_libsim_a_OBJECTS = $(am__objects_38) +riscv_libsim_a_OBJECTS = $(am_riscv_libsim_a_OBJECTS) +rl78_libsim_a_AR = $(AR) $(ARFLAGS) +rl78_libsim_a_LIBADD = +@CONFIG_RL78_TRUE@am_rl78_libsim_a_OBJECTS = rl78/sbrk.$(OBJEXT) \ +@CONFIG_RL78_TRUE@ rl78/exit.$(OBJEXT) rl78/open.$(OBJEXT) \ +@CONFIG_RL78_TRUE@ rl78/close.$(OBJEXT) rl78/read.$(OBJEXT) \ +@CONFIG_RL78_TRUE@ rl78/write.$(OBJEXT) rl78/swrite.$(OBJEXT) \ +@CONFIG_RL78_TRUE@ rl78/lseek.$(OBJEXT) rl78/unlink.$(OBJEXT) \ +@CONFIG_RL78_TRUE@ rl78/getpid.$(OBJEXT) rl78/kill.$(OBJEXT) \ +@CONFIG_RL78_TRUE@ rl78/fstat.$(OBJEXT) rl78/argvlen.$(OBJEXT) \ +@CONFIG_RL78_TRUE@ rl78/argv.$(OBJEXT) rl78/chdir.$(OBJEXT) \ +@CONFIG_RL78_TRUE@ rl78/stat.$(OBJEXT) rl78/chmod.$(OBJEXT) \ +@CONFIG_RL78_TRUE@ rl78/utime.$(OBJEXT) rl78/time.$(OBJEXT) \ +@CONFIG_RL78_TRUE@ rl78/gettimeofday.$(OBJEXT) \ +@CONFIG_RL78_TRUE@ rl78/times.$(OBJEXT) rl78/link.$(OBJEXT) \ +@CONFIG_RL78_TRUE@ rl78/isatty.$(OBJEXT) rl78/abort.$(OBJEXT) \ +@CONFIG_RL78_TRUE@ rl78/mcount.$(OBJEXT) +rl78_libsim_a_OBJECTS = $(am_rl78_libsim_a_OBJECTS) +rx_libsim_a_AR = $(AR) $(ARFLAGS) +rx_libsim_a_LIBADD = +@CONFIG_RX_TRUE@am_rx_libsim_a_OBJECTS = rx/sbrk.$(OBJEXT) \ +@CONFIG_RX_TRUE@ rx/heaptop.$(OBJEXT) rx/exit.$(OBJEXT) \ +@CONFIG_RX_TRUE@ rx/open.$(OBJEXT) rx/close.$(OBJEXT) \ +@CONFIG_RX_TRUE@ rx/read.$(OBJEXT) rx/write.$(OBJEXT) \ +@CONFIG_RX_TRUE@ rx/lseek.$(OBJEXT) rx/unlink.$(OBJEXT) \ +@CONFIG_RX_TRUE@ rx/getpid.$(OBJEXT) rx/kill.$(OBJEXT) \ +@CONFIG_RX_TRUE@ rx/fstat.$(OBJEXT) rx/argvlen.$(OBJEXT) \ +@CONFIG_RX_TRUE@ rx/argv.$(OBJEXT) rx/chdir.$(OBJEXT) \ +@CONFIG_RX_TRUE@ rx/stat.$(OBJEXT) rx/chmod.$(OBJEXT) \ +@CONFIG_RX_TRUE@ rx/utime.$(OBJEXT) rx/time.$(OBJEXT) \ +@CONFIG_RX_TRUE@ rx/gettimeofday.$(OBJEXT) rx/times.$(OBJEXT) \ +@CONFIG_RX_TRUE@ rx/link.$(OBJEXT) rx/isatty.$(OBJEXT) \ +@CONFIG_RX_TRUE@ rx/abort.$(OBJEXT) rx/mcount.$(OBJEXT) \ +@CONFIG_RX_TRUE@ rx/sigprocmask.$(OBJEXT) rx/sleep.$(OBJEXT) +rx_libsim_a_OBJECTS = $(am_rx_libsim_a_OBJECTS) +sparc_libcygmon_a_AR = $(AR) $(ARFLAGS) +sparc_libcygmon_a_LIBADD = +@CONFIG_SPARC_TRUE@@SPARC_BUILD_CYGMON_TRUE@am_sparc_libcygmon_a_OBJECTS = sparc/cygmon-salib.$(OBJEXT) +sparc_libcygmon_a_OBJECTS = $(am_sparc_libcygmon_a_OBJECTS) +sparc_liberc32_a_AR = $(AR) $(ARFLAGS) +sparc_liberc32_a_LIBADD = +@CONFIG_SPARC_TRUE@am__objects_39 = close.$(OBJEXT) fstat.$(OBJEXT) \ +@CONFIG_SPARC_TRUE@ getpid.$(OBJEXT) isatty.$(OBJEXT) \ +@CONFIG_SPARC_TRUE@ kill.$(OBJEXT) lseek.$(OBJEXT) \ +@CONFIG_SPARC_TRUE@ open.$(OBJEXT) print.$(OBJEXT) \ +@CONFIG_SPARC_TRUE@ putnum.$(OBJEXT) read.$(OBJEXT) \ +@CONFIG_SPARC_TRUE@ sbrk.$(OBJEXT) stat.$(OBJEXT) \ +@CONFIG_SPARC_TRUE@ unlink.$(OBJEXT) write.$(OBJEXT) +@CONFIG_SPARC_TRUE@am_sparc_liberc32_a_OBJECTS = $(am__objects_39) \ +@CONFIG_SPARC_TRUE@ sparc/erc32-io.$(OBJEXT) \ +@CONFIG_SPARC_TRUE@ sparc/traps.$(OBJEXT) \ +@CONFIG_SPARC_TRUE@ sparc/erc32-stub.$(OBJEXT) debug.$(OBJEXT) \ +@CONFIG_SPARC_TRUE@ sparc/fixctors.$(OBJEXT) +sparc_liberc32_a_OBJECTS = $(am_sparc_liberc32_a_OBJECTS) +sparc_libslite86x_a_AR = $(AR) $(ARFLAGS) +sparc_libslite86x_a_LIBADD = +@CONFIG_SPARC_TRUE@@SPARC_BUILD_SLITE_TRUE@am__objects_40 = \ +@CONFIG_SPARC_TRUE@@SPARC_BUILD_SLITE_TRUE@ $(am__objects_39) \ +@CONFIG_SPARC_TRUE@@SPARC_BUILD_SLITE_TRUE@ sparc/salib.$(OBJEXT) \ +@CONFIG_SPARC_TRUE@@SPARC_BUILD_SLITE_TRUE@ sparc/sparcl-stub.$(OBJEXT) \ +@CONFIG_SPARC_TRUE@@SPARC_BUILD_SLITE_TRUE@ sparc/cache.$(OBJEXT) +@CONFIG_SPARC_TRUE@@SPARC_BUILD_SLITE_TRUE@am_sparc_libslite86x_a_OBJECTS = \ +@CONFIG_SPARC_TRUE@@SPARC_BUILD_SLITE_TRUE@ $(am__objects_40) +sparc_libslite86x_a_OBJECTS = $(am_sparc_libslite86x_a_OBJECTS) +sparc_libslite930_a_AR = $(AR) $(ARFLAGS) +sparc_libslite930_a_LIBADD = +@CONFIG_SPARC_TRUE@@SPARC_BUILD_SLITE_TRUE@am_sparc_libslite930_a_OBJECTS = \ +@CONFIG_SPARC_TRUE@@SPARC_BUILD_SLITE_TRUE@ $(am__objects_39) \ +@CONFIG_SPARC_TRUE@@SPARC_BUILD_SLITE_TRUE@ sparc/salib.$(OBJEXT) \ +@CONFIG_SPARC_TRUE@@SPARC_BUILD_SLITE_TRUE@ sparc/sparcl-stub.$(OBJEXT) \ +@CONFIG_SPARC_TRUE@@SPARC_BUILD_SLITE_TRUE@ sparc/cache.$(OBJEXT) +sparc_libslite930_a_OBJECTS = $(am_sparc_libslite930_a_OBJECTS) +sparc_libslite931_a_AR = $(AR) $(ARFLAGS) +sparc_libslite931_a_LIBADD = +@CONFIG_SPARC_TRUE@@SPARC_BUILD_SLITE_TRUE@am_sparc_libslite931_a_OBJECTS = \ +@CONFIG_SPARC_TRUE@@SPARC_BUILD_SLITE_TRUE@ $(am__objects_40) +sparc_libslite931_a_OBJECTS = $(am_sparc_libslite931_a_OBJECTS) +sparc_libslite934_a_AR = $(AR) $(ARFLAGS) +sparc_libslite934_a_LIBADD = +@CONFIG_SPARC_TRUE@@SPARC_BUILD_SLITE_TRUE@am_sparc_libslite934_a_OBJECTS = \ +@CONFIG_SPARC_TRUE@@SPARC_BUILD_SLITE_TRUE@ $(am__objects_40) +sparc_libslite934_a_OBJECTS = $(am_sparc_libslite934_a_OBJECTS) +sparc_libsplet701_a_AR = $(AR) $(ARFLAGS) +sparc_libsplet701_a_LIBADD = +@CONFIG_SPARC_TRUE@@SPARC_BUILD_SPLET_TRUE@am_sparc_libsplet701_a_OBJECTS = sparc/sysc-701.$(OBJEXT) \ +@CONFIG_SPARC_TRUE@@SPARC_BUILD_SPLET_TRUE@ sparc/salib-701.$(OBJEXT) \ +@CONFIG_SPARC_TRUE@@SPARC_BUILD_SPLET_TRUE@ sparc/sparclet-stub.$(OBJEXT) +sparc_libsplet701_a_OBJECTS = $(am_sparc_libsplet701_a_OBJECTS) +sparc_leon_liblbthread_a_AR = $(AR) $(ARFLAGS) +sparc_leon_liblbthread_a_LIBADD = +@CONFIG_SPARC_LEON_TRUE@am_sparc_leon_liblbthread_a_OBJECTS = \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/kernel.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/kernel_debug.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/kernel_debug_var.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/kernel_context.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/kernel_mutex.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/kernel_thread.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/kernel_sched.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/kernel_queue.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/kernel_mm.$(OBJEXT) +sparc_leon_liblbthread_a_OBJECTS = \ + $(am_sparc_leon_liblbthread_a_OBJECTS) +sparc_leon_libleonbare_a_AR = $(AR) $(ARFLAGS) +sparc_leon_libleonbare_a_LIBADD = +@CONFIG_SPARC_LEON_TRUE@am_sparc_leon_libleonbare_a_OBJECTS = \ +@CONFIG_SPARC_LEON_TRUE@ close.$(OBJEXT) fstat.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ getpid.$(OBJEXT) isatty.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ kill.$(OBJEXT) lseek.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ open.$(OBJEXT) print.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ putnum.$(OBJEXT) read.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sbrk.$(OBJEXT) stat.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ unlink.$(OBJEXT) write.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/io.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/kernel.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/kernel_debug.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/kernel_debug_var.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/kernel_context.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/etrap.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/rtrap.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/etrap_fast.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/rtrap_fast.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/irqinstall.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/regwin.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/regwinflush.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/fpu.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/bdinit.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/contextswitch.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/busscan.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/irqtrap_fast.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/catch_interrupt.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/catch_interrupt_svt.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/catch_interrupt_mvt.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/catch_interrupt_pending.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/gettimeofday.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/times.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/rtc.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/lcpuinit.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/console_init.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/console.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/console_dbg.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/contextswitch.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/contextswitch_asm.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/_exit.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/amba.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/amba_dbg.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/amba_scan.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/amba_driver.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/timer.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/mutex.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/locore.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/locore_clean.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/locore_var.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/locore_var_svt.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/jiffies.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/mmu_asm.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/locore_svtdisp.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/locore_mvt_reset.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/locore_svt_reset.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/stop.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/initcalls.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/regwin_patch.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/cacheA.$(OBJEXT) \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/nocache.$(OBJEXT) +sparc_leon_libleonbare_a_OBJECTS = \ + $(am_sparc_leon_libleonbare_a_OBJECTS) +sparc_leon_libsmall_a_AR = $(AR) $(ARFLAGS) +sparc_leon_libsmall_a_LIBADD = +@CONFIG_SPARC_LEON_TRUE@am_sparc_leon_libsmall_a_OBJECTS = \ +@CONFIG_SPARC_LEON_TRUE@ sparc_leon/locore_atexit.$(OBJEXT) +sparc_leon_libsmall_a_OBJECTS = $(am_sparc_leon_libsmall_a_OBJECTS) +tic6x_libsim_a_AR = $(AR) $(ARFLAGS) +tic6x_libsim_a_LIBADD = +@CONFIG_TIC6X_TRUE@am_tic6x_libsim_a_OBJECTS = tic6x/sbrk.$(OBJEXT) \ +@CONFIG_TIC6X_TRUE@ putnum.$(OBJEXT) tic6x/getpid.$(OBJEXT) \ +@CONFIG_TIC6X_TRUE@ tic6x/kill.$(OBJEXT) \ +@CONFIG_TIC6X_TRUE@ tic6x/syscalls.$(OBJEXT) +tic6x_libsim_a_OBJECTS = $(am_tic6x_libsim_a_OBJECTS) +v850_libsim_a_AR = $(AR) $(ARFLAGS) +v850_libsim_a_LIBADD = +@CONFIG_V850_TRUE@am_v850_libsim_a_OBJECTS = v850/_exit.$(OBJEXT) \ +@CONFIG_V850_TRUE@ v850/access.$(OBJEXT) v850/chmod.$(OBJEXT) \ +@CONFIG_V850_TRUE@ v850/chown.$(OBJEXT) v850/close.$(OBJEXT) \ +@CONFIG_V850_TRUE@ v850/creat.$(OBJEXT) v850/crt1.$(OBJEXT) \ +@CONFIG_V850_TRUE@ v850/execv.$(OBJEXT) v850/execve.$(OBJEXT) \ +@CONFIG_V850_TRUE@ v850/fork.$(OBJEXT) v850/fstat.$(OBJEXT) \ +@CONFIG_V850_TRUE@ v850/getpid.$(OBJEXT) v850/gettime.$(OBJEXT) \ +@CONFIG_V850_TRUE@ v850/isatty.$(OBJEXT) v850/kill.$(OBJEXT) \ +@CONFIG_V850_TRUE@ v850/link.$(OBJEXT) v850/lseek.$(OBJEXT) \ +@CONFIG_V850_TRUE@ v850/open.$(OBJEXT) v850/pipe.$(OBJEXT) \ +@CONFIG_V850_TRUE@ v850/read.$(OBJEXT) v850/sbrk.$(OBJEXT) \ +@CONFIG_V850_TRUE@ v850/stat.$(OBJEXT) v850/time.$(OBJEXT) \ +@CONFIG_V850_TRUE@ v850/times.$(OBJEXT) v850/trap.$(OBJEXT) \ +@CONFIG_V850_TRUE@ v850/unlink.$(OBJEXT) v850/utime.$(OBJEXT) \ +@CONFIG_V850_TRUE@ v850/wait.$(OBJEXT) v850/write.$(OBJEXT) +v850_libsim_a_OBJECTS = $(am_v850_libsim_a_OBJECTS) +visium_libdebug_a_AR = $(AR) $(ARFLAGS) +visium_libdebug_a_LIBADD = +@CONFIG_VISIUM_TRUE@am__objects_41 = getpid.$(OBJEXT) kill.$(OBJEXT) \ +@CONFIG_VISIUM_TRUE@ visium/io-gdb.$(OBJEXT) \ +@CONFIG_VISIUM_TRUE@ visium/io-stubs.$(OBJEXT) \ +@CONFIG_VISIUM_TRUE@ visium/sbrk.$(OBJEXT) +@CONFIG_VISIUM_TRUE@am_visium_libdebug_a_OBJECTS = $(am__objects_41) \ +@CONFIG_VISIUM_TRUE@ visium/syscalls.$(OBJEXT) +visium_libdebug_a_OBJECTS = $(am_visium_libdebug_a_OBJECTS) +visium_libserial_a_AR = $(AR) $(ARFLAGS) +visium_libserial_a_LIBADD = +@CONFIG_VISIUM_TRUE@am_visium_libserial_a_OBJECTS = close.$(OBJEXT) \ +@CONFIG_VISIUM_TRUE@ fstat.$(OBJEXT) getpid.$(OBJEXT) \ +@CONFIG_VISIUM_TRUE@ isatty.$(OBJEXT) kill.$(OBJEXT) \ +@CONFIG_VISIUM_TRUE@ lseek.$(OBJEXT) open.$(OBJEXT) \ +@CONFIG_VISIUM_TRUE@ print.$(OBJEXT) putnum.$(OBJEXT) \ +@CONFIG_VISIUM_TRUE@ read.$(OBJEXT) stat.$(OBJEXT) \ +@CONFIG_VISIUM_TRUE@ unlink.$(OBJEXT) write.$(OBJEXT) \ +@CONFIG_VISIUM_TRUE@ visium/_exit.$(OBJEXT) \ +@CONFIG_VISIUM_TRUE@ visium/gettod.$(OBJEXT) \ +@CONFIG_VISIUM_TRUE@ visium/sbrk.$(OBJEXT) \ +@CONFIG_VISIUM_TRUE@ visium/serial-inbyte.$(OBJEXT) \ +@CONFIG_VISIUM_TRUE@ visium/serial-outbyte.$(OBJEXT) +visium_libserial_a_OBJECTS = $(am_visium_libserial_a_OBJECTS) +visium_libsim_a_AR = $(AR) $(ARFLAGS) +visium_libsim_a_LIBADD = +@CONFIG_VISIUM_TRUE@am_visium_libsim_a_OBJECTS = $(am__objects_41) \ +@CONFIG_VISIUM_TRUE@ visium/sim-syscalls.$(OBJEXT) +visium_libsim_a_OBJECTS = $(am_visium_libsim_a_OBJECTS) +xstormy16_libeva_app_a_AR = $(AR) $(ARFLAGS) +xstormy16_libeva_app_a_LIBADD = +@CONFIG_XSTORMY16_TRUE@am_xstormy16_libeva_app_a_OBJECTS = \ +@CONFIG_XSTORMY16_TRUE@ xstormy16/close.$(OBJEXT) \ +@CONFIG_XSTORMY16_TRUE@ xstormy16/fstat.$(OBJEXT) \ +@CONFIG_XSTORMY16_TRUE@ xstormy16/getpid.$(OBJEXT) \ +@CONFIG_XSTORMY16_TRUE@ xstormy16/kill.$(OBJEXT) \ +@CONFIG_XSTORMY16_TRUE@ xstormy16/lseek.$(OBJEXT) \ +@CONFIG_XSTORMY16_TRUE@ xstormy16/open.$(OBJEXT) \ +@CONFIG_XSTORMY16_TRUE@ xstormy16/stat.$(OBJEXT) \ +@CONFIG_XSTORMY16_TRUE@ xstormy16/unlink.$(OBJEXT) \ +@CONFIG_XSTORMY16_TRUE@ xstormy16/eva_app.$(OBJEXT) \ +@CONFIG_XSTORMY16_TRUE@ xstormy16/isatty.$(OBJEXT) +xstormy16_libeva_app_a_OBJECTS = $(am_xstormy16_libeva_app_a_OBJECTS) +xstormy16_libsim_a_AR = $(AR) $(ARFLAGS) +xstormy16_libsim_a_LIBADD = +@CONFIG_XSTORMY16_TRUE@am_xstormy16_libsim_a_OBJECTS = \ +@CONFIG_XSTORMY16_TRUE@ xstormy16/syscalls.$(OBJEXT) \ +@CONFIG_XSTORMY16_TRUE@ xstormy16/sim_malloc_start.$(OBJEXT) \ +@CONFIG_XSTORMY16_TRUE@ xstormy16/isatty.$(OBJEXT) +xstormy16_libsim_a_OBJECTS = $(am_xstormy16_libsim_a_OBJECTS) +xtensa_libgloss_a_AR = $(AR) $(ARFLAGS) +xtensa_libgloss_a_LIBADD = +@CONFIG_XTENSA_TRUE@@HAVE_XTENSA_BOARD_ESP32_TRUE@@HAVE_XTENSA_BOARD_ESP_TRUE@am__objects_42 = xtensa/boards/esp32/xtensa_libgloss_a-board.$(OBJEXT) +@CONFIG_XTENSA_TRUE@@HAVE_XTENSA_BOARD_ESP32S3_TRUE@@HAVE_XTENSA_BOARD_ESP_TRUE@am__objects_43 = xtensa/boards/esp32s3/xtensa_libgloss_a-board.$(OBJEXT) +@CONFIG_XTENSA_TRUE@@HAVE_XTENSA_BOARD_ESP_TRUE@am_xtensa_libgloss_a_OBJECTS = xtensa/xtensa_libgloss_a-sleep.$(OBJEXT) \ +@CONFIG_XTENSA_TRUE@@HAVE_XTENSA_BOARD_ESP_TRUE@ xtensa/xtensa_libgloss_a-syscalls.$(OBJEXT) \ +@CONFIG_XTENSA_TRUE@@HAVE_XTENSA_BOARD_ESP_TRUE@ xtensa/xtensa_libgloss_a-window-vectors.$(OBJEXT) \ +@CONFIG_XTENSA_TRUE@@HAVE_XTENSA_BOARD_ESP_TRUE@ $(am__objects_42) \ +@CONFIG_XTENSA_TRUE@@HAVE_XTENSA_BOARD_ESP_TRUE@ $(am__objects_43) +xtensa_libgloss_a_OBJECTS = $(am_xtensa_libgloss_a_OBJECTS) +xtensa_libsys_openocd_a_AR = $(AR) $(ARFLAGS) +xtensa_libsys_openocd_a_LIBADD = +@CONFIG_XTENSA_TRUE@@HAVE_XTENSA_BOARD_ESP_TRUE@am_xtensa_libsys_openocd_a_OBJECTS = xtensa/xtensa_libsys_openocd_a-syscalls.$(OBJEXT) +xtensa_libsys_openocd_a_OBJECTS = \ + $(am_xtensa_libsys_openocd_a_OBJECTS) +xtensa_libsys_qemu_a_AR = $(AR) $(ARFLAGS) +xtensa_libsys_qemu_a_LIBADD = +@CONFIG_XTENSA_TRUE@@HAVE_XTENSA_BOARD_ESP_TRUE@am_xtensa_libsys_qemu_a_OBJECTS = xtensa/xtensa_libsys_qemu_a-sim-vectors.$(OBJEXT) \ +@CONFIG_XTENSA_TRUE@@HAVE_XTENSA_BOARD_ESP_TRUE@ xtensa/xtensa_libsys_qemu_a-sim-call.$(OBJEXT) \ +@CONFIG_XTENSA_TRUE@@HAVE_XTENSA_BOARD_ESP_TRUE@ xtensa/xtensa_libsys_qemu_a-syscalls.$(OBJEXT) +xtensa_libsys_qemu_a_OBJECTS = $(am_xtensa_libsys_qemu_a_OBJECTS) @CONFIG_WINCE_TRUE@am__EXEEXT_1 = wince/stub.exe$(EXEEXT) @CONFIG_BFIN_TRUE@am__EXEEXT_2 = bfin/sim-test$(EXEEXT) @CONFIG_IQ2000_TRUE@am__EXEEXT_3 = iq2000/test$(EXEEXT) -PROGRAMS = $(bin_PROGRAMS) +@CONFIG_MN10200_TRUE@am__EXEEXT_4 = mn10200/test$(EXEEXT) +@CONFIG_MN10300_TRUE@am__EXEEXT_5 = mn10300/test$(EXEEXT) +@CONFIG_SPARC_TRUE@am__EXEEXT_6 = sparc/erc32-test$(EXEEXT) \ +@CONFIG_SPARC_TRUE@ sparc/ex930-test$(EXEEXT) \ +@CONFIG_SPARC_TRUE@ sparc/ex931-test$(EXEEXT) \ +@CONFIG_SPARC_TRUE@ sparc/ex934-test$(EXEEXT) +@CONFIG_XSTORMY16_TRUE@am__EXEEXT_7 = xstormy16/eva_stub.elf$(EXEEXT) +PROGRAMS = $(bin_PROGRAMS) $(multilibtool_PROGRAMS) bfin_sim_test_SOURCES = bfin/sim-test.c bfin_sim_test_OBJECTS = bfin/sim-test.$(OBJEXT) bfin_sim_test_LDADD = $(LDADD) iq2000_test_SOURCES = iq2000/test.c iq2000_test_OBJECTS = iq2000/test.$(OBJEXT) iq2000_test_LDADD = $(LDADD) +mn10200_test_SOURCES = mn10200/test.c +mn10200_test_OBJECTS = mn10200/test.$(OBJEXT) +mn10200_test_LDADD = $(LDADD) +mn10200_test_LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(mn10200_test_LDFLAGS) $(LDFLAGS) -o $@ +mn10300_test_SOURCES = mn10300/test.c +mn10300_test_OBJECTS = mn10300/test.$(OBJEXT) +mn10300_test_LDADD = $(LDADD) +mn10300_test_LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(mn10300_test_LDFLAGS) $(LDFLAGS) -o $@ +@CONFIG_SPARC_TRUE@am_sparc_erc32_test_OBJECTS = sparc/test.$(OBJEXT) +sparc_erc32_test_OBJECTS = $(am_sparc_erc32_test_OBJECTS) +sparc_erc32_test_LDADD = $(LDADD) +@CONFIG_SPARC_TRUE@am_sparc_ex930_test_OBJECTS = sparc/test.$(OBJEXT) +sparc_ex930_test_OBJECTS = $(am_sparc_ex930_test_OBJECTS) +sparc_ex930_test_LDADD = $(LDADD) +@CONFIG_SPARC_TRUE@am_sparc_ex931_test_OBJECTS = sparc/test.$(OBJEXT) +sparc_ex931_test_OBJECTS = $(am_sparc_ex931_test_OBJECTS) +sparc_ex931_test_LDADD = $(LDADD) +@CONFIG_SPARC_TRUE@am_sparc_ex934_test_OBJECTS = sparc/test.$(OBJEXT) +sparc_ex934_test_OBJECTS = $(am_sparc_ex934_test_OBJECTS) +sparc_ex934_test_LDADD = $(LDADD) @CONFIG_WINCE_TRUE@am_wince_stub_exe_OBJECTS = \ @CONFIG_WINCE_TRUE@ wince_stub_exe-wince-stub.$(OBJEXT) wince_stub_exe_OBJECTS = $(am_wince_stub_exe_OBJECTS) wince_stub_exe_DEPENDENCIES = +@CONFIG_XSTORMY16_TRUE@am_xstormy16_eva_stub_elf_OBJECTS = \ +@CONFIG_XSTORMY16_TRUE@ xstormy16/xstormy16_stub.$(OBJEXT) \ +@CONFIG_XSTORMY16_TRUE@ xstormy16/crt0_stub.$(OBJEXT) +xstormy16_eva_stub_elf_OBJECTS = $(am_xstormy16_eva_stub_elf_OBJECTS) +xstormy16_eva_stub_elf_LDADD = $(LDADD) +xstormy16_eva_stub_elf_LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ + $(xstormy16_eva_stub_elf_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false @@ -392,16 +1612,16 @@ DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/../depcomp am__depfiles_maybe = depfiles am__mv = mv -f +AM_V_lt = $(am__v_lt_@AM_V@) +am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) +am__v_lt_0 = --silent +am__v_lt_1 = CPPASCOMPILE = $(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) AM_V_CPPAS = $(am__v_CPPAS_@AM_V@) am__v_CPPAS_ = $(am__v_CPPAS_@AM_DEFAULT_V@) am__v_CPPAS_0 = @echo " CPPAS " $@; am__v_CPPAS_1 = -AM_V_lt = $(am__v_lt_@AM_V@) -am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) -am__v_lt_0 = --silent -am__v_lt_1 = COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) @@ -414,11 +1634,59 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = -SOURCES = $(bfin_libbfinbsp_a_SOURCES) $(bfin_libsim_a_SOURCES) \ +CCASCOMPILE = $(CCAS) $(AM_CCASFLAGS) $(CCASFLAGS) +AM_V_CCAS = $(am__v_CCAS_@AM_V@) +am__v_CCAS_ = $(am__v_CCAS_@AM_DEFAULT_V@) +am__v_CCAS_0 = @echo " CCAS " $@; +am__v_CCAS_1 = +SOURCES = $(aarch64_librdimon_a_SOURCES) $(arc_libnsim_a_SOURCES) \ + $(arm_libgloss_linux_a_SOURCES) $(arm_librdimon_v2m_a_SOURCES) \ + $(arm_librdimon_a_SOURCES) $(arm_librdpmon_a_SOURCES) \ + $(bfin_libbfinbsp_a_SOURCES) $(bfin_libsim_a_SOURCES) \ + $(cr16_libh_a_SOURCES) $(cr16_libsim_a_SOURCES) \ + $(csky_libsemi_a_SOURCES) $(d30v_libsim_a_SOURCES) \ + $(epiphany_libepiphany_a_SOURCES) $(fr30_libsim_a_SOURCES) \ + $(frv_libsim_a_SOURCES) $(ft32_libsim_a_SOURCES) \ + $(i386_libcygmon_a_SOURCES) $(i960_libmon960_a_SOURCES) \ $(iq2000_libeval_a_SOURCES) $(libnosys_libnosys_a_SOURCES) \ $(libobjs_a_SOURCES) $(lm32_libgloss_a_SOURCES) \ + $(m32r_libgloss_a_SOURCES) $(m32r_libmon_a_SOURCES) \ + $(mcore_libcmb_a_SOURCES) $(mcore_libsim_a_SOURCES) \ + $(microblaze_libgloss_linux_a_SOURCES) \ + $(microblaze_libgloss_a_SOURCES) $(mn10200_libeval_a_SOURCES) \ + $(mn10300_libcygmon_a_SOURCES) $(mn10300_libeval_a_SOURCES) \ + $(moxie_libqemu_a_SOURCES) $(moxie_libsim_a_SOURCES) \ + $(msp430_libcrt_a_SOURCES) $(msp430_libnosys_a_SOURCES) \ + $(msp430_libsim_a_SOURCES) $(nds32_libgloss_a_SOURCES) \ + $(nios2_libnios2_a_SOURCES) $(or1k_libboard_atlys_a_SOURCES) \ + $(or1k_libboard_de0_nano_a_SOURCES) \ + $(or1k_libboard_ml501_a_SOURCES) \ + $(or1k_libboard_optimsoc_a_SOURCES) \ + $(or1k_libboard_or1ksim_uart_a_SOURCES) \ + $(or1k_libboard_or1ksim_a_SOURCES) \ + $(or1k_libboard_ordb1a3pe1500_a_SOURCES) \ + $(or1k_libboard_ordb2a_a_SOURCES) \ + $(or1k_libboard_orpsocrefdesign_a_SOURCES) \ + $(or1k_libor1k_a_SOURCES) $(pru_libgloss_a_SOURCES) \ $(riscv_libgloss_a_SOURCES) $(riscv_libsemihost_a_SOURCES) \ - bfin/sim-test.c iq2000/test.c $(wince_stub_exe_SOURCES) + $(riscv_libsim_a_SOURCES) $(rl78_libsim_a_SOURCES) \ + $(rx_libsim_a_SOURCES) $(sparc_libcygmon_a_SOURCES) \ + $(sparc_liberc32_a_SOURCES) $(sparc_libslite86x_a_SOURCES) \ + $(sparc_libslite930_a_SOURCES) $(sparc_libslite931_a_SOURCES) \ + $(sparc_libslite934_a_SOURCES) $(sparc_libsplet701_a_SOURCES) \ + $(sparc_leon_liblbthread_a_SOURCES) \ + $(sparc_leon_libleonbare_a_SOURCES) \ + $(sparc_leon_libsmall_a_SOURCES) $(tic6x_libsim_a_SOURCES) \ + $(v850_libsim_a_SOURCES) $(visium_libdebug_a_SOURCES) \ + $(visium_libserial_a_SOURCES) $(visium_libsim_a_SOURCES) \ + $(xstormy16_libeva_app_a_SOURCES) \ + $(xstormy16_libsim_a_SOURCES) $(xtensa_libgloss_a_SOURCES) \ + $(xtensa_libsys_openocd_a_SOURCES) \ + $(xtensa_libsys_qemu_a_SOURCES) bfin/sim-test.c iq2000/test.c \ + mn10200/test.c mn10300/test.c $(sparc_erc32_test_SOURCES) \ + $(sparc_ex930_test_SOURCES) $(sparc_ex931_test_SOURCES) \ + $(sparc_ex934_test_SOURCES) $(wince_stub_exe_SOURCES) \ + $(xstormy16_eva_stub_elf_SOURCES) AM_V_DVIPS = $(am__v_DVIPS_@AM_V@) am__v_DVIPS_ = $(am__v_DVIPS_@AM_DEFAULT_V@) am__v_DVIPS_0 = @echo " DVIPS " $@; @@ -472,8 +1740,10 @@ am__can_run_installinfo = \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac -DATA = $(includemachinetool_DATA) $(includesystool_DATA) \ - $(includetool_DATA) $(multilibtool_DATA) +DATA = $(aarch64_cpu_initcpuinit_DATA) $(arm_cpu_initcpuinit_DATA) \ + $(includemachinetool_DATA) $(includesystool_DATA) \ + $(includetool_DATA) $(includetoolasmleon_DATA) \ + $(multilibtool_DATA) $(pru_devicespecs_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ @@ -504,11 +1774,13 @@ ETAGS = etags CTAGS = ctags CSCOPE = cscope DIST_SUBDIRS = $(SUBDIRS) -VPATH = @srcdir@ $(am__append_20) +VPATH = @srcdir@ $(am__append_129) +AARCH64_OBJTYPE = @AARCH64_OBJTYPE@ ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ +ARM_OBJTYPE = @ARM_OBJTYPE@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ @@ -542,17 +1814,14 @@ LTLIBOBJS = @LTLIBOBJS@ M68K_TARGET = @M68K_TARGET@ MAINT = @MAINT@ MAKEINFO = @MAKEINFO@ -MCORE_BSP_PREFIX = @MCORE_BSP_PREFIX@ MIPS_BSP_LIST = @MIPS_BSP_LIST@ MIPS_CRT0 = @MIPS_CRT0@ MIPS_PART_SPECIFIC_DEFINES = @MIPS_PART_SPECIFIC_DEFINES@ MIPS_PART_SPECIFIC_OBJ = @MIPS_PART_SPECIFIC_OBJ@ MIPS_SCRIPT_LIST = @MIPS_SCRIPT_LIST@ MKDIR_P = @MKDIR_P@ -MN10300_BSP_LIST = @MN10300_BSP_LIST@ -MN10300_SCRIPT_LIST = @MN10300_SCRIPT_LIST@ -MOXIE_BUILD_CRT0_FALSE = @MOXIE_BUILD_CRT0_FALSE@ -MOXIE_BUILD_CRT0_TRUE = @MOXIE_BUILD_CRT0_TRUE@ +OBJCOPY = @OBJCOPY@ +OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ @@ -565,8 +1834,11 @@ PATH_SEPARATOR = @PATH_SEPARATOR@ RANLIB = @RANLIB@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ +SPARC_CPU = @SPARC_CPU@ +SPARC_CYGMONLDSCRIPTTEMPL = @SPARC_CYGMONLDSCRIPTTEMPL@ STRIP = @STRIP@ VERSION = @VERSION@ +XTENSA_BOARD_ESP = @XTENSA_BOARD_ESP@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ @@ -628,23 +1900,71 @@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ACLOCAL_AMFLAGS = -I . -I .. -I ../config info_TEXINFOS = $(am__append_1) +CLEANFILES = $(am__append_4) $(am__append_10) $(am__append_135) PHONY = SUBDIRS = @subdirs@ . +srcroot = $(top_srcdir)/.. tooldir = $(exec_prefix)/$(target_alias) multilibtooldir = $(tooldir)/lib$(MULTISUBDIR) -multilibtool_DATA = $(am__append_4) $(am__append_6) $(am__append_9) \ - $(am__append_13) $(am__append_15) $(am__append_18) -multilibtool_LIBRARIES = $(am__append_2) $(am__append_10) \ - $(am__append_14) $(am__append_16) $(am__append_19) +multilibtool_DATA = $(am__append_3) $(am__append_6) $(am__append_7) \ + $(am__append_8) $(am__append_13) $(am__append_15) \ + $(am__append_18) $(am__append_21) $(am__append_25) \ + $(am__append_26) $(am__append_29) $(am__append_32) \ + $(am__append_35) $(am__append_36) $(am__append_39) \ + $(am__append_42) $(am__append_45) $(am__append_49) \ + $(am__append_51) $(am__append_54) $(am__append_55) \ + $(am__append_58) $(am__append_59) $(am__append_60) \ + $(am__append_63) $(am__append_64) $(am__append_67) \ + $(am__append_71) $(am__append_72) $(am__append_73) \ + $(am__append_78) $(am__append_79) $(am__append_82) \ + $(am__append_85) $(am__append_88) $(am__append_90) \ + $(am__append_94) $(am__append_97) $(am__append_99) \ + $(am__append_102) $(am__append_105) $(am__append_108) \ + $(am__append_111) $(am__append_113) $(am__append_118) \ + $(am__append_120) $(am__append_123) $(am__append_126) \ + $(am__append_131) $(am__append_136) $(am__append_139) \ + $(am__append_141) $(am__append_146) +multilibtool_LIBRARIES = $(am__append_2) $(am__append_5) \ + $(am__append_9) $(am__append_11) $(am__append_20) \ + $(am__append_23) $(am__append_24) $(am__append_28) \ + $(am__append_31) $(am__append_34) $(am__append_38) \ + $(am__append_41) $(am__append_44) $(am__append_46) \ + $(am__append_50) $(am__append_52) $(am__append_57) \ + $(am__append_62) $(am__append_66) $(am__append_69) \ + $(am__append_75) $(am__append_76) $(am__append_81) \ + $(am__append_84) $(am__append_87) $(am__append_89) \ + $(am__append_93) $(am__append_96) $(am__append_98) \ + $(am__append_101) $(am__append_104) $(am__append_107) \ + $(am__append_110) $(am__append_112) $(am__append_115) \ + $(am__append_117) $(am__append_122) $(am__append_125) \ + $(am__append_128) $(am__append_133) $(am__append_138) \ + $(am__append_140) includetooldir = $(tooldir)/include -includetool_DATA = $(am__append_7) +includetool_DATA = $(am__append_16) $(am__append_92) includesystooldir = $(tooldir)/include/sys -includesystool_DATA = $(am__append_8) +includesystool_DATA = $(am__append_17) + +# These are useful for standalone object files like crt0.o. +AM_CFLAGS = $(AM_CFLAGS_$(subst /,_,$(@D))) $(AM_CFLAGS_$(subst /,_,$(@D)_$( aarch64/$(am__dirstamp) +aarch64/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) aarch64/$(DEPDIR) + @: > aarch64/$(DEPDIR)/$(am__dirstamp) +aarch64/aarch64_librdimon_a-_exit.$(OBJEXT): aarch64/$(am__dirstamp) \ + aarch64/$(DEPDIR)/$(am__dirstamp) +aarch64/aarch64_librdimon_a-_kill.$(OBJEXT): aarch64/$(am__dirstamp) \ + aarch64/$(DEPDIR)/$(am__dirstamp) +aarch64/aarch64_librdimon_a-ftruncate.$(OBJEXT): \ + aarch64/$(am__dirstamp) aarch64/$(DEPDIR)/$(am__dirstamp) +aarch64/aarch64_librdimon_a-libcfunc.$(OBJEXT): \ + aarch64/$(am__dirstamp) aarch64/$(DEPDIR)/$(am__dirstamp) +aarch64/aarch64_librdimon_a-syscalls.$(OBJEXT): \ + aarch64/$(am__dirstamp) aarch64/$(DEPDIR)/$(am__dirstamp) +aarch64/aarch64_librdimon_a-truncate.$(OBJEXT): \ + aarch64/$(am__dirstamp) aarch64/$(DEPDIR)/$(am__dirstamp) + +aarch64/librdimon.a: $(aarch64_librdimon_a_OBJECTS) $(aarch64_librdimon_a_DEPENDENCIES) $(EXTRA_aarch64_librdimon_a_DEPENDENCIES) aarch64/$(am__dirstamp) + $(AM_V_at)-rm -f aarch64/librdimon.a + $(AM_V_AR)$(aarch64_librdimon_a_AR) aarch64/librdimon.a $(aarch64_librdimon_a_OBJECTS) $(aarch64_librdimon_a_LIBADD) + $(AM_V_at)$(RANLIB) aarch64/librdimon.a +arc/$(am__dirstamp): + @$(MKDIR_P) arc + @: > arc/$(am__dirstamp) +arc/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) arc/$(DEPDIR) + @: > arc/$(DEPDIR)/$(am__dirstamp) +arc/libcfunc.$(OBJEXT): arc/$(am__dirstamp) \ + arc/$(DEPDIR)/$(am__dirstamp) +arc/mcount.$(OBJEXT): arc/$(am__dirstamp) \ + arc/$(DEPDIR)/$(am__dirstamp) +arc/nsim-syscalls.$(OBJEXT): arc/$(am__dirstamp) \ + arc/$(DEPDIR)/$(am__dirstamp) +arc/sbrk.$(OBJEXT): arc/$(am__dirstamp) arc/$(DEPDIR)/$(am__dirstamp) + +arc/libnsim.a: $(arc_libnsim_a_OBJECTS) $(arc_libnsim_a_DEPENDENCIES) $(EXTRA_arc_libnsim_a_DEPENDENCIES) arc/$(am__dirstamp) + $(AM_V_at)-rm -f arc/libnsim.a + $(AM_V_AR)$(arc_libnsim_a_AR) arc/libnsim.a $(arc_libnsim_a_OBJECTS) $(arc_libnsim_a_LIBADD) + $(AM_V_at)$(RANLIB) arc/libnsim.a +arm/$(am__dirstamp): + @$(MKDIR_P) arm + @: > arm/$(am__dirstamp) +arm/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) arm/$(DEPDIR) + @: > arm/$(DEPDIR)/$(am__dirstamp) +arm/linux-syscalls0.$(OBJEXT): arm/$(am__dirstamp) \ + arm/$(DEPDIR)/$(am__dirstamp) +arm/linux-syscalls1.$(OBJEXT): arm/$(am__dirstamp) \ + arm/$(DEPDIR)/$(am__dirstamp) + +arm/libgloss-linux.a: $(arm_libgloss_linux_a_OBJECTS) $(arm_libgloss_linux_a_DEPENDENCIES) $(EXTRA_arm_libgloss_linux_a_DEPENDENCIES) arm/$(am__dirstamp) + $(AM_V_at)-rm -f arm/libgloss-linux.a + $(AM_V_AR)$(arm_libgloss_linux_a_AR) arm/libgloss-linux.a $(arm_libgloss_linux_a_OBJECTS) $(arm_libgloss_linux_a_LIBADD) + $(AM_V_at)$(RANLIB) arm/libgloss-linux.a +arm/arm_librdimon_v2m_a-_exit.$(OBJEXT): arm/$(am__dirstamp) \ + arm/$(DEPDIR)/$(am__dirstamp) +arm/arm_librdimon_v2m_a-_kill.$(OBJEXT): arm/$(am__dirstamp) \ + arm/$(DEPDIR)/$(am__dirstamp) +arm/arm_librdimon_v2m_a-ftruncate.$(OBJEXT): arm/$(am__dirstamp) \ + arm/$(DEPDIR)/$(am__dirstamp) +arm/arm_librdimon_v2m_a-libcfunc.$(OBJEXT): arm/$(am__dirstamp) \ + arm/$(DEPDIR)/$(am__dirstamp) +arm/arm_librdimon_v2m_a-syscalls.$(OBJEXT): arm/$(am__dirstamp) \ + arm/$(DEPDIR)/$(am__dirstamp) +arm/arm_librdimon_v2m_a-trap.$(OBJEXT): arm/$(am__dirstamp) \ + arm/$(DEPDIR)/$(am__dirstamp) +arm/arm_librdimon_v2m_a-truncate.$(OBJEXT): arm/$(am__dirstamp) \ + arm/$(DEPDIR)/$(am__dirstamp) + +arm/librdimon-v2m.a: $(arm_librdimon_v2m_a_OBJECTS) $(arm_librdimon_v2m_a_DEPENDENCIES) $(EXTRA_arm_librdimon_v2m_a_DEPENDENCIES) arm/$(am__dirstamp) + $(AM_V_at)-rm -f arm/librdimon-v2m.a + $(AM_V_AR)$(arm_librdimon_v2m_a_AR) arm/librdimon-v2m.a $(arm_librdimon_v2m_a_OBJECTS) $(arm_librdimon_v2m_a_LIBADD) + $(AM_V_at)$(RANLIB) arm/librdimon-v2m.a +arm/arm_librdimon_a-_exit.$(OBJEXT): arm/$(am__dirstamp) \ + arm/$(DEPDIR)/$(am__dirstamp) +arm/arm_librdimon_a-_kill.$(OBJEXT): arm/$(am__dirstamp) \ + arm/$(DEPDIR)/$(am__dirstamp) +arm/arm_librdimon_a-ftruncate.$(OBJEXT): arm/$(am__dirstamp) \ + arm/$(DEPDIR)/$(am__dirstamp) +arm/arm_librdimon_a-libcfunc.$(OBJEXT): arm/$(am__dirstamp) \ + arm/$(DEPDIR)/$(am__dirstamp) +arm/arm_librdimon_a-syscalls.$(OBJEXT): arm/$(am__dirstamp) \ + arm/$(DEPDIR)/$(am__dirstamp) +arm/arm_librdimon_a-trap.$(OBJEXT): arm/$(am__dirstamp) \ + arm/$(DEPDIR)/$(am__dirstamp) +arm/arm_librdimon_a-truncate.$(OBJEXT): arm/$(am__dirstamp) \ + arm/$(DEPDIR)/$(am__dirstamp) + +arm/librdimon.a: $(arm_librdimon_a_OBJECTS) $(arm_librdimon_a_DEPENDENCIES) $(EXTRA_arm_librdimon_a_DEPENDENCIES) arm/$(am__dirstamp) + $(AM_V_at)-rm -f arm/librdimon.a + $(AM_V_AR)$(arm_librdimon_a_AR) arm/librdimon.a $(arm_librdimon_a_OBJECTS) $(arm_librdimon_a_LIBADD) + $(AM_V_at)$(RANLIB) arm/librdimon.a +arm/_exit.$(OBJEXT): arm/$(am__dirstamp) arm/$(DEPDIR)/$(am__dirstamp) +arm/_kill.$(OBJEXT): arm/$(am__dirstamp) arm/$(DEPDIR)/$(am__dirstamp) +arm/ftruncate.$(OBJEXT): arm/$(am__dirstamp) \ + arm/$(DEPDIR)/$(am__dirstamp) +arm/libcfunc.$(OBJEXT): arm/$(am__dirstamp) \ + arm/$(DEPDIR)/$(am__dirstamp) +arm/syscalls.$(OBJEXT): arm/$(am__dirstamp) \ + arm/$(DEPDIR)/$(am__dirstamp) +arm/trap.$(OBJEXT): arm/$(am__dirstamp) arm/$(DEPDIR)/$(am__dirstamp) +arm/truncate.$(OBJEXT): arm/$(am__dirstamp) \ + arm/$(DEPDIR)/$(am__dirstamp) + +arm/librdpmon.a: $(arm_librdpmon_a_OBJECTS) $(arm_librdpmon_a_DEPENDENCIES) $(EXTRA_arm_librdpmon_a_DEPENDENCIES) arm/$(am__dirstamp) + $(AM_V_at)-rm -f arm/librdpmon.a + $(AM_V_AR)$(arm_librdpmon_a_AR) arm/librdpmon.a $(arm_librdpmon_a_OBJECTS) $(arm_librdpmon_a_LIBADD) + $(AM_V_at)$(RANLIB) arm/librdpmon.a bfin/$(am__dirstamp): @$(MKDIR_P) bfin @: > bfin/$(am__dirstamp) @@ -992,6 +3182,318 @@ bfin/libsim.a: $(bfin_libsim_a_OBJECTS) $(bfin_libsim_a_DEPENDENCIES) $(EXTRA_bf $(AM_V_at)-rm -f bfin/libsim.a $(AM_V_AR)$(bfin_libsim_a_AR) bfin/libsim.a $(bfin_libsim_a_OBJECTS) $(bfin_libsim_a_LIBADD) $(AM_V_at)$(RANLIB) bfin/libsim.a +cr16/$(am__dirstamp): + @$(MKDIR_P) cr16 + @: > cr16/$(am__dirstamp) +cr16/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) cr16/$(DEPDIR) + @: > cr16/$(DEPDIR)/$(am__dirstamp) +cr16/intable.$(OBJEXT): cr16/$(am__dirstamp) \ + cr16/$(DEPDIR)/$(am__dirstamp) +cr16/dvz_hndl.$(OBJEXT): cr16/$(am__dirstamp) \ + cr16/$(DEPDIR)/$(am__dirstamp) +cr16/flg_hndl.$(OBJEXT): cr16/$(am__dirstamp) \ + cr16/$(DEPDIR)/$(am__dirstamp) +cr16/iad_hndl.$(OBJEXT): cr16/$(am__dirstamp) \ + cr16/$(DEPDIR)/$(am__dirstamp) +cr16/svc_hndl.$(OBJEXT): cr16/$(am__dirstamp) \ + cr16/$(DEPDIR)/$(am__dirstamp) +cr16/und_hndl.$(OBJEXT): cr16/$(am__dirstamp) \ + cr16/$(DEPDIR)/$(am__dirstamp) + +cr16/libh.a: $(cr16_libh_a_OBJECTS) $(cr16_libh_a_DEPENDENCIES) $(EXTRA_cr16_libh_a_DEPENDENCIES) cr16/$(am__dirstamp) + $(AM_V_at)-rm -f cr16/libh.a + $(AM_V_AR)$(cr16_libh_a_AR) cr16/libh.a $(cr16_libh_a_OBJECTS) $(cr16_libh_a_LIBADD) + $(AM_V_at)$(RANLIB) cr16/libh.a +cr16/_exit.$(OBJEXT): cr16/$(am__dirstamp) \ + cr16/$(DEPDIR)/$(am__dirstamp) +cr16/close.$(OBJEXT): cr16/$(am__dirstamp) \ + cr16/$(DEPDIR)/$(am__dirstamp) +cr16/_getenv.$(OBJEXT): cr16/$(am__dirstamp) \ + cr16/$(DEPDIR)/$(am__dirstamp) +cr16/lseek.$(OBJEXT): cr16/$(am__dirstamp) \ + cr16/$(DEPDIR)/$(am__dirstamp) +cr16/open.$(OBJEXT): cr16/$(am__dirstamp) \ + cr16/$(DEPDIR)/$(am__dirstamp) +cr16/read.$(OBJEXT): cr16/$(am__dirstamp) \ + cr16/$(DEPDIR)/$(am__dirstamp) +cr16/_rename.$(OBJEXT): cr16/$(am__dirstamp) \ + cr16/$(DEPDIR)/$(am__dirstamp) +cr16/sbrk.$(OBJEXT): cr16/$(am__dirstamp) \ + cr16/$(DEPDIR)/$(am__dirstamp) +cr16/time.$(OBJEXT): cr16/$(am__dirstamp) \ + cr16/$(DEPDIR)/$(am__dirstamp) +cr16/unlink.$(OBJEXT): cr16/$(am__dirstamp) \ + cr16/$(DEPDIR)/$(am__dirstamp) +cr16/write.$(OBJEXT): cr16/$(am__dirstamp) \ + cr16/$(DEPDIR)/$(am__dirstamp) +cr16/stat.$(OBJEXT): cr16/$(am__dirstamp) \ + cr16/$(DEPDIR)/$(am__dirstamp) +cr16/putnum.$(OBJEXT): cr16/$(am__dirstamp) \ + cr16/$(DEPDIR)/$(am__dirstamp) +cr16/kill.$(OBJEXT): cr16/$(am__dirstamp) \ + cr16/$(DEPDIR)/$(am__dirstamp) +cr16/getpid.$(OBJEXT): cr16/$(am__dirstamp) \ + cr16/$(DEPDIR)/$(am__dirstamp) +cr16/isatty.$(OBJEXT): cr16/$(am__dirstamp) \ + cr16/$(DEPDIR)/$(am__dirstamp) +cr16/fstat.$(OBJEXT): cr16/$(am__dirstamp) \ + cr16/$(DEPDIR)/$(am__dirstamp) + +cr16/libsim.a: $(cr16_libsim_a_OBJECTS) $(cr16_libsim_a_DEPENDENCIES) $(EXTRA_cr16_libsim_a_DEPENDENCIES) cr16/$(am__dirstamp) + $(AM_V_at)-rm -f cr16/libsim.a + $(AM_V_AR)$(cr16_libsim_a_AR) cr16/libsim.a $(cr16_libsim_a_OBJECTS) $(cr16_libsim_a_LIBADD) + $(AM_V_at)$(RANLIB) cr16/libsim.a +csky/$(am__dirstamp): + @$(MKDIR_P) csky + @: > csky/$(am__dirstamp) +csky/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) csky/$(DEPDIR) + @: > csky/$(DEPDIR)/$(am__dirstamp) +csky/csky_libsemi_a-io-semi.$(OBJEXT): csky/$(am__dirstamp) \ + csky/$(DEPDIR)/$(am__dirstamp) +csky/csky_libsemi_a-sbrk.$(OBJEXT): csky/$(am__dirstamp) \ + csky/$(DEPDIR)/$(am__dirstamp) +csky/csky_libsemi_a-io-gdb.$(OBJEXT): csky/$(am__dirstamp) \ + csky/$(DEPDIR)/$(am__dirstamp) +csky/csky_libsemi_a-io-exit.$(OBJEXT): csky/$(am__dirstamp) \ + csky/$(DEPDIR)/$(am__dirstamp) +csky/csky_libsemi_a-io-close.$(OBJEXT): csky/$(am__dirstamp) \ + csky/$(DEPDIR)/$(am__dirstamp) +csky/csky_libsemi_a-io-fstat.$(OBJEXT): csky/$(am__dirstamp) \ + csky/$(DEPDIR)/$(am__dirstamp) +csky/csky_libsemi_a-io-gettimeofday.$(OBJEXT): csky/$(am__dirstamp) \ + csky/$(DEPDIR)/$(am__dirstamp) +csky/csky_libsemi_a-io-lseek.$(OBJEXT): csky/$(am__dirstamp) \ + csky/$(DEPDIR)/$(am__dirstamp) +csky/csky_libsemi_a-io-read.$(OBJEXT): csky/$(am__dirstamp) \ + csky/$(DEPDIR)/$(am__dirstamp) +csky/csky_libsemi_a-io-system.$(OBJEXT): csky/$(am__dirstamp) \ + csky/$(DEPDIR)/$(am__dirstamp) +csky/csky_libsemi_a-io-unlink.$(OBJEXT): csky/$(am__dirstamp) \ + csky/$(DEPDIR)/$(am__dirstamp) +csky/csky_libsemi_a-io-isatty.$(OBJEXT): csky/$(am__dirstamp) \ + csky/$(DEPDIR)/$(am__dirstamp) +csky/csky_libsemi_a-io-open.$(OBJEXT): csky/$(am__dirstamp) \ + csky/$(DEPDIR)/$(am__dirstamp) +csky/csky_libsemi_a-io-rename.$(OBJEXT): csky/$(am__dirstamp) \ + csky/$(DEPDIR)/$(am__dirstamp) +csky/csky_libsemi_a-io-stat.$(OBJEXT): csky/$(am__dirstamp) \ + csky/$(DEPDIR)/$(am__dirstamp) +csky/csky_libsemi_a-io-time.$(OBJEXT): csky/$(am__dirstamp) \ + csky/$(DEPDIR)/$(am__dirstamp) +csky/csky_libsemi_a-io-write.$(OBJEXT): csky/$(am__dirstamp) \ + csky/$(DEPDIR)/$(am__dirstamp) +csky/csky_libsemi_a-kill.$(OBJEXT): csky/$(am__dirstamp) \ + csky/$(DEPDIR)/$(am__dirstamp) +csky/csky_libsemi_a-getpid.$(OBJEXT): csky/$(am__dirstamp) \ + csky/$(DEPDIR)/$(am__dirstamp) + +csky/libsemi.a: $(csky_libsemi_a_OBJECTS) $(csky_libsemi_a_DEPENDENCIES) $(EXTRA_csky_libsemi_a_DEPENDENCIES) csky/$(am__dirstamp) + $(AM_V_at)-rm -f csky/libsemi.a + $(AM_V_AR)$(csky_libsemi_a_AR) csky/libsemi.a $(csky_libsemi_a_OBJECTS) $(csky_libsemi_a_LIBADD) + $(AM_V_at)$(RANLIB) csky/libsemi.a +d30v/$(am__dirstamp): + @$(MKDIR_P) d30v + @: > d30v/$(am__dirstamp) +d30v/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) d30v/$(DEPDIR) + @: > d30v/$(DEPDIR)/$(am__dirstamp) +d30v/inbyte.$(OBJEXT): d30v/$(am__dirstamp) \ + d30v/$(DEPDIR)/$(am__dirstamp) +d30v/outbyte.$(OBJEXT): d30v/$(am__dirstamp) \ + d30v/$(DEPDIR)/$(am__dirstamp) +d30v/syscalls.$(OBJEXT): d30v/$(am__dirstamp) \ + d30v/$(DEPDIR)/$(am__dirstamp) + +d30v/libsim.a: $(d30v_libsim_a_OBJECTS) $(d30v_libsim_a_DEPENDENCIES) $(EXTRA_d30v_libsim_a_DEPENDENCIES) d30v/$(am__dirstamp) + $(AM_V_at)-rm -f d30v/libsim.a + $(AM_V_AR)$(d30v_libsim_a_AR) d30v/libsim.a $(d30v_libsim_a_OBJECTS) $(d30v_libsim_a_LIBADD) + $(AM_V_at)$(RANLIB) d30v/libsim.a +epiphany/$(am__dirstamp): + @$(MKDIR_P) epiphany + @: > epiphany/$(am__dirstamp) +epiphany/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) epiphany/$(DEPDIR) + @: > epiphany/$(DEPDIR)/$(am__dirstamp) +epiphany/access.$(OBJEXT): epiphany/$(am__dirstamp) \ + epiphany/$(DEPDIR)/$(am__dirstamp) +epiphany/close.$(OBJEXT): epiphany/$(am__dirstamp) \ + epiphany/$(DEPDIR)/$(am__dirstamp) +epiphany/environ.$(OBJEXT): epiphany/$(am__dirstamp) \ + epiphany/$(DEPDIR)/$(am__dirstamp) +epiphany/execve.$(OBJEXT): epiphany/$(am__dirstamp) \ + epiphany/$(DEPDIR)/$(am__dirstamp) +epiphany/fork.$(OBJEXT): epiphany/$(am__dirstamp) \ + epiphany/$(DEPDIR)/$(am__dirstamp) +epiphany/fstat.$(OBJEXT): epiphany/$(am__dirstamp) \ + epiphany/$(DEPDIR)/$(am__dirstamp) +epiphany/getpid.$(OBJEXT): epiphany/$(am__dirstamp) \ + epiphany/$(DEPDIR)/$(am__dirstamp) +epiphany/gettimeofday.$(OBJEXT): epiphany/$(am__dirstamp) \ + epiphany/$(DEPDIR)/$(am__dirstamp) +epiphany/_isatty.$(OBJEXT): epiphany/$(am__dirstamp) \ + epiphany/$(DEPDIR)/$(am__dirstamp) +epiphany/kill.$(OBJEXT): epiphany/$(am__dirstamp) \ + epiphany/$(DEPDIR)/$(am__dirstamp) +epiphany/link.$(OBJEXT): epiphany/$(am__dirstamp) \ + epiphany/$(DEPDIR)/$(am__dirstamp) +epiphany/lseek.$(OBJEXT): epiphany/$(am__dirstamp) \ + epiphany/$(DEPDIR)/$(am__dirstamp) +epiphany/open.$(OBJEXT): epiphany/$(am__dirstamp) \ + epiphany/$(DEPDIR)/$(am__dirstamp) +epiphany/read.$(OBJEXT): epiphany/$(am__dirstamp) \ + epiphany/$(DEPDIR)/$(am__dirstamp) +epiphany/sbrk.$(OBJEXT): epiphany/$(am__dirstamp) \ + epiphany/$(DEPDIR)/$(am__dirstamp) +epiphany/stat.$(OBJEXT): epiphany/$(am__dirstamp) \ + epiphany/$(DEPDIR)/$(am__dirstamp) +epiphany/times.$(OBJEXT): epiphany/$(am__dirstamp) \ + epiphany/$(DEPDIR)/$(am__dirstamp) +epiphany/unlink.$(OBJEXT): epiphany/$(am__dirstamp) \ + epiphany/$(DEPDIR)/$(am__dirstamp) +epiphany/wait.$(OBJEXT): epiphany/$(am__dirstamp) \ + epiphany/$(DEPDIR)/$(am__dirstamp) +epiphany/write.$(OBJEXT): epiphany/$(am__dirstamp) \ + epiphany/$(DEPDIR)/$(am__dirstamp) +epiphany/_exit.$(OBJEXT): epiphany/$(am__dirstamp) \ + epiphany/$(DEPDIR)/$(am__dirstamp) +epiphany/epiphany-syscalls.$(OBJEXT): epiphany/$(am__dirstamp) \ + epiphany/$(DEPDIR)/$(am__dirstamp) +epiphany/epiphany-ivthandlers.$(OBJEXT): epiphany/$(am__dirstamp) \ + epiphany/$(DEPDIR)/$(am__dirstamp) + +epiphany/libepiphany.a: $(epiphany_libepiphany_a_OBJECTS) $(epiphany_libepiphany_a_DEPENDENCIES) $(EXTRA_epiphany_libepiphany_a_DEPENDENCIES) epiphany/$(am__dirstamp) + $(AM_V_at)-rm -f epiphany/libepiphany.a + $(AM_V_AR)$(epiphany_libepiphany_a_AR) epiphany/libepiphany.a $(epiphany_libepiphany_a_OBJECTS) $(epiphany_libepiphany_a_LIBADD) + $(AM_V_at)$(RANLIB) epiphany/libepiphany.a +fr30/$(am__dirstamp): + @$(MKDIR_P) fr30 + @: > fr30/$(am__dirstamp) +fr30/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) fr30/$(DEPDIR) + @: > fr30/$(DEPDIR)/$(am__dirstamp) +fr30/syscalls.$(OBJEXT): fr30/$(am__dirstamp) \ + fr30/$(DEPDIR)/$(am__dirstamp) + +fr30/libsim.a: $(fr30_libsim_a_OBJECTS) $(fr30_libsim_a_DEPENDENCIES) $(EXTRA_fr30_libsim_a_DEPENDENCIES) fr30/$(am__dirstamp) + $(AM_V_at)-rm -f fr30/libsim.a + $(AM_V_AR)$(fr30_libsim_a_AR) fr30/libsim.a $(fr30_libsim_a_OBJECTS) $(fr30_libsim_a_LIBADD) + $(AM_V_at)$(RANLIB) fr30/libsim.a +frv/$(am__dirstamp): + @$(MKDIR_P) frv + @: > frv/$(am__dirstamp) +frv/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) frv/$(DEPDIR) + @: > frv/$(DEPDIR)/$(am__dirstamp) +frv/fstat.$(OBJEXT): frv/$(am__dirstamp) frv/$(DEPDIR)/$(am__dirstamp) +frv/getpid.$(OBJEXT): frv/$(am__dirstamp) \ + frv/$(DEPDIR)/$(am__dirstamp) +frv/isatty.$(OBJEXT): frv/$(am__dirstamp) \ + frv/$(DEPDIR)/$(am__dirstamp) +frv/kill.$(OBJEXT): frv/$(am__dirstamp) frv/$(DEPDIR)/$(am__dirstamp) +frv/putnum.$(OBJEXT): frv/$(am__dirstamp) \ + frv/$(DEPDIR)/$(am__dirstamp) +frv/sbrk.$(OBJEXT): frv/$(am__dirstamp) frv/$(DEPDIR)/$(am__dirstamp) +frv/sim-close.$(OBJEXT): frv/$(am__dirstamp) \ + frv/$(DEPDIR)/$(am__dirstamp) +frv/sim-exit.$(OBJEXT): frv/$(am__dirstamp) \ + frv/$(DEPDIR)/$(am__dirstamp) +frv/sim-inbyte.$(OBJEXT): frv/$(am__dirstamp) \ + frv/$(DEPDIR)/$(am__dirstamp) +frv/sim-lseek.$(OBJEXT): frv/$(am__dirstamp) \ + frv/$(DEPDIR)/$(am__dirstamp) +frv/sim-open.$(OBJEXT): frv/$(am__dirstamp) \ + frv/$(DEPDIR)/$(am__dirstamp) +frv/sim-read.$(OBJEXT): frv/$(am__dirstamp) \ + frv/$(DEPDIR)/$(am__dirstamp) +frv/sim-time.$(OBJEXT): frv/$(am__dirstamp) \ + frv/$(DEPDIR)/$(am__dirstamp) +frv/sim-unlink.$(OBJEXT): frv/$(am__dirstamp) \ + frv/$(DEPDIR)/$(am__dirstamp) +frv/sim-write.$(OBJEXT): frv/$(am__dirstamp) \ + frv/$(DEPDIR)/$(am__dirstamp) +frv/stat.$(OBJEXT): frv/$(am__dirstamp) frv/$(DEPDIR)/$(am__dirstamp) + +frv/libsim.a: $(frv_libsim_a_OBJECTS) $(frv_libsim_a_DEPENDENCIES) $(EXTRA_frv_libsim_a_DEPENDENCIES) frv/$(am__dirstamp) + $(AM_V_at)-rm -f frv/libsim.a + $(AM_V_AR)$(frv_libsim_a_AR) frv/libsim.a $(frv_libsim_a_OBJECTS) $(frv_libsim_a_LIBADD) + $(AM_V_at)$(RANLIB) frv/libsim.a +ft32/$(am__dirstamp): + @$(MKDIR_P) ft32 + @: > ft32/$(am__dirstamp) +ft32/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) ft32/$(DEPDIR) + @: > ft32/$(DEPDIR)/$(am__dirstamp) +ft32/fstat.$(OBJEXT): ft32/$(am__dirstamp) \ + ft32/$(DEPDIR)/$(am__dirstamp) +ft32/getpid.$(OBJEXT): ft32/$(am__dirstamp) \ + ft32/$(DEPDIR)/$(am__dirstamp) +ft32/isatty.$(OBJEXT): ft32/$(am__dirstamp) \ + ft32/$(DEPDIR)/$(am__dirstamp) +ft32/kill.$(OBJEXT): ft32/$(am__dirstamp) \ + ft32/$(DEPDIR)/$(am__dirstamp) +ft32/sbrk.$(OBJEXT): ft32/$(am__dirstamp) \ + ft32/$(DEPDIR)/$(am__dirstamp) +ft32/sim-close.$(OBJEXT): ft32/$(am__dirstamp) \ + ft32/$(DEPDIR)/$(am__dirstamp) +ft32/sim-exit.$(OBJEXT): ft32/$(am__dirstamp) \ + ft32/$(DEPDIR)/$(am__dirstamp) +ft32/sim-inbyte.$(OBJEXT): ft32/$(am__dirstamp) \ + ft32/$(DEPDIR)/$(am__dirstamp) +ft32/sim-lseek.$(OBJEXT): ft32/$(am__dirstamp) \ + ft32/$(DEPDIR)/$(am__dirstamp) +ft32/sim-open.$(OBJEXT): ft32/$(am__dirstamp) \ + ft32/$(DEPDIR)/$(am__dirstamp) +ft32/sim-read.$(OBJEXT): ft32/$(am__dirstamp) \ + ft32/$(DEPDIR)/$(am__dirstamp) +ft32/sim-time.$(OBJEXT): ft32/$(am__dirstamp) \ + ft32/$(DEPDIR)/$(am__dirstamp) +ft32/sim-unlink.$(OBJEXT): ft32/$(am__dirstamp) \ + ft32/$(DEPDIR)/$(am__dirstamp) +ft32/sim-write.$(OBJEXT): ft32/$(am__dirstamp) \ + ft32/$(DEPDIR)/$(am__dirstamp) +ft32/stat.$(OBJEXT): ft32/$(am__dirstamp) \ + ft32/$(DEPDIR)/$(am__dirstamp) + +ft32/libsim.a: $(ft32_libsim_a_OBJECTS) $(ft32_libsim_a_DEPENDENCIES) $(EXTRA_ft32_libsim_a_DEPENDENCIES) ft32/$(am__dirstamp) + $(AM_V_at)-rm -f ft32/libsim.a + $(AM_V_AR)$(ft32_libsim_a_AR) ft32/libsim.a $(ft32_libsim_a_OBJECTS) $(ft32_libsim_a_LIBADD) + $(AM_V_at)$(RANLIB) ft32/libsim.a +i386/$(am__dirstamp): + @$(MKDIR_P) i386 + @: > i386/$(am__dirstamp) +i386/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) i386/$(DEPDIR) + @: > i386/$(DEPDIR)/$(am__dirstamp) +i386/i386_libcygmon_a-cygmon-salib.$(OBJEXT): i386/$(am__dirstamp) \ + i386/$(DEPDIR)/$(am__dirstamp) +i386/i386_libcygmon_a-cygmon-gmon.$(OBJEXT): i386/$(am__dirstamp) \ + i386/$(DEPDIR)/$(am__dirstamp) + +i386/libcygmon.a: $(i386_libcygmon_a_OBJECTS) $(i386_libcygmon_a_DEPENDENCIES) $(EXTRA_i386_libcygmon_a_DEPENDENCIES) i386/$(am__dirstamp) + $(AM_V_at)-rm -f i386/libcygmon.a + $(AM_V_AR)$(i386_libcygmon_a_AR) i386/libcygmon.a $(i386_libcygmon_a_OBJECTS) $(i386_libcygmon_a_LIBADD) + $(AM_V_at)$(RANLIB) i386/libcygmon.a +i960/$(am__dirstamp): + @$(MKDIR_P) i960 + @: > i960/$(am__dirstamp) +i960/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) i960/$(DEPDIR) + @: > i960/$(DEPDIR)/$(am__dirstamp) +i960/mon-read.$(OBJEXT): i960/$(am__dirstamp) \ + i960/$(DEPDIR)/$(am__dirstamp) +i960/mon-write.$(OBJEXT): i960/$(am__dirstamp) \ + i960/$(DEPDIR)/$(am__dirstamp) +i960/mon-syscalls.$(OBJEXT): i960/$(am__dirstamp) \ + i960/$(DEPDIR)/$(am__dirstamp) +i960/mon960.$(OBJEXT): i960/$(am__dirstamp) \ + i960/$(DEPDIR)/$(am__dirstamp) + +i960/libmon960.a: $(i960_libmon960_a_OBJECTS) $(i960_libmon960_a_DEPENDENCIES) $(EXTRA_i960_libmon960_a_DEPENDENCIES) i960/$(am__dirstamp) + $(AM_V_at)-rm -f i960/libmon960.a + $(AM_V_AR)$(i960_libmon960_a_AR) i960/libmon960.a $(i960_libmon960_a_OBJECTS) $(i960_libmon960_a_LIBADD) + $(AM_V_at)$(RANLIB) i960/libmon960.a iq2000/$(am__dirstamp): @$(MKDIR_P) iq2000 @: > iq2000/$(am__dirstamp) @@ -1095,6 +3597,8 @@ libnosys/wait.$(OBJEXT): libnosys/$(am__dirstamp) \ libnosys/$(DEPDIR)/$(am__dirstamp) libnosys/write.$(OBJEXT): libnosys/$(am__dirstamp) \ libnosys/$(DEPDIR)/$(am__dirstamp) +libnosys/getentropy.$(OBJEXT): libnosys/$(am__dirstamp) \ + libnosys/$(DEPDIR)/$(am__dirstamp) libnosys/_exit.$(OBJEXT): libnosys/$(am__dirstamp) \ libnosys/$(DEPDIR)/$(am__dirstamp) @@ -1106,6 +3610,25 @@ bfin/crt0.$(OBJEXT): bfin/$(am__dirstamp) \ bfin/$(DEPDIR)/$(am__dirstamp) bfin/basiccrt.$(OBJEXT): bfin/$(am__dirstamp) \ bfin/$(DEPDIR)/$(am__dirstamp) +cr16/crti.$(OBJEXT): cr16/$(am__dirstamp) \ + cr16/$(DEPDIR)/$(am__dirstamp) +cr16/crtn.$(OBJEXT): cr16/$(am__dirstamp) \ + cr16/$(DEPDIR)/$(am__dirstamp) +cr16/crt1.$(OBJEXT): cr16/$(am__dirstamp) \ + cr16/$(DEPDIR)/$(am__dirstamp) +csky/crt0.$(OBJEXT): csky/$(am__dirstamp) \ + csky/$(DEPDIR)/$(am__dirstamp) +epiphany/crt0.$(OBJEXT): epiphany/$(am__dirstamp) \ + epiphany/$(DEPDIR)/$(am__dirstamp) +fr30/crt0.$(OBJEXT): fr30/$(am__dirstamp) \ + fr30/$(DEPDIR)/$(am__dirstamp) +frv/crt0.$(OBJEXT): frv/$(am__dirstamp) frv/$(DEPDIR)/$(am__dirstamp) +ft32/crt0.$(OBJEXT): ft32/$(am__dirstamp) \ + ft32/$(DEPDIR)/$(am__dirstamp) +i386/cygmon-crt0.$(OBJEXT): i386/$(am__dirstamp) \ + i386/$(DEPDIR)/$(am__dirstamp) +i960/crt0.$(OBJEXT): i960/$(am__dirstamp) \ + i960/$(DEPDIR)/$(am__dirstamp) iq2000/crt0.$(OBJEXT): iq2000/$(am__dirstamp) \ iq2000/$(DEPDIR)/$(am__dirstamp) lm32/$(am__dirstamp): @@ -1116,6 +3639,216 @@ lm32/$(DEPDIR)/$(am__dirstamp): @: > lm32/$(DEPDIR)/$(am__dirstamp) lm32/crt0.$(OBJEXT): lm32/$(am__dirstamp) \ lm32/$(DEPDIR)/$(am__dirstamp) +m32r/$(am__dirstamp): + @$(MKDIR_P) m32r + @: > m32r/$(am__dirstamp) +m32r/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) m32r/$(DEPDIR) + @: > m32r/$(DEPDIR)/$(am__dirstamp) +m32r/crt0.$(OBJEXT): m32r/$(am__dirstamp) \ + m32r/$(DEPDIR)/$(am__dirstamp) +m32r/m32r-lib.$(OBJEXT): m32r/$(am__dirstamp) \ + m32r/$(DEPDIR)/$(am__dirstamp) +m32r/m32r-stub.$(OBJEXT): m32r/$(am__dirstamp) \ + m32r/$(DEPDIR)/$(am__dirstamp) +mcore/$(am__dirstamp): + @$(MKDIR_P) mcore + @: > mcore/$(am__dirstamp) +mcore/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) mcore/$(DEPDIR) + @: > mcore/$(DEPDIR)/$(am__dirstamp) +mcore/crt0.$(OBJEXT): mcore/$(am__dirstamp) \ + mcore/$(DEPDIR)/$(am__dirstamp) +microblaze/$(am__dirstamp): + @$(MKDIR_P) microblaze + @: > microblaze/$(am__dirstamp) +microblaze/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) microblaze/$(DEPDIR) + @: > microblaze/$(DEPDIR)/$(am__dirstamp) +microblaze/crt0.$(OBJEXT): microblaze/$(am__dirstamp) \ + microblaze/$(DEPDIR)/$(am__dirstamp) +microblaze/crt1.$(OBJEXT): microblaze/$(am__dirstamp) \ + microblaze/$(DEPDIR)/$(am__dirstamp) +microblaze/crt2.$(OBJEXT): microblaze/$(am__dirstamp) \ + microblaze/$(DEPDIR)/$(am__dirstamp) +microblaze/crt3.$(OBJEXT): microblaze/$(am__dirstamp) \ + microblaze/$(DEPDIR)/$(am__dirstamp) +microblaze/crt4.$(OBJEXT): microblaze/$(am__dirstamp) \ + microblaze/$(DEPDIR)/$(am__dirstamp) +microblaze/crtinit.$(OBJEXT): microblaze/$(am__dirstamp) \ + microblaze/$(DEPDIR)/$(am__dirstamp) +microblaze/pgcrtinit.$(OBJEXT): microblaze/$(am__dirstamp) \ + microblaze/$(DEPDIR)/$(am__dirstamp) +microblaze/sim-crtinit.$(OBJEXT): microblaze/$(am__dirstamp) \ + microblaze/$(DEPDIR)/$(am__dirstamp) +microblaze/sim-pgcrtinit.$(OBJEXT): microblaze/$(am__dirstamp) \ + microblaze/$(DEPDIR)/$(am__dirstamp) +microblaze/linux-crt0.$(OBJEXT): microblaze/$(am__dirstamp) \ + microblaze/$(DEPDIR)/$(am__dirstamp) +mn10200/$(am__dirstamp): + @$(MKDIR_P) mn10200 + @: > mn10200/$(am__dirstamp) +mn10200/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) mn10200/$(DEPDIR) + @: > mn10200/$(DEPDIR)/$(am__dirstamp) +mn10200/crt0.$(OBJEXT): mn10200/$(am__dirstamp) \ + mn10200/$(DEPDIR)/$(am__dirstamp) +mn10300/$(am__dirstamp): + @$(MKDIR_P) mn10300 + @: > mn10300/$(am__dirstamp) +mn10300/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) mn10300/$(DEPDIR) + @: > mn10300/$(DEPDIR)/$(am__dirstamp) +mn10300/crt0.$(OBJEXT): mn10300/$(am__dirstamp) \ + mn10300/$(DEPDIR)/$(am__dirstamp) +mn10300/crt0_cygmon.$(OBJEXT): mn10300/$(am__dirstamp) \ + mn10300/$(DEPDIR)/$(am__dirstamp) +mn10300/crt0_redboot.$(OBJEXT): mn10300/$(am__dirstamp) \ + mn10300/$(DEPDIR)/$(am__dirstamp) +moxie/$(am__dirstamp): + @$(MKDIR_P) moxie + @: > moxie/$(am__dirstamp) +moxie/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) moxie/$(DEPDIR) + @: > moxie/$(DEPDIR)/$(am__dirstamp) +moxie/crt0.$(OBJEXT): moxie/$(am__dirstamp) \ + moxie/$(DEPDIR)/$(am__dirstamp) +msp430/$(am__dirstamp): + @$(MKDIR_P) msp430 + @: > msp430/$(am__dirstamp) +msp430/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) msp430/$(DEPDIR) + @: > msp430/$(DEPDIR)/$(am__dirstamp) +msp430/gcrt0.$(OBJEXT): msp430/$(am__dirstamp) \ + msp430/$(DEPDIR)/$(am__dirstamp) +msp430/crt0.$(OBJEXT): msp430/$(am__dirstamp) \ + msp430/$(DEPDIR)/$(am__dirstamp) +nds32/$(am__dirstamp): + @$(MKDIR_P) nds32 + @: > nds32/$(am__dirstamp) +nds32/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) nds32/$(DEPDIR) + @: > nds32/$(DEPDIR)/$(am__dirstamp) +nds32/crt0.$(OBJEXT): nds32/$(am__dirstamp) \ + nds32/$(DEPDIR)/$(am__dirstamp) +nds32/crt1.$(OBJEXT): nds32/$(am__dirstamp) \ + nds32/$(DEPDIR)/$(am__dirstamp) +or1k/$(am__dirstamp): + @$(MKDIR_P) or1k + @: > or1k/$(am__dirstamp) +or1k/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) or1k/$(DEPDIR) + @: > or1k/$(DEPDIR)/$(am__dirstamp) +or1k/crt0.$(OBJEXT): or1k/$(am__dirstamp) \ + or1k/$(DEPDIR)/$(am__dirstamp) +pru/$(am__dirstamp): + @$(MKDIR_P) pru + @: > pru/$(am__dirstamp) +pru/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) pru/$(DEPDIR) + @: > pru/$(DEPDIR)/$(am__dirstamp) +pru/crt0.$(OBJEXT): pru/$(am__dirstamp) pru/$(DEPDIR)/$(am__dirstamp) +pru/crt0-minrt.$(OBJEXT): pru/$(am__dirstamp) \ + pru/$(DEPDIR)/$(am__dirstamp) +rl78/$(am__dirstamp): + @$(MKDIR_P) rl78 + @: > rl78/$(am__dirstamp) +rl78/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) rl78/$(DEPDIR) + @: > rl78/$(DEPDIR)/$(am__dirstamp) +rl78/gcrt0.$(OBJEXT): rl78/$(am__dirstamp) \ + rl78/$(DEPDIR)/$(am__dirstamp) +rl78/crt0.$(OBJEXT): rl78/$(am__dirstamp) \ + rl78/$(DEPDIR)/$(am__dirstamp) +rl78/crtn.$(OBJEXT): rl78/$(am__dirstamp) \ + rl78/$(DEPDIR)/$(am__dirstamp) +rx/$(am__dirstamp): + @$(MKDIR_P) rx + @: > rx/$(am__dirstamp) +rx/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) rx/$(DEPDIR) + @: > rx/$(DEPDIR)/$(am__dirstamp) +rx/gcrt0.$(OBJEXT): rx/$(am__dirstamp) rx/$(DEPDIR)/$(am__dirstamp) +rx/crt0.$(OBJEXT): rx/$(am__dirstamp) rx/$(DEPDIR)/$(am__dirstamp) +rx/crtn.$(OBJEXT): rx/$(am__dirstamp) rx/$(DEPDIR)/$(am__dirstamp) +sparc/$(am__dirstamp): + @$(MKDIR_P) sparc + @: > sparc/$(am__dirstamp) +sparc/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) sparc/$(DEPDIR) + @: > sparc/$(DEPDIR)/$(am__dirstamp) +sparc/crt0.$(OBJEXT): sparc/$(am__dirstamp) \ + sparc/$(DEPDIR)/$(am__dirstamp) +sparc/erc32-crt0.$(OBJEXT): sparc/$(am__dirstamp) \ + sparc/$(DEPDIR)/$(am__dirstamp) +sparc/cygmon-crt0.$(OBJEXT): sparc/$(am__dirstamp) \ + sparc/$(DEPDIR)/$(am__dirstamp) +sparc/crt0-701.$(OBJEXT): sparc/$(am__dirstamp) \ + sparc/$(DEPDIR)/$(am__dirstamp) +sparc_leon/$(am__dirstamp): + @$(MKDIR_P) sparc_leon + @: > sparc_leon/$(am__dirstamp) +sparc_leon/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) sparc_leon/$(DEPDIR) + @: > sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/crt0.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/pnpinit.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/pnpinit_simple.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/locore_svt.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/locore_mvt.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +tic6x/$(am__dirstamp): + @$(MKDIR_P) tic6x + @: > tic6x/$(am__dirstamp) +tic6x/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) tic6x/$(DEPDIR) + @: > tic6x/$(DEPDIR)/$(am__dirstamp) +tic6x/crt0.$(OBJEXT): tic6x/$(am__dirstamp) \ + tic6x/$(DEPDIR)/$(am__dirstamp) +v850/$(am__dirstamp): + @$(MKDIR_P) v850 + @: > v850/$(am__dirstamp) +v850/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) v850/$(DEPDIR) + @: > v850/$(DEPDIR)/$(am__dirstamp) +v850/crt0.$(OBJEXT): v850/$(am__dirstamp) \ + v850/$(DEPDIR)/$(am__dirstamp) +visium/$(am__dirstamp): + @$(MKDIR_P) visium + @: > visium/$(am__dirstamp) +visium/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) visium/$(DEPDIR) + @: > visium/$(DEPDIR)/$(am__dirstamp) +visium/crt0.$(OBJEXT): visium/$(am__dirstamp) \ + visium/$(DEPDIR)/$(am__dirstamp) +xstormy16/$(am__dirstamp): + @$(MKDIR_P) xstormy16 + @: > xstormy16/$(am__dirstamp) +xstormy16/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) xstormy16/$(DEPDIR) + @: > xstormy16/$(DEPDIR)/$(am__dirstamp) +xstormy16/crt0.$(OBJEXT): xstormy16/$(am__dirstamp) \ + xstormy16/$(DEPDIR)/$(am__dirstamp) +xstormy16/crti.$(OBJEXT): xstormy16/$(am__dirstamp) \ + xstormy16/$(DEPDIR)/$(am__dirstamp) +xstormy16/crtn.$(OBJEXT): xstormy16/$(am__dirstamp) \ + xstormy16/$(DEPDIR)/$(am__dirstamp) +xtensa/$(am__dirstamp): + @$(MKDIR_P) xtensa + @: > xtensa/$(am__dirstamp) +xtensa/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) xtensa/$(DEPDIR) + @: > xtensa/$(DEPDIR)/$(am__dirstamp) +xtensa/crt0.$(OBJEXT): xtensa/$(am__dirstamp) \ + xtensa/$(DEPDIR)/$(am__dirstamp) +xtensa/crt1-sim.$(OBJEXT): xtensa/$(am__dirstamp) \ + xtensa/$(DEPDIR)/$(am__dirstamp) +xtensa/crt1-boards.$(OBJEXT): xtensa/$(am__dirstamp) \ + xtensa/$(DEPDIR)/$(am__dirstamp) libobjs.a: $(libobjs_a_OBJECTS) $(libobjs_a_DEPENDENCIES) $(EXTRA_libobjs_a_DEPENDENCIES) $(AM_V_at)-rm -f libobjs.a @@ -1130,6 +3863,555 @@ lm32/libgloss.a: $(lm32_libgloss_a_OBJECTS) $(lm32_libgloss_a_DEPENDENCIES) $(EX $(AM_V_at)-rm -f lm32/libgloss.a $(AM_V_AR)$(lm32_libgloss_a_AR) lm32/libgloss.a $(lm32_libgloss_a_OBJECTS) $(lm32_libgloss_a_LIBADD) $(AM_V_at)$(RANLIB) lm32/libgloss.a +m32r/trap0.$(OBJEXT): m32r/$(am__dirstamp) \ + m32r/$(DEPDIR)/$(am__dirstamp) +m32r/chmod.$(OBJEXT): m32r/$(am__dirstamp) \ + m32r/$(DEPDIR)/$(am__dirstamp) +m32r/close.$(OBJEXT): m32r/$(am__dirstamp) \ + m32r/$(DEPDIR)/$(am__dirstamp) +m32r/exit.$(OBJEXT): m32r/$(am__dirstamp) \ + m32r/$(DEPDIR)/$(am__dirstamp) +m32r/fstat.$(OBJEXT): m32r/$(am__dirstamp) \ + m32r/$(DEPDIR)/$(am__dirstamp) +m32r/getpid.$(OBJEXT): m32r/$(am__dirstamp) \ + m32r/$(DEPDIR)/$(am__dirstamp) +m32r/isatty.$(OBJEXT): m32r/$(am__dirstamp) \ + m32r/$(DEPDIR)/$(am__dirstamp) +m32r/kill.$(OBJEXT): m32r/$(am__dirstamp) \ + m32r/$(DEPDIR)/$(am__dirstamp) +m32r/lseek.$(OBJEXT): m32r/$(am__dirstamp) \ + m32r/$(DEPDIR)/$(am__dirstamp) +m32r/open.$(OBJEXT): m32r/$(am__dirstamp) \ + m32r/$(DEPDIR)/$(am__dirstamp) +m32r/raise.$(OBJEXT): m32r/$(am__dirstamp) \ + m32r/$(DEPDIR)/$(am__dirstamp) +m32r/read.$(OBJEXT): m32r/$(am__dirstamp) \ + m32r/$(DEPDIR)/$(am__dirstamp) +m32r/sbrk.$(OBJEXT): m32r/$(am__dirstamp) \ + m32r/$(DEPDIR)/$(am__dirstamp) +m32r/stat.$(OBJEXT): m32r/$(am__dirstamp) \ + m32r/$(DEPDIR)/$(am__dirstamp) +m32r/unlink.$(OBJEXT): m32r/$(am__dirstamp) \ + m32r/$(DEPDIR)/$(am__dirstamp) +m32r/utime.$(OBJEXT): m32r/$(am__dirstamp) \ + m32r/$(DEPDIR)/$(am__dirstamp) +m32r/write.$(OBJEXT): m32r/$(am__dirstamp) \ + m32r/$(DEPDIR)/$(am__dirstamp) + +m32r/libgloss.a: $(m32r_libgloss_a_OBJECTS) $(m32r_libgloss_a_DEPENDENCIES) $(EXTRA_m32r_libgloss_a_DEPENDENCIES) m32r/$(am__dirstamp) + $(AM_V_at)-rm -f m32r/libgloss.a + $(AM_V_AR)$(m32r_libgloss_a_AR) m32r/libgloss.a $(m32r_libgloss_a_OBJECTS) $(m32r_libgloss_a_LIBADD) + $(AM_V_at)$(RANLIB) m32r/libgloss.a +m32r/trapmon0.$(OBJEXT): m32r/$(am__dirstamp) \ + m32r/$(DEPDIR)/$(am__dirstamp) + +m32r/libmon.a: $(m32r_libmon_a_OBJECTS) $(m32r_libmon_a_DEPENDENCIES) $(EXTRA_m32r_libmon_a_DEPENDENCIES) m32r/$(am__dirstamp) + $(AM_V_at)-rm -f m32r/libmon.a + $(AM_V_AR)$(m32r_libmon_a_AR) m32r/libmon.a $(m32r_libmon_a_OBJECTS) $(m32r_libmon_a_LIBADD) + $(AM_V_at)$(RANLIB) m32r/libmon.a +mcore/open.$(OBJEXT): mcore/$(am__dirstamp) \ + mcore/$(DEPDIR)/$(am__dirstamp) +mcore/close.$(OBJEXT): mcore/$(am__dirstamp) \ + mcore/$(DEPDIR)/$(am__dirstamp) +mcore/lseek.$(OBJEXT): mcore/$(am__dirstamp) \ + mcore/$(DEPDIR)/$(am__dirstamp) +mcore/sbrk.$(OBJEXT): mcore/$(am__dirstamp) \ + mcore/$(DEPDIR)/$(am__dirstamp) +mcore/read.$(OBJEXT): mcore/$(am__dirstamp) \ + mcore/$(DEPDIR)/$(am__dirstamp) +mcore/write.$(OBJEXT): mcore/$(am__dirstamp) \ + mcore/$(DEPDIR)/$(am__dirstamp) +mcore/print.$(OBJEXT): mcore/$(am__dirstamp) \ + mcore/$(DEPDIR)/$(am__dirstamp) +mcore/cmb-exit.$(OBJEXT): mcore/$(am__dirstamp) \ + mcore/$(DEPDIR)/$(am__dirstamp) +mcore/cmb-inbyte.$(OBJEXT): mcore/$(am__dirstamp) \ + mcore/$(DEPDIR)/$(am__dirstamp) +mcore/cmb-outbyte.$(OBJEXT): mcore/$(am__dirstamp) \ + mcore/$(DEPDIR)/$(am__dirstamp) +mcore/fstat.$(OBJEXT): mcore/$(am__dirstamp) \ + mcore/$(DEPDIR)/$(am__dirstamp) +mcore/getpid.$(OBJEXT): mcore/$(am__dirstamp) \ + mcore/$(DEPDIR)/$(am__dirstamp) +mcore/kill.$(OBJEXT): mcore/$(am__dirstamp) \ + mcore/$(DEPDIR)/$(am__dirstamp) +mcore/raise.$(OBJEXT): mcore/$(am__dirstamp) \ + mcore/$(DEPDIR)/$(am__dirstamp) +mcore/putnum.$(OBJEXT): mcore/$(am__dirstamp) \ + mcore/$(DEPDIR)/$(am__dirstamp) +mcore/stat.$(OBJEXT): mcore/$(am__dirstamp) \ + mcore/$(DEPDIR)/$(am__dirstamp) +mcore/unlink.$(OBJEXT): mcore/$(am__dirstamp) \ + mcore/$(DEPDIR)/$(am__dirstamp) + +mcore/libcmb.a: $(mcore_libcmb_a_OBJECTS) $(mcore_libcmb_a_DEPENDENCIES) $(EXTRA_mcore_libcmb_a_DEPENDENCIES) mcore/$(am__dirstamp) + $(AM_V_at)-rm -f mcore/libcmb.a + $(AM_V_AR)$(mcore_libcmb_a_AR) mcore/libcmb.a $(mcore_libcmb_a_OBJECTS) $(mcore_libcmb_a_LIBADD) + $(AM_V_at)$(RANLIB) mcore/libcmb.a +mcore/syscalls.$(OBJEXT): mcore/$(am__dirstamp) \ + mcore/$(DEPDIR)/$(am__dirstamp) + +mcore/libsim.a: $(mcore_libsim_a_OBJECTS) $(mcore_libsim_a_DEPENDENCIES) $(EXTRA_mcore_libsim_a_DEPENDENCIES) mcore/$(am__dirstamp) + $(AM_V_at)-rm -f mcore/libsim.a + $(AM_V_AR)$(mcore_libsim_a_AR) mcore/libsim.a $(mcore_libsim_a_OBJECTS) $(mcore_libsim_a_LIBADD) + $(AM_V_at)$(RANLIB) mcore/libsim.a +microblaze/linux-syscalls.$(OBJEXT): microblaze/$(am__dirstamp) \ + microblaze/$(DEPDIR)/$(am__dirstamp) +microblaze/linux-syscalls-wrap.$(OBJEXT): microblaze/$(am__dirstamp) \ + microblaze/$(DEPDIR)/$(am__dirstamp) +microblaze/linux-outbyte.$(OBJEXT): microblaze/$(am__dirstamp) \ + microblaze/$(DEPDIR)/$(am__dirstamp) +microblaze/linux-inbyte.$(OBJEXT): microblaze/$(am__dirstamp) \ + microblaze/$(DEPDIR)/$(am__dirstamp) + +microblaze/libgloss-linux.a: $(microblaze_libgloss_linux_a_OBJECTS) $(microblaze_libgloss_linux_a_DEPENDENCIES) $(EXTRA_microblaze_libgloss_linux_a_DEPENDENCIES) microblaze/$(am__dirstamp) + $(AM_V_at)-rm -f microblaze/libgloss-linux.a + $(AM_V_AR)$(microblaze_libgloss_linux_a_AR) microblaze/libgloss-linux.a $(microblaze_libgloss_linux_a_OBJECTS) $(microblaze_libgloss_linux_a_LIBADD) + $(AM_V_at)$(RANLIB) microblaze/libgloss-linux.a +microblaze/sbrk.$(OBJEXT): microblaze/$(am__dirstamp) \ + microblaze/$(DEPDIR)/$(am__dirstamp) +microblaze/timer.$(OBJEXT): microblaze/$(am__dirstamp) \ + microblaze/$(DEPDIR)/$(am__dirstamp) +microblaze/_exception_handler.$(OBJEXT): microblaze/$(am__dirstamp) \ + microblaze/$(DEPDIR)/$(am__dirstamp) +microblaze/_hw_exception_handler.$(OBJEXT): \ + microblaze/$(am__dirstamp) \ + microblaze/$(DEPDIR)/$(am__dirstamp) +microblaze/_interrupt_handler.$(OBJEXT): microblaze/$(am__dirstamp) \ + microblaze/$(DEPDIR)/$(am__dirstamp) +microblaze/_program_clean.$(OBJEXT): microblaze/$(am__dirstamp) \ + microblaze/$(DEPDIR)/$(am__dirstamp) +microblaze/_program_init.$(OBJEXT): microblaze/$(am__dirstamp) \ + microblaze/$(DEPDIR)/$(am__dirstamp) +microblaze/xil_malloc.$(OBJEXT): microblaze/$(am__dirstamp) \ + microblaze/$(DEPDIR)/$(am__dirstamp) +microblaze/xil_sbrk.$(OBJEXT): microblaze/$(am__dirstamp) \ + microblaze/$(DEPDIR)/$(am__dirstamp) +microblaze/xil_printf.$(OBJEXT): microblaze/$(am__dirstamp) \ + microblaze/$(DEPDIR)/$(am__dirstamp) + +microblaze/libgloss.a: $(microblaze_libgloss_a_OBJECTS) $(microblaze_libgloss_a_DEPENDENCIES) $(EXTRA_microblaze_libgloss_a_DEPENDENCIES) microblaze/$(am__dirstamp) + $(AM_V_at)-rm -f microblaze/libgloss.a + $(AM_V_AR)$(microblaze_libgloss_a_AR) microblaze/libgloss.a $(microblaze_libgloss_a_OBJECTS) $(microblaze_libgloss_a_LIBADD) + $(AM_V_at)$(RANLIB) microblaze/libgloss.a +mn10200/_exit.$(OBJEXT): mn10200/$(am__dirstamp) \ + mn10200/$(DEPDIR)/$(am__dirstamp) +mn10200/access.$(OBJEXT): mn10200/$(am__dirstamp) \ + mn10200/$(DEPDIR)/$(am__dirstamp) +mn10200/chmod.$(OBJEXT): mn10200/$(am__dirstamp) \ + mn10200/$(DEPDIR)/$(am__dirstamp) +mn10200/close.$(OBJEXT): mn10200/$(am__dirstamp) \ + mn10200/$(DEPDIR)/$(am__dirstamp) +mn10200/crt1.$(OBJEXT): mn10200/$(am__dirstamp) \ + mn10200/$(DEPDIR)/$(am__dirstamp) +mn10200/fstat.$(OBJEXT): mn10200/$(am__dirstamp) \ + mn10200/$(DEPDIR)/$(am__dirstamp) +mn10200/getpid.$(OBJEXT): mn10200/$(am__dirstamp) \ + mn10200/$(DEPDIR)/$(am__dirstamp) +mn10200/isatty.$(OBJEXT): mn10200/$(am__dirstamp) \ + mn10200/$(DEPDIR)/$(am__dirstamp) +mn10200/kill.$(OBJEXT): mn10200/$(am__dirstamp) \ + mn10200/$(DEPDIR)/$(am__dirstamp) +mn10200/lseek.$(OBJEXT): mn10200/$(am__dirstamp) \ + mn10200/$(DEPDIR)/$(am__dirstamp) +mn10200/open.$(OBJEXT): mn10200/$(am__dirstamp) \ + mn10200/$(DEPDIR)/$(am__dirstamp) +mn10200/read.$(OBJEXT): mn10200/$(am__dirstamp) \ + mn10200/$(DEPDIR)/$(am__dirstamp) +mn10200/sbrk.$(OBJEXT): mn10200/$(am__dirstamp) \ + mn10200/$(DEPDIR)/$(am__dirstamp) +mn10200/stat.$(OBJEXT): mn10200/$(am__dirstamp) \ + mn10200/$(DEPDIR)/$(am__dirstamp) +mn10200/time.$(OBJEXT): mn10200/$(am__dirstamp) \ + mn10200/$(DEPDIR)/$(am__dirstamp) +mn10200/trap.$(OBJEXT): mn10200/$(am__dirstamp) \ + mn10200/$(DEPDIR)/$(am__dirstamp) +mn10200/unlink.$(OBJEXT): mn10200/$(am__dirstamp) \ + mn10200/$(DEPDIR)/$(am__dirstamp) +mn10200/utime.$(OBJEXT): mn10200/$(am__dirstamp) \ + mn10200/$(DEPDIR)/$(am__dirstamp) +mn10200/write.$(OBJEXT): mn10200/$(am__dirstamp) \ + mn10200/$(DEPDIR)/$(am__dirstamp) + +mn10200/libeval.a: $(mn10200_libeval_a_OBJECTS) $(mn10200_libeval_a_DEPENDENCIES) $(EXTRA_mn10200_libeval_a_DEPENDENCIES) mn10200/$(am__dirstamp) + $(AM_V_at)-rm -f mn10200/libeval.a + $(AM_V_AR)$(mn10200_libeval_a_AR) mn10200/libeval.a $(mn10200_libeval_a_OBJECTS) $(mn10200_libeval_a_LIBADD) + $(AM_V_at)$(RANLIB) mn10200/libeval.a +mn10300/_exit.$(OBJEXT): mn10300/$(am__dirstamp) \ + mn10300/$(DEPDIR)/$(am__dirstamp) +mn10300/access.$(OBJEXT): mn10300/$(am__dirstamp) \ + mn10300/$(DEPDIR)/$(am__dirstamp) +mn10300/chmod.$(OBJEXT): mn10300/$(am__dirstamp) \ + mn10300/$(DEPDIR)/$(am__dirstamp) +mn10300/close.$(OBJEXT): mn10300/$(am__dirstamp) \ + mn10300/$(DEPDIR)/$(am__dirstamp) +mn10300/crt1.$(OBJEXT): mn10300/$(am__dirstamp) \ + mn10300/$(DEPDIR)/$(am__dirstamp) +mn10300/fstat.$(OBJEXT): mn10300/$(am__dirstamp) \ + mn10300/$(DEPDIR)/$(am__dirstamp) +mn10300/getpid.$(OBJEXT): mn10300/$(am__dirstamp) \ + mn10300/$(DEPDIR)/$(am__dirstamp) +mn10300/isatty.$(OBJEXT): mn10300/$(am__dirstamp) \ + mn10300/$(DEPDIR)/$(am__dirstamp) +mn10300/kill.$(OBJEXT): mn10300/$(am__dirstamp) \ + mn10300/$(DEPDIR)/$(am__dirstamp) +mn10300/lseek.$(OBJEXT): mn10300/$(am__dirstamp) \ + mn10300/$(DEPDIR)/$(am__dirstamp) +mn10300/open.$(OBJEXT): mn10300/$(am__dirstamp) \ + mn10300/$(DEPDIR)/$(am__dirstamp) +mn10300/read.$(OBJEXT): mn10300/$(am__dirstamp) \ + mn10300/$(DEPDIR)/$(am__dirstamp) +mn10300/sbrk.$(OBJEXT): mn10300/$(am__dirstamp) \ + mn10300/$(DEPDIR)/$(am__dirstamp) +mn10300/stat.$(OBJEXT): mn10300/$(am__dirstamp) \ + mn10300/$(DEPDIR)/$(am__dirstamp) +mn10300/time.$(OBJEXT): mn10300/$(am__dirstamp) \ + mn10300/$(DEPDIR)/$(am__dirstamp) +mn10300/times.$(OBJEXT): mn10300/$(am__dirstamp) \ + mn10300/$(DEPDIR)/$(am__dirstamp) +mn10300/unlink.$(OBJEXT): mn10300/$(am__dirstamp) \ + mn10300/$(DEPDIR)/$(am__dirstamp) +mn10300/utime.$(OBJEXT): mn10300/$(am__dirstamp) \ + mn10300/$(DEPDIR)/$(am__dirstamp) +mn10300/write.$(OBJEXT): mn10300/$(am__dirstamp) \ + mn10300/$(DEPDIR)/$(am__dirstamp) +mn10300/cygmon.$(OBJEXT): mn10300/$(am__dirstamp) \ + mn10300/$(DEPDIR)/$(am__dirstamp) + +mn10300/libcygmon.a: $(mn10300_libcygmon_a_OBJECTS) $(mn10300_libcygmon_a_DEPENDENCIES) $(EXTRA_mn10300_libcygmon_a_DEPENDENCIES) mn10300/$(am__dirstamp) + $(AM_V_at)-rm -f mn10300/libcygmon.a + $(AM_V_AR)$(mn10300_libcygmon_a_AR) mn10300/libcygmon.a $(mn10300_libcygmon_a_OBJECTS) $(mn10300_libcygmon_a_LIBADD) + $(AM_V_at)$(RANLIB) mn10300/libcygmon.a +mn10300/trap.$(OBJEXT): mn10300/$(am__dirstamp) \ + mn10300/$(DEPDIR)/$(am__dirstamp) + +mn10300/libeval.a: $(mn10300_libeval_a_OBJECTS) $(mn10300_libeval_a_DEPENDENCIES) $(EXTRA_mn10300_libeval_a_DEPENDENCIES) mn10300/$(am__dirstamp) + $(AM_V_at)-rm -f mn10300/libeval.a + $(AM_V_AR)$(mn10300_libeval_a_AR) mn10300/libeval.a $(mn10300_libeval_a_OBJECTS) $(mn10300_libeval_a_LIBADD) + $(AM_V_at)$(RANLIB) mn10300/libeval.a +moxie/qemu-write.$(OBJEXT): moxie/$(am__dirstamp) \ + moxie/$(DEPDIR)/$(am__dirstamp) +moxie/qemu-time.$(OBJEXT): moxie/$(am__dirstamp) \ + moxie/$(DEPDIR)/$(am__dirstamp) +moxie/sim-exit.$(OBJEXT): moxie/$(am__dirstamp) \ + moxie/$(DEPDIR)/$(am__dirstamp) +moxie/sbrk.$(OBJEXT): moxie/$(am__dirstamp) \ + moxie/$(DEPDIR)/$(am__dirstamp) +moxie/sim-close.$(OBJEXT): moxie/$(am__dirstamp) \ + moxie/$(DEPDIR)/$(am__dirstamp) +moxie/fstat.$(OBJEXT): moxie/$(am__dirstamp) \ + moxie/$(DEPDIR)/$(am__dirstamp) +moxie/getpid.$(OBJEXT): moxie/$(am__dirstamp) \ + moxie/$(DEPDIR)/$(am__dirstamp) +moxie/isatty.$(OBJEXT): moxie/$(am__dirstamp) \ + moxie/$(DEPDIR)/$(am__dirstamp) +moxie/kill.$(OBJEXT): moxie/$(am__dirstamp) \ + moxie/$(DEPDIR)/$(am__dirstamp) +moxie/putnum.$(OBJEXT): moxie/$(am__dirstamp) \ + moxie/$(DEPDIR)/$(am__dirstamp) +moxie/sim-lseek.$(OBJEXT): moxie/$(am__dirstamp) \ + moxie/$(DEPDIR)/$(am__dirstamp) +moxie/sim-read.$(OBJEXT): moxie/$(am__dirstamp) \ + moxie/$(DEPDIR)/$(am__dirstamp) + +moxie/libqemu.a: $(moxie_libqemu_a_OBJECTS) $(moxie_libqemu_a_DEPENDENCIES) $(EXTRA_moxie_libqemu_a_DEPENDENCIES) moxie/$(am__dirstamp) + $(AM_V_at)-rm -f moxie/libqemu.a + $(AM_V_AR)$(moxie_libqemu_a_AR) moxie/libqemu.a $(moxie_libqemu_a_OBJECTS) $(moxie_libqemu_a_LIBADD) + $(AM_V_at)$(RANLIB) moxie/libqemu.a +moxie/sim-inbyte.$(OBJEXT): moxie/$(am__dirstamp) \ + moxie/$(DEPDIR)/$(am__dirstamp) +moxie/sim-open.$(OBJEXT): moxie/$(am__dirstamp) \ + moxie/$(DEPDIR)/$(am__dirstamp) +moxie/sim-time.$(OBJEXT): moxie/$(am__dirstamp) \ + moxie/$(DEPDIR)/$(am__dirstamp) +moxie/sim-unlink.$(OBJEXT): moxie/$(am__dirstamp) \ + moxie/$(DEPDIR)/$(am__dirstamp) +moxie/sim-write.$(OBJEXT): moxie/$(am__dirstamp) \ + moxie/$(DEPDIR)/$(am__dirstamp) +moxie/stat.$(OBJEXT): moxie/$(am__dirstamp) \ + moxie/$(DEPDIR)/$(am__dirstamp) + +moxie/libsim.a: $(moxie_libsim_a_OBJECTS) $(moxie_libsim_a_DEPENDENCIES) $(EXTRA_moxie_libsim_a_DEPENDENCIES) moxie/$(am__dirstamp) + $(AM_V_at)-rm -f moxie/libsim.a + $(AM_V_AR)$(moxie_libsim_a_AR) moxie/libsim.a $(moxie_libsim_a_OBJECTS) $(moxie_libsim_a_LIBADD) + $(AM_V_at)$(RANLIB) moxie/libsim.a +msp430/crt_bss.$(OBJEXT): msp430/$(am__dirstamp) \ + msp430/$(DEPDIR)/$(am__dirstamp) +msp430/crt_high_bss.$(OBJEXT): msp430/$(am__dirstamp) \ + msp430/$(DEPDIR)/$(am__dirstamp) +msp430/crt_movedata.$(OBJEXT): msp430/$(am__dirstamp) \ + msp430/$(DEPDIR)/$(am__dirstamp) +msp430/crt_move_highdata.$(OBJEXT): msp430/$(am__dirstamp) \ + msp430/$(DEPDIR)/$(am__dirstamp) +msp430/crt_main.$(OBJEXT): msp430/$(am__dirstamp) \ + msp430/$(DEPDIR)/$(am__dirstamp) +msp430/crt_callexit.$(OBJEXT): msp430/$(am__dirstamp) \ + msp430/$(DEPDIR)/$(am__dirstamp) +msp430/crt_run_init_array.$(OBJEXT): msp430/$(am__dirstamp) \ + msp430/$(DEPDIR)/$(am__dirstamp) +msp430/crt_run_preinit_array.$(OBJEXT): msp430/$(am__dirstamp) \ + msp430/$(DEPDIR)/$(am__dirstamp) +msp430/crt_run_fini_array.$(OBJEXT): msp430/$(am__dirstamp) \ + msp430/$(DEPDIR)/$(am__dirstamp) +msp430/crt_run_array.$(OBJEXT): msp430/$(am__dirstamp) \ + msp430/$(DEPDIR)/$(am__dirstamp) + +msp430/libcrt.a: $(msp430_libcrt_a_OBJECTS) $(msp430_libcrt_a_DEPENDENCIES) $(EXTRA_msp430_libcrt_a_DEPENDENCIES) msp430/$(am__dirstamp) + $(AM_V_at)-rm -f msp430/libcrt.a + $(AM_V_AR)$(msp430_libcrt_a_AR) msp430/libcrt.a $(msp430_libcrt_a_OBJECTS) $(msp430_libcrt_a_LIBADD) + $(AM_V_at)$(RANLIB) msp430/libcrt.a +msp430/ciosyscalls.$(OBJEXT): msp430/$(am__dirstamp) \ + msp430/$(DEPDIR)/$(am__dirstamp) +msp430/cio.$(OBJEXT): msp430/$(am__dirstamp) \ + msp430/$(DEPDIR)/$(am__dirstamp) +msp430/write.$(OBJEXT): msp430/$(am__dirstamp) \ + msp430/$(DEPDIR)/$(am__dirstamp) +msp430/unlink.$(OBJEXT): msp430/$(am__dirstamp) \ + msp430/$(DEPDIR)/$(am__dirstamp) +msp430/sbrk.$(OBJEXT): msp430/$(am__dirstamp) \ + msp430/$(DEPDIR)/$(am__dirstamp) + +msp430/libnosys.a: $(msp430_libnosys_a_OBJECTS) $(msp430_libnosys_a_DEPENDENCIES) $(EXTRA_msp430_libnosys_a_DEPENDENCIES) msp430/$(am__dirstamp) + $(AM_V_at)-rm -f msp430/libnosys.a + $(AM_V_AR)$(msp430_libnosys_a_AR) msp430/libnosys.a $(msp430_libnosys_a_OBJECTS) $(msp430_libnosys_a_LIBADD) + $(AM_V_at)$(RANLIB) msp430/libnosys.a +msp430/syscalls.$(OBJEXT): msp430/$(am__dirstamp) \ + msp430/$(DEPDIR)/$(am__dirstamp) + +msp430/libsim.a: $(msp430_libsim_a_OBJECTS) $(msp430_libsim_a_DEPENDENCIES) $(EXTRA_msp430_libsim_a_DEPENDENCIES) msp430/$(am__dirstamp) + $(AM_V_at)-rm -f msp430/libsim.a + $(AM_V_AR)$(msp430_libsim_a_AR) msp430/libsim.a $(msp430_libsim_a_OBJECTS) $(msp430_libsim_a_LIBADD) + $(AM_V_at)$(RANLIB) msp430/libsim.a +nds32/_exit.$(OBJEXT): nds32/$(am__dirstamp) \ + nds32/$(DEPDIR)/$(am__dirstamp) +nds32/_open.$(OBJEXT): nds32/$(am__dirstamp) \ + nds32/$(DEPDIR)/$(am__dirstamp) +nds32/_close.$(OBJEXT): nds32/$(am__dirstamp) \ + nds32/$(DEPDIR)/$(am__dirstamp) +nds32/_read.$(OBJEXT): nds32/$(am__dirstamp) \ + nds32/$(DEPDIR)/$(am__dirstamp) +nds32/_write.$(OBJEXT): nds32/$(am__dirstamp) \ + nds32/$(DEPDIR)/$(am__dirstamp) +nds32/_lseek.$(OBJEXT): nds32/$(am__dirstamp) \ + nds32/$(DEPDIR)/$(am__dirstamp) +nds32/_unlink.$(OBJEXT): nds32/$(am__dirstamp) \ + nds32/$(DEPDIR)/$(am__dirstamp) +nds32/_getpid.$(OBJEXT): nds32/$(am__dirstamp) \ + nds32/$(DEPDIR)/$(am__dirstamp) +nds32/_kill.$(OBJEXT): nds32/$(am__dirstamp) \ + nds32/$(DEPDIR)/$(am__dirstamp) +nds32/_fstat.$(OBJEXT): nds32/$(am__dirstamp) \ + nds32/$(DEPDIR)/$(am__dirstamp) +nds32/_argvlen.$(OBJEXT): nds32/$(am__dirstamp) \ + nds32/$(DEPDIR)/$(am__dirstamp) +nds32/_argv.$(OBJEXT): nds32/$(am__dirstamp) \ + nds32/$(DEPDIR)/$(am__dirstamp) +nds32/_chdir.$(OBJEXT): nds32/$(am__dirstamp) \ + nds32/$(DEPDIR)/$(am__dirstamp) +nds32/_stat.$(OBJEXT): nds32/$(am__dirstamp) \ + nds32/$(DEPDIR)/$(am__dirstamp) +nds32/_chmod.$(OBJEXT): nds32/$(am__dirstamp) \ + nds32/$(DEPDIR)/$(am__dirstamp) +nds32/_utime.$(OBJEXT): nds32/$(am__dirstamp) \ + nds32/$(DEPDIR)/$(am__dirstamp) +nds32/_time.$(OBJEXT): nds32/$(am__dirstamp) \ + nds32/$(DEPDIR)/$(am__dirstamp) +nds32/_gettimeofday.$(OBJEXT): nds32/$(am__dirstamp) \ + nds32/$(DEPDIR)/$(am__dirstamp) +nds32/_times.$(OBJEXT): nds32/$(am__dirstamp) \ + nds32/$(DEPDIR)/$(am__dirstamp) +nds32/_link.$(OBJEXT): nds32/$(am__dirstamp) \ + nds32/$(DEPDIR)/$(am__dirstamp) +nds32/_rename.$(OBJEXT): nds32/$(am__dirstamp) \ + nds32/$(DEPDIR)/$(am__dirstamp) +nds32/_isatty.$(OBJEXT): nds32/$(am__dirstamp) \ + nds32/$(DEPDIR)/$(am__dirstamp) +nds32/_system.$(OBJEXT): nds32/$(am__dirstamp) \ + nds32/$(DEPDIR)/$(am__dirstamp) +nds32/_sbrk.$(OBJEXT): nds32/$(am__dirstamp) \ + nds32/$(DEPDIR)/$(am__dirstamp) +nds32/syscall_error_handler.$(OBJEXT): nds32/$(am__dirstamp) \ + nds32/$(DEPDIR)/$(am__dirstamp) + +nds32/libgloss.a: $(nds32_libgloss_a_OBJECTS) $(nds32_libgloss_a_DEPENDENCIES) $(EXTRA_nds32_libgloss_a_DEPENDENCIES) nds32/$(am__dirstamp) + $(AM_V_at)-rm -f nds32/libgloss.a + $(AM_V_AR)$(nds32_libgloss_a_AR) nds32/libgloss.a $(nds32_libgloss_a_OBJECTS) $(nds32_libgloss_a_LIBADD) + $(AM_V_at)$(RANLIB) nds32/libgloss.a +nios2/$(am__dirstamp): + @$(MKDIR_P) nios2 + @: > nios2/$(am__dirstamp) +nios2/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) nios2/$(DEPDIR) + @: > nios2/$(DEPDIR)/$(am__dirstamp) +nios2/nios2_libnios2_a-crt0.$(OBJEXT): nios2/$(am__dirstamp) \ + nios2/$(DEPDIR)/$(am__dirstamp) +nios2/nios2_libnios2_a-io-close.$(OBJEXT): nios2/$(am__dirstamp) \ + nios2/$(DEPDIR)/$(am__dirstamp) +nios2/nios2_libnios2_a-io-exit.$(OBJEXT): nios2/$(am__dirstamp) \ + nios2/$(DEPDIR)/$(am__dirstamp) +nios2/nios2_libnios2_a-io-fstat.$(OBJEXT): nios2/$(am__dirstamp) \ + nios2/$(DEPDIR)/$(am__dirstamp) +nios2/nios2_libnios2_a-io-gdb.$(OBJEXT): nios2/$(am__dirstamp) \ + nios2/$(DEPDIR)/$(am__dirstamp) +nios2/nios2_libnios2_a-io-gettimeofday.$(OBJEXT): \ + nios2/$(am__dirstamp) nios2/$(DEPDIR)/$(am__dirstamp) +nios2/nios2_libnios2_a-io-isatty.$(OBJEXT): nios2/$(am__dirstamp) \ + nios2/$(DEPDIR)/$(am__dirstamp) +nios2/nios2_libnios2_a-io-lseek.$(OBJEXT): nios2/$(am__dirstamp) \ + nios2/$(DEPDIR)/$(am__dirstamp) +nios2/nios2_libnios2_a-io-nios2.$(OBJEXT): nios2/$(am__dirstamp) \ + nios2/$(DEPDIR)/$(am__dirstamp) +nios2/nios2_libnios2_a-io-open.$(OBJEXT): nios2/$(am__dirstamp) \ + nios2/$(DEPDIR)/$(am__dirstamp) +nios2/nios2_libnios2_a-io-read.$(OBJEXT): nios2/$(am__dirstamp) \ + nios2/$(DEPDIR)/$(am__dirstamp) +nios2/nios2_libnios2_a-io-rename.$(OBJEXT): nios2/$(am__dirstamp) \ + nios2/$(DEPDIR)/$(am__dirstamp) +nios2/nios2_libnios2_a-io-stat.$(OBJEXT): nios2/$(am__dirstamp) \ + nios2/$(DEPDIR)/$(am__dirstamp) +nios2/nios2_libnios2_a-io-system.$(OBJEXT): nios2/$(am__dirstamp) \ + nios2/$(DEPDIR)/$(am__dirstamp) +nios2/nios2_libnios2_a-io-time.$(OBJEXT): nios2/$(am__dirstamp) \ + nios2/$(DEPDIR)/$(am__dirstamp) +nios2/nios2_libnios2_a-io-unlink.$(OBJEXT): nios2/$(am__dirstamp) \ + nios2/$(DEPDIR)/$(am__dirstamp) +nios2/nios2_libnios2_a-io-write.$(OBJEXT): nios2/$(am__dirstamp) \ + nios2/$(DEPDIR)/$(am__dirstamp) +nios2/nios2_libnios2_a-getpid.$(OBJEXT): nios2/$(am__dirstamp) \ + nios2/$(DEPDIR)/$(am__dirstamp) +nios2/nios2_libnios2_a-kill.$(OBJEXT): nios2/$(am__dirstamp) \ + nios2/$(DEPDIR)/$(am__dirstamp) +nios2/nios2_libnios2_a-sbrk.$(OBJEXT): nios2/$(am__dirstamp) \ + nios2/$(DEPDIR)/$(am__dirstamp) + +nios2/libnios2.a: $(nios2_libnios2_a_OBJECTS) $(nios2_libnios2_a_DEPENDENCIES) $(EXTRA_nios2_libnios2_a_DEPENDENCIES) nios2/$(am__dirstamp) + $(AM_V_at)-rm -f nios2/libnios2.a + $(AM_V_AR)$(nios2_libnios2_a_AR) nios2/libnios2.a $(nios2_libnios2_a_OBJECTS) $(nios2_libnios2_a_LIBADD) + $(AM_V_at)$(RANLIB) nios2/libnios2.a +or1k/boards/$(am__dirstamp): + @$(MKDIR_P) or1k/boards + @: > or1k/boards/$(am__dirstamp) +or1k/boards/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) or1k/boards/$(DEPDIR) + @: > or1k/boards/$(DEPDIR)/$(am__dirstamp) +or1k/boards/atlys.$(OBJEXT): or1k/boards/$(am__dirstamp) \ + or1k/boards/$(DEPDIR)/$(am__dirstamp) + +or1k/libboard-atlys.a: $(or1k_libboard_atlys_a_OBJECTS) $(or1k_libboard_atlys_a_DEPENDENCIES) $(EXTRA_or1k_libboard_atlys_a_DEPENDENCIES) or1k/$(am__dirstamp) + $(AM_V_at)-rm -f or1k/libboard-atlys.a + $(AM_V_AR)$(or1k_libboard_atlys_a_AR) or1k/libboard-atlys.a $(or1k_libboard_atlys_a_OBJECTS) $(or1k_libboard_atlys_a_LIBADD) + $(AM_V_at)$(RANLIB) or1k/libboard-atlys.a +or1k/boards/de0_nano.$(OBJEXT): or1k/boards/$(am__dirstamp) \ + or1k/boards/$(DEPDIR)/$(am__dirstamp) + +or1k/libboard-de0_nano.a: $(or1k_libboard_de0_nano_a_OBJECTS) $(or1k_libboard_de0_nano_a_DEPENDENCIES) $(EXTRA_or1k_libboard_de0_nano_a_DEPENDENCIES) or1k/$(am__dirstamp) + $(AM_V_at)-rm -f or1k/libboard-de0_nano.a + $(AM_V_AR)$(or1k_libboard_de0_nano_a_AR) or1k/libboard-de0_nano.a $(or1k_libboard_de0_nano_a_OBJECTS) $(or1k_libboard_de0_nano_a_LIBADD) + $(AM_V_at)$(RANLIB) or1k/libboard-de0_nano.a +or1k/boards/ml501.$(OBJEXT): or1k/boards/$(am__dirstamp) \ + or1k/boards/$(DEPDIR)/$(am__dirstamp) + +or1k/libboard-ml501.a: $(or1k_libboard_ml501_a_OBJECTS) $(or1k_libboard_ml501_a_DEPENDENCIES) $(EXTRA_or1k_libboard_ml501_a_DEPENDENCIES) or1k/$(am__dirstamp) + $(AM_V_at)-rm -f or1k/libboard-ml501.a + $(AM_V_AR)$(or1k_libboard_ml501_a_AR) or1k/libboard-ml501.a $(or1k_libboard_ml501_a_OBJECTS) $(or1k_libboard_ml501_a_LIBADD) + $(AM_V_at)$(RANLIB) or1k/libboard-ml501.a +or1k/boards/optimsoc.$(OBJEXT): or1k/boards/$(am__dirstamp) \ + or1k/boards/$(DEPDIR)/$(am__dirstamp) + +or1k/libboard-optimsoc.a: $(or1k_libboard_optimsoc_a_OBJECTS) $(or1k_libboard_optimsoc_a_DEPENDENCIES) $(EXTRA_or1k_libboard_optimsoc_a_DEPENDENCIES) or1k/$(am__dirstamp) + $(AM_V_at)-rm -f or1k/libboard-optimsoc.a + $(AM_V_AR)$(or1k_libboard_optimsoc_a_AR) or1k/libboard-optimsoc.a $(or1k_libboard_optimsoc_a_OBJECTS) $(or1k_libboard_optimsoc_a_LIBADD) + $(AM_V_at)$(RANLIB) or1k/libboard-optimsoc.a +or1k/boards/or1ksim-uart.$(OBJEXT): or1k/boards/$(am__dirstamp) \ + or1k/boards/$(DEPDIR)/$(am__dirstamp) + +or1k/libboard-or1ksim-uart.a: $(or1k_libboard_or1ksim_uart_a_OBJECTS) $(or1k_libboard_or1ksim_uart_a_DEPENDENCIES) $(EXTRA_or1k_libboard_or1ksim_uart_a_DEPENDENCIES) or1k/$(am__dirstamp) + $(AM_V_at)-rm -f or1k/libboard-or1ksim-uart.a + $(AM_V_AR)$(or1k_libboard_or1ksim_uart_a_AR) or1k/libboard-or1ksim-uart.a $(or1k_libboard_or1ksim_uart_a_OBJECTS) $(or1k_libboard_or1ksim_uart_a_LIBADD) + $(AM_V_at)$(RANLIB) or1k/libboard-or1ksim-uart.a +or1k/boards/or1ksim.$(OBJEXT): or1k/boards/$(am__dirstamp) \ + or1k/boards/$(DEPDIR)/$(am__dirstamp) + +or1k/libboard-or1ksim.a: $(or1k_libboard_or1ksim_a_OBJECTS) $(or1k_libboard_or1ksim_a_DEPENDENCIES) $(EXTRA_or1k_libboard_or1ksim_a_DEPENDENCIES) or1k/$(am__dirstamp) + $(AM_V_at)-rm -f or1k/libboard-or1ksim.a + $(AM_V_AR)$(or1k_libboard_or1ksim_a_AR) or1k/libboard-or1ksim.a $(or1k_libboard_or1ksim_a_OBJECTS) $(or1k_libboard_or1ksim_a_LIBADD) + $(AM_V_at)$(RANLIB) or1k/libboard-or1ksim.a +or1k/boards/ordb1a3pe1500.$(OBJEXT): or1k/boards/$(am__dirstamp) \ + or1k/boards/$(DEPDIR)/$(am__dirstamp) + +or1k/libboard-ordb1a3pe1500.a: $(or1k_libboard_ordb1a3pe1500_a_OBJECTS) $(or1k_libboard_ordb1a3pe1500_a_DEPENDENCIES) $(EXTRA_or1k_libboard_ordb1a3pe1500_a_DEPENDENCIES) or1k/$(am__dirstamp) + $(AM_V_at)-rm -f or1k/libboard-ordb1a3pe1500.a + $(AM_V_AR)$(or1k_libboard_ordb1a3pe1500_a_AR) or1k/libboard-ordb1a3pe1500.a $(or1k_libboard_ordb1a3pe1500_a_OBJECTS) $(or1k_libboard_ordb1a3pe1500_a_LIBADD) + $(AM_V_at)$(RANLIB) or1k/libboard-ordb1a3pe1500.a +or1k/boards/ordb2a.$(OBJEXT): or1k/boards/$(am__dirstamp) \ + or1k/boards/$(DEPDIR)/$(am__dirstamp) + +or1k/libboard-ordb2a.a: $(or1k_libboard_ordb2a_a_OBJECTS) $(or1k_libboard_ordb2a_a_DEPENDENCIES) $(EXTRA_or1k_libboard_ordb2a_a_DEPENDENCIES) or1k/$(am__dirstamp) + $(AM_V_at)-rm -f or1k/libboard-ordb2a.a + $(AM_V_AR)$(or1k_libboard_ordb2a_a_AR) or1k/libboard-ordb2a.a $(or1k_libboard_ordb2a_a_OBJECTS) $(or1k_libboard_ordb2a_a_LIBADD) + $(AM_V_at)$(RANLIB) or1k/libboard-ordb2a.a +or1k/boards/orpsocrefdesign.$(OBJEXT): or1k/boards/$(am__dirstamp) \ + or1k/boards/$(DEPDIR)/$(am__dirstamp) + +or1k/libboard-orpsocrefdesign.a: $(or1k_libboard_orpsocrefdesign_a_OBJECTS) $(or1k_libboard_orpsocrefdesign_a_DEPENDENCIES) $(EXTRA_or1k_libboard_orpsocrefdesign_a_DEPENDENCIES) or1k/$(am__dirstamp) + $(AM_V_at)-rm -f or1k/libboard-orpsocrefdesign.a + $(AM_V_AR)$(or1k_libboard_orpsocrefdesign_a_AR) or1k/libboard-orpsocrefdesign.a $(or1k_libboard_orpsocrefdesign_a_OBJECTS) $(or1k_libboard_orpsocrefdesign_a_LIBADD) + $(AM_V_at)$(RANLIB) or1k/libboard-orpsocrefdesign.a +or1k/syscalls.$(OBJEXT): or1k/$(am__dirstamp) \ + or1k/$(DEPDIR)/$(am__dirstamp) +or1k/or1k_uart.$(OBJEXT): or1k/$(am__dirstamp) \ + or1k/$(DEPDIR)/$(am__dirstamp) +or1k/outbyte.$(OBJEXT): or1k/$(am__dirstamp) \ + or1k/$(DEPDIR)/$(am__dirstamp) +or1k/caches-asm.$(OBJEXT): or1k/$(am__dirstamp) \ + or1k/$(DEPDIR)/$(am__dirstamp) +or1k/exceptions.$(OBJEXT): or1k/$(am__dirstamp) \ + or1k/$(DEPDIR)/$(am__dirstamp) +or1k/exceptions-asm.$(OBJEXT): or1k/$(am__dirstamp) \ + or1k/$(DEPDIR)/$(am__dirstamp) +or1k/interrupts.$(OBJEXT): or1k/$(am__dirstamp) \ + or1k/$(DEPDIR)/$(am__dirstamp) +or1k/interrupts-asm.$(OBJEXT): or1k/$(am__dirstamp) \ + or1k/$(DEPDIR)/$(am__dirstamp) +or1k/mmu-asm.$(OBJEXT): or1k/$(am__dirstamp) \ + or1k/$(DEPDIR)/$(am__dirstamp) +or1k/timer.$(OBJEXT): or1k/$(am__dirstamp) \ + or1k/$(DEPDIR)/$(am__dirstamp) +or1k/sbrk.$(OBJEXT): or1k/$(am__dirstamp) \ + or1k/$(DEPDIR)/$(am__dirstamp) +or1k/impure.$(OBJEXT): or1k/$(am__dirstamp) \ + or1k/$(DEPDIR)/$(am__dirstamp) +or1k/util.$(OBJEXT): or1k/$(am__dirstamp) \ + or1k/$(DEPDIR)/$(am__dirstamp) +or1k/sync-asm.$(OBJEXT): or1k/$(am__dirstamp) \ + or1k/$(DEPDIR)/$(am__dirstamp) + +or1k/libor1k.a: $(or1k_libor1k_a_OBJECTS) $(or1k_libor1k_a_DEPENDENCIES) $(EXTRA_or1k_libor1k_a_DEPENDENCIES) or1k/$(am__dirstamp) + $(AM_V_at)-rm -f or1k/libor1k.a + $(AM_V_AR)$(or1k_libor1k_a_AR) or1k/libor1k.a $(or1k_libor1k_a_OBJECTS) $(or1k_libor1k_a_LIBADD) + $(AM_V_at)$(RANLIB) or1k/libor1k.a +pru/do_global_dtors.$(OBJEXT): pru/$(am__dirstamp) \ + pru/$(DEPDIR)/$(am__dirstamp) +pru/gettimeofday.$(OBJEXT): pru/$(am__dirstamp) \ + pru/$(DEPDIR)/$(am__dirstamp) +pru/isatty.$(OBJEXT): pru/$(am__dirstamp) \ + pru/$(DEPDIR)/$(am__dirstamp) +pru/putnum.$(OBJEXT): pru/$(am__dirstamp) \ + pru/$(DEPDIR)/$(am__dirstamp) +pru/raise.$(OBJEXT): pru/$(am__dirstamp) pru/$(DEPDIR)/$(am__dirstamp) +pru/inbyte.$(OBJEXT): pru/$(am__dirstamp) \ + pru/$(DEPDIR)/$(am__dirstamp) +pru/outbyte.$(OBJEXT): pru/$(am__dirstamp) \ + pru/$(DEPDIR)/$(am__dirstamp) +pru/sbrk.$(OBJEXT): pru/$(am__dirstamp) pru/$(DEPDIR)/$(am__dirstamp) +pru/stat.$(OBJEXT): pru/$(am__dirstamp) pru/$(DEPDIR)/$(am__dirstamp) +pru/syscalls.$(OBJEXT): pru/$(am__dirstamp) \ + pru/$(DEPDIR)/$(am__dirstamp) + +pru/libgloss.a: $(pru_libgloss_a_OBJECTS) $(pru_libgloss_a_DEPENDENCIES) $(EXTRA_pru_libgloss_a_DEPENDENCIES) pru/$(am__dirstamp) + $(AM_V_at)-rm -f pru/libgloss.a + $(AM_V_AR)$(pru_libgloss_a_AR) pru/libgloss.a $(pru_libgloss_a_OBJECTS) $(pru_libgloss_a_LIBADD) + $(AM_V_at)$(RANLIB) pru/libgloss.a riscv/$(am__dirstamp): @$(MKDIR_P) riscv @: > riscv/$(am__dirstamp) @@ -1262,6 +4544,539 @@ riscv/libsemihost.a: $(riscv_libsemihost_a_OBJECTS) $(riscv_libsemihost_a_DEPEND $(AM_V_at)-rm -f riscv/libsemihost.a $(AM_V_AR)$(riscv_libsemihost_a_AR) riscv/libsemihost.a $(riscv_libsemihost_a_OBJECTS) $(riscv_libsemihost_a_LIBADD) $(AM_V_at)$(RANLIB) riscv/libsemihost.a +riscv/riscv_libsim_a-sys_access.$(OBJEXT): riscv/$(am__dirstamp) \ + riscv/$(DEPDIR)/$(am__dirstamp) +riscv/riscv_libsim_a-sys_chdir.$(OBJEXT): riscv/$(am__dirstamp) \ + riscv/$(DEPDIR)/$(am__dirstamp) +riscv/riscv_libsim_a-sys_chmod.$(OBJEXT): riscv/$(am__dirstamp) \ + riscv/$(DEPDIR)/$(am__dirstamp) +riscv/riscv_libsim_a-sys_chown.$(OBJEXT): riscv/$(am__dirstamp) \ + riscv/$(DEPDIR)/$(am__dirstamp) +riscv/riscv_libsim_a-sys_close.$(OBJEXT): riscv/$(am__dirstamp) \ + riscv/$(DEPDIR)/$(am__dirstamp) +riscv/riscv_libsim_a-sys_conv_stat.$(OBJEXT): riscv/$(am__dirstamp) \ + riscv/$(DEPDIR)/$(am__dirstamp) +riscv/riscv_libsim_a-sys_execve.$(OBJEXT): riscv/$(am__dirstamp) \ + riscv/$(DEPDIR)/$(am__dirstamp) +riscv/riscv_libsim_a-sys_exit.$(OBJEXT): riscv/$(am__dirstamp) \ + riscv/$(DEPDIR)/$(am__dirstamp) +riscv/riscv_libsim_a-sys_faccessat.$(OBJEXT): riscv/$(am__dirstamp) \ + riscv/$(DEPDIR)/$(am__dirstamp) +riscv/riscv_libsim_a-sys_fork.$(OBJEXT): riscv/$(am__dirstamp) \ + riscv/$(DEPDIR)/$(am__dirstamp) +riscv/riscv_libsim_a-sys_fstat.$(OBJEXT): riscv/$(am__dirstamp) \ + riscv/$(DEPDIR)/$(am__dirstamp) +riscv/riscv_libsim_a-sys_fstatat.$(OBJEXT): riscv/$(am__dirstamp) \ + riscv/$(DEPDIR)/$(am__dirstamp) +riscv/riscv_libsim_a-sys_ftime.$(OBJEXT): riscv/$(am__dirstamp) \ + riscv/$(DEPDIR)/$(am__dirstamp) +riscv/riscv_libsim_a-sys_getcwd.$(OBJEXT): riscv/$(am__dirstamp) \ + riscv/$(DEPDIR)/$(am__dirstamp) +riscv/riscv_libsim_a-sys_getpid.$(OBJEXT): riscv/$(am__dirstamp) \ + riscv/$(DEPDIR)/$(am__dirstamp) +riscv/riscv_libsim_a-sys_gettimeofday.$(OBJEXT): \ + riscv/$(am__dirstamp) riscv/$(DEPDIR)/$(am__dirstamp) +riscv/riscv_libsim_a-sys_isatty.$(OBJEXT): riscv/$(am__dirstamp) \ + riscv/$(DEPDIR)/$(am__dirstamp) +riscv/riscv_libsim_a-sys_kill.$(OBJEXT): riscv/$(am__dirstamp) \ + riscv/$(DEPDIR)/$(am__dirstamp) +riscv/riscv_libsim_a-sys_link.$(OBJEXT): riscv/$(am__dirstamp) \ + riscv/$(DEPDIR)/$(am__dirstamp) +riscv/riscv_libsim_a-sys_lseek.$(OBJEXT): riscv/$(am__dirstamp) \ + riscv/$(DEPDIR)/$(am__dirstamp) +riscv/riscv_libsim_a-sys_lstat.$(OBJEXT): riscv/$(am__dirstamp) \ + riscv/$(DEPDIR)/$(am__dirstamp) +riscv/riscv_libsim_a-sys_open.$(OBJEXT): riscv/$(am__dirstamp) \ + riscv/$(DEPDIR)/$(am__dirstamp) +riscv/riscv_libsim_a-sys_openat.$(OBJEXT): riscv/$(am__dirstamp) \ + riscv/$(DEPDIR)/$(am__dirstamp) +riscv/riscv_libsim_a-sys_read.$(OBJEXT): riscv/$(am__dirstamp) \ + riscv/$(DEPDIR)/$(am__dirstamp) +riscv/riscv_libsim_a-sys_sbrk.$(OBJEXT): riscv/$(am__dirstamp) \ + riscv/$(DEPDIR)/$(am__dirstamp) +riscv/riscv_libsim_a-sys_stat.$(OBJEXT): riscv/$(am__dirstamp) \ + riscv/$(DEPDIR)/$(am__dirstamp) +riscv/riscv_libsim_a-sys_sysconf.$(OBJEXT): riscv/$(am__dirstamp) \ + riscv/$(DEPDIR)/$(am__dirstamp) +riscv/riscv_libsim_a-sys_times.$(OBJEXT): riscv/$(am__dirstamp) \ + riscv/$(DEPDIR)/$(am__dirstamp) +riscv/riscv_libsim_a-sys_unlink.$(OBJEXT): riscv/$(am__dirstamp) \ + riscv/$(DEPDIR)/$(am__dirstamp) +riscv/riscv_libsim_a-sys_utime.$(OBJEXT): riscv/$(am__dirstamp) \ + riscv/$(DEPDIR)/$(am__dirstamp) +riscv/riscv_libsim_a-sys_wait.$(OBJEXT): riscv/$(am__dirstamp) \ + riscv/$(DEPDIR)/$(am__dirstamp) +riscv/riscv_libsim_a-sys_write.$(OBJEXT): riscv/$(am__dirstamp) \ + riscv/$(DEPDIR)/$(am__dirstamp) + +riscv/libsim.a: $(riscv_libsim_a_OBJECTS) $(riscv_libsim_a_DEPENDENCIES) $(EXTRA_riscv_libsim_a_DEPENDENCIES) riscv/$(am__dirstamp) + $(AM_V_at)-rm -f riscv/libsim.a + $(AM_V_AR)$(riscv_libsim_a_AR) riscv/libsim.a $(riscv_libsim_a_OBJECTS) $(riscv_libsim_a_LIBADD) + $(AM_V_at)$(RANLIB) riscv/libsim.a +rl78/sbrk.$(OBJEXT): rl78/$(am__dirstamp) \ + rl78/$(DEPDIR)/$(am__dirstamp) +rl78/exit.$(OBJEXT): rl78/$(am__dirstamp) \ + rl78/$(DEPDIR)/$(am__dirstamp) +rl78/open.$(OBJEXT): rl78/$(am__dirstamp) \ + rl78/$(DEPDIR)/$(am__dirstamp) +rl78/close.$(OBJEXT): rl78/$(am__dirstamp) \ + rl78/$(DEPDIR)/$(am__dirstamp) +rl78/read.$(OBJEXT): rl78/$(am__dirstamp) \ + rl78/$(DEPDIR)/$(am__dirstamp) +rl78/write.$(OBJEXT): rl78/$(am__dirstamp) \ + rl78/$(DEPDIR)/$(am__dirstamp) +rl78/swrite.$(OBJEXT): rl78/$(am__dirstamp) \ + rl78/$(DEPDIR)/$(am__dirstamp) +rl78/lseek.$(OBJEXT): rl78/$(am__dirstamp) \ + rl78/$(DEPDIR)/$(am__dirstamp) +rl78/unlink.$(OBJEXT): rl78/$(am__dirstamp) \ + rl78/$(DEPDIR)/$(am__dirstamp) +rl78/getpid.$(OBJEXT): rl78/$(am__dirstamp) \ + rl78/$(DEPDIR)/$(am__dirstamp) +rl78/kill.$(OBJEXT): rl78/$(am__dirstamp) \ + rl78/$(DEPDIR)/$(am__dirstamp) +rl78/fstat.$(OBJEXT): rl78/$(am__dirstamp) \ + rl78/$(DEPDIR)/$(am__dirstamp) +rl78/argvlen.$(OBJEXT): rl78/$(am__dirstamp) \ + rl78/$(DEPDIR)/$(am__dirstamp) +rl78/argv.$(OBJEXT): rl78/$(am__dirstamp) \ + rl78/$(DEPDIR)/$(am__dirstamp) +rl78/chdir.$(OBJEXT): rl78/$(am__dirstamp) \ + rl78/$(DEPDIR)/$(am__dirstamp) +rl78/stat.$(OBJEXT): rl78/$(am__dirstamp) \ + rl78/$(DEPDIR)/$(am__dirstamp) +rl78/chmod.$(OBJEXT): rl78/$(am__dirstamp) \ + rl78/$(DEPDIR)/$(am__dirstamp) +rl78/utime.$(OBJEXT): rl78/$(am__dirstamp) \ + rl78/$(DEPDIR)/$(am__dirstamp) +rl78/time.$(OBJEXT): rl78/$(am__dirstamp) \ + rl78/$(DEPDIR)/$(am__dirstamp) +rl78/gettimeofday.$(OBJEXT): rl78/$(am__dirstamp) \ + rl78/$(DEPDIR)/$(am__dirstamp) +rl78/times.$(OBJEXT): rl78/$(am__dirstamp) \ + rl78/$(DEPDIR)/$(am__dirstamp) +rl78/link.$(OBJEXT): rl78/$(am__dirstamp) \ + rl78/$(DEPDIR)/$(am__dirstamp) +rl78/isatty.$(OBJEXT): rl78/$(am__dirstamp) \ + rl78/$(DEPDIR)/$(am__dirstamp) +rl78/abort.$(OBJEXT): rl78/$(am__dirstamp) \ + rl78/$(DEPDIR)/$(am__dirstamp) +rl78/mcount.$(OBJEXT): rl78/$(am__dirstamp) \ + rl78/$(DEPDIR)/$(am__dirstamp) + +rl78/libsim.a: $(rl78_libsim_a_OBJECTS) $(rl78_libsim_a_DEPENDENCIES) $(EXTRA_rl78_libsim_a_DEPENDENCIES) rl78/$(am__dirstamp) + $(AM_V_at)-rm -f rl78/libsim.a + $(AM_V_AR)$(rl78_libsim_a_AR) rl78/libsim.a $(rl78_libsim_a_OBJECTS) $(rl78_libsim_a_LIBADD) + $(AM_V_at)$(RANLIB) rl78/libsim.a +rx/sbrk.$(OBJEXT): rx/$(am__dirstamp) rx/$(DEPDIR)/$(am__dirstamp) +rx/heaptop.$(OBJEXT): rx/$(am__dirstamp) rx/$(DEPDIR)/$(am__dirstamp) +rx/exit.$(OBJEXT): rx/$(am__dirstamp) rx/$(DEPDIR)/$(am__dirstamp) +rx/open.$(OBJEXT): rx/$(am__dirstamp) rx/$(DEPDIR)/$(am__dirstamp) +rx/close.$(OBJEXT): rx/$(am__dirstamp) rx/$(DEPDIR)/$(am__dirstamp) +rx/read.$(OBJEXT): rx/$(am__dirstamp) rx/$(DEPDIR)/$(am__dirstamp) +rx/write.$(OBJEXT): rx/$(am__dirstamp) rx/$(DEPDIR)/$(am__dirstamp) +rx/lseek.$(OBJEXT): rx/$(am__dirstamp) rx/$(DEPDIR)/$(am__dirstamp) +rx/unlink.$(OBJEXT): rx/$(am__dirstamp) rx/$(DEPDIR)/$(am__dirstamp) +rx/getpid.$(OBJEXT): rx/$(am__dirstamp) rx/$(DEPDIR)/$(am__dirstamp) +rx/kill.$(OBJEXT): rx/$(am__dirstamp) rx/$(DEPDIR)/$(am__dirstamp) +rx/fstat.$(OBJEXT): rx/$(am__dirstamp) rx/$(DEPDIR)/$(am__dirstamp) +rx/argvlen.$(OBJEXT): rx/$(am__dirstamp) rx/$(DEPDIR)/$(am__dirstamp) +rx/argv.$(OBJEXT): rx/$(am__dirstamp) rx/$(DEPDIR)/$(am__dirstamp) +rx/chdir.$(OBJEXT): rx/$(am__dirstamp) rx/$(DEPDIR)/$(am__dirstamp) +rx/stat.$(OBJEXT): rx/$(am__dirstamp) rx/$(DEPDIR)/$(am__dirstamp) +rx/chmod.$(OBJEXT): rx/$(am__dirstamp) rx/$(DEPDIR)/$(am__dirstamp) +rx/utime.$(OBJEXT): rx/$(am__dirstamp) rx/$(DEPDIR)/$(am__dirstamp) +rx/time.$(OBJEXT): rx/$(am__dirstamp) rx/$(DEPDIR)/$(am__dirstamp) +rx/gettimeofday.$(OBJEXT): rx/$(am__dirstamp) \ + rx/$(DEPDIR)/$(am__dirstamp) +rx/times.$(OBJEXT): rx/$(am__dirstamp) rx/$(DEPDIR)/$(am__dirstamp) +rx/link.$(OBJEXT): rx/$(am__dirstamp) rx/$(DEPDIR)/$(am__dirstamp) +rx/isatty.$(OBJEXT): rx/$(am__dirstamp) rx/$(DEPDIR)/$(am__dirstamp) +rx/abort.$(OBJEXT): rx/$(am__dirstamp) rx/$(DEPDIR)/$(am__dirstamp) +rx/mcount.$(OBJEXT): rx/$(am__dirstamp) rx/$(DEPDIR)/$(am__dirstamp) +rx/sigprocmask.$(OBJEXT): rx/$(am__dirstamp) \ + rx/$(DEPDIR)/$(am__dirstamp) +rx/sleep.$(OBJEXT): rx/$(am__dirstamp) rx/$(DEPDIR)/$(am__dirstamp) + +rx/libsim.a: $(rx_libsim_a_OBJECTS) $(rx_libsim_a_DEPENDENCIES) $(EXTRA_rx_libsim_a_DEPENDENCIES) rx/$(am__dirstamp) + $(AM_V_at)-rm -f rx/libsim.a + $(AM_V_AR)$(rx_libsim_a_AR) rx/libsim.a $(rx_libsim_a_OBJECTS) $(rx_libsim_a_LIBADD) + $(AM_V_at)$(RANLIB) rx/libsim.a +sparc/cygmon-salib.$(OBJEXT): sparc/$(am__dirstamp) \ + sparc/$(DEPDIR)/$(am__dirstamp) + +sparc/libcygmon.a: $(sparc_libcygmon_a_OBJECTS) $(sparc_libcygmon_a_DEPENDENCIES) $(EXTRA_sparc_libcygmon_a_DEPENDENCIES) sparc/$(am__dirstamp) + $(AM_V_at)-rm -f sparc/libcygmon.a + $(AM_V_AR)$(sparc_libcygmon_a_AR) sparc/libcygmon.a $(sparc_libcygmon_a_OBJECTS) $(sparc_libcygmon_a_LIBADD) + $(AM_V_at)$(RANLIB) sparc/libcygmon.a +sparc/erc32-io.$(OBJEXT): sparc/$(am__dirstamp) \ + sparc/$(DEPDIR)/$(am__dirstamp) +sparc/traps.$(OBJEXT): sparc/$(am__dirstamp) \ + sparc/$(DEPDIR)/$(am__dirstamp) +sparc/erc32-stub.$(OBJEXT): sparc/$(am__dirstamp) \ + sparc/$(DEPDIR)/$(am__dirstamp) +sparc/fixctors.$(OBJEXT): sparc/$(am__dirstamp) \ + sparc/$(DEPDIR)/$(am__dirstamp) + +sparc/liberc32.a: $(sparc_liberc32_a_OBJECTS) $(sparc_liberc32_a_DEPENDENCIES) $(EXTRA_sparc_liberc32_a_DEPENDENCIES) sparc/$(am__dirstamp) + $(AM_V_at)-rm -f sparc/liberc32.a + $(AM_V_AR)$(sparc_liberc32_a_AR) sparc/liberc32.a $(sparc_liberc32_a_OBJECTS) $(sparc_liberc32_a_LIBADD) + $(AM_V_at)$(RANLIB) sparc/liberc32.a +sparc/salib.$(OBJEXT): sparc/$(am__dirstamp) \ + sparc/$(DEPDIR)/$(am__dirstamp) +sparc/sparcl-stub.$(OBJEXT): sparc/$(am__dirstamp) \ + sparc/$(DEPDIR)/$(am__dirstamp) +sparc/cache.$(OBJEXT): sparc/$(am__dirstamp) \ + sparc/$(DEPDIR)/$(am__dirstamp) + +sparc/libslite86x.a: $(sparc_libslite86x_a_OBJECTS) $(sparc_libslite86x_a_DEPENDENCIES) $(EXTRA_sparc_libslite86x_a_DEPENDENCIES) sparc/$(am__dirstamp) + $(AM_V_at)-rm -f sparc/libslite86x.a + $(AM_V_AR)$(sparc_libslite86x_a_AR) sparc/libslite86x.a $(sparc_libslite86x_a_OBJECTS) $(sparc_libslite86x_a_LIBADD) + $(AM_V_at)$(RANLIB) sparc/libslite86x.a + +sparc/libslite930.a: $(sparc_libslite930_a_OBJECTS) $(sparc_libslite930_a_DEPENDENCIES) $(EXTRA_sparc_libslite930_a_DEPENDENCIES) sparc/$(am__dirstamp) + $(AM_V_at)-rm -f sparc/libslite930.a + $(AM_V_AR)$(sparc_libslite930_a_AR) sparc/libslite930.a $(sparc_libslite930_a_OBJECTS) $(sparc_libslite930_a_LIBADD) + $(AM_V_at)$(RANLIB) sparc/libslite930.a + +sparc/libslite931.a: $(sparc_libslite931_a_OBJECTS) $(sparc_libslite931_a_DEPENDENCIES) $(EXTRA_sparc_libslite931_a_DEPENDENCIES) sparc/$(am__dirstamp) + $(AM_V_at)-rm -f sparc/libslite931.a + $(AM_V_AR)$(sparc_libslite931_a_AR) sparc/libslite931.a $(sparc_libslite931_a_OBJECTS) $(sparc_libslite931_a_LIBADD) + $(AM_V_at)$(RANLIB) sparc/libslite931.a + +sparc/libslite934.a: $(sparc_libslite934_a_OBJECTS) $(sparc_libslite934_a_DEPENDENCIES) $(EXTRA_sparc_libslite934_a_DEPENDENCIES) sparc/$(am__dirstamp) + $(AM_V_at)-rm -f sparc/libslite934.a + $(AM_V_AR)$(sparc_libslite934_a_AR) sparc/libslite934.a $(sparc_libslite934_a_OBJECTS) $(sparc_libslite934_a_LIBADD) + $(AM_V_at)$(RANLIB) sparc/libslite934.a +sparc/sysc-701.$(OBJEXT): sparc/$(am__dirstamp) \ + sparc/$(DEPDIR)/$(am__dirstamp) +sparc/salib-701.$(OBJEXT): sparc/$(am__dirstamp) \ + sparc/$(DEPDIR)/$(am__dirstamp) +sparc/sparclet-stub.$(OBJEXT): sparc/$(am__dirstamp) \ + sparc/$(DEPDIR)/$(am__dirstamp) + +sparc/libsplet701.a: $(sparc_libsplet701_a_OBJECTS) $(sparc_libsplet701_a_DEPENDENCIES) $(EXTRA_sparc_libsplet701_a_DEPENDENCIES) sparc/$(am__dirstamp) + $(AM_V_at)-rm -f sparc/libsplet701.a + $(AM_V_AR)$(sparc_libsplet701_a_AR) sparc/libsplet701.a $(sparc_libsplet701_a_OBJECTS) $(sparc_libsplet701_a_LIBADD) + $(AM_V_at)$(RANLIB) sparc/libsplet701.a +sparc_leon/kernel.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/kernel_debug.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/kernel_debug_var.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/kernel_context.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/kernel_mutex.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/kernel_thread.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/kernel_sched.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/kernel_queue.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/kernel_mm.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) + +sparc_leon/liblbthread.a: $(sparc_leon_liblbthread_a_OBJECTS) $(sparc_leon_liblbthread_a_DEPENDENCIES) $(EXTRA_sparc_leon_liblbthread_a_DEPENDENCIES) sparc_leon/$(am__dirstamp) + $(AM_V_at)-rm -f sparc_leon/liblbthread.a + $(AM_V_AR)$(sparc_leon_liblbthread_a_AR) sparc_leon/liblbthread.a $(sparc_leon_liblbthread_a_OBJECTS) $(sparc_leon_liblbthread_a_LIBADD) + $(AM_V_at)$(RANLIB) sparc_leon/liblbthread.a +sparc_leon/io.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/etrap.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/rtrap.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/etrap_fast.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/rtrap_fast.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/irqinstall.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/regwin.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/regwinflush.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/fpu.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/bdinit.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/contextswitch.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/busscan.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/irqtrap_fast.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/catch_interrupt.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/catch_interrupt_svt.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/catch_interrupt_mvt.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/catch_interrupt_pending.$(OBJEXT): \ + sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/gettimeofday.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/times.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/rtc.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/lcpuinit.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/console_init.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/console.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/console_dbg.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/contextswitch_asm.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/_exit.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/amba.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/amba_dbg.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/amba_scan.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/amba_driver.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/timer.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/mutex.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/locore.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/locore_clean.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/locore_var.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/locore_var_svt.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/jiffies.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/mmu_asm.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/locore_svtdisp.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/locore_mvt_reset.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/locore_svt_reset.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/stop.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/initcalls.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/regwin_patch.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/cacheA.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) +sparc_leon/nocache.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) + +sparc_leon/libleonbare.a: $(sparc_leon_libleonbare_a_OBJECTS) $(sparc_leon_libleonbare_a_DEPENDENCIES) $(EXTRA_sparc_leon_libleonbare_a_DEPENDENCIES) sparc_leon/$(am__dirstamp) + $(AM_V_at)-rm -f sparc_leon/libleonbare.a + $(AM_V_AR)$(sparc_leon_libleonbare_a_AR) sparc_leon/libleonbare.a $(sparc_leon_libleonbare_a_OBJECTS) $(sparc_leon_libleonbare_a_LIBADD) + $(AM_V_at)$(RANLIB) sparc_leon/libleonbare.a +sparc_leon/locore_atexit.$(OBJEXT): sparc_leon/$(am__dirstamp) \ + sparc_leon/$(DEPDIR)/$(am__dirstamp) + +sparc_leon/libsmall.a: $(sparc_leon_libsmall_a_OBJECTS) $(sparc_leon_libsmall_a_DEPENDENCIES) $(EXTRA_sparc_leon_libsmall_a_DEPENDENCIES) sparc_leon/$(am__dirstamp) + $(AM_V_at)-rm -f sparc_leon/libsmall.a + $(AM_V_AR)$(sparc_leon_libsmall_a_AR) sparc_leon/libsmall.a $(sparc_leon_libsmall_a_OBJECTS) $(sparc_leon_libsmall_a_LIBADD) + $(AM_V_at)$(RANLIB) sparc_leon/libsmall.a +tic6x/sbrk.$(OBJEXT): tic6x/$(am__dirstamp) \ + tic6x/$(DEPDIR)/$(am__dirstamp) +tic6x/getpid.$(OBJEXT): tic6x/$(am__dirstamp) \ + tic6x/$(DEPDIR)/$(am__dirstamp) +tic6x/kill.$(OBJEXT): tic6x/$(am__dirstamp) \ + tic6x/$(DEPDIR)/$(am__dirstamp) +tic6x/syscalls.$(OBJEXT): tic6x/$(am__dirstamp) \ + tic6x/$(DEPDIR)/$(am__dirstamp) + +tic6x/libsim.a: $(tic6x_libsim_a_OBJECTS) $(tic6x_libsim_a_DEPENDENCIES) $(EXTRA_tic6x_libsim_a_DEPENDENCIES) tic6x/$(am__dirstamp) + $(AM_V_at)-rm -f tic6x/libsim.a + $(AM_V_AR)$(tic6x_libsim_a_AR) tic6x/libsim.a $(tic6x_libsim_a_OBJECTS) $(tic6x_libsim_a_LIBADD) + $(AM_V_at)$(RANLIB) tic6x/libsim.a +v850/_exit.$(OBJEXT): v850/$(am__dirstamp) \ + v850/$(DEPDIR)/$(am__dirstamp) +v850/access.$(OBJEXT): v850/$(am__dirstamp) \ + v850/$(DEPDIR)/$(am__dirstamp) +v850/chmod.$(OBJEXT): v850/$(am__dirstamp) \ + v850/$(DEPDIR)/$(am__dirstamp) +v850/chown.$(OBJEXT): v850/$(am__dirstamp) \ + v850/$(DEPDIR)/$(am__dirstamp) +v850/close.$(OBJEXT): v850/$(am__dirstamp) \ + v850/$(DEPDIR)/$(am__dirstamp) +v850/creat.$(OBJEXT): v850/$(am__dirstamp) \ + v850/$(DEPDIR)/$(am__dirstamp) +v850/crt1.$(OBJEXT): v850/$(am__dirstamp) \ + v850/$(DEPDIR)/$(am__dirstamp) +v850/execv.$(OBJEXT): v850/$(am__dirstamp) \ + v850/$(DEPDIR)/$(am__dirstamp) +v850/execve.$(OBJEXT): v850/$(am__dirstamp) \ + v850/$(DEPDIR)/$(am__dirstamp) +v850/fork.$(OBJEXT): v850/$(am__dirstamp) \ + v850/$(DEPDIR)/$(am__dirstamp) +v850/fstat.$(OBJEXT): v850/$(am__dirstamp) \ + v850/$(DEPDIR)/$(am__dirstamp) +v850/getpid.$(OBJEXT): v850/$(am__dirstamp) \ + v850/$(DEPDIR)/$(am__dirstamp) +v850/gettime.$(OBJEXT): v850/$(am__dirstamp) \ + v850/$(DEPDIR)/$(am__dirstamp) +v850/isatty.$(OBJEXT): v850/$(am__dirstamp) \ + v850/$(DEPDIR)/$(am__dirstamp) +v850/kill.$(OBJEXT): v850/$(am__dirstamp) \ + v850/$(DEPDIR)/$(am__dirstamp) +v850/link.$(OBJEXT): v850/$(am__dirstamp) \ + v850/$(DEPDIR)/$(am__dirstamp) +v850/lseek.$(OBJEXT): v850/$(am__dirstamp) \ + v850/$(DEPDIR)/$(am__dirstamp) +v850/open.$(OBJEXT): v850/$(am__dirstamp) \ + v850/$(DEPDIR)/$(am__dirstamp) +v850/pipe.$(OBJEXT): v850/$(am__dirstamp) \ + v850/$(DEPDIR)/$(am__dirstamp) +v850/read.$(OBJEXT): v850/$(am__dirstamp) \ + v850/$(DEPDIR)/$(am__dirstamp) +v850/sbrk.$(OBJEXT): v850/$(am__dirstamp) \ + v850/$(DEPDIR)/$(am__dirstamp) +v850/stat.$(OBJEXT): v850/$(am__dirstamp) \ + v850/$(DEPDIR)/$(am__dirstamp) +v850/time.$(OBJEXT): v850/$(am__dirstamp) \ + v850/$(DEPDIR)/$(am__dirstamp) +v850/times.$(OBJEXT): v850/$(am__dirstamp) \ + v850/$(DEPDIR)/$(am__dirstamp) +v850/trap.$(OBJEXT): v850/$(am__dirstamp) \ + v850/$(DEPDIR)/$(am__dirstamp) +v850/unlink.$(OBJEXT): v850/$(am__dirstamp) \ + v850/$(DEPDIR)/$(am__dirstamp) +v850/utime.$(OBJEXT): v850/$(am__dirstamp) \ + v850/$(DEPDIR)/$(am__dirstamp) +v850/wait.$(OBJEXT): v850/$(am__dirstamp) \ + v850/$(DEPDIR)/$(am__dirstamp) +v850/write.$(OBJEXT): v850/$(am__dirstamp) \ + v850/$(DEPDIR)/$(am__dirstamp) + +v850/libsim.a: $(v850_libsim_a_OBJECTS) $(v850_libsim_a_DEPENDENCIES) $(EXTRA_v850_libsim_a_DEPENDENCIES) v850/$(am__dirstamp) + $(AM_V_at)-rm -f v850/libsim.a + $(AM_V_AR)$(v850_libsim_a_AR) v850/libsim.a $(v850_libsim_a_OBJECTS) $(v850_libsim_a_LIBADD) + $(AM_V_at)$(RANLIB) v850/libsim.a +visium/io-gdb.$(OBJEXT): visium/$(am__dirstamp) \ + visium/$(DEPDIR)/$(am__dirstamp) +visium/io-stubs.$(OBJEXT): visium/$(am__dirstamp) \ + visium/$(DEPDIR)/$(am__dirstamp) +visium/sbrk.$(OBJEXT): visium/$(am__dirstamp) \ + visium/$(DEPDIR)/$(am__dirstamp) +visium/syscalls.$(OBJEXT): visium/$(am__dirstamp) \ + visium/$(DEPDIR)/$(am__dirstamp) + +visium/libdebug.a: $(visium_libdebug_a_OBJECTS) $(visium_libdebug_a_DEPENDENCIES) $(EXTRA_visium_libdebug_a_DEPENDENCIES) visium/$(am__dirstamp) + $(AM_V_at)-rm -f visium/libdebug.a + $(AM_V_AR)$(visium_libdebug_a_AR) visium/libdebug.a $(visium_libdebug_a_OBJECTS) $(visium_libdebug_a_LIBADD) + $(AM_V_at)$(RANLIB) visium/libdebug.a +visium/_exit.$(OBJEXT): visium/$(am__dirstamp) \ + visium/$(DEPDIR)/$(am__dirstamp) +visium/gettod.$(OBJEXT): visium/$(am__dirstamp) \ + visium/$(DEPDIR)/$(am__dirstamp) +visium/serial-inbyte.$(OBJEXT): visium/$(am__dirstamp) \ + visium/$(DEPDIR)/$(am__dirstamp) +visium/serial-outbyte.$(OBJEXT): visium/$(am__dirstamp) \ + visium/$(DEPDIR)/$(am__dirstamp) + +visium/libserial.a: $(visium_libserial_a_OBJECTS) $(visium_libserial_a_DEPENDENCIES) $(EXTRA_visium_libserial_a_DEPENDENCIES) visium/$(am__dirstamp) + $(AM_V_at)-rm -f visium/libserial.a + $(AM_V_AR)$(visium_libserial_a_AR) visium/libserial.a $(visium_libserial_a_OBJECTS) $(visium_libserial_a_LIBADD) + $(AM_V_at)$(RANLIB) visium/libserial.a +visium/sim-syscalls.$(OBJEXT): visium/$(am__dirstamp) \ + visium/$(DEPDIR)/$(am__dirstamp) + +visium/libsim.a: $(visium_libsim_a_OBJECTS) $(visium_libsim_a_DEPENDENCIES) $(EXTRA_visium_libsim_a_DEPENDENCIES) visium/$(am__dirstamp) + $(AM_V_at)-rm -f visium/libsim.a + $(AM_V_AR)$(visium_libsim_a_AR) visium/libsim.a $(visium_libsim_a_OBJECTS) $(visium_libsim_a_LIBADD) + $(AM_V_at)$(RANLIB) visium/libsim.a +xstormy16/close.$(OBJEXT): xstormy16/$(am__dirstamp) \ + xstormy16/$(DEPDIR)/$(am__dirstamp) +xstormy16/fstat.$(OBJEXT): xstormy16/$(am__dirstamp) \ + xstormy16/$(DEPDIR)/$(am__dirstamp) +xstormy16/getpid.$(OBJEXT): xstormy16/$(am__dirstamp) \ + xstormy16/$(DEPDIR)/$(am__dirstamp) +xstormy16/kill.$(OBJEXT): xstormy16/$(am__dirstamp) \ + xstormy16/$(DEPDIR)/$(am__dirstamp) +xstormy16/lseek.$(OBJEXT): xstormy16/$(am__dirstamp) \ + xstormy16/$(DEPDIR)/$(am__dirstamp) +xstormy16/open.$(OBJEXT): xstormy16/$(am__dirstamp) \ + xstormy16/$(DEPDIR)/$(am__dirstamp) +xstormy16/stat.$(OBJEXT): xstormy16/$(am__dirstamp) \ + xstormy16/$(DEPDIR)/$(am__dirstamp) +xstormy16/unlink.$(OBJEXT): xstormy16/$(am__dirstamp) \ + xstormy16/$(DEPDIR)/$(am__dirstamp) +xstormy16/eva_app.$(OBJEXT): xstormy16/$(am__dirstamp) \ + xstormy16/$(DEPDIR)/$(am__dirstamp) +xstormy16/isatty.$(OBJEXT): xstormy16/$(am__dirstamp) \ + xstormy16/$(DEPDIR)/$(am__dirstamp) + +xstormy16/libeva_app.a: $(xstormy16_libeva_app_a_OBJECTS) $(xstormy16_libeva_app_a_DEPENDENCIES) $(EXTRA_xstormy16_libeva_app_a_DEPENDENCIES) xstormy16/$(am__dirstamp) + $(AM_V_at)-rm -f xstormy16/libeva_app.a + $(AM_V_AR)$(xstormy16_libeva_app_a_AR) xstormy16/libeva_app.a $(xstormy16_libeva_app_a_OBJECTS) $(xstormy16_libeva_app_a_LIBADD) + $(AM_V_at)$(RANLIB) xstormy16/libeva_app.a +xstormy16/syscalls.$(OBJEXT): xstormy16/$(am__dirstamp) \ + xstormy16/$(DEPDIR)/$(am__dirstamp) +xstormy16/sim_malloc_start.$(OBJEXT): xstormy16/$(am__dirstamp) \ + xstormy16/$(DEPDIR)/$(am__dirstamp) + +xstormy16/libsim.a: $(xstormy16_libsim_a_OBJECTS) $(xstormy16_libsim_a_DEPENDENCIES) $(EXTRA_xstormy16_libsim_a_DEPENDENCIES) xstormy16/$(am__dirstamp) + $(AM_V_at)-rm -f xstormy16/libsim.a + $(AM_V_AR)$(xstormy16_libsim_a_AR) xstormy16/libsim.a $(xstormy16_libsim_a_OBJECTS) $(xstormy16_libsim_a_LIBADD) + $(AM_V_at)$(RANLIB) xstormy16/libsim.a +xtensa/xtensa_libgloss_a-sleep.$(OBJEXT): xtensa/$(am__dirstamp) \ + xtensa/$(DEPDIR)/$(am__dirstamp) +xtensa/xtensa_libgloss_a-syscalls.$(OBJEXT): xtensa/$(am__dirstamp) \ + xtensa/$(DEPDIR)/$(am__dirstamp) +xtensa/xtensa_libgloss_a-window-vectors.$(OBJEXT): \ + xtensa/$(am__dirstamp) xtensa/$(DEPDIR)/$(am__dirstamp) +xtensa/boards/esp32/$(am__dirstamp): + @$(MKDIR_P) xtensa/boards/esp32 + @: > xtensa/boards/esp32/$(am__dirstamp) +xtensa/boards/esp32/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) xtensa/boards/esp32/$(DEPDIR) + @: > xtensa/boards/esp32/$(DEPDIR)/$(am__dirstamp) +xtensa/boards/esp32/xtensa_libgloss_a-board.$(OBJEXT): \ + xtensa/boards/esp32/$(am__dirstamp) \ + xtensa/boards/esp32/$(DEPDIR)/$(am__dirstamp) +xtensa/boards/esp32s3/$(am__dirstamp): + @$(MKDIR_P) xtensa/boards/esp32s3 + @: > xtensa/boards/esp32s3/$(am__dirstamp) +xtensa/boards/esp32s3/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) xtensa/boards/esp32s3/$(DEPDIR) + @: > xtensa/boards/esp32s3/$(DEPDIR)/$(am__dirstamp) +xtensa/boards/esp32s3/xtensa_libgloss_a-board.$(OBJEXT): \ + xtensa/boards/esp32s3/$(am__dirstamp) \ + xtensa/boards/esp32s3/$(DEPDIR)/$(am__dirstamp) + +xtensa/libgloss.a: $(xtensa_libgloss_a_OBJECTS) $(xtensa_libgloss_a_DEPENDENCIES) $(EXTRA_xtensa_libgloss_a_DEPENDENCIES) xtensa/$(am__dirstamp) + $(AM_V_at)-rm -f xtensa/libgloss.a + $(AM_V_AR)$(xtensa_libgloss_a_AR) xtensa/libgloss.a $(xtensa_libgloss_a_OBJECTS) $(xtensa_libgloss_a_LIBADD) + $(AM_V_at)$(RANLIB) xtensa/libgloss.a +xtensa/xtensa_libsys_openocd_a-syscalls.$(OBJEXT): \ + xtensa/$(am__dirstamp) xtensa/$(DEPDIR)/$(am__dirstamp) + +xtensa/libsys_openocd.a: $(xtensa_libsys_openocd_a_OBJECTS) $(xtensa_libsys_openocd_a_DEPENDENCIES) $(EXTRA_xtensa_libsys_openocd_a_DEPENDENCIES) xtensa/$(am__dirstamp) + $(AM_V_at)-rm -f xtensa/libsys_openocd.a + $(AM_V_AR)$(xtensa_libsys_openocd_a_AR) xtensa/libsys_openocd.a $(xtensa_libsys_openocd_a_OBJECTS) $(xtensa_libsys_openocd_a_LIBADD) + $(AM_V_at)$(RANLIB) xtensa/libsys_openocd.a +xtensa/xtensa_libsys_qemu_a-sim-vectors.$(OBJEXT): \ + xtensa/$(am__dirstamp) xtensa/$(DEPDIR)/$(am__dirstamp) +xtensa/xtensa_libsys_qemu_a-sim-call.$(OBJEXT): \ + xtensa/$(am__dirstamp) xtensa/$(DEPDIR)/$(am__dirstamp) +xtensa/xtensa_libsys_qemu_a-syscalls.$(OBJEXT): \ + xtensa/$(am__dirstamp) xtensa/$(DEPDIR)/$(am__dirstamp) + +xtensa/libsys_qemu.a: $(xtensa_libsys_qemu_a_OBJECTS) $(xtensa_libsys_qemu_a_DEPENDENCIES) $(EXTRA_xtensa_libsys_qemu_a_DEPENDENCIES) xtensa/$(am__dirstamp) + $(AM_V_at)-rm -f xtensa/libsys_qemu.a + $(AM_V_AR)$(xtensa_libsys_qemu_a_AR) xtensa/libsys_qemu.a $(xtensa_libsys_qemu_a_OBJECTS) $(xtensa_libsys_qemu_a_LIBADD) + $(AM_V_at)$(RANLIB) xtensa/libsys_qemu.a install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ @@ -1307,6 +5122,48 @@ clean-binPROGRAMS: clean-checkPROGRAMS: -test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS) +install-multilibtoolPROGRAMS: $(multilibtool_PROGRAMS) + @$(NORMAL_INSTALL) + @list='$(multilibtool_PROGRAMS)'; test -n "$(multilibtooldir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(multilibtooldir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(multilibtooldir)" || exit 1; \ + fi; \ + for p in $$list; do echo "$$p $$p"; done | \ + sed 's/$(EXEEXT)$$//' | \ + while read p p1; do if test -f $$p \ + ; then echo "$$p"; echo "$$p"; else :; fi; \ + done | \ + sed -e 'p;s,.*/,,;n;h' \ + -e 's|.*|.|' \ + -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ + sed 'N;N;N;s,\n, ,g' | \ + $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ + { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ + if ($$2 == $$4) files[d] = files[d] " " $$1; \ + else { print "f", $$3 "/" $$4, $$1; } } \ + END { for (d in files) print "f", d, files[d] }' | \ + while read type dir files; do \ + if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ + test -z "$$files" || { \ + echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(multilibtooldir)$$dir'"; \ + $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(multilibtooldir)$$dir" || exit $$?; \ + } \ + ; done + +uninstall-multilibtoolPROGRAMS: + @$(NORMAL_UNINSTALL) + @list='$(multilibtool_PROGRAMS)'; test -n "$(multilibtooldir)" || list=; \ + files=`for p in $$list; do echo "$$p"; done | \ + sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ + -e 's/$$/$(EXEEXT)/' \ + `; \ + test -n "$$list" || exit 0; \ + echo " ( cd '$(DESTDIR)$(multilibtooldir)' && rm -f" $$files ")"; \ + cd "$(DESTDIR)$(multilibtooldir)" && rm -f $$files + +clean-multilibtoolPROGRAMS: + -test -z "$(multilibtool_PROGRAMS)" || rm -f $(multilibtool_PROGRAMS) bfin/sim-test.$(OBJEXT): bfin/$(am__dirstamp) \ bfin/$(DEPDIR)/$(am__dirstamp) @@ -1319,6 +5176,36 @@ iq2000/test.$(OBJEXT): iq2000/$(am__dirstamp) \ iq2000/test$(EXEEXT): $(iq2000_test_OBJECTS) $(iq2000_test_DEPENDENCIES) $(EXTRA_iq2000_test_DEPENDENCIES) iq2000/$(am__dirstamp) @rm -f iq2000/test$(EXEEXT) $(AM_V_CCLD)$(LINK) $(iq2000_test_OBJECTS) $(iq2000_test_LDADD) $(LIBS) +mn10200/test.$(OBJEXT): mn10200/$(am__dirstamp) \ + mn10200/$(DEPDIR)/$(am__dirstamp) + +mn10200/test$(EXEEXT): $(mn10200_test_OBJECTS) $(mn10200_test_DEPENDENCIES) $(EXTRA_mn10200_test_DEPENDENCIES) mn10200/$(am__dirstamp) + @rm -f mn10200/test$(EXEEXT) + $(AM_V_CCLD)$(mn10200_test_LINK) $(mn10200_test_OBJECTS) $(mn10200_test_LDADD) $(LIBS) +mn10300/test.$(OBJEXT): mn10300/$(am__dirstamp) \ + mn10300/$(DEPDIR)/$(am__dirstamp) + +mn10300/test$(EXEEXT): $(mn10300_test_OBJECTS) $(mn10300_test_DEPENDENCIES) $(EXTRA_mn10300_test_DEPENDENCIES) mn10300/$(am__dirstamp) + @rm -f mn10300/test$(EXEEXT) + $(AM_V_CCLD)$(mn10300_test_LINK) $(mn10300_test_OBJECTS) $(mn10300_test_LDADD) $(LIBS) +sparc/test.$(OBJEXT): sparc/$(am__dirstamp) \ + sparc/$(DEPDIR)/$(am__dirstamp) + +sparc/erc32-test$(EXEEXT): $(sparc_erc32_test_OBJECTS) $(sparc_erc32_test_DEPENDENCIES) $(EXTRA_sparc_erc32_test_DEPENDENCIES) sparc/$(am__dirstamp) + @rm -f sparc/erc32-test$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(sparc_erc32_test_OBJECTS) $(sparc_erc32_test_LDADD) $(LIBS) + +sparc/ex930-test$(EXEEXT): $(sparc_ex930_test_OBJECTS) $(sparc_ex930_test_DEPENDENCIES) $(EXTRA_sparc_ex930_test_DEPENDENCIES) sparc/$(am__dirstamp) + @rm -f sparc/ex930-test$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(sparc_ex930_test_OBJECTS) $(sparc_ex930_test_LDADD) $(LIBS) + +sparc/ex931-test$(EXEEXT): $(sparc_ex931_test_OBJECTS) $(sparc_ex931_test_DEPENDENCIES) $(EXTRA_sparc_ex931_test_DEPENDENCIES) sparc/$(am__dirstamp) + @rm -f sparc/ex931-test$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(sparc_ex931_test_OBJECTS) $(sparc_ex931_test_LDADD) $(LIBS) + +sparc/ex934-test$(EXEEXT): $(sparc_ex934_test_OBJECTS) $(sparc_ex934_test_DEPENDENCIES) $(EXTRA_sparc_ex934_test_DEPENDENCIES) sparc/$(am__dirstamp) + @rm -f sparc/ex934-test$(EXEEXT) + $(AM_V_CCLD)$(LINK) $(sparc_ex934_test_OBJECTS) $(sparc_ex934_test_LDADD) $(LIBS) wince/$(am__dirstamp): @$(MKDIR_P) wince @: > wince/$(am__dirstamp) @@ -1326,19 +5213,110 @@ wince/$(am__dirstamp): wince/stub.exe$(EXEEXT): $(wince_stub_exe_OBJECTS) $(wince_stub_exe_DEPENDENCIES) $(EXTRA_wince_stub_exe_DEPENDENCIES) wince/$(am__dirstamp) @rm -f wince/stub.exe$(EXEEXT) $(AM_V_CCLD)$(LINK) $(wince_stub_exe_OBJECTS) $(wince_stub_exe_LDADD) $(LIBS) +xstormy16/xstormy16_stub.$(OBJEXT): xstormy16/$(am__dirstamp) \ + xstormy16/$(DEPDIR)/$(am__dirstamp) +xstormy16/crt0_stub.$(OBJEXT): xstormy16/$(am__dirstamp) \ + xstormy16/$(DEPDIR)/$(am__dirstamp) + +xstormy16/eva_stub.elf$(EXEEXT): $(xstormy16_eva_stub_elf_OBJECTS) $(xstormy16_eva_stub_elf_DEPENDENCIES) $(EXTRA_xstormy16_eva_stub_elf_DEPENDENCIES) xstormy16/$(am__dirstamp) + @rm -f xstormy16/eva_stub.elf$(EXEEXT) + $(AM_V_CCLD)$(xstormy16_eva_stub_elf_LINK) $(xstormy16_eva_stub_elf_OBJECTS) $(xstormy16_eva_stub_elf_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) + -rm -f aarch64/*.$(OBJEXT) + -rm -f arc/*.$(OBJEXT) + -rm -f arm/*.$(OBJEXT) -rm -f bfin/*.$(OBJEXT) + -rm -f cr16/*.$(OBJEXT) + -rm -f csky/*.$(OBJEXT) + -rm -f d30v/*.$(OBJEXT) + -rm -f epiphany/*.$(OBJEXT) + -rm -f fr30/*.$(OBJEXT) + -rm -f frv/*.$(OBJEXT) + -rm -f ft32/*.$(OBJEXT) + -rm -f i386/*.$(OBJEXT) + -rm -f i960/*.$(OBJEXT) -rm -f iq2000/*.$(OBJEXT) -rm -f libnosys/*.$(OBJEXT) -rm -f lm32/*.$(OBJEXT) + -rm -f m32r/*.$(OBJEXT) + -rm -f mcore/*.$(OBJEXT) + -rm -f microblaze/*.$(OBJEXT) + -rm -f mn10200/*.$(OBJEXT) + -rm -f mn10300/*.$(OBJEXT) + -rm -f moxie/*.$(OBJEXT) + -rm -f msp430/*.$(OBJEXT) + -rm -f nds32/*.$(OBJEXT) + -rm -f nios2/*.$(OBJEXT) + -rm -f or1k/*.$(OBJEXT) + -rm -f or1k/boards/*.$(OBJEXT) + -rm -f pru/*.$(OBJEXT) -rm -f riscv/*.$(OBJEXT) + -rm -f rl78/*.$(OBJEXT) + -rm -f rx/*.$(OBJEXT) + -rm -f sparc/*.$(OBJEXT) + -rm -f sparc_leon/*.$(OBJEXT) + -rm -f tic6x/*.$(OBJEXT) + -rm -f v850/*.$(OBJEXT) + -rm -f visium/*.$(OBJEXT) + -rm -f xstormy16/*.$(OBJEXT) + -rm -f xtensa/*.$(OBJEXT) + -rm -f xtensa/boards/esp32/*.$(OBJEXT) + -rm -f xtensa/boards/esp32s3/*.$(OBJEXT) distclean-compile: -rm -f *.tab.c +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/close.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/debug.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fstat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getpid.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isatty.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kill.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lseek.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/open.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/print.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/putnum.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/read.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sbrk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/stat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unlink.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wince_stub_exe-wince-stub.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/write.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@aarch64/$(DEPDIR)/aarch64_librdimon_a-_exit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@aarch64/$(DEPDIR)/aarch64_librdimon_a-_kill.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@aarch64/$(DEPDIR)/aarch64_librdimon_a-ftruncate.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@aarch64/$(DEPDIR)/aarch64_librdimon_a-libcfunc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@aarch64/$(DEPDIR)/aarch64_librdimon_a-syscalls.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@aarch64/$(DEPDIR)/aarch64_librdimon_a-truncate.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@arc/$(DEPDIR)/libcfunc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@arc/$(DEPDIR)/mcount.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@arc/$(DEPDIR)/nsim-syscalls.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@arc/$(DEPDIR)/sbrk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@arm/$(DEPDIR)/_exit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@arm/$(DEPDIR)/_kill.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@arm/$(DEPDIR)/arm_librdimon_a-_exit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@arm/$(DEPDIR)/arm_librdimon_a-_kill.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@arm/$(DEPDIR)/arm_librdimon_a-ftruncate.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@arm/$(DEPDIR)/arm_librdimon_a-libcfunc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@arm/$(DEPDIR)/arm_librdimon_a-syscalls.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@arm/$(DEPDIR)/arm_librdimon_a-trap.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@arm/$(DEPDIR)/arm_librdimon_a-truncate.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@arm/$(DEPDIR)/arm_librdimon_v2m_a-_exit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@arm/$(DEPDIR)/arm_librdimon_v2m_a-_kill.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@arm/$(DEPDIR)/arm_librdimon_v2m_a-ftruncate.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@arm/$(DEPDIR)/arm_librdimon_v2m_a-libcfunc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@arm/$(DEPDIR)/arm_librdimon_v2m_a-syscalls.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@arm/$(DEPDIR)/arm_librdimon_v2m_a-trap.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@arm/$(DEPDIR)/arm_librdimon_v2m_a-truncate.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@arm/$(DEPDIR)/ftruncate.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@arm/$(DEPDIR)/libcfunc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@arm/$(DEPDIR)/linux-syscalls0.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@arm/$(DEPDIR)/linux-syscalls1.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@arm/$(DEPDIR)/syscalls.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@arm/$(DEPDIR)/trap.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@arm/$(DEPDIR)/truncate.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@bfin/$(DEPDIR)/basiccrt.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@bfin/$(DEPDIR)/bfin_libbfinbsp_a-_exit.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@bfin/$(DEPDIR)/bfin_libbfinbsp_a-clear_cache_range.Po@am__quote@ @@ -1346,6 +5324,121 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@bfin/$(DEPDIR)/bfin_libsim_a-syscalls.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@bfin/$(DEPDIR)/crt0.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@bfin/$(DEPDIR)/sim-test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@cr16/$(DEPDIR)/_exit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@cr16/$(DEPDIR)/_getenv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@cr16/$(DEPDIR)/_rename.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@cr16/$(DEPDIR)/close.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@cr16/$(DEPDIR)/crt1.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@cr16/$(DEPDIR)/crti.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@cr16/$(DEPDIR)/crtn.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@cr16/$(DEPDIR)/dvz_hndl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@cr16/$(DEPDIR)/flg_hndl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@cr16/$(DEPDIR)/fstat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@cr16/$(DEPDIR)/getpid.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@cr16/$(DEPDIR)/iad_hndl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@cr16/$(DEPDIR)/intable.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@cr16/$(DEPDIR)/isatty.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@cr16/$(DEPDIR)/kill.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@cr16/$(DEPDIR)/lseek.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@cr16/$(DEPDIR)/open.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@cr16/$(DEPDIR)/putnum.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@cr16/$(DEPDIR)/read.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@cr16/$(DEPDIR)/sbrk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@cr16/$(DEPDIR)/stat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@cr16/$(DEPDIR)/svc_hndl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@cr16/$(DEPDIR)/time.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@cr16/$(DEPDIR)/und_hndl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@cr16/$(DEPDIR)/unlink.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@cr16/$(DEPDIR)/write.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@csky/$(DEPDIR)/crt0.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@csky/$(DEPDIR)/csky_libsemi_a-getpid.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@csky/$(DEPDIR)/csky_libsemi_a-io-close.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@csky/$(DEPDIR)/csky_libsemi_a-io-exit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@csky/$(DEPDIR)/csky_libsemi_a-io-fstat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@csky/$(DEPDIR)/csky_libsemi_a-io-gdb.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@csky/$(DEPDIR)/csky_libsemi_a-io-gettimeofday.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@csky/$(DEPDIR)/csky_libsemi_a-io-isatty.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@csky/$(DEPDIR)/csky_libsemi_a-io-lseek.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@csky/$(DEPDIR)/csky_libsemi_a-io-open.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@csky/$(DEPDIR)/csky_libsemi_a-io-read.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@csky/$(DEPDIR)/csky_libsemi_a-io-rename.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@csky/$(DEPDIR)/csky_libsemi_a-io-semi.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@csky/$(DEPDIR)/csky_libsemi_a-io-stat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@csky/$(DEPDIR)/csky_libsemi_a-io-system.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@csky/$(DEPDIR)/csky_libsemi_a-io-time.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@csky/$(DEPDIR)/csky_libsemi_a-io-unlink.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@csky/$(DEPDIR)/csky_libsemi_a-io-write.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@csky/$(DEPDIR)/csky_libsemi_a-kill.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@csky/$(DEPDIR)/csky_libsemi_a-sbrk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@d30v/$(DEPDIR)/inbyte.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@d30v/$(DEPDIR)/outbyte.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@d30v/$(DEPDIR)/syscalls.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@epiphany/$(DEPDIR)/_exit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@epiphany/$(DEPDIR)/_isatty.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@epiphany/$(DEPDIR)/access.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@epiphany/$(DEPDIR)/close.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@epiphany/$(DEPDIR)/crt0.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@epiphany/$(DEPDIR)/environ.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@epiphany/$(DEPDIR)/epiphany-ivthandlers.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@epiphany/$(DEPDIR)/epiphany-syscalls.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@epiphany/$(DEPDIR)/execve.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@epiphany/$(DEPDIR)/fork.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@epiphany/$(DEPDIR)/fstat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@epiphany/$(DEPDIR)/getpid.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@epiphany/$(DEPDIR)/gettimeofday.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@epiphany/$(DEPDIR)/kill.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@epiphany/$(DEPDIR)/link.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@epiphany/$(DEPDIR)/lseek.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@epiphany/$(DEPDIR)/open.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@epiphany/$(DEPDIR)/read.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@epiphany/$(DEPDIR)/sbrk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@epiphany/$(DEPDIR)/stat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@epiphany/$(DEPDIR)/times.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@epiphany/$(DEPDIR)/unlink.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@epiphany/$(DEPDIR)/wait.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@epiphany/$(DEPDIR)/write.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@fr30/$(DEPDIR)/syscalls.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@frv/$(DEPDIR)/crt0.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@frv/$(DEPDIR)/fstat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@frv/$(DEPDIR)/getpid.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@frv/$(DEPDIR)/isatty.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@frv/$(DEPDIR)/kill.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@frv/$(DEPDIR)/putnum.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@frv/$(DEPDIR)/sbrk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@frv/$(DEPDIR)/sim-close.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@frv/$(DEPDIR)/sim-exit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@frv/$(DEPDIR)/sim-inbyte.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@frv/$(DEPDIR)/sim-lseek.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@frv/$(DEPDIR)/sim-open.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@frv/$(DEPDIR)/sim-read.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@frv/$(DEPDIR)/sim-time.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@frv/$(DEPDIR)/sim-unlink.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@frv/$(DEPDIR)/sim-write.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@frv/$(DEPDIR)/stat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ft32/$(DEPDIR)/crt0.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ft32/$(DEPDIR)/fstat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ft32/$(DEPDIR)/getpid.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ft32/$(DEPDIR)/isatty.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ft32/$(DEPDIR)/kill.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ft32/$(DEPDIR)/sbrk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ft32/$(DEPDIR)/sim-close.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ft32/$(DEPDIR)/sim-exit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ft32/$(DEPDIR)/sim-inbyte.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ft32/$(DEPDIR)/sim-lseek.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ft32/$(DEPDIR)/sim-open.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ft32/$(DEPDIR)/sim-read.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ft32/$(DEPDIR)/sim-time.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ft32/$(DEPDIR)/sim-unlink.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ft32/$(DEPDIR)/sim-write.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@ft32/$(DEPDIR)/stat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@i386/$(DEPDIR)/cygmon-crt0.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@i386/$(DEPDIR)/i386_libcygmon_a-cygmon-gmon.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@i386/$(DEPDIR)/i386_libcygmon_a-cygmon-salib.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@i960/$(DEPDIR)/crt0.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@i960/$(DEPDIR)/mon-read.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@i960/$(DEPDIR)/mon-syscalls.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@i960/$(DEPDIR)/mon-write.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@i960/$(DEPDIR)/mon960.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@iq2000/$(DEPDIR)/_exit.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@iq2000/$(DEPDIR)/access.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@iq2000/$(DEPDIR)/chmod.Po@am__quote@ @@ -1376,6 +5469,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@libnosys/$(DEPDIR)/execve.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libnosys/$(DEPDIR)/fork.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libnosys/$(DEPDIR)/fstat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libnosys/$(DEPDIR)/getentropy.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libnosys/$(DEPDIR)/getpid.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libnosys/$(DEPDIR)/gettod.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libnosys/$(DEPDIR)/isatty.Po@am__quote@ @@ -1395,6 +5489,236 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@lm32/$(DEPDIR)/crt0.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@lm32/$(DEPDIR)/isatty.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@lm32/$(DEPDIR)/scall.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@m32r/$(DEPDIR)/chmod.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@m32r/$(DEPDIR)/close.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@m32r/$(DEPDIR)/crt0.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@m32r/$(DEPDIR)/exit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@m32r/$(DEPDIR)/fstat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@m32r/$(DEPDIR)/getpid.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@m32r/$(DEPDIR)/isatty.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@m32r/$(DEPDIR)/kill.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@m32r/$(DEPDIR)/lseek.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@m32r/$(DEPDIR)/m32r-lib.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@m32r/$(DEPDIR)/m32r-stub.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@m32r/$(DEPDIR)/open.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@m32r/$(DEPDIR)/raise.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@m32r/$(DEPDIR)/read.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@m32r/$(DEPDIR)/sbrk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@m32r/$(DEPDIR)/stat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@m32r/$(DEPDIR)/trap0.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@m32r/$(DEPDIR)/trapmon0.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@m32r/$(DEPDIR)/unlink.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@m32r/$(DEPDIR)/utime.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@m32r/$(DEPDIR)/write.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mcore/$(DEPDIR)/close.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mcore/$(DEPDIR)/cmb-exit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mcore/$(DEPDIR)/cmb-inbyte.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mcore/$(DEPDIR)/cmb-outbyte.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mcore/$(DEPDIR)/crt0.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mcore/$(DEPDIR)/fstat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mcore/$(DEPDIR)/getpid.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mcore/$(DEPDIR)/kill.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mcore/$(DEPDIR)/lseek.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mcore/$(DEPDIR)/open.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mcore/$(DEPDIR)/print.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mcore/$(DEPDIR)/putnum.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mcore/$(DEPDIR)/raise.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mcore/$(DEPDIR)/read.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mcore/$(DEPDIR)/sbrk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mcore/$(DEPDIR)/stat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mcore/$(DEPDIR)/syscalls.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mcore/$(DEPDIR)/unlink.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mcore/$(DEPDIR)/write.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@microblaze/$(DEPDIR)/_exception_handler.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@microblaze/$(DEPDIR)/_hw_exception_handler.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@microblaze/$(DEPDIR)/_interrupt_handler.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@microblaze/$(DEPDIR)/_program_clean.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@microblaze/$(DEPDIR)/_program_init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@microblaze/$(DEPDIR)/crt0.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@microblaze/$(DEPDIR)/crt1.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@microblaze/$(DEPDIR)/crt2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@microblaze/$(DEPDIR)/crt3.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@microblaze/$(DEPDIR)/crt4.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@microblaze/$(DEPDIR)/crtinit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@microblaze/$(DEPDIR)/linux-crt0.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@microblaze/$(DEPDIR)/linux-inbyte.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@microblaze/$(DEPDIR)/linux-outbyte.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@microblaze/$(DEPDIR)/linux-syscalls-wrap.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@microblaze/$(DEPDIR)/linux-syscalls.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@microblaze/$(DEPDIR)/pgcrtinit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@microblaze/$(DEPDIR)/sbrk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@microblaze/$(DEPDIR)/sim-crtinit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@microblaze/$(DEPDIR)/sim-pgcrtinit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@microblaze/$(DEPDIR)/timer.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@microblaze/$(DEPDIR)/xil_malloc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@microblaze/$(DEPDIR)/xil_printf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@microblaze/$(DEPDIR)/xil_sbrk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mn10200/$(DEPDIR)/_exit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mn10200/$(DEPDIR)/access.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mn10200/$(DEPDIR)/chmod.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mn10200/$(DEPDIR)/close.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mn10200/$(DEPDIR)/crt0.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mn10200/$(DEPDIR)/crt1.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mn10200/$(DEPDIR)/fstat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mn10200/$(DEPDIR)/getpid.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mn10200/$(DEPDIR)/isatty.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mn10200/$(DEPDIR)/kill.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mn10200/$(DEPDIR)/lseek.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mn10200/$(DEPDIR)/open.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mn10200/$(DEPDIR)/read.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mn10200/$(DEPDIR)/sbrk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mn10200/$(DEPDIR)/stat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mn10200/$(DEPDIR)/test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mn10200/$(DEPDIR)/time.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mn10200/$(DEPDIR)/trap.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mn10200/$(DEPDIR)/unlink.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mn10200/$(DEPDIR)/utime.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mn10200/$(DEPDIR)/write.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mn10300/$(DEPDIR)/_exit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mn10300/$(DEPDIR)/access.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mn10300/$(DEPDIR)/chmod.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mn10300/$(DEPDIR)/close.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mn10300/$(DEPDIR)/crt0.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mn10300/$(DEPDIR)/crt0_cygmon.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mn10300/$(DEPDIR)/crt0_redboot.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mn10300/$(DEPDIR)/crt1.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mn10300/$(DEPDIR)/cygmon.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mn10300/$(DEPDIR)/fstat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mn10300/$(DEPDIR)/getpid.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mn10300/$(DEPDIR)/isatty.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mn10300/$(DEPDIR)/kill.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mn10300/$(DEPDIR)/lseek.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mn10300/$(DEPDIR)/open.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mn10300/$(DEPDIR)/read.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mn10300/$(DEPDIR)/sbrk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mn10300/$(DEPDIR)/stat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mn10300/$(DEPDIR)/test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mn10300/$(DEPDIR)/time.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mn10300/$(DEPDIR)/times.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mn10300/$(DEPDIR)/trap.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mn10300/$(DEPDIR)/unlink.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mn10300/$(DEPDIR)/utime.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@mn10300/$(DEPDIR)/write.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@moxie/$(DEPDIR)/crt0.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@moxie/$(DEPDIR)/fstat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@moxie/$(DEPDIR)/getpid.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@moxie/$(DEPDIR)/isatty.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@moxie/$(DEPDIR)/kill.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@moxie/$(DEPDIR)/putnum.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@moxie/$(DEPDIR)/qemu-time.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@moxie/$(DEPDIR)/qemu-write.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@moxie/$(DEPDIR)/sbrk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@moxie/$(DEPDIR)/sim-close.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@moxie/$(DEPDIR)/sim-exit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@moxie/$(DEPDIR)/sim-inbyte.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@moxie/$(DEPDIR)/sim-lseek.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@moxie/$(DEPDIR)/sim-open.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@moxie/$(DEPDIR)/sim-read.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@moxie/$(DEPDIR)/sim-time.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@moxie/$(DEPDIR)/sim-unlink.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@moxie/$(DEPDIR)/sim-write.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@moxie/$(DEPDIR)/stat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@msp430/$(DEPDIR)/cio.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@msp430/$(DEPDIR)/ciosyscalls.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@msp430/$(DEPDIR)/crt0.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@msp430/$(DEPDIR)/crt_bss.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@msp430/$(DEPDIR)/crt_callexit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@msp430/$(DEPDIR)/crt_high_bss.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@msp430/$(DEPDIR)/crt_main.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@msp430/$(DEPDIR)/crt_move_highdata.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@msp430/$(DEPDIR)/crt_movedata.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@msp430/$(DEPDIR)/crt_run_array.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@msp430/$(DEPDIR)/crt_run_fini_array.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@msp430/$(DEPDIR)/crt_run_init_array.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@msp430/$(DEPDIR)/crt_run_preinit_array.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@msp430/$(DEPDIR)/gcrt0.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@msp430/$(DEPDIR)/sbrk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@msp430/$(DEPDIR)/syscalls.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@msp430/$(DEPDIR)/unlink.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@msp430/$(DEPDIR)/write.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@nds32/$(DEPDIR)/_argv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@nds32/$(DEPDIR)/_argvlen.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@nds32/$(DEPDIR)/_chdir.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@nds32/$(DEPDIR)/_chmod.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@nds32/$(DEPDIR)/_close.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@nds32/$(DEPDIR)/_exit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@nds32/$(DEPDIR)/_fstat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@nds32/$(DEPDIR)/_getpid.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@nds32/$(DEPDIR)/_gettimeofday.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@nds32/$(DEPDIR)/_isatty.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@nds32/$(DEPDIR)/_kill.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@nds32/$(DEPDIR)/_link.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@nds32/$(DEPDIR)/_lseek.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@nds32/$(DEPDIR)/_open.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@nds32/$(DEPDIR)/_read.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@nds32/$(DEPDIR)/_rename.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@nds32/$(DEPDIR)/_sbrk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@nds32/$(DEPDIR)/_stat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@nds32/$(DEPDIR)/_system.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@nds32/$(DEPDIR)/_time.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@nds32/$(DEPDIR)/_times.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@nds32/$(DEPDIR)/_unlink.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@nds32/$(DEPDIR)/_utime.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@nds32/$(DEPDIR)/_write.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@nds32/$(DEPDIR)/crt0.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@nds32/$(DEPDIR)/crt1.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@nds32/$(DEPDIR)/syscall_error_handler.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@nios2/$(DEPDIR)/nios2_libnios2_a-crt0.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@nios2/$(DEPDIR)/nios2_libnios2_a-getpid.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@nios2/$(DEPDIR)/nios2_libnios2_a-io-close.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@nios2/$(DEPDIR)/nios2_libnios2_a-io-exit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@nios2/$(DEPDIR)/nios2_libnios2_a-io-fstat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@nios2/$(DEPDIR)/nios2_libnios2_a-io-gdb.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@nios2/$(DEPDIR)/nios2_libnios2_a-io-gettimeofday.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@nios2/$(DEPDIR)/nios2_libnios2_a-io-isatty.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@nios2/$(DEPDIR)/nios2_libnios2_a-io-lseek.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@nios2/$(DEPDIR)/nios2_libnios2_a-io-nios2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@nios2/$(DEPDIR)/nios2_libnios2_a-io-open.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@nios2/$(DEPDIR)/nios2_libnios2_a-io-read.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@nios2/$(DEPDIR)/nios2_libnios2_a-io-rename.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@nios2/$(DEPDIR)/nios2_libnios2_a-io-stat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@nios2/$(DEPDIR)/nios2_libnios2_a-io-system.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@nios2/$(DEPDIR)/nios2_libnios2_a-io-time.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@nios2/$(DEPDIR)/nios2_libnios2_a-io-unlink.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@nios2/$(DEPDIR)/nios2_libnios2_a-io-write.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@nios2/$(DEPDIR)/nios2_libnios2_a-kill.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@nios2/$(DEPDIR)/nios2_libnios2_a-sbrk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@or1k/$(DEPDIR)/caches-asm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@or1k/$(DEPDIR)/crt0.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@or1k/$(DEPDIR)/exceptions-asm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@or1k/$(DEPDIR)/exceptions.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@or1k/$(DEPDIR)/impure.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@or1k/$(DEPDIR)/interrupts-asm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@or1k/$(DEPDIR)/interrupts.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@or1k/$(DEPDIR)/mmu-asm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@or1k/$(DEPDIR)/or1k_uart.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@or1k/$(DEPDIR)/outbyte.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@or1k/$(DEPDIR)/sbrk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@or1k/$(DEPDIR)/sync-asm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@or1k/$(DEPDIR)/syscalls.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@or1k/$(DEPDIR)/timer.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@or1k/$(DEPDIR)/util.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@or1k/boards/$(DEPDIR)/atlys.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@or1k/boards/$(DEPDIR)/de0_nano.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@or1k/boards/$(DEPDIR)/ml501.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@or1k/boards/$(DEPDIR)/optimsoc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@or1k/boards/$(DEPDIR)/or1ksim-uart.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@or1k/boards/$(DEPDIR)/or1ksim.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@or1k/boards/$(DEPDIR)/ordb1a3pe1500.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@or1k/boards/$(DEPDIR)/ordb2a.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@or1k/boards/$(DEPDIR)/orpsocrefdesign.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@pru/$(DEPDIR)/crt0-minrt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@pru/$(DEPDIR)/crt0.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@pru/$(DEPDIR)/do_global_dtors.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@pru/$(DEPDIR)/gettimeofday.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@pru/$(DEPDIR)/inbyte.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@pru/$(DEPDIR)/isatty.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@pru/$(DEPDIR)/outbyte.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@pru/$(DEPDIR)/putnum.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@pru/$(DEPDIR)/raise.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@pru/$(DEPDIR)/sbrk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@pru/$(DEPDIR)/stat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@pru/$(DEPDIR)/syscalls.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@riscv/$(DEPDIR)/riscv_libgloss_a-sys_access.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@riscv/$(DEPDIR)/riscv_libgloss_a-sys_chdir.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@riscv/$(DEPDIR)/riscv_libgloss_a-sys_chmod.Po@am__quote@ @@ -1453,6 +5777,242 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@riscv/$(DEPDIR)/riscv_libsemihost_a-sys_kill.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@riscv/$(DEPDIR)/riscv_libsemihost_a-sys_utime.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@riscv/$(DEPDIR)/riscv_libsemihost_a-sys_wait.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@riscv/$(DEPDIR)/riscv_libsim_a-sys_access.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@riscv/$(DEPDIR)/riscv_libsim_a-sys_chdir.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@riscv/$(DEPDIR)/riscv_libsim_a-sys_chmod.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@riscv/$(DEPDIR)/riscv_libsim_a-sys_chown.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@riscv/$(DEPDIR)/riscv_libsim_a-sys_close.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@riscv/$(DEPDIR)/riscv_libsim_a-sys_conv_stat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@riscv/$(DEPDIR)/riscv_libsim_a-sys_execve.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@riscv/$(DEPDIR)/riscv_libsim_a-sys_exit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@riscv/$(DEPDIR)/riscv_libsim_a-sys_faccessat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@riscv/$(DEPDIR)/riscv_libsim_a-sys_fork.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@riscv/$(DEPDIR)/riscv_libsim_a-sys_fstat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@riscv/$(DEPDIR)/riscv_libsim_a-sys_fstatat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@riscv/$(DEPDIR)/riscv_libsim_a-sys_ftime.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@riscv/$(DEPDIR)/riscv_libsim_a-sys_getcwd.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@riscv/$(DEPDIR)/riscv_libsim_a-sys_getpid.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@riscv/$(DEPDIR)/riscv_libsim_a-sys_gettimeofday.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@riscv/$(DEPDIR)/riscv_libsim_a-sys_isatty.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@riscv/$(DEPDIR)/riscv_libsim_a-sys_kill.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@riscv/$(DEPDIR)/riscv_libsim_a-sys_link.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@riscv/$(DEPDIR)/riscv_libsim_a-sys_lseek.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@riscv/$(DEPDIR)/riscv_libsim_a-sys_lstat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@riscv/$(DEPDIR)/riscv_libsim_a-sys_open.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@riscv/$(DEPDIR)/riscv_libsim_a-sys_openat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@riscv/$(DEPDIR)/riscv_libsim_a-sys_read.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@riscv/$(DEPDIR)/riscv_libsim_a-sys_sbrk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@riscv/$(DEPDIR)/riscv_libsim_a-sys_stat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@riscv/$(DEPDIR)/riscv_libsim_a-sys_sysconf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@riscv/$(DEPDIR)/riscv_libsim_a-sys_times.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@riscv/$(DEPDIR)/riscv_libsim_a-sys_unlink.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@riscv/$(DEPDIR)/riscv_libsim_a-sys_utime.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@riscv/$(DEPDIR)/riscv_libsim_a-sys_wait.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@riscv/$(DEPDIR)/riscv_libsim_a-sys_write.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rl78/$(DEPDIR)/abort.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rl78/$(DEPDIR)/argv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rl78/$(DEPDIR)/argvlen.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rl78/$(DEPDIR)/chdir.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rl78/$(DEPDIR)/chmod.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rl78/$(DEPDIR)/close.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rl78/$(DEPDIR)/crt0.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rl78/$(DEPDIR)/crtn.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rl78/$(DEPDIR)/exit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rl78/$(DEPDIR)/fstat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rl78/$(DEPDIR)/gcrt0.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rl78/$(DEPDIR)/getpid.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rl78/$(DEPDIR)/gettimeofday.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rl78/$(DEPDIR)/isatty.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rl78/$(DEPDIR)/kill.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rl78/$(DEPDIR)/link.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rl78/$(DEPDIR)/lseek.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rl78/$(DEPDIR)/mcount.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rl78/$(DEPDIR)/open.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rl78/$(DEPDIR)/read.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rl78/$(DEPDIR)/sbrk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rl78/$(DEPDIR)/stat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rl78/$(DEPDIR)/swrite.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rl78/$(DEPDIR)/time.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rl78/$(DEPDIR)/times.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rl78/$(DEPDIR)/unlink.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rl78/$(DEPDIR)/utime.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rl78/$(DEPDIR)/write.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rx/$(DEPDIR)/abort.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rx/$(DEPDIR)/argv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rx/$(DEPDIR)/argvlen.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rx/$(DEPDIR)/chdir.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rx/$(DEPDIR)/chmod.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rx/$(DEPDIR)/close.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rx/$(DEPDIR)/crt0.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rx/$(DEPDIR)/crtn.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rx/$(DEPDIR)/exit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rx/$(DEPDIR)/fstat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rx/$(DEPDIR)/gcrt0.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rx/$(DEPDIR)/getpid.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rx/$(DEPDIR)/gettimeofday.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rx/$(DEPDIR)/heaptop.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rx/$(DEPDIR)/isatty.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rx/$(DEPDIR)/kill.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rx/$(DEPDIR)/link.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rx/$(DEPDIR)/lseek.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rx/$(DEPDIR)/mcount.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rx/$(DEPDIR)/open.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rx/$(DEPDIR)/read.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rx/$(DEPDIR)/sbrk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rx/$(DEPDIR)/sigprocmask.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rx/$(DEPDIR)/sleep.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rx/$(DEPDIR)/stat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rx/$(DEPDIR)/time.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rx/$(DEPDIR)/times.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rx/$(DEPDIR)/unlink.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rx/$(DEPDIR)/utime.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@rx/$(DEPDIR)/write.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc/$(DEPDIR)/cache.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc/$(DEPDIR)/crt0-701.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc/$(DEPDIR)/crt0.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc/$(DEPDIR)/cygmon-crt0.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc/$(DEPDIR)/cygmon-salib.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc/$(DEPDIR)/erc32-crt0.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc/$(DEPDIR)/erc32-io.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc/$(DEPDIR)/erc32-stub.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc/$(DEPDIR)/fixctors.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc/$(DEPDIR)/salib-701.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc/$(DEPDIR)/salib.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc/$(DEPDIR)/sparcl-stub.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc/$(DEPDIR)/sparclet-stub.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc/$(DEPDIR)/sysc-701.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc/$(DEPDIR)/test.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc/$(DEPDIR)/traps.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/_exit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/amba.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/amba_dbg.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/amba_driver.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/amba_scan.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/bdinit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/busscan.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/cacheA.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/catch_interrupt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/catch_interrupt_mvt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/catch_interrupt_pending.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/catch_interrupt_svt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/console.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/console_dbg.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/console_init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/contextswitch.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/contextswitch_asm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/crt0.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/etrap.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/etrap_fast.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/fpu.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/gettimeofday.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/initcalls.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/io.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/irqinstall.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/irqtrap_fast.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/jiffies.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/kernel.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/kernel_context.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/kernel_debug.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/kernel_debug_var.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/kernel_mm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/kernel_mutex.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/kernel_queue.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/kernel_sched.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/kernel_thread.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/lcpuinit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/locore.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/locore_atexit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/locore_clean.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/locore_mvt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/locore_mvt_reset.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/locore_svt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/locore_svt_reset.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/locore_svtdisp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/locore_var.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/locore_var_svt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/mmu_asm.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/mutex.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/nocache.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/pnpinit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/pnpinit_simple.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/regwin.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/regwin_patch.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/regwinflush.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/rtc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/rtrap.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/rtrap_fast.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/stop.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/timer.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@sparc_leon/$(DEPDIR)/times.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@tic6x/$(DEPDIR)/crt0.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@tic6x/$(DEPDIR)/getpid.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@tic6x/$(DEPDIR)/kill.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@tic6x/$(DEPDIR)/sbrk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@tic6x/$(DEPDIR)/syscalls.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@v850/$(DEPDIR)/_exit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@v850/$(DEPDIR)/access.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@v850/$(DEPDIR)/chmod.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@v850/$(DEPDIR)/chown.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@v850/$(DEPDIR)/close.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@v850/$(DEPDIR)/creat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@v850/$(DEPDIR)/crt0.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@v850/$(DEPDIR)/crt1.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@v850/$(DEPDIR)/execv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@v850/$(DEPDIR)/execve.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@v850/$(DEPDIR)/fork.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@v850/$(DEPDIR)/fstat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@v850/$(DEPDIR)/getpid.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@v850/$(DEPDIR)/gettime.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@v850/$(DEPDIR)/isatty.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@v850/$(DEPDIR)/kill.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@v850/$(DEPDIR)/link.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@v850/$(DEPDIR)/lseek.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@v850/$(DEPDIR)/open.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@v850/$(DEPDIR)/pipe.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@v850/$(DEPDIR)/read.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@v850/$(DEPDIR)/sbrk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@v850/$(DEPDIR)/stat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@v850/$(DEPDIR)/time.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@v850/$(DEPDIR)/times.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@v850/$(DEPDIR)/trap.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@v850/$(DEPDIR)/unlink.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@v850/$(DEPDIR)/utime.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@v850/$(DEPDIR)/wait.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@v850/$(DEPDIR)/write.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@visium/$(DEPDIR)/_exit.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@visium/$(DEPDIR)/crt0.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@visium/$(DEPDIR)/gettod.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@visium/$(DEPDIR)/io-gdb.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@visium/$(DEPDIR)/io-stubs.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@visium/$(DEPDIR)/sbrk.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@visium/$(DEPDIR)/serial-inbyte.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@visium/$(DEPDIR)/serial-outbyte.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@visium/$(DEPDIR)/sim-syscalls.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@visium/$(DEPDIR)/syscalls.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@xstormy16/$(DEPDIR)/close.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@xstormy16/$(DEPDIR)/eva_app.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@xstormy16/$(DEPDIR)/fstat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@xstormy16/$(DEPDIR)/getpid.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@xstormy16/$(DEPDIR)/isatty.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@xstormy16/$(DEPDIR)/kill.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@xstormy16/$(DEPDIR)/lseek.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@xstormy16/$(DEPDIR)/open.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@xstormy16/$(DEPDIR)/stat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@xstormy16/$(DEPDIR)/syscalls.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@xstormy16/$(DEPDIR)/unlink.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@xstormy16/$(DEPDIR)/xstormy16_stub.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@xtensa/$(DEPDIR)/crt0.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@xtensa/$(DEPDIR)/crt1-boards.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@xtensa/$(DEPDIR)/crt1-sim.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@xtensa/$(DEPDIR)/xtensa_libgloss_a-sleep.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@xtensa/$(DEPDIR)/xtensa_libgloss_a-syscalls.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@xtensa/$(DEPDIR)/xtensa_libgloss_a-window-vectors.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@xtensa/$(DEPDIR)/xtensa_libsys_openocd_a-syscalls.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@xtensa/$(DEPDIR)/xtensa_libsys_qemu_a-sim-call.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@xtensa/$(DEPDIR)/xtensa_libsys_qemu_a-sim-vectors.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@xtensa/$(DEPDIR)/xtensa_libsys_qemu_a-syscalls.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@xtensa/boards/esp32/$(DEPDIR)/xtensa_libgloss_a-board.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@xtensa/boards/esp32s3/$(DEPDIR)/xtensa_libgloss_a-board.Po@am__quote@ .S.o: @am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @@ -1470,6 +6030,132 @@ distclean-compile: @AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CPPASCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` +arm/arm_librdimon_v2m_a-trap.o: arm/trap.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_v2m_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -MT arm/arm_librdimon_v2m_a-trap.o -MD -MP -MF arm/$(DEPDIR)/arm_librdimon_v2m_a-trap.Tpo -c -o arm/arm_librdimon_v2m_a-trap.o `test -f 'arm/trap.S' || echo '$(srcdir)/'`arm/trap.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) arm/$(DEPDIR)/arm_librdimon_v2m_a-trap.Tpo arm/$(DEPDIR)/arm_librdimon_v2m_a-trap.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='arm/trap.S' object='arm/arm_librdimon_v2m_a-trap.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_v2m_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o arm/arm_librdimon_v2m_a-trap.o `test -f 'arm/trap.S' || echo '$(srcdir)/'`arm/trap.S + +arm/arm_librdimon_v2m_a-trap.obj: arm/trap.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_v2m_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -MT arm/arm_librdimon_v2m_a-trap.obj -MD -MP -MF arm/$(DEPDIR)/arm_librdimon_v2m_a-trap.Tpo -c -o arm/arm_librdimon_v2m_a-trap.obj `if test -f 'arm/trap.S'; then $(CYGPATH_W) 'arm/trap.S'; else $(CYGPATH_W) '$(srcdir)/arm/trap.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) arm/$(DEPDIR)/arm_librdimon_v2m_a-trap.Tpo arm/$(DEPDIR)/arm_librdimon_v2m_a-trap.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='arm/trap.S' object='arm/arm_librdimon_v2m_a-trap.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_v2m_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o arm/arm_librdimon_v2m_a-trap.obj `if test -f 'arm/trap.S'; then $(CYGPATH_W) 'arm/trap.S'; else $(CYGPATH_W) '$(srcdir)/arm/trap.S'; fi` + +arm/arm_librdimon_a-trap.o: arm/trap.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -MT arm/arm_librdimon_a-trap.o -MD -MP -MF arm/$(DEPDIR)/arm_librdimon_a-trap.Tpo -c -o arm/arm_librdimon_a-trap.o `test -f 'arm/trap.S' || echo '$(srcdir)/'`arm/trap.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) arm/$(DEPDIR)/arm_librdimon_a-trap.Tpo arm/$(DEPDIR)/arm_librdimon_a-trap.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='arm/trap.S' object='arm/arm_librdimon_a-trap.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o arm/arm_librdimon_a-trap.o `test -f 'arm/trap.S' || echo '$(srcdir)/'`arm/trap.S + +arm/arm_librdimon_a-trap.obj: arm/trap.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -MT arm/arm_librdimon_a-trap.obj -MD -MP -MF arm/$(DEPDIR)/arm_librdimon_a-trap.Tpo -c -o arm/arm_librdimon_a-trap.obj `if test -f 'arm/trap.S'; then $(CYGPATH_W) 'arm/trap.S'; else $(CYGPATH_W) '$(srcdir)/arm/trap.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) arm/$(DEPDIR)/arm_librdimon_a-trap.Tpo arm/$(DEPDIR)/arm_librdimon_a-trap.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='arm/trap.S' object='arm/arm_librdimon_a-trap.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o arm/arm_librdimon_a-trap.obj `if test -f 'arm/trap.S'; then $(CYGPATH_W) 'arm/trap.S'; else $(CYGPATH_W) '$(srcdir)/arm/trap.S'; fi` + +csky/csky_libsemi_a-io-semi.o: csky/io-semi.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -MT csky/csky_libsemi_a-io-semi.o -MD -MP -MF csky/$(DEPDIR)/csky_libsemi_a-io-semi.Tpo -c -o csky/csky_libsemi_a-io-semi.o `test -f 'csky/io-semi.S' || echo '$(srcdir)/'`csky/io-semi.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) csky/$(DEPDIR)/csky_libsemi_a-io-semi.Tpo csky/$(DEPDIR)/csky_libsemi_a-io-semi.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='csky/io-semi.S' object='csky/csky_libsemi_a-io-semi.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o csky/csky_libsemi_a-io-semi.o `test -f 'csky/io-semi.S' || echo '$(srcdir)/'`csky/io-semi.S + +csky/csky_libsemi_a-io-semi.obj: csky/io-semi.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -MT csky/csky_libsemi_a-io-semi.obj -MD -MP -MF csky/$(DEPDIR)/csky_libsemi_a-io-semi.Tpo -c -o csky/csky_libsemi_a-io-semi.obj `if test -f 'csky/io-semi.S'; then $(CYGPATH_W) 'csky/io-semi.S'; else $(CYGPATH_W) '$(srcdir)/csky/io-semi.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) csky/$(DEPDIR)/csky_libsemi_a-io-semi.Tpo csky/$(DEPDIR)/csky_libsemi_a-io-semi.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='csky/io-semi.S' object='csky/csky_libsemi_a-io-semi.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o csky/csky_libsemi_a-io-semi.obj `if test -f 'csky/io-semi.S'; then $(CYGPATH_W) 'csky/io-semi.S'; else $(CYGPATH_W) '$(srcdir)/csky/io-semi.S'; fi` + +nios2/nios2_libnios2_a-crt0.o: nios2/crt0.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -MT nios2/nios2_libnios2_a-crt0.o -MD -MP -MF nios2/$(DEPDIR)/nios2_libnios2_a-crt0.Tpo -c -o nios2/nios2_libnios2_a-crt0.o `test -f 'nios2/crt0.S' || echo '$(srcdir)/'`nios2/crt0.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) nios2/$(DEPDIR)/nios2_libnios2_a-crt0.Tpo nios2/$(DEPDIR)/nios2_libnios2_a-crt0.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='nios2/crt0.S' object='nios2/nios2_libnios2_a-crt0.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o nios2/nios2_libnios2_a-crt0.o `test -f 'nios2/crt0.S' || echo '$(srcdir)/'`nios2/crt0.S + +nios2/nios2_libnios2_a-crt0.obj: nios2/crt0.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -MT nios2/nios2_libnios2_a-crt0.obj -MD -MP -MF nios2/$(DEPDIR)/nios2_libnios2_a-crt0.Tpo -c -o nios2/nios2_libnios2_a-crt0.obj `if test -f 'nios2/crt0.S'; then $(CYGPATH_W) 'nios2/crt0.S'; else $(CYGPATH_W) '$(srcdir)/nios2/crt0.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) nios2/$(DEPDIR)/nios2_libnios2_a-crt0.Tpo nios2/$(DEPDIR)/nios2_libnios2_a-crt0.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='nios2/crt0.S' object='nios2/nios2_libnios2_a-crt0.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o nios2/nios2_libnios2_a-crt0.obj `if test -f 'nios2/crt0.S'; then $(CYGPATH_W) 'nios2/crt0.S'; else $(CYGPATH_W) '$(srcdir)/nios2/crt0.S'; fi` + +nios2/nios2_libnios2_a-io-nios2.o: nios2/io-nios2.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -MT nios2/nios2_libnios2_a-io-nios2.o -MD -MP -MF nios2/$(DEPDIR)/nios2_libnios2_a-io-nios2.Tpo -c -o nios2/nios2_libnios2_a-io-nios2.o `test -f 'nios2/io-nios2.S' || echo '$(srcdir)/'`nios2/io-nios2.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) nios2/$(DEPDIR)/nios2_libnios2_a-io-nios2.Tpo nios2/$(DEPDIR)/nios2_libnios2_a-io-nios2.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='nios2/io-nios2.S' object='nios2/nios2_libnios2_a-io-nios2.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o nios2/nios2_libnios2_a-io-nios2.o `test -f 'nios2/io-nios2.S' || echo '$(srcdir)/'`nios2/io-nios2.S + +nios2/nios2_libnios2_a-io-nios2.obj: nios2/io-nios2.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -MT nios2/nios2_libnios2_a-io-nios2.obj -MD -MP -MF nios2/$(DEPDIR)/nios2_libnios2_a-io-nios2.Tpo -c -o nios2/nios2_libnios2_a-io-nios2.obj `if test -f 'nios2/io-nios2.S'; then $(CYGPATH_W) 'nios2/io-nios2.S'; else $(CYGPATH_W) '$(srcdir)/nios2/io-nios2.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) nios2/$(DEPDIR)/nios2_libnios2_a-io-nios2.Tpo nios2/$(DEPDIR)/nios2_libnios2_a-io-nios2.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='nios2/io-nios2.S' object='nios2/nios2_libnios2_a-io-nios2.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o nios2/nios2_libnios2_a-io-nios2.obj `if test -f 'nios2/io-nios2.S'; then $(CYGPATH_W) 'nios2/io-nios2.S'; else $(CYGPATH_W) '$(srcdir)/nios2/io-nios2.S'; fi` + +xtensa/xtensa_libgloss_a-sleep.o: xtensa/sleep.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xtensa_libgloss_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -MT xtensa/xtensa_libgloss_a-sleep.o -MD -MP -MF xtensa/$(DEPDIR)/xtensa_libgloss_a-sleep.Tpo -c -o xtensa/xtensa_libgloss_a-sleep.o `test -f 'xtensa/sleep.S' || echo '$(srcdir)/'`xtensa/sleep.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) xtensa/$(DEPDIR)/xtensa_libgloss_a-sleep.Tpo xtensa/$(DEPDIR)/xtensa_libgloss_a-sleep.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='xtensa/sleep.S' object='xtensa/xtensa_libgloss_a-sleep.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xtensa_libgloss_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o xtensa/xtensa_libgloss_a-sleep.o `test -f 'xtensa/sleep.S' || echo '$(srcdir)/'`xtensa/sleep.S + +xtensa/xtensa_libgloss_a-sleep.obj: xtensa/sleep.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xtensa_libgloss_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -MT xtensa/xtensa_libgloss_a-sleep.obj -MD -MP -MF xtensa/$(DEPDIR)/xtensa_libgloss_a-sleep.Tpo -c -o xtensa/xtensa_libgloss_a-sleep.obj `if test -f 'xtensa/sleep.S'; then $(CYGPATH_W) 'xtensa/sleep.S'; else $(CYGPATH_W) '$(srcdir)/xtensa/sleep.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) xtensa/$(DEPDIR)/xtensa_libgloss_a-sleep.Tpo xtensa/$(DEPDIR)/xtensa_libgloss_a-sleep.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='xtensa/sleep.S' object='xtensa/xtensa_libgloss_a-sleep.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xtensa_libgloss_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o xtensa/xtensa_libgloss_a-sleep.obj `if test -f 'xtensa/sleep.S'; then $(CYGPATH_W) 'xtensa/sleep.S'; else $(CYGPATH_W) '$(srcdir)/xtensa/sleep.S'; fi` + +xtensa/xtensa_libgloss_a-window-vectors.o: xtensa/window-vectors.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xtensa_libgloss_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -MT xtensa/xtensa_libgloss_a-window-vectors.o -MD -MP -MF xtensa/$(DEPDIR)/xtensa_libgloss_a-window-vectors.Tpo -c -o xtensa/xtensa_libgloss_a-window-vectors.o `test -f 'xtensa/window-vectors.S' || echo '$(srcdir)/'`xtensa/window-vectors.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) xtensa/$(DEPDIR)/xtensa_libgloss_a-window-vectors.Tpo xtensa/$(DEPDIR)/xtensa_libgloss_a-window-vectors.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='xtensa/window-vectors.S' object='xtensa/xtensa_libgloss_a-window-vectors.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xtensa_libgloss_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o xtensa/xtensa_libgloss_a-window-vectors.o `test -f 'xtensa/window-vectors.S' || echo '$(srcdir)/'`xtensa/window-vectors.S + +xtensa/xtensa_libgloss_a-window-vectors.obj: xtensa/window-vectors.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xtensa_libgloss_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -MT xtensa/xtensa_libgloss_a-window-vectors.obj -MD -MP -MF xtensa/$(DEPDIR)/xtensa_libgloss_a-window-vectors.Tpo -c -o xtensa/xtensa_libgloss_a-window-vectors.obj `if test -f 'xtensa/window-vectors.S'; then $(CYGPATH_W) 'xtensa/window-vectors.S'; else $(CYGPATH_W) '$(srcdir)/xtensa/window-vectors.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) xtensa/$(DEPDIR)/xtensa_libgloss_a-window-vectors.Tpo xtensa/$(DEPDIR)/xtensa_libgloss_a-window-vectors.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='xtensa/window-vectors.S' object='xtensa/xtensa_libgloss_a-window-vectors.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xtensa_libgloss_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o xtensa/xtensa_libgloss_a-window-vectors.obj `if test -f 'xtensa/window-vectors.S'; then $(CYGPATH_W) 'xtensa/window-vectors.S'; else $(CYGPATH_W) '$(srcdir)/xtensa/window-vectors.S'; fi` + +xtensa/xtensa_libsys_qemu_a-sim-vectors.o: xtensa/sim-vectors.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xtensa_libsys_qemu_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -MT xtensa/xtensa_libsys_qemu_a-sim-vectors.o -MD -MP -MF xtensa/$(DEPDIR)/xtensa_libsys_qemu_a-sim-vectors.Tpo -c -o xtensa/xtensa_libsys_qemu_a-sim-vectors.o `test -f 'xtensa/sim-vectors.S' || echo '$(srcdir)/'`xtensa/sim-vectors.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) xtensa/$(DEPDIR)/xtensa_libsys_qemu_a-sim-vectors.Tpo xtensa/$(DEPDIR)/xtensa_libsys_qemu_a-sim-vectors.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='xtensa/sim-vectors.S' object='xtensa/xtensa_libsys_qemu_a-sim-vectors.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xtensa_libsys_qemu_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o xtensa/xtensa_libsys_qemu_a-sim-vectors.o `test -f 'xtensa/sim-vectors.S' || echo '$(srcdir)/'`xtensa/sim-vectors.S + +xtensa/xtensa_libsys_qemu_a-sim-vectors.obj: xtensa/sim-vectors.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xtensa_libsys_qemu_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -MT xtensa/xtensa_libsys_qemu_a-sim-vectors.obj -MD -MP -MF xtensa/$(DEPDIR)/xtensa_libsys_qemu_a-sim-vectors.Tpo -c -o xtensa/xtensa_libsys_qemu_a-sim-vectors.obj `if test -f 'xtensa/sim-vectors.S'; then $(CYGPATH_W) 'xtensa/sim-vectors.S'; else $(CYGPATH_W) '$(srcdir)/xtensa/sim-vectors.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) xtensa/$(DEPDIR)/xtensa_libsys_qemu_a-sim-vectors.Tpo xtensa/$(DEPDIR)/xtensa_libsys_qemu_a-sim-vectors.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='xtensa/sim-vectors.S' object='xtensa/xtensa_libsys_qemu_a-sim-vectors.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xtensa_libsys_qemu_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o xtensa/xtensa_libsys_qemu_a-sim-vectors.obj `if test -f 'xtensa/sim-vectors.S'; then $(CYGPATH_W) 'xtensa/sim-vectors.S'; else $(CYGPATH_W) '$(srcdir)/xtensa/sim-vectors.S'; fi` + +xtensa/xtensa_libsys_qemu_a-sim-call.o: xtensa/sim-call.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xtensa_libsys_qemu_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -MT xtensa/xtensa_libsys_qemu_a-sim-call.o -MD -MP -MF xtensa/$(DEPDIR)/xtensa_libsys_qemu_a-sim-call.Tpo -c -o xtensa/xtensa_libsys_qemu_a-sim-call.o `test -f 'xtensa/sim-call.S' || echo '$(srcdir)/'`xtensa/sim-call.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) xtensa/$(DEPDIR)/xtensa_libsys_qemu_a-sim-call.Tpo xtensa/$(DEPDIR)/xtensa_libsys_qemu_a-sim-call.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='xtensa/sim-call.S' object='xtensa/xtensa_libsys_qemu_a-sim-call.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xtensa_libsys_qemu_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o xtensa/xtensa_libsys_qemu_a-sim-call.o `test -f 'xtensa/sim-call.S' || echo '$(srcdir)/'`xtensa/sim-call.S + +xtensa/xtensa_libsys_qemu_a-sim-call.obj: xtensa/sim-call.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xtensa_libsys_qemu_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -MT xtensa/xtensa_libsys_qemu_a-sim-call.obj -MD -MP -MF xtensa/$(DEPDIR)/xtensa_libsys_qemu_a-sim-call.Tpo -c -o xtensa/xtensa_libsys_qemu_a-sim-call.obj `if test -f 'xtensa/sim-call.S'; then $(CYGPATH_W) 'xtensa/sim-call.S'; else $(CYGPATH_W) '$(srcdir)/xtensa/sim-call.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) xtensa/$(DEPDIR)/xtensa_libsys_qemu_a-sim-call.Tpo xtensa/$(DEPDIR)/xtensa_libsys_qemu_a-sim-call.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='xtensa/sim-call.S' object='xtensa/xtensa_libsys_qemu_a-sim-call.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xtensa_libsys_qemu_a_CPPFLAGS) $(CPPFLAGS) $(AM_CCASFLAGS) $(CCASFLAGS) -c -o xtensa/xtensa_libsys_qemu_a-sim-call.obj `if test -f 'xtensa/sim-call.S'; then $(CYGPATH_W) 'xtensa/sim-call.S'; else $(CYGPATH_W) '$(srcdir)/xtensa/sim-call.S'; fi` + .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @@ -1486,61 +6172,845 @@ distclean-compile: @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` +aarch64/aarch64_librdimon_a-_exit.o: aarch64/_exit.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(aarch64_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT aarch64/aarch64_librdimon_a-_exit.o -MD -MP -MF aarch64/$(DEPDIR)/aarch64_librdimon_a-_exit.Tpo -c -o aarch64/aarch64_librdimon_a-_exit.o `test -f 'aarch64/_exit.c' || echo '$(srcdir)/'`aarch64/_exit.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) aarch64/$(DEPDIR)/aarch64_librdimon_a-_exit.Tpo aarch64/$(DEPDIR)/aarch64_librdimon_a-_exit.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='aarch64/_exit.c' object='aarch64/aarch64_librdimon_a-_exit.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(aarch64_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o aarch64/aarch64_librdimon_a-_exit.o `test -f 'aarch64/_exit.c' || echo '$(srcdir)/'`aarch64/_exit.c + +aarch64/aarch64_librdimon_a-_exit.obj: aarch64/_exit.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(aarch64_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT aarch64/aarch64_librdimon_a-_exit.obj -MD -MP -MF aarch64/$(DEPDIR)/aarch64_librdimon_a-_exit.Tpo -c -o aarch64/aarch64_librdimon_a-_exit.obj `if test -f 'aarch64/_exit.c'; then $(CYGPATH_W) 'aarch64/_exit.c'; else $(CYGPATH_W) '$(srcdir)/aarch64/_exit.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) aarch64/$(DEPDIR)/aarch64_librdimon_a-_exit.Tpo aarch64/$(DEPDIR)/aarch64_librdimon_a-_exit.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='aarch64/_exit.c' object='aarch64/aarch64_librdimon_a-_exit.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(aarch64_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o aarch64/aarch64_librdimon_a-_exit.obj `if test -f 'aarch64/_exit.c'; then $(CYGPATH_W) 'aarch64/_exit.c'; else $(CYGPATH_W) '$(srcdir)/aarch64/_exit.c'; fi` + +aarch64/aarch64_librdimon_a-_kill.o: aarch64/_kill.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(aarch64_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT aarch64/aarch64_librdimon_a-_kill.o -MD -MP -MF aarch64/$(DEPDIR)/aarch64_librdimon_a-_kill.Tpo -c -o aarch64/aarch64_librdimon_a-_kill.o `test -f 'aarch64/_kill.c' || echo '$(srcdir)/'`aarch64/_kill.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) aarch64/$(DEPDIR)/aarch64_librdimon_a-_kill.Tpo aarch64/$(DEPDIR)/aarch64_librdimon_a-_kill.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='aarch64/_kill.c' object='aarch64/aarch64_librdimon_a-_kill.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(aarch64_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o aarch64/aarch64_librdimon_a-_kill.o `test -f 'aarch64/_kill.c' || echo '$(srcdir)/'`aarch64/_kill.c + +aarch64/aarch64_librdimon_a-_kill.obj: aarch64/_kill.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(aarch64_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT aarch64/aarch64_librdimon_a-_kill.obj -MD -MP -MF aarch64/$(DEPDIR)/aarch64_librdimon_a-_kill.Tpo -c -o aarch64/aarch64_librdimon_a-_kill.obj `if test -f 'aarch64/_kill.c'; then $(CYGPATH_W) 'aarch64/_kill.c'; else $(CYGPATH_W) '$(srcdir)/aarch64/_kill.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) aarch64/$(DEPDIR)/aarch64_librdimon_a-_kill.Tpo aarch64/$(DEPDIR)/aarch64_librdimon_a-_kill.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='aarch64/_kill.c' object='aarch64/aarch64_librdimon_a-_kill.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(aarch64_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o aarch64/aarch64_librdimon_a-_kill.obj `if test -f 'aarch64/_kill.c'; then $(CYGPATH_W) 'aarch64/_kill.c'; else $(CYGPATH_W) '$(srcdir)/aarch64/_kill.c'; fi` + +aarch64/aarch64_librdimon_a-ftruncate.o: aarch64/ftruncate.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(aarch64_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT aarch64/aarch64_librdimon_a-ftruncate.o -MD -MP -MF aarch64/$(DEPDIR)/aarch64_librdimon_a-ftruncate.Tpo -c -o aarch64/aarch64_librdimon_a-ftruncate.o `test -f 'aarch64/ftruncate.c' || echo '$(srcdir)/'`aarch64/ftruncate.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) aarch64/$(DEPDIR)/aarch64_librdimon_a-ftruncate.Tpo aarch64/$(DEPDIR)/aarch64_librdimon_a-ftruncate.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='aarch64/ftruncate.c' object='aarch64/aarch64_librdimon_a-ftruncate.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(aarch64_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o aarch64/aarch64_librdimon_a-ftruncate.o `test -f 'aarch64/ftruncate.c' || echo '$(srcdir)/'`aarch64/ftruncate.c + +aarch64/aarch64_librdimon_a-ftruncate.obj: aarch64/ftruncate.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(aarch64_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT aarch64/aarch64_librdimon_a-ftruncate.obj -MD -MP -MF aarch64/$(DEPDIR)/aarch64_librdimon_a-ftruncate.Tpo -c -o aarch64/aarch64_librdimon_a-ftruncate.obj `if test -f 'aarch64/ftruncate.c'; then $(CYGPATH_W) 'aarch64/ftruncate.c'; else $(CYGPATH_W) '$(srcdir)/aarch64/ftruncate.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) aarch64/$(DEPDIR)/aarch64_librdimon_a-ftruncate.Tpo aarch64/$(DEPDIR)/aarch64_librdimon_a-ftruncate.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='aarch64/ftruncate.c' object='aarch64/aarch64_librdimon_a-ftruncate.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(aarch64_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o aarch64/aarch64_librdimon_a-ftruncate.obj `if test -f 'aarch64/ftruncate.c'; then $(CYGPATH_W) 'aarch64/ftruncate.c'; else $(CYGPATH_W) '$(srcdir)/aarch64/ftruncate.c'; fi` + +aarch64/aarch64_librdimon_a-libcfunc.o: aarch64/libcfunc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(aarch64_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT aarch64/aarch64_librdimon_a-libcfunc.o -MD -MP -MF aarch64/$(DEPDIR)/aarch64_librdimon_a-libcfunc.Tpo -c -o aarch64/aarch64_librdimon_a-libcfunc.o `test -f 'aarch64/libcfunc.c' || echo '$(srcdir)/'`aarch64/libcfunc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) aarch64/$(DEPDIR)/aarch64_librdimon_a-libcfunc.Tpo aarch64/$(DEPDIR)/aarch64_librdimon_a-libcfunc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='aarch64/libcfunc.c' object='aarch64/aarch64_librdimon_a-libcfunc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(aarch64_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o aarch64/aarch64_librdimon_a-libcfunc.o `test -f 'aarch64/libcfunc.c' || echo '$(srcdir)/'`aarch64/libcfunc.c + +aarch64/aarch64_librdimon_a-libcfunc.obj: aarch64/libcfunc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(aarch64_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT aarch64/aarch64_librdimon_a-libcfunc.obj -MD -MP -MF aarch64/$(DEPDIR)/aarch64_librdimon_a-libcfunc.Tpo -c -o aarch64/aarch64_librdimon_a-libcfunc.obj `if test -f 'aarch64/libcfunc.c'; then $(CYGPATH_W) 'aarch64/libcfunc.c'; else $(CYGPATH_W) '$(srcdir)/aarch64/libcfunc.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) aarch64/$(DEPDIR)/aarch64_librdimon_a-libcfunc.Tpo aarch64/$(DEPDIR)/aarch64_librdimon_a-libcfunc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='aarch64/libcfunc.c' object='aarch64/aarch64_librdimon_a-libcfunc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(aarch64_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o aarch64/aarch64_librdimon_a-libcfunc.obj `if test -f 'aarch64/libcfunc.c'; then $(CYGPATH_W) 'aarch64/libcfunc.c'; else $(CYGPATH_W) '$(srcdir)/aarch64/libcfunc.c'; fi` + +aarch64/aarch64_librdimon_a-syscalls.o: aarch64/syscalls.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(aarch64_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT aarch64/aarch64_librdimon_a-syscalls.o -MD -MP -MF aarch64/$(DEPDIR)/aarch64_librdimon_a-syscalls.Tpo -c -o aarch64/aarch64_librdimon_a-syscalls.o `test -f 'aarch64/syscalls.c' || echo '$(srcdir)/'`aarch64/syscalls.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) aarch64/$(DEPDIR)/aarch64_librdimon_a-syscalls.Tpo aarch64/$(DEPDIR)/aarch64_librdimon_a-syscalls.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='aarch64/syscalls.c' object='aarch64/aarch64_librdimon_a-syscalls.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(aarch64_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o aarch64/aarch64_librdimon_a-syscalls.o `test -f 'aarch64/syscalls.c' || echo '$(srcdir)/'`aarch64/syscalls.c + +aarch64/aarch64_librdimon_a-syscalls.obj: aarch64/syscalls.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(aarch64_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT aarch64/aarch64_librdimon_a-syscalls.obj -MD -MP -MF aarch64/$(DEPDIR)/aarch64_librdimon_a-syscalls.Tpo -c -o aarch64/aarch64_librdimon_a-syscalls.obj `if test -f 'aarch64/syscalls.c'; then $(CYGPATH_W) 'aarch64/syscalls.c'; else $(CYGPATH_W) '$(srcdir)/aarch64/syscalls.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) aarch64/$(DEPDIR)/aarch64_librdimon_a-syscalls.Tpo aarch64/$(DEPDIR)/aarch64_librdimon_a-syscalls.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='aarch64/syscalls.c' object='aarch64/aarch64_librdimon_a-syscalls.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(aarch64_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o aarch64/aarch64_librdimon_a-syscalls.obj `if test -f 'aarch64/syscalls.c'; then $(CYGPATH_W) 'aarch64/syscalls.c'; else $(CYGPATH_W) '$(srcdir)/aarch64/syscalls.c'; fi` + +aarch64/aarch64_librdimon_a-truncate.o: aarch64/truncate.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(aarch64_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT aarch64/aarch64_librdimon_a-truncate.o -MD -MP -MF aarch64/$(DEPDIR)/aarch64_librdimon_a-truncate.Tpo -c -o aarch64/aarch64_librdimon_a-truncate.o `test -f 'aarch64/truncate.c' || echo '$(srcdir)/'`aarch64/truncate.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) aarch64/$(DEPDIR)/aarch64_librdimon_a-truncate.Tpo aarch64/$(DEPDIR)/aarch64_librdimon_a-truncate.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='aarch64/truncate.c' object='aarch64/aarch64_librdimon_a-truncate.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(aarch64_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o aarch64/aarch64_librdimon_a-truncate.o `test -f 'aarch64/truncate.c' || echo '$(srcdir)/'`aarch64/truncate.c + +aarch64/aarch64_librdimon_a-truncate.obj: aarch64/truncate.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(aarch64_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT aarch64/aarch64_librdimon_a-truncate.obj -MD -MP -MF aarch64/$(DEPDIR)/aarch64_librdimon_a-truncate.Tpo -c -o aarch64/aarch64_librdimon_a-truncate.obj `if test -f 'aarch64/truncate.c'; then $(CYGPATH_W) 'aarch64/truncate.c'; else $(CYGPATH_W) '$(srcdir)/aarch64/truncate.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) aarch64/$(DEPDIR)/aarch64_librdimon_a-truncate.Tpo aarch64/$(DEPDIR)/aarch64_librdimon_a-truncate.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='aarch64/truncate.c' object='aarch64/aarch64_librdimon_a-truncate.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(aarch64_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o aarch64/aarch64_librdimon_a-truncate.obj `if test -f 'aarch64/truncate.c'; then $(CYGPATH_W) 'aarch64/truncate.c'; else $(CYGPATH_W) '$(srcdir)/aarch64/truncate.c'; fi` + +arm/arm_librdimon_v2m_a-_exit.o: arm/_exit.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_v2m_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT arm/arm_librdimon_v2m_a-_exit.o -MD -MP -MF arm/$(DEPDIR)/arm_librdimon_v2m_a-_exit.Tpo -c -o arm/arm_librdimon_v2m_a-_exit.o `test -f 'arm/_exit.c' || echo '$(srcdir)/'`arm/_exit.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) arm/$(DEPDIR)/arm_librdimon_v2m_a-_exit.Tpo arm/$(DEPDIR)/arm_librdimon_v2m_a-_exit.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='arm/_exit.c' object='arm/arm_librdimon_v2m_a-_exit.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_v2m_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o arm/arm_librdimon_v2m_a-_exit.o `test -f 'arm/_exit.c' || echo '$(srcdir)/'`arm/_exit.c + +arm/arm_librdimon_v2m_a-_exit.obj: arm/_exit.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_v2m_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT arm/arm_librdimon_v2m_a-_exit.obj -MD -MP -MF arm/$(DEPDIR)/arm_librdimon_v2m_a-_exit.Tpo -c -o arm/arm_librdimon_v2m_a-_exit.obj `if test -f 'arm/_exit.c'; then $(CYGPATH_W) 'arm/_exit.c'; else $(CYGPATH_W) '$(srcdir)/arm/_exit.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) arm/$(DEPDIR)/arm_librdimon_v2m_a-_exit.Tpo arm/$(DEPDIR)/arm_librdimon_v2m_a-_exit.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='arm/_exit.c' object='arm/arm_librdimon_v2m_a-_exit.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_v2m_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o arm/arm_librdimon_v2m_a-_exit.obj `if test -f 'arm/_exit.c'; then $(CYGPATH_W) 'arm/_exit.c'; else $(CYGPATH_W) '$(srcdir)/arm/_exit.c'; fi` + +arm/arm_librdimon_v2m_a-_kill.o: arm/_kill.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_v2m_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT arm/arm_librdimon_v2m_a-_kill.o -MD -MP -MF arm/$(DEPDIR)/arm_librdimon_v2m_a-_kill.Tpo -c -o arm/arm_librdimon_v2m_a-_kill.o `test -f 'arm/_kill.c' || echo '$(srcdir)/'`arm/_kill.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) arm/$(DEPDIR)/arm_librdimon_v2m_a-_kill.Tpo arm/$(DEPDIR)/arm_librdimon_v2m_a-_kill.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='arm/_kill.c' object='arm/arm_librdimon_v2m_a-_kill.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_v2m_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o arm/arm_librdimon_v2m_a-_kill.o `test -f 'arm/_kill.c' || echo '$(srcdir)/'`arm/_kill.c + +arm/arm_librdimon_v2m_a-_kill.obj: arm/_kill.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_v2m_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT arm/arm_librdimon_v2m_a-_kill.obj -MD -MP -MF arm/$(DEPDIR)/arm_librdimon_v2m_a-_kill.Tpo -c -o arm/arm_librdimon_v2m_a-_kill.obj `if test -f 'arm/_kill.c'; then $(CYGPATH_W) 'arm/_kill.c'; else $(CYGPATH_W) '$(srcdir)/arm/_kill.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) arm/$(DEPDIR)/arm_librdimon_v2m_a-_kill.Tpo arm/$(DEPDIR)/arm_librdimon_v2m_a-_kill.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='arm/_kill.c' object='arm/arm_librdimon_v2m_a-_kill.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_v2m_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o arm/arm_librdimon_v2m_a-_kill.obj `if test -f 'arm/_kill.c'; then $(CYGPATH_W) 'arm/_kill.c'; else $(CYGPATH_W) '$(srcdir)/arm/_kill.c'; fi` + +arm/arm_librdimon_v2m_a-ftruncate.o: arm/ftruncate.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_v2m_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT arm/arm_librdimon_v2m_a-ftruncate.o -MD -MP -MF arm/$(DEPDIR)/arm_librdimon_v2m_a-ftruncate.Tpo -c -o arm/arm_librdimon_v2m_a-ftruncate.o `test -f 'arm/ftruncate.c' || echo '$(srcdir)/'`arm/ftruncate.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) arm/$(DEPDIR)/arm_librdimon_v2m_a-ftruncate.Tpo arm/$(DEPDIR)/arm_librdimon_v2m_a-ftruncate.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='arm/ftruncate.c' object='arm/arm_librdimon_v2m_a-ftruncate.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_v2m_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o arm/arm_librdimon_v2m_a-ftruncate.o `test -f 'arm/ftruncate.c' || echo '$(srcdir)/'`arm/ftruncate.c + +arm/arm_librdimon_v2m_a-ftruncate.obj: arm/ftruncate.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_v2m_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT arm/arm_librdimon_v2m_a-ftruncate.obj -MD -MP -MF arm/$(DEPDIR)/arm_librdimon_v2m_a-ftruncate.Tpo -c -o arm/arm_librdimon_v2m_a-ftruncate.obj `if test -f 'arm/ftruncate.c'; then $(CYGPATH_W) 'arm/ftruncate.c'; else $(CYGPATH_W) '$(srcdir)/arm/ftruncate.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) arm/$(DEPDIR)/arm_librdimon_v2m_a-ftruncate.Tpo arm/$(DEPDIR)/arm_librdimon_v2m_a-ftruncate.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='arm/ftruncate.c' object='arm/arm_librdimon_v2m_a-ftruncate.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_v2m_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o arm/arm_librdimon_v2m_a-ftruncate.obj `if test -f 'arm/ftruncate.c'; then $(CYGPATH_W) 'arm/ftruncate.c'; else $(CYGPATH_W) '$(srcdir)/arm/ftruncate.c'; fi` + +arm/arm_librdimon_v2m_a-libcfunc.o: arm/libcfunc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_v2m_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT arm/arm_librdimon_v2m_a-libcfunc.o -MD -MP -MF arm/$(DEPDIR)/arm_librdimon_v2m_a-libcfunc.Tpo -c -o arm/arm_librdimon_v2m_a-libcfunc.o `test -f 'arm/libcfunc.c' || echo '$(srcdir)/'`arm/libcfunc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) arm/$(DEPDIR)/arm_librdimon_v2m_a-libcfunc.Tpo arm/$(DEPDIR)/arm_librdimon_v2m_a-libcfunc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='arm/libcfunc.c' object='arm/arm_librdimon_v2m_a-libcfunc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_v2m_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o arm/arm_librdimon_v2m_a-libcfunc.o `test -f 'arm/libcfunc.c' || echo '$(srcdir)/'`arm/libcfunc.c + +arm/arm_librdimon_v2m_a-libcfunc.obj: arm/libcfunc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_v2m_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT arm/arm_librdimon_v2m_a-libcfunc.obj -MD -MP -MF arm/$(DEPDIR)/arm_librdimon_v2m_a-libcfunc.Tpo -c -o arm/arm_librdimon_v2m_a-libcfunc.obj `if test -f 'arm/libcfunc.c'; then $(CYGPATH_W) 'arm/libcfunc.c'; else $(CYGPATH_W) '$(srcdir)/arm/libcfunc.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) arm/$(DEPDIR)/arm_librdimon_v2m_a-libcfunc.Tpo arm/$(DEPDIR)/arm_librdimon_v2m_a-libcfunc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='arm/libcfunc.c' object='arm/arm_librdimon_v2m_a-libcfunc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_v2m_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o arm/arm_librdimon_v2m_a-libcfunc.obj `if test -f 'arm/libcfunc.c'; then $(CYGPATH_W) 'arm/libcfunc.c'; else $(CYGPATH_W) '$(srcdir)/arm/libcfunc.c'; fi` + +arm/arm_librdimon_v2m_a-syscalls.o: arm/syscalls.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_v2m_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT arm/arm_librdimon_v2m_a-syscalls.o -MD -MP -MF arm/$(DEPDIR)/arm_librdimon_v2m_a-syscalls.Tpo -c -o arm/arm_librdimon_v2m_a-syscalls.o `test -f 'arm/syscalls.c' || echo '$(srcdir)/'`arm/syscalls.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) arm/$(DEPDIR)/arm_librdimon_v2m_a-syscalls.Tpo arm/$(DEPDIR)/arm_librdimon_v2m_a-syscalls.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='arm/syscalls.c' object='arm/arm_librdimon_v2m_a-syscalls.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_v2m_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o arm/arm_librdimon_v2m_a-syscalls.o `test -f 'arm/syscalls.c' || echo '$(srcdir)/'`arm/syscalls.c + +arm/arm_librdimon_v2m_a-syscalls.obj: arm/syscalls.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_v2m_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT arm/arm_librdimon_v2m_a-syscalls.obj -MD -MP -MF arm/$(DEPDIR)/arm_librdimon_v2m_a-syscalls.Tpo -c -o arm/arm_librdimon_v2m_a-syscalls.obj `if test -f 'arm/syscalls.c'; then $(CYGPATH_W) 'arm/syscalls.c'; else $(CYGPATH_W) '$(srcdir)/arm/syscalls.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) arm/$(DEPDIR)/arm_librdimon_v2m_a-syscalls.Tpo arm/$(DEPDIR)/arm_librdimon_v2m_a-syscalls.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='arm/syscalls.c' object='arm/arm_librdimon_v2m_a-syscalls.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_v2m_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o arm/arm_librdimon_v2m_a-syscalls.obj `if test -f 'arm/syscalls.c'; then $(CYGPATH_W) 'arm/syscalls.c'; else $(CYGPATH_W) '$(srcdir)/arm/syscalls.c'; fi` + +arm/arm_librdimon_v2m_a-truncate.o: arm/truncate.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_v2m_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT arm/arm_librdimon_v2m_a-truncate.o -MD -MP -MF arm/$(DEPDIR)/arm_librdimon_v2m_a-truncate.Tpo -c -o arm/arm_librdimon_v2m_a-truncate.o `test -f 'arm/truncate.c' || echo '$(srcdir)/'`arm/truncate.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) arm/$(DEPDIR)/arm_librdimon_v2m_a-truncate.Tpo arm/$(DEPDIR)/arm_librdimon_v2m_a-truncate.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='arm/truncate.c' object='arm/arm_librdimon_v2m_a-truncate.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_v2m_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o arm/arm_librdimon_v2m_a-truncate.o `test -f 'arm/truncate.c' || echo '$(srcdir)/'`arm/truncate.c + +arm/arm_librdimon_v2m_a-truncate.obj: arm/truncate.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_v2m_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT arm/arm_librdimon_v2m_a-truncate.obj -MD -MP -MF arm/$(DEPDIR)/arm_librdimon_v2m_a-truncate.Tpo -c -o arm/arm_librdimon_v2m_a-truncate.obj `if test -f 'arm/truncate.c'; then $(CYGPATH_W) 'arm/truncate.c'; else $(CYGPATH_W) '$(srcdir)/arm/truncate.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) arm/$(DEPDIR)/arm_librdimon_v2m_a-truncate.Tpo arm/$(DEPDIR)/arm_librdimon_v2m_a-truncate.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='arm/truncate.c' object='arm/arm_librdimon_v2m_a-truncate.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_v2m_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o arm/arm_librdimon_v2m_a-truncate.obj `if test -f 'arm/truncate.c'; then $(CYGPATH_W) 'arm/truncate.c'; else $(CYGPATH_W) '$(srcdir)/arm/truncate.c'; fi` + +arm/arm_librdimon_a-_exit.o: arm/_exit.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT arm/arm_librdimon_a-_exit.o -MD -MP -MF arm/$(DEPDIR)/arm_librdimon_a-_exit.Tpo -c -o arm/arm_librdimon_a-_exit.o `test -f 'arm/_exit.c' || echo '$(srcdir)/'`arm/_exit.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) arm/$(DEPDIR)/arm_librdimon_a-_exit.Tpo arm/$(DEPDIR)/arm_librdimon_a-_exit.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='arm/_exit.c' object='arm/arm_librdimon_a-_exit.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o arm/arm_librdimon_a-_exit.o `test -f 'arm/_exit.c' || echo '$(srcdir)/'`arm/_exit.c + +arm/arm_librdimon_a-_exit.obj: arm/_exit.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT arm/arm_librdimon_a-_exit.obj -MD -MP -MF arm/$(DEPDIR)/arm_librdimon_a-_exit.Tpo -c -o arm/arm_librdimon_a-_exit.obj `if test -f 'arm/_exit.c'; then $(CYGPATH_W) 'arm/_exit.c'; else $(CYGPATH_W) '$(srcdir)/arm/_exit.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) arm/$(DEPDIR)/arm_librdimon_a-_exit.Tpo arm/$(DEPDIR)/arm_librdimon_a-_exit.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='arm/_exit.c' object='arm/arm_librdimon_a-_exit.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o arm/arm_librdimon_a-_exit.obj `if test -f 'arm/_exit.c'; then $(CYGPATH_W) 'arm/_exit.c'; else $(CYGPATH_W) '$(srcdir)/arm/_exit.c'; fi` + +arm/arm_librdimon_a-_kill.o: arm/_kill.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT arm/arm_librdimon_a-_kill.o -MD -MP -MF arm/$(DEPDIR)/arm_librdimon_a-_kill.Tpo -c -o arm/arm_librdimon_a-_kill.o `test -f 'arm/_kill.c' || echo '$(srcdir)/'`arm/_kill.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) arm/$(DEPDIR)/arm_librdimon_a-_kill.Tpo arm/$(DEPDIR)/arm_librdimon_a-_kill.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='arm/_kill.c' object='arm/arm_librdimon_a-_kill.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o arm/arm_librdimon_a-_kill.o `test -f 'arm/_kill.c' || echo '$(srcdir)/'`arm/_kill.c + +arm/arm_librdimon_a-_kill.obj: arm/_kill.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT arm/arm_librdimon_a-_kill.obj -MD -MP -MF arm/$(DEPDIR)/arm_librdimon_a-_kill.Tpo -c -o arm/arm_librdimon_a-_kill.obj `if test -f 'arm/_kill.c'; then $(CYGPATH_W) 'arm/_kill.c'; else $(CYGPATH_W) '$(srcdir)/arm/_kill.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) arm/$(DEPDIR)/arm_librdimon_a-_kill.Tpo arm/$(DEPDIR)/arm_librdimon_a-_kill.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='arm/_kill.c' object='arm/arm_librdimon_a-_kill.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o arm/arm_librdimon_a-_kill.obj `if test -f 'arm/_kill.c'; then $(CYGPATH_W) 'arm/_kill.c'; else $(CYGPATH_W) '$(srcdir)/arm/_kill.c'; fi` + +arm/arm_librdimon_a-ftruncate.o: arm/ftruncate.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT arm/arm_librdimon_a-ftruncate.o -MD -MP -MF arm/$(DEPDIR)/arm_librdimon_a-ftruncate.Tpo -c -o arm/arm_librdimon_a-ftruncate.o `test -f 'arm/ftruncate.c' || echo '$(srcdir)/'`arm/ftruncate.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) arm/$(DEPDIR)/arm_librdimon_a-ftruncate.Tpo arm/$(DEPDIR)/arm_librdimon_a-ftruncate.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='arm/ftruncate.c' object='arm/arm_librdimon_a-ftruncate.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o arm/arm_librdimon_a-ftruncate.o `test -f 'arm/ftruncate.c' || echo '$(srcdir)/'`arm/ftruncate.c + +arm/arm_librdimon_a-ftruncate.obj: arm/ftruncate.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT arm/arm_librdimon_a-ftruncate.obj -MD -MP -MF arm/$(DEPDIR)/arm_librdimon_a-ftruncate.Tpo -c -o arm/arm_librdimon_a-ftruncate.obj `if test -f 'arm/ftruncate.c'; then $(CYGPATH_W) 'arm/ftruncate.c'; else $(CYGPATH_W) '$(srcdir)/arm/ftruncate.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) arm/$(DEPDIR)/arm_librdimon_a-ftruncate.Tpo arm/$(DEPDIR)/arm_librdimon_a-ftruncate.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='arm/ftruncate.c' object='arm/arm_librdimon_a-ftruncate.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o arm/arm_librdimon_a-ftruncate.obj `if test -f 'arm/ftruncate.c'; then $(CYGPATH_W) 'arm/ftruncate.c'; else $(CYGPATH_W) '$(srcdir)/arm/ftruncate.c'; fi` + +arm/arm_librdimon_a-libcfunc.o: arm/libcfunc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT arm/arm_librdimon_a-libcfunc.o -MD -MP -MF arm/$(DEPDIR)/arm_librdimon_a-libcfunc.Tpo -c -o arm/arm_librdimon_a-libcfunc.o `test -f 'arm/libcfunc.c' || echo '$(srcdir)/'`arm/libcfunc.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) arm/$(DEPDIR)/arm_librdimon_a-libcfunc.Tpo arm/$(DEPDIR)/arm_librdimon_a-libcfunc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='arm/libcfunc.c' object='arm/arm_librdimon_a-libcfunc.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o arm/arm_librdimon_a-libcfunc.o `test -f 'arm/libcfunc.c' || echo '$(srcdir)/'`arm/libcfunc.c + +arm/arm_librdimon_a-libcfunc.obj: arm/libcfunc.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT arm/arm_librdimon_a-libcfunc.obj -MD -MP -MF arm/$(DEPDIR)/arm_librdimon_a-libcfunc.Tpo -c -o arm/arm_librdimon_a-libcfunc.obj `if test -f 'arm/libcfunc.c'; then $(CYGPATH_W) 'arm/libcfunc.c'; else $(CYGPATH_W) '$(srcdir)/arm/libcfunc.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) arm/$(DEPDIR)/arm_librdimon_a-libcfunc.Tpo arm/$(DEPDIR)/arm_librdimon_a-libcfunc.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='arm/libcfunc.c' object='arm/arm_librdimon_a-libcfunc.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o arm/arm_librdimon_a-libcfunc.obj `if test -f 'arm/libcfunc.c'; then $(CYGPATH_W) 'arm/libcfunc.c'; else $(CYGPATH_W) '$(srcdir)/arm/libcfunc.c'; fi` + +arm/arm_librdimon_a-syscalls.o: arm/syscalls.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT arm/arm_librdimon_a-syscalls.o -MD -MP -MF arm/$(DEPDIR)/arm_librdimon_a-syscalls.Tpo -c -o arm/arm_librdimon_a-syscalls.o `test -f 'arm/syscalls.c' || echo '$(srcdir)/'`arm/syscalls.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) arm/$(DEPDIR)/arm_librdimon_a-syscalls.Tpo arm/$(DEPDIR)/arm_librdimon_a-syscalls.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='arm/syscalls.c' object='arm/arm_librdimon_a-syscalls.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o arm/arm_librdimon_a-syscalls.o `test -f 'arm/syscalls.c' || echo '$(srcdir)/'`arm/syscalls.c + +arm/arm_librdimon_a-syscalls.obj: arm/syscalls.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT arm/arm_librdimon_a-syscalls.obj -MD -MP -MF arm/$(DEPDIR)/arm_librdimon_a-syscalls.Tpo -c -o arm/arm_librdimon_a-syscalls.obj `if test -f 'arm/syscalls.c'; then $(CYGPATH_W) 'arm/syscalls.c'; else $(CYGPATH_W) '$(srcdir)/arm/syscalls.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) arm/$(DEPDIR)/arm_librdimon_a-syscalls.Tpo arm/$(DEPDIR)/arm_librdimon_a-syscalls.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='arm/syscalls.c' object='arm/arm_librdimon_a-syscalls.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o arm/arm_librdimon_a-syscalls.obj `if test -f 'arm/syscalls.c'; then $(CYGPATH_W) 'arm/syscalls.c'; else $(CYGPATH_W) '$(srcdir)/arm/syscalls.c'; fi` + +arm/arm_librdimon_a-truncate.o: arm/truncate.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT arm/arm_librdimon_a-truncate.o -MD -MP -MF arm/$(DEPDIR)/arm_librdimon_a-truncate.Tpo -c -o arm/arm_librdimon_a-truncate.o `test -f 'arm/truncate.c' || echo '$(srcdir)/'`arm/truncate.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) arm/$(DEPDIR)/arm_librdimon_a-truncate.Tpo arm/$(DEPDIR)/arm_librdimon_a-truncate.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='arm/truncate.c' object='arm/arm_librdimon_a-truncate.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o arm/arm_librdimon_a-truncate.o `test -f 'arm/truncate.c' || echo '$(srcdir)/'`arm/truncate.c + +arm/arm_librdimon_a-truncate.obj: arm/truncate.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT arm/arm_librdimon_a-truncate.obj -MD -MP -MF arm/$(DEPDIR)/arm_librdimon_a-truncate.Tpo -c -o arm/arm_librdimon_a-truncate.obj `if test -f 'arm/truncate.c'; then $(CYGPATH_W) 'arm/truncate.c'; else $(CYGPATH_W) '$(srcdir)/arm/truncate.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) arm/$(DEPDIR)/arm_librdimon_a-truncate.Tpo arm/$(DEPDIR)/arm_librdimon_a-truncate.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='arm/truncate.c' object='arm/arm_librdimon_a-truncate.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(arm_librdimon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o arm/arm_librdimon_a-truncate.obj `if test -f 'arm/truncate.c'; then $(CYGPATH_W) 'arm/truncate.c'; else $(CYGPATH_W) '$(srcdir)/arm/truncate.c'; fi` + bfin/bfin_libbfinbsp_a-clear_cache_range.o: bfin/clear_cache_range.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bfin_libbfinbsp_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT bfin/bfin_libbfinbsp_a-clear_cache_range.o -MD -MP -MF bfin/$(DEPDIR)/bfin_libbfinbsp_a-clear_cache_range.Tpo -c -o bfin/bfin_libbfinbsp_a-clear_cache_range.o `test -f 'bfin/clear_cache_range.c' || echo '$(srcdir)/'`bfin/clear_cache_range.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) bfin/$(DEPDIR)/bfin_libbfinbsp_a-clear_cache_range.Tpo bfin/$(DEPDIR)/bfin_libbfinbsp_a-clear_cache_range.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bfin/clear_cache_range.c' object='bfin/bfin_libbfinbsp_a-clear_cache_range.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bfin_libbfinbsp_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bfin/bfin_libbfinbsp_a-clear_cache_range.o `test -f 'bfin/clear_cache_range.c' || echo '$(srcdir)/'`bfin/clear_cache_range.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bfin_libbfinbsp_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bfin/bfin_libbfinbsp_a-clear_cache_range.o `test -f 'bfin/clear_cache_range.c' || echo '$(srcdir)/'`bfin/clear_cache_range.c + +bfin/bfin_libbfinbsp_a-clear_cache_range.obj: bfin/clear_cache_range.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bfin_libbfinbsp_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT bfin/bfin_libbfinbsp_a-clear_cache_range.obj -MD -MP -MF bfin/$(DEPDIR)/bfin_libbfinbsp_a-clear_cache_range.Tpo -c -o bfin/bfin_libbfinbsp_a-clear_cache_range.obj `if test -f 'bfin/clear_cache_range.c'; then $(CYGPATH_W) 'bfin/clear_cache_range.c'; else $(CYGPATH_W) '$(srcdir)/bfin/clear_cache_range.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) bfin/$(DEPDIR)/bfin_libbfinbsp_a-clear_cache_range.Tpo bfin/$(DEPDIR)/bfin_libbfinbsp_a-clear_cache_range.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bfin/clear_cache_range.c' object='bfin/bfin_libbfinbsp_a-clear_cache_range.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bfin_libbfinbsp_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bfin/bfin_libbfinbsp_a-clear_cache_range.obj `if test -f 'bfin/clear_cache_range.c'; then $(CYGPATH_W) 'bfin/clear_cache_range.c'; else $(CYGPATH_W) '$(srcdir)/bfin/clear_cache_range.c'; fi` + +bfin/bfin_libbfinbsp_a-_exit.o: bfin/_exit.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bfin_libbfinbsp_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT bfin/bfin_libbfinbsp_a-_exit.o -MD -MP -MF bfin/$(DEPDIR)/bfin_libbfinbsp_a-_exit.Tpo -c -o bfin/bfin_libbfinbsp_a-_exit.o `test -f 'bfin/_exit.c' || echo '$(srcdir)/'`bfin/_exit.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) bfin/$(DEPDIR)/bfin_libbfinbsp_a-_exit.Tpo bfin/$(DEPDIR)/bfin_libbfinbsp_a-_exit.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bfin/_exit.c' object='bfin/bfin_libbfinbsp_a-_exit.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bfin_libbfinbsp_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bfin/bfin_libbfinbsp_a-_exit.o `test -f 'bfin/_exit.c' || echo '$(srcdir)/'`bfin/_exit.c + +bfin/bfin_libbfinbsp_a-_exit.obj: bfin/_exit.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bfin_libbfinbsp_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT bfin/bfin_libbfinbsp_a-_exit.obj -MD -MP -MF bfin/$(DEPDIR)/bfin_libbfinbsp_a-_exit.Tpo -c -o bfin/bfin_libbfinbsp_a-_exit.obj `if test -f 'bfin/_exit.c'; then $(CYGPATH_W) 'bfin/_exit.c'; else $(CYGPATH_W) '$(srcdir)/bfin/_exit.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) bfin/$(DEPDIR)/bfin_libbfinbsp_a-_exit.Tpo bfin/$(DEPDIR)/bfin_libbfinbsp_a-_exit.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bfin/_exit.c' object='bfin/bfin_libbfinbsp_a-_exit.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bfin_libbfinbsp_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bfin/bfin_libbfinbsp_a-_exit.obj `if test -f 'bfin/_exit.c'; then $(CYGPATH_W) 'bfin/_exit.c'; else $(CYGPATH_W) '$(srcdir)/bfin/_exit.c'; fi` + +bfin/bfin_libsim_a-clear_cache_range.o: bfin/clear_cache_range.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bfin_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT bfin/bfin_libsim_a-clear_cache_range.o -MD -MP -MF bfin/$(DEPDIR)/bfin_libsim_a-clear_cache_range.Tpo -c -o bfin/bfin_libsim_a-clear_cache_range.o `test -f 'bfin/clear_cache_range.c' || echo '$(srcdir)/'`bfin/clear_cache_range.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) bfin/$(DEPDIR)/bfin_libsim_a-clear_cache_range.Tpo bfin/$(DEPDIR)/bfin_libsim_a-clear_cache_range.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bfin/clear_cache_range.c' object='bfin/bfin_libsim_a-clear_cache_range.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bfin_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bfin/bfin_libsim_a-clear_cache_range.o `test -f 'bfin/clear_cache_range.c' || echo '$(srcdir)/'`bfin/clear_cache_range.c + +bfin/bfin_libsim_a-clear_cache_range.obj: bfin/clear_cache_range.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bfin_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT bfin/bfin_libsim_a-clear_cache_range.obj -MD -MP -MF bfin/$(DEPDIR)/bfin_libsim_a-clear_cache_range.Tpo -c -o bfin/bfin_libsim_a-clear_cache_range.obj `if test -f 'bfin/clear_cache_range.c'; then $(CYGPATH_W) 'bfin/clear_cache_range.c'; else $(CYGPATH_W) '$(srcdir)/bfin/clear_cache_range.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) bfin/$(DEPDIR)/bfin_libsim_a-clear_cache_range.Tpo bfin/$(DEPDIR)/bfin_libsim_a-clear_cache_range.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bfin/clear_cache_range.c' object='bfin/bfin_libsim_a-clear_cache_range.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bfin_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bfin/bfin_libsim_a-clear_cache_range.obj `if test -f 'bfin/clear_cache_range.c'; then $(CYGPATH_W) 'bfin/clear_cache_range.c'; else $(CYGPATH_W) '$(srcdir)/bfin/clear_cache_range.c'; fi` + +bfin/bfin_libsim_a-syscalls.o: bfin/syscalls.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bfin_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT bfin/bfin_libsim_a-syscalls.o -MD -MP -MF bfin/$(DEPDIR)/bfin_libsim_a-syscalls.Tpo -c -o bfin/bfin_libsim_a-syscalls.o `test -f 'bfin/syscalls.c' || echo '$(srcdir)/'`bfin/syscalls.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) bfin/$(DEPDIR)/bfin_libsim_a-syscalls.Tpo bfin/$(DEPDIR)/bfin_libsim_a-syscalls.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bfin/syscalls.c' object='bfin/bfin_libsim_a-syscalls.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bfin_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bfin/bfin_libsim_a-syscalls.o `test -f 'bfin/syscalls.c' || echo '$(srcdir)/'`bfin/syscalls.c + +bfin/bfin_libsim_a-syscalls.obj: bfin/syscalls.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bfin_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT bfin/bfin_libsim_a-syscalls.obj -MD -MP -MF bfin/$(DEPDIR)/bfin_libsim_a-syscalls.Tpo -c -o bfin/bfin_libsim_a-syscalls.obj `if test -f 'bfin/syscalls.c'; then $(CYGPATH_W) 'bfin/syscalls.c'; else $(CYGPATH_W) '$(srcdir)/bfin/syscalls.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) bfin/$(DEPDIR)/bfin_libsim_a-syscalls.Tpo bfin/$(DEPDIR)/bfin_libsim_a-syscalls.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bfin/syscalls.c' object='bfin/bfin_libsim_a-syscalls.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bfin_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bfin/bfin_libsim_a-syscalls.obj `if test -f 'bfin/syscalls.c'; then $(CYGPATH_W) 'bfin/syscalls.c'; else $(CYGPATH_W) '$(srcdir)/bfin/syscalls.c'; fi` + +csky/csky_libsemi_a-sbrk.o: csky/sbrk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT csky/csky_libsemi_a-sbrk.o -MD -MP -MF csky/$(DEPDIR)/csky_libsemi_a-sbrk.Tpo -c -o csky/csky_libsemi_a-sbrk.o `test -f 'csky/sbrk.c' || echo '$(srcdir)/'`csky/sbrk.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) csky/$(DEPDIR)/csky_libsemi_a-sbrk.Tpo csky/$(DEPDIR)/csky_libsemi_a-sbrk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='csky/sbrk.c' object='csky/csky_libsemi_a-sbrk.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o csky/csky_libsemi_a-sbrk.o `test -f 'csky/sbrk.c' || echo '$(srcdir)/'`csky/sbrk.c + +csky/csky_libsemi_a-sbrk.obj: csky/sbrk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT csky/csky_libsemi_a-sbrk.obj -MD -MP -MF csky/$(DEPDIR)/csky_libsemi_a-sbrk.Tpo -c -o csky/csky_libsemi_a-sbrk.obj `if test -f 'csky/sbrk.c'; then $(CYGPATH_W) 'csky/sbrk.c'; else $(CYGPATH_W) '$(srcdir)/csky/sbrk.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) csky/$(DEPDIR)/csky_libsemi_a-sbrk.Tpo csky/$(DEPDIR)/csky_libsemi_a-sbrk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='csky/sbrk.c' object='csky/csky_libsemi_a-sbrk.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o csky/csky_libsemi_a-sbrk.obj `if test -f 'csky/sbrk.c'; then $(CYGPATH_W) 'csky/sbrk.c'; else $(CYGPATH_W) '$(srcdir)/csky/sbrk.c'; fi` + +csky/csky_libsemi_a-io-gdb.o: csky/io-gdb.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT csky/csky_libsemi_a-io-gdb.o -MD -MP -MF csky/$(DEPDIR)/csky_libsemi_a-io-gdb.Tpo -c -o csky/csky_libsemi_a-io-gdb.o `test -f 'csky/io-gdb.c' || echo '$(srcdir)/'`csky/io-gdb.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) csky/$(DEPDIR)/csky_libsemi_a-io-gdb.Tpo csky/$(DEPDIR)/csky_libsemi_a-io-gdb.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='csky/io-gdb.c' object='csky/csky_libsemi_a-io-gdb.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o csky/csky_libsemi_a-io-gdb.o `test -f 'csky/io-gdb.c' || echo '$(srcdir)/'`csky/io-gdb.c + +csky/csky_libsemi_a-io-gdb.obj: csky/io-gdb.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT csky/csky_libsemi_a-io-gdb.obj -MD -MP -MF csky/$(DEPDIR)/csky_libsemi_a-io-gdb.Tpo -c -o csky/csky_libsemi_a-io-gdb.obj `if test -f 'csky/io-gdb.c'; then $(CYGPATH_W) 'csky/io-gdb.c'; else $(CYGPATH_W) '$(srcdir)/csky/io-gdb.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) csky/$(DEPDIR)/csky_libsemi_a-io-gdb.Tpo csky/$(DEPDIR)/csky_libsemi_a-io-gdb.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='csky/io-gdb.c' object='csky/csky_libsemi_a-io-gdb.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o csky/csky_libsemi_a-io-gdb.obj `if test -f 'csky/io-gdb.c'; then $(CYGPATH_W) 'csky/io-gdb.c'; else $(CYGPATH_W) '$(srcdir)/csky/io-gdb.c'; fi` + +csky/csky_libsemi_a-io-exit.o: csky/io-exit.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT csky/csky_libsemi_a-io-exit.o -MD -MP -MF csky/$(DEPDIR)/csky_libsemi_a-io-exit.Tpo -c -o csky/csky_libsemi_a-io-exit.o `test -f 'csky/io-exit.c' || echo '$(srcdir)/'`csky/io-exit.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) csky/$(DEPDIR)/csky_libsemi_a-io-exit.Tpo csky/$(DEPDIR)/csky_libsemi_a-io-exit.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='csky/io-exit.c' object='csky/csky_libsemi_a-io-exit.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o csky/csky_libsemi_a-io-exit.o `test -f 'csky/io-exit.c' || echo '$(srcdir)/'`csky/io-exit.c + +csky/csky_libsemi_a-io-exit.obj: csky/io-exit.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT csky/csky_libsemi_a-io-exit.obj -MD -MP -MF csky/$(DEPDIR)/csky_libsemi_a-io-exit.Tpo -c -o csky/csky_libsemi_a-io-exit.obj `if test -f 'csky/io-exit.c'; then $(CYGPATH_W) 'csky/io-exit.c'; else $(CYGPATH_W) '$(srcdir)/csky/io-exit.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) csky/$(DEPDIR)/csky_libsemi_a-io-exit.Tpo csky/$(DEPDIR)/csky_libsemi_a-io-exit.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='csky/io-exit.c' object='csky/csky_libsemi_a-io-exit.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o csky/csky_libsemi_a-io-exit.obj `if test -f 'csky/io-exit.c'; then $(CYGPATH_W) 'csky/io-exit.c'; else $(CYGPATH_W) '$(srcdir)/csky/io-exit.c'; fi` + +csky/csky_libsemi_a-io-close.o: csky/io-close.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT csky/csky_libsemi_a-io-close.o -MD -MP -MF csky/$(DEPDIR)/csky_libsemi_a-io-close.Tpo -c -o csky/csky_libsemi_a-io-close.o `test -f 'csky/io-close.c' || echo '$(srcdir)/'`csky/io-close.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) csky/$(DEPDIR)/csky_libsemi_a-io-close.Tpo csky/$(DEPDIR)/csky_libsemi_a-io-close.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='csky/io-close.c' object='csky/csky_libsemi_a-io-close.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o csky/csky_libsemi_a-io-close.o `test -f 'csky/io-close.c' || echo '$(srcdir)/'`csky/io-close.c + +csky/csky_libsemi_a-io-close.obj: csky/io-close.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT csky/csky_libsemi_a-io-close.obj -MD -MP -MF csky/$(DEPDIR)/csky_libsemi_a-io-close.Tpo -c -o csky/csky_libsemi_a-io-close.obj `if test -f 'csky/io-close.c'; then $(CYGPATH_W) 'csky/io-close.c'; else $(CYGPATH_W) '$(srcdir)/csky/io-close.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) csky/$(DEPDIR)/csky_libsemi_a-io-close.Tpo csky/$(DEPDIR)/csky_libsemi_a-io-close.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='csky/io-close.c' object='csky/csky_libsemi_a-io-close.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o csky/csky_libsemi_a-io-close.obj `if test -f 'csky/io-close.c'; then $(CYGPATH_W) 'csky/io-close.c'; else $(CYGPATH_W) '$(srcdir)/csky/io-close.c'; fi` + +csky/csky_libsemi_a-io-fstat.o: csky/io-fstat.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT csky/csky_libsemi_a-io-fstat.o -MD -MP -MF csky/$(DEPDIR)/csky_libsemi_a-io-fstat.Tpo -c -o csky/csky_libsemi_a-io-fstat.o `test -f 'csky/io-fstat.c' || echo '$(srcdir)/'`csky/io-fstat.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) csky/$(DEPDIR)/csky_libsemi_a-io-fstat.Tpo csky/$(DEPDIR)/csky_libsemi_a-io-fstat.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='csky/io-fstat.c' object='csky/csky_libsemi_a-io-fstat.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o csky/csky_libsemi_a-io-fstat.o `test -f 'csky/io-fstat.c' || echo '$(srcdir)/'`csky/io-fstat.c + +csky/csky_libsemi_a-io-fstat.obj: csky/io-fstat.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT csky/csky_libsemi_a-io-fstat.obj -MD -MP -MF csky/$(DEPDIR)/csky_libsemi_a-io-fstat.Tpo -c -o csky/csky_libsemi_a-io-fstat.obj `if test -f 'csky/io-fstat.c'; then $(CYGPATH_W) 'csky/io-fstat.c'; else $(CYGPATH_W) '$(srcdir)/csky/io-fstat.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) csky/$(DEPDIR)/csky_libsemi_a-io-fstat.Tpo csky/$(DEPDIR)/csky_libsemi_a-io-fstat.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='csky/io-fstat.c' object='csky/csky_libsemi_a-io-fstat.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o csky/csky_libsemi_a-io-fstat.obj `if test -f 'csky/io-fstat.c'; then $(CYGPATH_W) 'csky/io-fstat.c'; else $(CYGPATH_W) '$(srcdir)/csky/io-fstat.c'; fi` + +csky/csky_libsemi_a-io-gettimeofday.o: csky/io-gettimeofday.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT csky/csky_libsemi_a-io-gettimeofday.o -MD -MP -MF csky/$(DEPDIR)/csky_libsemi_a-io-gettimeofday.Tpo -c -o csky/csky_libsemi_a-io-gettimeofday.o `test -f 'csky/io-gettimeofday.c' || echo '$(srcdir)/'`csky/io-gettimeofday.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) csky/$(DEPDIR)/csky_libsemi_a-io-gettimeofday.Tpo csky/$(DEPDIR)/csky_libsemi_a-io-gettimeofday.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='csky/io-gettimeofday.c' object='csky/csky_libsemi_a-io-gettimeofday.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o csky/csky_libsemi_a-io-gettimeofday.o `test -f 'csky/io-gettimeofday.c' || echo '$(srcdir)/'`csky/io-gettimeofday.c + +csky/csky_libsemi_a-io-gettimeofday.obj: csky/io-gettimeofday.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT csky/csky_libsemi_a-io-gettimeofday.obj -MD -MP -MF csky/$(DEPDIR)/csky_libsemi_a-io-gettimeofday.Tpo -c -o csky/csky_libsemi_a-io-gettimeofday.obj `if test -f 'csky/io-gettimeofday.c'; then $(CYGPATH_W) 'csky/io-gettimeofday.c'; else $(CYGPATH_W) '$(srcdir)/csky/io-gettimeofday.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) csky/$(DEPDIR)/csky_libsemi_a-io-gettimeofday.Tpo csky/$(DEPDIR)/csky_libsemi_a-io-gettimeofday.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='csky/io-gettimeofday.c' object='csky/csky_libsemi_a-io-gettimeofday.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o csky/csky_libsemi_a-io-gettimeofday.obj `if test -f 'csky/io-gettimeofday.c'; then $(CYGPATH_W) 'csky/io-gettimeofday.c'; else $(CYGPATH_W) '$(srcdir)/csky/io-gettimeofday.c'; fi` + +csky/csky_libsemi_a-io-lseek.o: csky/io-lseek.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT csky/csky_libsemi_a-io-lseek.o -MD -MP -MF csky/$(DEPDIR)/csky_libsemi_a-io-lseek.Tpo -c -o csky/csky_libsemi_a-io-lseek.o `test -f 'csky/io-lseek.c' || echo '$(srcdir)/'`csky/io-lseek.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) csky/$(DEPDIR)/csky_libsemi_a-io-lseek.Tpo csky/$(DEPDIR)/csky_libsemi_a-io-lseek.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='csky/io-lseek.c' object='csky/csky_libsemi_a-io-lseek.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o csky/csky_libsemi_a-io-lseek.o `test -f 'csky/io-lseek.c' || echo '$(srcdir)/'`csky/io-lseek.c + +csky/csky_libsemi_a-io-lseek.obj: csky/io-lseek.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT csky/csky_libsemi_a-io-lseek.obj -MD -MP -MF csky/$(DEPDIR)/csky_libsemi_a-io-lseek.Tpo -c -o csky/csky_libsemi_a-io-lseek.obj `if test -f 'csky/io-lseek.c'; then $(CYGPATH_W) 'csky/io-lseek.c'; else $(CYGPATH_W) '$(srcdir)/csky/io-lseek.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) csky/$(DEPDIR)/csky_libsemi_a-io-lseek.Tpo csky/$(DEPDIR)/csky_libsemi_a-io-lseek.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='csky/io-lseek.c' object='csky/csky_libsemi_a-io-lseek.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o csky/csky_libsemi_a-io-lseek.obj `if test -f 'csky/io-lseek.c'; then $(CYGPATH_W) 'csky/io-lseek.c'; else $(CYGPATH_W) '$(srcdir)/csky/io-lseek.c'; fi` + +csky/csky_libsemi_a-io-read.o: csky/io-read.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT csky/csky_libsemi_a-io-read.o -MD -MP -MF csky/$(DEPDIR)/csky_libsemi_a-io-read.Tpo -c -o csky/csky_libsemi_a-io-read.o `test -f 'csky/io-read.c' || echo '$(srcdir)/'`csky/io-read.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) csky/$(DEPDIR)/csky_libsemi_a-io-read.Tpo csky/$(DEPDIR)/csky_libsemi_a-io-read.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='csky/io-read.c' object='csky/csky_libsemi_a-io-read.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o csky/csky_libsemi_a-io-read.o `test -f 'csky/io-read.c' || echo '$(srcdir)/'`csky/io-read.c + +csky/csky_libsemi_a-io-read.obj: csky/io-read.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT csky/csky_libsemi_a-io-read.obj -MD -MP -MF csky/$(DEPDIR)/csky_libsemi_a-io-read.Tpo -c -o csky/csky_libsemi_a-io-read.obj `if test -f 'csky/io-read.c'; then $(CYGPATH_W) 'csky/io-read.c'; else $(CYGPATH_W) '$(srcdir)/csky/io-read.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) csky/$(DEPDIR)/csky_libsemi_a-io-read.Tpo csky/$(DEPDIR)/csky_libsemi_a-io-read.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='csky/io-read.c' object='csky/csky_libsemi_a-io-read.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o csky/csky_libsemi_a-io-read.obj `if test -f 'csky/io-read.c'; then $(CYGPATH_W) 'csky/io-read.c'; else $(CYGPATH_W) '$(srcdir)/csky/io-read.c'; fi` + +csky/csky_libsemi_a-io-system.o: csky/io-system.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT csky/csky_libsemi_a-io-system.o -MD -MP -MF csky/$(DEPDIR)/csky_libsemi_a-io-system.Tpo -c -o csky/csky_libsemi_a-io-system.o `test -f 'csky/io-system.c' || echo '$(srcdir)/'`csky/io-system.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) csky/$(DEPDIR)/csky_libsemi_a-io-system.Tpo csky/$(DEPDIR)/csky_libsemi_a-io-system.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='csky/io-system.c' object='csky/csky_libsemi_a-io-system.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o csky/csky_libsemi_a-io-system.o `test -f 'csky/io-system.c' || echo '$(srcdir)/'`csky/io-system.c + +csky/csky_libsemi_a-io-system.obj: csky/io-system.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT csky/csky_libsemi_a-io-system.obj -MD -MP -MF csky/$(DEPDIR)/csky_libsemi_a-io-system.Tpo -c -o csky/csky_libsemi_a-io-system.obj `if test -f 'csky/io-system.c'; then $(CYGPATH_W) 'csky/io-system.c'; else $(CYGPATH_W) '$(srcdir)/csky/io-system.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) csky/$(DEPDIR)/csky_libsemi_a-io-system.Tpo csky/$(DEPDIR)/csky_libsemi_a-io-system.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='csky/io-system.c' object='csky/csky_libsemi_a-io-system.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o csky/csky_libsemi_a-io-system.obj `if test -f 'csky/io-system.c'; then $(CYGPATH_W) 'csky/io-system.c'; else $(CYGPATH_W) '$(srcdir)/csky/io-system.c'; fi` + +csky/csky_libsemi_a-io-unlink.o: csky/io-unlink.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT csky/csky_libsemi_a-io-unlink.o -MD -MP -MF csky/$(DEPDIR)/csky_libsemi_a-io-unlink.Tpo -c -o csky/csky_libsemi_a-io-unlink.o `test -f 'csky/io-unlink.c' || echo '$(srcdir)/'`csky/io-unlink.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) csky/$(DEPDIR)/csky_libsemi_a-io-unlink.Tpo csky/$(DEPDIR)/csky_libsemi_a-io-unlink.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='csky/io-unlink.c' object='csky/csky_libsemi_a-io-unlink.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o csky/csky_libsemi_a-io-unlink.o `test -f 'csky/io-unlink.c' || echo '$(srcdir)/'`csky/io-unlink.c + +csky/csky_libsemi_a-io-unlink.obj: csky/io-unlink.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT csky/csky_libsemi_a-io-unlink.obj -MD -MP -MF csky/$(DEPDIR)/csky_libsemi_a-io-unlink.Tpo -c -o csky/csky_libsemi_a-io-unlink.obj `if test -f 'csky/io-unlink.c'; then $(CYGPATH_W) 'csky/io-unlink.c'; else $(CYGPATH_W) '$(srcdir)/csky/io-unlink.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) csky/$(DEPDIR)/csky_libsemi_a-io-unlink.Tpo csky/$(DEPDIR)/csky_libsemi_a-io-unlink.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='csky/io-unlink.c' object='csky/csky_libsemi_a-io-unlink.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o csky/csky_libsemi_a-io-unlink.obj `if test -f 'csky/io-unlink.c'; then $(CYGPATH_W) 'csky/io-unlink.c'; else $(CYGPATH_W) '$(srcdir)/csky/io-unlink.c'; fi` + +csky/csky_libsemi_a-io-isatty.o: csky/io-isatty.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT csky/csky_libsemi_a-io-isatty.o -MD -MP -MF csky/$(DEPDIR)/csky_libsemi_a-io-isatty.Tpo -c -o csky/csky_libsemi_a-io-isatty.o `test -f 'csky/io-isatty.c' || echo '$(srcdir)/'`csky/io-isatty.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) csky/$(DEPDIR)/csky_libsemi_a-io-isatty.Tpo csky/$(DEPDIR)/csky_libsemi_a-io-isatty.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='csky/io-isatty.c' object='csky/csky_libsemi_a-io-isatty.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o csky/csky_libsemi_a-io-isatty.o `test -f 'csky/io-isatty.c' || echo '$(srcdir)/'`csky/io-isatty.c + +csky/csky_libsemi_a-io-isatty.obj: csky/io-isatty.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT csky/csky_libsemi_a-io-isatty.obj -MD -MP -MF csky/$(DEPDIR)/csky_libsemi_a-io-isatty.Tpo -c -o csky/csky_libsemi_a-io-isatty.obj `if test -f 'csky/io-isatty.c'; then $(CYGPATH_W) 'csky/io-isatty.c'; else $(CYGPATH_W) '$(srcdir)/csky/io-isatty.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) csky/$(DEPDIR)/csky_libsemi_a-io-isatty.Tpo csky/$(DEPDIR)/csky_libsemi_a-io-isatty.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='csky/io-isatty.c' object='csky/csky_libsemi_a-io-isatty.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o csky/csky_libsemi_a-io-isatty.obj `if test -f 'csky/io-isatty.c'; then $(CYGPATH_W) 'csky/io-isatty.c'; else $(CYGPATH_W) '$(srcdir)/csky/io-isatty.c'; fi` + +csky/csky_libsemi_a-io-open.o: csky/io-open.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT csky/csky_libsemi_a-io-open.o -MD -MP -MF csky/$(DEPDIR)/csky_libsemi_a-io-open.Tpo -c -o csky/csky_libsemi_a-io-open.o `test -f 'csky/io-open.c' || echo '$(srcdir)/'`csky/io-open.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) csky/$(DEPDIR)/csky_libsemi_a-io-open.Tpo csky/$(DEPDIR)/csky_libsemi_a-io-open.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='csky/io-open.c' object='csky/csky_libsemi_a-io-open.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o csky/csky_libsemi_a-io-open.o `test -f 'csky/io-open.c' || echo '$(srcdir)/'`csky/io-open.c + +csky/csky_libsemi_a-io-open.obj: csky/io-open.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT csky/csky_libsemi_a-io-open.obj -MD -MP -MF csky/$(DEPDIR)/csky_libsemi_a-io-open.Tpo -c -o csky/csky_libsemi_a-io-open.obj `if test -f 'csky/io-open.c'; then $(CYGPATH_W) 'csky/io-open.c'; else $(CYGPATH_W) '$(srcdir)/csky/io-open.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) csky/$(DEPDIR)/csky_libsemi_a-io-open.Tpo csky/$(DEPDIR)/csky_libsemi_a-io-open.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='csky/io-open.c' object='csky/csky_libsemi_a-io-open.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o csky/csky_libsemi_a-io-open.obj `if test -f 'csky/io-open.c'; then $(CYGPATH_W) 'csky/io-open.c'; else $(CYGPATH_W) '$(srcdir)/csky/io-open.c'; fi` + +csky/csky_libsemi_a-io-rename.o: csky/io-rename.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT csky/csky_libsemi_a-io-rename.o -MD -MP -MF csky/$(DEPDIR)/csky_libsemi_a-io-rename.Tpo -c -o csky/csky_libsemi_a-io-rename.o `test -f 'csky/io-rename.c' || echo '$(srcdir)/'`csky/io-rename.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) csky/$(DEPDIR)/csky_libsemi_a-io-rename.Tpo csky/$(DEPDIR)/csky_libsemi_a-io-rename.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='csky/io-rename.c' object='csky/csky_libsemi_a-io-rename.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o csky/csky_libsemi_a-io-rename.o `test -f 'csky/io-rename.c' || echo '$(srcdir)/'`csky/io-rename.c + +csky/csky_libsemi_a-io-rename.obj: csky/io-rename.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT csky/csky_libsemi_a-io-rename.obj -MD -MP -MF csky/$(DEPDIR)/csky_libsemi_a-io-rename.Tpo -c -o csky/csky_libsemi_a-io-rename.obj `if test -f 'csky/io-rename.c'; then $(CYGPATH_W) 'csky/io-rename.c'; else $(CYGPATH_W) '$(srcdir)/csky/io-rename.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) csky/$(DEPDIR)/csky_libsemi_a-io-rename.Tpo csky/$(DEPDIR)/csky_libsemi_a-io-rename.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='csky/io-rename.c' object='csky/csky_libsemi_a-io-rename.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o csky/csky_libsemi_a-io-rename.obj `if test -f 'csky/io-rename.c'; then $(CYGPATH_W) 'csky/io-rename.c'; else $(CYGPATH_W) '$(srcdir)/csky/io-rename.c'; fi` + +csky/csky_libsemi_a-io-stat.o: csky/io-stat.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT csky/csky_libsemi_a-io-stat.o -MD -MP -MF csky/$(DEPDIR)/csky_libsemi_a-io-stat.Tpo -c -o csky/csky_libsemi_a-io-stat.o `test -f 'csky/io-stat.c' || echo '$(srcdir)/'`csky/io-stat.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) csky/$(DEPDIR)/csky_libsemi_a-io-stat.Tpo csky/$(DEPDIR)/csky_libsemi_a-io-stat.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='csky/io-stat.c' object='csky/csky_libsemi_a-io-stat.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o csky/csky_libsemi_a-io-stat.o `test -f 'csky/io-stat.c' || echo '$(srcdir)/'`csky/io-stat.c + +csky/csky_libsemi_a-io-stat.obj: csky/io-stat.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT csky/csky_libsemi_a-io-stat.obj -MD -MP -MF csky/$(DEPDIR)/csky_libsemi_a-io-stat.Tpo -c -o csky/csky_libsemi_a-io-stat.obj `if test -f 'csky/io-stat.c'; then $(CYGPATH_W) 'csky/io-stat.c'; else $(CYGPATH_W) '$(srcdir)/csky/io-stat.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) csky/$(DEPDIR)/csky_libsemi_a-io-stat.Tpo csky/$(DEPDIR)/csky_libsemi_a-io-stat.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='csky/io-stat.c' object='csky/csky_libsemi_a-io-stat.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o csky/csky_libsemi_a-io-stat.obj `if test -f 'csky/io-stat.c'; then $(CYGPATH_W) 'csky/io-stat.c'; else $(CYGPATH_W) '$(srcdir)/csky/io-stat.c'; fi` + +csky/csky_libsemi_a-io-time.o: csky/io-time.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT csky/csky_libsemi_a-io-time.o -MD -MP -MF csky/$(DEPDIR)/csky_libsemi_a-io-time.Tpo -c -o csky/csky_libsemi_a-io-time.o `test -f 'csky/io-time.c' || echo '$(srcdir)/'`csky/io-time.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) csky/$(DEPDIR)/csky_libsemi_a-io-time.Tpo csky/$(DEPDIR)/csky_libsemi_a-io-time.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='csky/io-time.c' object='csky/csky_libsemi_a-io-time.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o csky/csky_libsemi_a-io-time.o `test -f 'csky/io-time.c' || echo '$(srcdir)/'`csky/io-time.c + +csky/csky_libsemi_a-io-time.obj: csky/io-time.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT csky/csky_libsemi_a-io-time.obj -MD -MP -MF csky/$(DEPDIR)/csky_libsemi_a-io-time.Tpo -c -o csky/csky_libsemi_a-io-time.obj `if test -f 'csky/io-time.c'; then $(CYGPATH_W) 'csky/io-time.c'; else $(CYGPATH_W) '$(srcdir)/csky/io-time.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) csky/$(DEPDIR)/csky_libsemi_a-io-time.Tpo csky/$(DEPDIR)/csky_libsemi_a-io-time.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='csky/io-time.c' object='csky/csky_libsemi_a-io-time.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o csky/csky_libsemi_a-io-time.obj `if test -f 'csky/io-time.c'; then $(CYGPATH_W) 'csky/io-time.c'; else $(CYGPATH_W) '$(srcdir)/csky/io-time.c'; fi` + +csky/csky_libsemi_a-io-write.o: csky/io-write.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT csky/csky_libsemi_a-io-write.o -MD -MP -MF csky/$(DEPDIR)/csky_libsemi_a-io-write.Tpo -c -o csky/csky_libsemi_a-io-write.o `test -f 'csky/io-write.c' || echo '$(srcdir)/'`csky/io-write.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) csky/$(DEPDIR)/csky_libsemi_a-io-write.Tpo csky/$(DEPDIR)/csky_libsemi_a-io-write.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='csky/io-write.c' object='csky/csky_libsemi_a-io-write.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o csky/csky_libsemi_a-io-write.o `test -f 'csky/io-write.c' || echo '$(srcdir)/'`csky/io-write.c + +csky/csky_libsemi_a-io-write.obj: csky/io-write.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT csky/csky_libsemi_a-io-write.obj -MD -MP -MF csky/$(DEPDIR)/csky_libsemi_a-io-write.Tpo -c -o csky/csky_libsemi_a-io-write.obj `if test -f 'csky/io-write.c'; then $(CYGPATH_W) 'csky/io-write.c'; else $(CYGPATH_W) '$(srcdir)/csky/io-write.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) csky/$(DEPDIR)/csky_libsemi_a-io-write.Tpo csky/$(DEPDIR)/csky_libsemi_a-io-write.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='csky/io-write.c' object='csky/csky_libsemi_a-io-write.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o csky/csky_libsemi_a-io-write.obj `if test -f 'csky/io-write.c'; then $(CYGPATH_W) 'csky/io-write.c'; else $(CYGPATH_W) '$(srcdir)/csky/io-write.c'; fi` + +csky/csky_libsemi_a-kill.o: csky/kill.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT csky/csky_libsemi_a-kill.o -MD -MP -MF csky/$(DEPDIR)/csky_libsemi_a-kill.Tpo -c -o csky/csky_libsemi_a-kill.o `test -f 'csky/kill.c' || echo '$(srcdir)/'`csky/kill.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) csky/$(DEPDIR)/csky_libsemi_a-kill.Tpo csky/$(DEPDIR)/csky_libsemi_a-kill.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='csky/kill.c' object='csky/csky_libsemi_a-kill.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o csky/csky_libsemi_a-kill.o `test -f 'csky/kill.c' || echo '$(srcdir)/'`csky/kill.c + +csky/csky_libsemi_a-kill.obj: csky/kill.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT csky/csky_libsemi_a-kill.obj -MD -MP -MF csky/$(DEPDIR)/csky_libsemi_a-kill.Tpo -c -o csky/csky_libsemi_a-kill.obj `if test -f 'csky/kill.c'; then $(CYGPATH_W) 'csky/kill.c'; else $(CYGPATH_W) '$(srcdir)/csky/kill.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) csky/$(DEPDIR)/csky_libsemi_a-kill.Tpo csky/$(DEPDIR)/csky_libsemi_a-kill.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='csky/kill.c' object='csky/csky_libsemi_a-kill.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o csky/csky_libsemi_a-kill.obj `if test -f 'csky/kill.c'; then $(CYGPATH_W) 'csky/kill.c'; else $(CYGPATH_W) '$(srcdir)/csky/kill.c'; fi` + +csky/csky_libsemi_a-getpid.o: csky/getpid.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT csky/csky_libsemi_a-getpid.o -MD -MP -MF csky/$(DEPDIR)/csky_libsemi_a-getpid.Tpo -c -o csky/csky_libsemi_a-getpid.o `test -f 'csky/getpid.c' || echo '$(srcdir)/'`csky/getpid.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) csky/$(DEPDIR)/csky_libsemi_a-getpid.Tpo csky/$(DEPDIR)/csky_libsemi_a-getpid.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='csky/getpid.c' object='csky/csky_libsemi_a-getpid.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o csky/csky_libsemi_a-getpid.o `test -f 'csky/getpid.c' || echo '$(srcdir)/'`csky/getpid.c + +csky/csky_libsemi_a-getpid.obj: csky/getpid.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT csky/csky_libsemi_a-getpid.obj -MD -MP -MF csky/$(DEPDIR)/csky_libsemi_a-getpid.Tpo -c -o csky/csky_libsemi_a-getpid.obj `if test -f 'csky/getpid.c'; then $(CYGPATH_W) 'csky/getpid.c'; else $(CYGPATH_W) '$(srcdir)/csky/getpid.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) csky/$(DEPDIR)/csky_libsemi_a-getpid.Tpo csky/$(DEPDIR)/csky_libsemi_a-getpid.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='csky/getpid.c' object='csky/csky_libsemi_a-getpid.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(csky_libsemi_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o csky/csky_libsemi_a-getpid.obj `if test -f 'csky/getpid.c'; then $(CYGPATH_W) 'csky/getpid.c'; else $(CYGPATH_W) '$(srcdir)/csky/getpid.c'; fi` + +i386/i386_libcygmon_a-cygmon-salib.o: i386/cygmon-salib.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(i386_libcygmon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT i386/i386_libcygmon_a-cygmon-salib.o -MD -MP -MF i386/$(DEPDIR)/i386_libcygmon_a-cygmon-salib.Tpo -c -o i386/i386_libcygmon_a-cygmon-salib.o `test -f 'i386/cygmon-salib.c' || echo '$(srcdir)/'`i386/cygmon-salib.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) i386/$(DEPDIR)/i386_libcygmon_a-cygmon-salib.Tpo i386/$(DEPDIR)/i386_libcygmon_a-cygmon-salib.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='i386/cygmon-salib.c' object='i386/i386_libcygmon_a-cygmon-salib.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(i386_libcygmon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o i386/i386_libcygmon_a-cygmon-salib.o `test -f 'i386/cygmon-salib.c' || echo '$(srcdir)/'`i386/cygmon-salib.c + +i386/i386_libcygmon_a-cygmon-salib.obj: i386/cygmon-salib.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(i386_libcygmon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT i386/i386_libcygmon_a-cygmon-salib.obj -MD -MP -MF i386/$(DEPDIR)/i386_libcygmon_a-cygmon-salib.Tpo -c -o i386/i386_libcygmon_a-cygmon-salib.obj `if test -f 'i386/cygmon-salib.c'; then $(CYGPATH_W) 'i386/cygmon-salib.c'; else $(CYGPATH_W) '$(srcdir)/i386/cygmon-salib.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) i386/$(DEPDIR)/i386_libcygmon_a-cygmon-salib.Tpo i386/$(DEPDIR)/i386_libcygmon_a-cygmon-salib.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='i386/cygmon-salib.c' object='i386/i386_libcygmon_a-cygmon-salib.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(i386_libcygmon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o i386/i386_libcygmon_a-cygmon-salib.obj `if test -f 'i386/cygmon-salib.c'; then $(CYGPATH_W) 'i386/cygmon-salib.c'; else $(CYGPATH_W) '$(srcdir)/i386/cygmon-salib.c'; fi` + +i386/i386_libcygmon_a-cygmon-gmon.o: i386/cygmon-gmon.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(i386_libcygmon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT i386/i386_libcygmon_a-cygmon-gmon.o -MD -MP -MF i386/$(DEPDIR)/i386_libcygmon_a-cygmon-gmon.Tpo -c -o i386/i386_libcygmon_a-cygmon-gmon.o `test -f 'i386/cygmon-gmon.c' || echo '$(srcdir)/'`i386/cygmon-gmon.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) i386/$(DEPDIR)/i386_libcygmon_a-cygmon-gmon.Tpo i386/$(DEPDIR)/i386_libcygmon_a-cygmon-gmon.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='i386/cygmon-gmon.c' object='i386/i386_libcygmon_a-cygmon-gmon.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(i386_libcygmon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o i386/i386_libcygmon_a-cygmon-gmon.o `test -f 'i386/cygmon-gmon.c' || echo '$(srcdir)/'`i386/cygmon-gmon.c + +i386/i386_libcygmon_a-cygmon-gmon.obj: i386/cygmon-gmon.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(i386_libcygmon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT i386/i386_libcygmon_a-cygmon-gmon.obj -MD -MP -MF i386/$(DEPDIR)/i386_libcygmon_a-cygmon-gmon.Tpo -c -o i386/i386_libcygmon_a-cygmon-gmon.obj `if test -f 'i386/cygmon-gmon.c'; then $(CYGPATH_W) 'i386/cygmon-gmon.c'; else $(CYGPATH_W) '$(srcdir)/i386/cygmon-gmon.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) i386/$(DEPDIR)/i386_libcygmon_a-cygmon-gmon.Tpo i386/$(DEPDIR)/i386_libcygmon_a-cygmon-gmon.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='i386/cygmon-gmon.c' object='i386/i386_libcygmon_a-cygmon-gmon.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(i386_libcygmon_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o i386/i386_libcygmon_a-cygmon-gmon.obj `if test -f 'i386/cygmon-gmon.c'; then $(CYGPATH_W) 'i386/cygmon-gmon.c'; else $(CYGPATH_W) '$(srcdir)/i386/cygmon-gmon.c'; fi` + +nios2/nios2_libnios2_a-io-close.o: nios2/io-close.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nios2/nios2_libnios2_a-io-close.o -MD -MP -MF nios2/$(DEPDIR)/nios2_libnios2_a-io-close.Tpo -c -o nios2/nios2_libnios2_a-io-close.o `test -f 'nios2/io-close.c' || echo '$(srcdir)/'`nios2/io-close.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) nios2/$(DEPDIR)/nios2_libnios2_a-io-close.Tpo nios2/$(DEPDIR)/nios2_libnios2_a-io-close.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nios2/io-close.c' object='nios2/nios2_libnios2_a-io-close.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nios2/nios2_libnios2_a-io-close.o `test -f 'nios2/io-close.c' || echo '$(srcdir)/'`nios2/io-close.c + +nios2/nios2_libnios2_a-io-close.obj: nios2/io-close.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nios2/nios2_libnios2_a-io-close.obj -MD -MP -MF nios2/$(DEPDIR)/nios2_libnios2_a-io-close.Tpo -c -o nios2/nios2_libnios2_a-io-close.obj `if test -f 'nios2/io-close.c'; then $(CYGPATH_W) 'nios2/io-close.c'; else $(CYGPATH_W) '$(srcdir)/nios2/io-close.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) nios2/$(DEPDIR)/nios2_libnios2_a-io-close.Tpo nios2/$(DEPDIR)/nios2_libnios2_a-io-close.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nios2/io-close.c' object='nios2/nios2_libnios2_a-io-close.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nios2/nios2_libnios2_a-io-close.obj `if test -f 'nios2/io-close.c'; then $(CYGPATH_W) 'nios2/io-close.c'; else $(CYGPATH_W) '$(srcdir)/nios2/io-close.c'; fi` + +nios2/nios2_libnios2_a-io-exit.o: nios2/io-exit.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nios2/nios2_libnios2_a-io-exit.o -MD -MP -MF nios2/$(DEPDIR)/nios2_libnios2_a-io-exit.Tpo -c -o nios2/nios2_libnios2_a-io-exit.o `test -f 'nios2/io-exit.c' || echo '$(srcdir)/'`nios2/io-exit.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) nios2/$(DEPDIR)/nios2_libnios2_a-io-exit.Tpo nios2/$(DEPDIR)/nios2_libnios2_a-io-exit.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nios2/io-exit.c' object='nios2/nios2_libnios2_a-io-exit.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nios2/nios2_libnios2_a-io-exit.o `test -f 'nios2/io-exit.c' || echo '$(srcdir)/'`nios2/io-exit.c + +nios2/nios2_libnios2_a-io-exit.obj: nios2/io-exit.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nios2/nios2_libnios2_a-io-exit.obj -MD -MP -MF nios2/$(DEPDIR)/nios2_libnios2_a-io-exit.Tpo -c -o nios2/nios2_libnios2_a-io-exit.obj `if test -f 'nios2/io-exit.c'; then $(CYGPATH_W) 'nios2/io-exit.c'; else $(CYGPATH_W) '$(srcdir)/nios2/io-exit.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) nios2/$(DEPDIR)/nios2_libnios2_a-io-exit.Tpo nios2/$(DEPDIR)/nios2_libnios2_a-io-exit.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nios2/io-exit.c' object='nios2/nios2_libnios2_a-io-exit.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nios2/nios2_libnios2_a-io-exit.obj `if test -f 'nios2/io-exit.c'; then $(CYGPATH_W) 'nios2/io-exit.c'; else $(CYGPATH_W) '$(srcdir)/nios2/io-exit.c'; fi` + +nios2/nios2_libnios2_a-io-fstat.o: nios2/io-fstat.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nios2/nios2_libnios2_a-io-fstat.o -MD -MP -MF nios2/$(DEPDIR)/nios2_libnios2_a-io-fstat.Tpo -c -o nios2/nios2_libnios2_a-io-fstat.o `test -f 'nios2/io-fstat.c' || echo '$(srcdir)/'`nios2/io-fstat.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) nios2/$(DEPDIR)/nios2_libnios2_a-io-fstat.Tpo nios2/$(DEPDIR)/nios2_libnios2_a-io-fstat.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nios2/io-fstat.c' object='nios2/nios2_libnios2_a-io-fstat.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nios2/nios2_libnios2_a-io-fstat.o `test -f 'nios2/io-fstat.c' || echo '$(srcdir)/'`nios2/io-fstat.c + +nios2/nios2_libnios2_a-io-fstat.obj: nios2/io-fstat.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nios2/nios2_libnios2_a-io-fstat.obj -MD -MP -MF nios2/$(DEPDIR)/nios2_libnios2_a-io-fstat.Tpo -c -o nios2/nios2_libnios2_a-io-fstat.obj `if test -f 'nios2/io-fstat.c'; then $(CYGPATH_W) 'nios2/io-fstat.c'; else $(CYGPATH_W) '$(srcdir)/nios2/io-fstat.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) nios2/$(DEPDIR)/nios2_libnios2_a-io-fstat.Tpo nios2/$(DEPDIR)/nios2_libnios2_a-io-fstat.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nios2/io-fstat.c' object='nios2/nios2_libnios2_a-io-fstat.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nios2/nios2_libnios2_a-io-fstat.obj `if test -f 'nios2/io-fstat.c'; then $(CYGPATH_W) 'nios2/io-fstat.c'; else $(CYGPATH_W) '$(srcdir)/nios2/io-fstat.c'; fi` + +nios2/nios2_libnios2_a-io-gdb.o: nios2/io-gdb.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nios2/nios2_libnios2_a-io-gdb.o -MD -MP -MF nios2/$(DEPDIR)/nios2_libnios2_a-io-gdb.Tpo -c -o nios2/nios2_libnios2_a-io-gdb.o `test -f 'nios2/io-gdb.c' || echo '$(srcdir)/'`nios2/io-gdb.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) nios2/$(DEPDIR)/nios2_libnios2_a-io-gdb.Tpo nios2/$(DEPDIR)/nios2_libnios2_a-io-gdb.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nios2/io-gdb.c' object='nios2/nios2_libnios2_a-io-gdb.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nios2/nios2_libnios2_a-io-gdb.o `test -f 'nios2/io-gdb.c' || echo '$(srcdir)/'`nios2/io-gdb.c + +nios2/nios2_libnios2_a-io-gdb.obj: nios2/io-gdb.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nios2/nios2_libnios2_a-io-gdb.obj -MD -MP -MF nios2/$(DEPDIR)/nios2_libnios2_a-io-gdb.Tpo -c -o nios2/nios2_libnios2_a-io-gdb.obj `if test -f 'nios2/io-gdb.c'; then $(CYGPATH_W) 'nios2/io-gdb.c'; else $(CYGPATH_W) '$(srcdir)/nios2/io-gdb.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) nios2/$(DEPDIR)/nios2_libnios2_a-io-gdb.Tpo nios2/$(DEPDIR)/nios2_libnios2_a-io-gdb.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nios2/io-gdb.c' object='nios2/nios2_libnios2_a-io-gdb.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nios2/nios2_libnios2_a-io-gdb.obj `if test -f 'nios2/io-gdb.c'; then $(CYGPATH_W) 'nios2/io-gdb.c'; else $(CYGPATH_W) '$(srcdir)/nios2/io-gdb.c'; fi` + +nios2/nios2_libnios2_a-io-gettimeofday.o: nios2/io-gettimeofday.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nios2/nios2_libnios2_a-io-gettimeofday.o -MD -MP -MF nios2/$(DEPDIR)/nios2_libnios2_a-io-gettimeofday.Tpo -c -o nios2/nios2_libnios2_a-io-gettimeofday.o `test -f 'nios2/io-gettimeofday.c' || echo '$(srcdir)/'`nios2/io-gettimeofday.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) nios2/$(DEPDIR)/nios2_libnios2_a-io-gettimeofday.Tpo nios2/$(DEPDIR)/nios2_libnios2_a-io-gettimeofday.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nios2/io-gettimeofday.c' object='nios2/nios2_libnios2_a-io-gettimeofday.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nios2/nios2_libnios2_a-io-gettimeofday.o `test -f 'nios2/io-gettimeofday.c' || echo '$(srcdir)/'`nios2/io-gettimeofday.c + +nios2/nios2_libnios2_a-io-gettimeofday.obj: nios2/io-gettimeofday.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nios2/nios2_libnios2_a-io-gettimeofday.obj -MD -MP -MF nios2/$(DEPDIR)/nios2_libnios2_a-io-gettimeofday.Tpo -c -o nios2/nios2_libnios2_a-io-gettimeofday.obj `if test -f 'nios2/io-gettimeofday.c'; then $(CYGPATH_W) 'nios2/io-gettimeofday.c'; else $(CYGPATH_W) '$(srcdir)/nios2/io-gettimeofday.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) nios2/$(DEPDIR)/nios2_libnios2_a-io-gettimeofday.Tpo nios2/$(DEPDIR)/nios2_libnios2_a-io-gettimeofday.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nios2/io-gettimeofday.c' object='nios2/nios2_libnios2_a-io-gettimeofday.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nios2/nios2_libnios2_a-io-gettimeofday.obj `if test -f 'nios2/io-gettimeofday.c'; then $(CYGPATH_W) 'nios2/io-gettimeofday.c'; else $(CYGPATH_W) '$(srcdir)/nios2/io-gettimeofday.c'; fi` + +nios2/nios2_libnios2_a-io-isatty.o: nios2/io-isatty.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nios2/nios2_libnios2_a-io-isatty.o -MD -MP -MF nios2/$(DEPDIR)/nios2_libnios2_a-io-isatty.Tpo -c -o nios2/nios2_libnios2_a-io-isatty.o `test -f 'nios2/io-isatty.c' || echo '$(srcdir)/'`nios2/io-isatty.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) nios2/$(DEPDIR)/nios2_libnios2_a-io-isatty.Tpo nios2/$(DEPDIR)/nios2_libnios2_a-io-isatty.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nios2/io-isatty.c' object='nios2/nios2_libnios2_a-io-isatty.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nios2/nios2_libnios2_a-io-isatty.o `test -f 'nios2/io-isatty.c' || echo '$(srcdir)/'`nios2/io-isatty.c + +nios2/nios2_libnios2_a-io-isatty.obj: nios2/io-isatty.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nios2/nios2_libnios2_a-io-isatty.obj -MD -MP -MF nios2/$(DEPDIR)/nios2_libnios2_a-io-isatty.Tpo -c -o nios2/nios2_libnios2_a-io-isatty.obj `if test -f 'nios2/io-isatty.c'; then $(CYGPATH_W) 'nios2/io-isatty.c'; else $(CYGPATH_W) '$(srcdir)/nios2/io-isatty.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) nios2/$(DEPDIR)/nios2_libnios2_a-io-isatty.Tpo nios2/$(DEPDIR)/nios2_libnios2_a-io-isatty.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nios2/io-isatty.c' object='nios2/nios2_libnios2_a-io-isatty.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nios2/nios2_libnios2_a-io-isatty.obj `if test -f 'nios2/io-isatty.c'; then $(CYGPATH_W) 'nios2/io-isatty.c'; else $(CYGPATH_W) '$(srcdir)/nios2/io-isatty.c'; fi` + +nios2/nios2_libnios2_a-io-lseek.o: nios2/io-lseek.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nios2/nios2_libnios2_a-io-lseek.o -MD -MP -MF nios2/$(DEPDIR)/nios2_libnios2_a-io-lseek.Tpo -c -o nios2/nios2_libnios2_a-io-lseek.o `test -f 'nios2/io-lseek.c' || echo '$(srcdir)/'`nios2/io-lseek.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) nios2/$(DEPDIR)/nios2_libnios2_a-io-lseek.Tpo nios2/$(DEPDIR)/nios2_libnios2_a-io-lseek.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nios2/io-lseek.c' object='nios2/nios2_libnios2_a-io-lseek.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nios2/nios2_libnios2_a-io-lseek.o `test -f 'nios2/io-lseek.c' || echo '$(srcdir)/'`nios2/io-lseek.c + +nios2/nios2_libnios2_a-io-lseek.obj: nios2/io-lseek.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nios2/nios2_libnios2_a-io-lseek.obj -MD -MP -MF nios2/$(DEPDIR)/nios2_libnios2_a-io-lseek.Tpo -c -o nios2/nios2_libnios2_a-io-lseek.obj `if test -f 'nios2/io-lseek.c'; then $(CYGPATH_W) 'nios2/io-lseek.c'; else $(CYGPATH_W) '$(srcdir)/nios2/io-lseek.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) nios2/$(DEPDIR)/nios2_libnios2_a-io-lseek.Tpo nios2/$(DEPDIR)/nios2_libnios2_a-io-lseek.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nios2/io-lseek.c' object='nios2/nios2_libnios2_a-io-lseek.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nios2/nios2_libnios2_a-io-lseek.obj `if test -f 'nios2/io-lseek.c'; then $(CYGPATH_W) 'nios2/io-lseek.c'; else $(CYGPATH_W) '$(srcdir)/nios2/io-lseek.c'; fi` + +nios2/nios2_libnios2_a-io-open.o: nios2/io-open.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nios2/nios2_libnios2_a-io-open.o -MD -MP -MF nios2/$(DEPDIR)/nios2_libnios2_a-io-open.Tpo -c -o nios2/nios2_libnios2_a-io-open.o `test -f 'nios2/io-open.c' || echo '$(srcdir)/'`nios2/io-open.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) nios2/$(DEPDIR)/nios2_libnios2_a-io-open.Tpo nios2/$(DEPDIR)/nios2_libnios2_a-io-open.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nios2/io-open.c' object='nios2/nios2_libnios2_a-io-open.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nios2/nios2_libnios2_a-io-open.o `test -f 'nios2/io-open.c' || echo '$(srcdir)/'`nios2/io-open.c + +nios2/nios2_libnios2_a-io-open.obj: nios2/io-open.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nios2/nios2_libnios2_a-io-open.obj -MD -MP -MF nios2/$(DEPDIR)/nios2_libnios2_a-io-open.Tpo -c -o nios2/nios2_libnios2_a-io-open.obj `if test -f 'nios2/io-open.c'; then $(CYGPATH_W) 'nios2/io-open.c'; else $(CYGPATH_W) '$(srcdir)/nios2/io-open.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) nios2/$(DEPDIR)/nios2_libnios2_a-io-open.Tpo nios2/$(DEPDIR)/nios2_libnios2_a-io-open.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nios2/io-open.c' object='nios2/nios2_libnios2_a-io-open.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nios2/nios2_libnios2_a-io-open.obj `if test -f 'nios2/io-open.c'; then $(CYGPATH_W) 'nios2/io-open.c'; else $(CYGPATH_W) '$(srcdir)/nios2/io-open.c'; fi` + +nios2/nios2_libnios2_a-io-read.o: nios2/io-read.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nios2/nios2_libnios2_a-io-read.o -MD -MP -MF nios2/$(DEPDIR)/nios2_libnios2_a-io-read.Tpo -c -o nios2/nios2_libnios2_a-io-read.o `test -f 'nios2/io-read.c' || echo '$(srcdir)/'`nios2/io-read.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) nios2/$(DEPDIR)/nios2_libnios2_a-io-read.Tpo nios2/$(DEPDIR)/nios2_libnios2_a-io-read.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nios2/io-read.c' object='nios2/nios2_libnios2_a-io-read.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nios2/nios2_libnios2_a-io-read.o `test -f 'nios2/io-read.c' || echo '$(srcdir)/'`nios2/io-read.c + +nios2/nios2_libnios2_a-io-read.obj: nios2/io-read.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nios2/nios2_libnios2_a-io-read.obj -MD -MP -MF nios2/$(DEPDIR)/nios2_libnios2_a-io-read.Tpo -c -o nios2/nios2_libnios2_a-io-read.obj `if test -f 'nios2/io-read.c'; then $(CYGPATH_W) 'nios2/io-read.c'; else $(CYGPATH_W) '$(srcdir)/nios2/io-read.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) nios2/$(DEPDIR)/nios2_libnios2_a-io-read.Tpo nios2/$(DEPDIR)/nios2_libnios2_a-io-read.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nios2/io-read.c' object='nios2/nios2_libnios2_a-io-read.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nios2/nios2_libnios2_a-io-read.obj `if test -f 'nios2/io-read.c'; then $(CYGPATH_W) 'nios2/io-read.c'; else $(CYGPATH_W) '$(srcdir)/nios2/io-read.c'; fi` + +nios2/nios2_libnios2_a-io-rename.o: nios2/io-rename.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nios2/nios2_libnios2_a-io-rename.o -MD -MP -MF nios2/$(DEPDIR)/nios2_libnios2_a-io-rename.Tpo -c -o nios2/nios2_libnios2_a-io-rename.o `test -f 'nios2/io-rename.c' || echo '$(srcdir)/'`nios2/io-rename.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) nios2/$(DEPDIR)/nios2_libnios2_a-io-rename.Tpo nios2/$(DEPDIR)/nios2_libnios2_a-io-rename.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nios2/io-rename.c' object='nios2/nios2_libnios2_a-io-rename.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nios2/nios2_libnios2_a-io-rename.o `test -f 'nios2/io-rename.c' || echo '$(srcdir)/'`nios2/io-rename.c + +nios2/nios2_libnios2_a-io-rename.obj: nios2/io-rename.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nios2/nios2_libnios2_a-io-rename.obj -MD -MP -MF nios2/$(DEPDIR)/nios2_libnios2_a-io-rename.Tpo -c -o nios2/nios2_libnios2_a-io-rename.obj `if test -f 'nios2/io-rename.c'; then $(CYGPATH_W) 'nios2/io-rename.c'; else $(CYGPATH_W) '$(srcdir)/nios2/io-rename.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) nios2/$(DEPDIR)/nios2_libnios2_a-io-rename.Tpo nios2/$(DEPDIR)/nios2_libnios2_a-io-rename.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nios2/io-rename.c' object='nios2/nios2_libnios2_a-io-rename.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nios2/nios2_libnios2_a-io-rename.obj `if test -f 'nios2/io-rename.c'; then $(CYGPATH_W) 'nios2/io-rename.c'; else $(CYGPATH_W) '$(srcdir)/nios2/io-rename.c'; fi` + +nios2/nios2_libnios2_a-io-stat.o: nios2/io-stat.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nios2/nios2_libnios2_a-io-stat.o -MD -MP -MF nios2/$(DEPDIR)/nios2_libnios2_a-io-stat.Tpo -c -o nios2/nios2_libnios2_a-io-stat.o `test -f 'nios2/io-stat.c' || echo '$(srcdir)/'`nios2/io-stat.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) nios2/$(DEPDIR)/nios2_libnios2_a-io-stat.Tpo nios2/$(DEPDIR)/nios2_libnios2_a-io-stat.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nios2/io-stat.c' object='nios2/nios2_libnios2_a-io-stat.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nios2/nios2_libnios2_a-io-stat.o `test -f 'nios2/io-stat.c' || echo '$(srcdir)/'`nios2/io-stat.c + +nios2/nios2_libnios2_a-io-stat.obj: nios2/io-stat.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nios2/nios2_libnios2_a-io-stat.obj -MD -MP -MF nios2/$(DEPDIR)/nios2_libnios2_a-io-stat.Tpo -c -o nios2/nios2_libnios2_a-io-stat.obj `if test -f 'nios2/io-stat.c'; then $(CYGPATH_W) 'nios2/io-stat.c'; else $(CYGPATH_W) '$(srcdir)/nios2/io-stat.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) nios2/$(DEPDIR)/nios2_libnios2_a-io-stat.Tpo nios2/$(DEPDIR)/nios2_libnios2_a-io-stat.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nios2/io-stat.c' object='nios2/nios2_libnios2_a-io-stat.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nios2/nios2_libnios2_a-io-stat.obj `if test -f 'nios2/io-stat.c'; then $(CYGPATH_W) 'nios2/io-stat.c'; else $(CYGPATH_W) '$(srcdir)/nios2/io-stat.c'; fi` + +nios2/nios2_libnios2_a-io-system.o: nios2/io-system.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nios2/nios2_libnios2_a-io-system.o -MD -MP -MF nios2/$(DEPDIR)/nios2_libnios2_a-io-system.Tpo -c -o nios2/nios2_libnios2_a-io-system.o `test -f 'nios2/io-system.c' || echo '$(srcdir)/'`nios2/io-system.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) nios2/$(DEPDIR)/nios2_libnios2_a-io-system.Tpo nios2/$(DEPDIR)/nios2_libnios2_a-io-system.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nios2/io-system.c' object='nios2/nios2_libnios2_a-io-system.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nios2/nios2_libnios2_a-io-system.o `test -f 'nios2/io-system.c' || echo '$(srcdir)/'`nios2/io-system.c + +nios2/nios2_libnios2_a-io-system.obj: nios2/io-system.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nios2/nios2_libnios2_a-io-system.obj -MD -MP -MF nios2/$(DEPDIR)/nios2_libnios2_a-io-system.Tpo -c -o nios2/nios2_libnios2_a-io-system.obj `if test -f 'nios2/io-system.c'; then $(CYGPATH_W) 'nios2/io-system.c'; else $(CYGPATH_W) '$(srcdir)/nios2/io-system.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) nios2/$(DEPDIR)/nios2_libnios2_a-io-system.Tpo nios2/$(DEPDIR)/nios2_libnios2_a-io-system.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nios2/io-system.c' object='nios2/nios2_libnios2_a-io-system.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nios2/nios2_libnios2_a-io-system.obj `if test -f 'nios2/io-system.c'; then $(CYGPATH_W) 'nios2/io-system.c'; else $(CYGPATH_W) '$(srcdir)/nios2/io-system.c'; fi` + +nios2/nios2_libnios2_a-io-time.o: nios2/io-time.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nios2/nios2_libnios2_a-io-time.o -MD -MP -MF nios2/$(DEPDIR)/nios2_libnios2_a-io-time.Tpo -c -o nios2/nios2_libnios2_a-io-time.o `test -f 'nios2/io-time.c' || echo '$(srcdir)/'`nios2/io-time.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) nios2/$(DEPDIR)/nios2_libnios2_a-io-time.Tpo nios2/$(DEPDIR)/nios2_libnios2_a-io-time.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nios2/io-time.c' object='nios2/nios2_libnios2_a-io-time.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nios2/nios2_libnios2_a-io-time.o `test -f 'nios2/io-time.c' || echo '$(srcdir)/'`nios2/io-time.c + +nios2/nios2_libnios2_a-io-time.obj: nios2/io-time.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nios2/nios2_libnios2_a-io-time.obj -MD -MP -MF nios2/$(DEPDIR)/nios2_libnios2_a-io-time.Tpo -c -o nios2/nios2_libnios2_a-io-time.obj `if test -f 'nios2/io-time.c'; then $(CYGPATH_W) 'nios2/io-time.c'; else $(CYGPATH_W) '$(srcdir)/nios2/io-time.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) nios2/$(DEPDIR)/nios2_libnios2_a-io-time.Tpo nios2/$(DEPDIR)/nios2_libnios2_a-io-time.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nios2/io-time.c' object='nios2/nios2_libnios2_a-io-time.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nios2/nios2_libnios2_a-io-time.obj `if test -f 'nios2/io-time.c'; then $(CYGPATH_W) 'nios2/io-time.c'; else $(CYGPATH_W) '$(srcdir)/nios2/io-time.c'; fi` + +nios2/nios2_libnios2_a-io-unlink.o: nios2/io-unlink.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nios2/nios2_libnios2_a-io-unlink.o -MD -MP -MF nios2/$(DEPDIR)/nios2_libnios2_a-io-unlink.Tpo -c -o nios2/nios2_libnios2_a-io-unlink.o `test -f 'nios2/io-unlink.c' || echo '$(srcdir)/'`nios2/io-unlink.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) nios2/$(DEPDIR)/nios2_libnios2_a-io-unlink.Tpo nios2/$(DEPDIR)/nios2_libnios2_a-io-unlink.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nios2/io-unlink.c' object='nios2/nios2_libnios2_a-io-unlink.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nios2/nios2_libnios2_a-io-unlink.o `test -f 'nios2/io-unlink.c' || echo '$(srcdir)/'`nios2/io-unlink.c + +nios2/nios2_libnios2_a-io-unlink.obj: nios2/io-unlink.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nios2/nios2_libnios2_a-io-unlink.obj -MD -MP -MF nios2/$(DEPDIR)/nios2_libnios2_a-io-unlink.Tpo -c -o nios2/nios2_libnios2_a-io-unlink.obj `if test -f 'nios2/io-unlink.c'; then $(CYGPATH_W) 'nios2/io-unlink.c'; else $(CYGPATH_W) '$(srcdir)/nios2/io-unlink.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) nios2/$(DEPDIR)/nios2_libnios2_a-io-unlink.Tpo nios2/$(DEPDIR)/nios2_libnios2_a-io-unlink.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nios2/io-unlink.c' object='nios2/nios2_libnios2_a-io-unlink.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nios2/nios2_libnios2_a-io-unlink.obj `if test -f 'nios2/io-unlink.c'; then $(CYGPATH_W) 'nios2/io-unlink.c'; else $(CYGPATH_W) '$(srcdir)/nios2/io-unlink.c'; fi` -bfin/bfin_libbfinbsp_a-clear_cache_range.obj: bfin/clear_cache_range.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bfin_libbfinbsp_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT bfin/bfin_libbfinbsp_a-clear_cache_range.obj -MD -MP -MF bfin/$(DEPDIR)/bfin_libbfinbsp_a-clear_cache_range.Tpo -c -o bfin/bfin_libbfinbsp_a-clear_cache_range.obj `if test -f 'bfin/clear_cache_range.c'; then $(CYGPATH_W) 'bfin/clear_cache_range.c'; else $(CYGPATH_W) '$(srcdir)/bfin/clear_cache_range.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) bfin/$(DEPDIR)/bfin_libbfinbsp_a-clear_cache_range.Tpo bfin/$(DEPDIR)/bfin_libbfinbsp_a-clear_cache_range.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bfin/clear_cache_range.c' object='bfin/bfin_libbfinbsp_a-clear_cache_range.obj' libtool=no @AMDEPBACKSLASH@ +nios2/nios2_libnios2_a-io-write.o: nios2/io-write.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nios2/nios2_libnios2_a-io-write.o -MD -MP -MF nios2/$(DEPDIR)/nios2_libnios2_a-io-write.Tpo -c -o nios2/nios2_libnios2_a-io-write.o `test -f 'nios2/io-write.c' || echo '$(srcdir)/'`nios2/io-write.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) nios2/$(DEPDIR)/nios2_libnios2_a-io-write.Tpo nios2/$(DEPDIR)/nios2_libnios2_a-io-write.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nios2/io-write.c' object='nios2/nios2_libnios2_a-io-write.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bfin_libbfinbsp_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bfin/bfin_libbfinbsp_a-clear_cache_range.obj `if test -f 'bfin/clear_cache_range.c'; then $(CYGPATH_W) 'bfin/clear_cache_range.c'; else $(CYGPATH_W) '$(srcdir)/bfin/clear_cache_range.c'; fi` +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nios2/nios2_libnios2_a-io-write.o `test -f 'nios2/io-write.c' || echo '$(srcdir)/'`nios2/io-write.c -bfin/bfin_libbfinbsp_a-_exit.o: bfin/_exit.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bfin_libbfinbsp_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT bfin/bfin_libbfinbsp_a-_exit.o -MD -MP -MF bfin/$(DEPDIR)/bfin_libbfinbsp_a-_exit.Tpo -c -o bfin/bfin_libbfinbsp_a-_exit.o `test -f 'bfin/_exit.c' || echo '$(srcdir)/'`bfin/_exit.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) bfin/$(DEPDIR)/bfin_libbfinbsp_a-_exit.Tpo bfin/$(DEPDIR)/bfin_libbfinbsp_a-_exit.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bfin/_exit.c' object='bfin/bfin_libbfinbsp_a-_exit.o' libtool=no @AMDEPBACKSLASH@ +nios2/nios2_libnios2_a-io-write.obj: nios2/io-write.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nios2/nios2_libnios2_a-io-write.obj -MD -MP -MF nios2/$(DEPDIR)/nios2_libnios2_a-io-write.Tpo -c -o nios2/nios2_libnios2_a-io-write.obj `if test -f 'nios2/io-write.c'; then $(CYGPATH_W) 'nios2/io-write.c'; else $(CYGPATH_W) '$(srcdir)/nios2/io-write.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) nios2/$(DEPDIR)/nios2_libnios2_a-io-write.Tpo nios2/$(DEPDIR)/nios2_libnios2_a-io-write.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nios2/io-write.c' object='nios2/nios2_libnios2_a-io-write.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bfin_libbfinbsp_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bfin/bfin_libbfinbsp_a-_exit.o `test -f 'bfin/_exit.c' || echo '$(srcdir)/'`bfin/_exit.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nios2/nios2_libnios2_a-io-write.obj `if test -f 'nios2/io-write.c'; then $(CYGPATH_W) 'nios2/io-write.c'; else $(CYGPATH_W) '$(srcdir)/nios2/io-write.c'; fi` -bfin/bfin_libbfinbsp_a-_exit.obj: bfin/_exit.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bfin_libbfinbsp_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT bfin/bfin_libbfinbsp_a-_exit.obj -MD -MP -MF bfin/$(DEPDIR)/bfin_libbfinbsp_a-_exit.Tpo -c -o bfin/bfin_libbfinbsp_a-_exit.obj `if test -f 'bfin/_exit.c'; then $(CYGPATH_W) 'bfin/_exit.c'; else $(CYGPATH_W) '$(srcdir)/bfin/_exit.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) bfin/$(DEPDIR)/bfin_libbfinbsp_a-_exit.Tpo bfin/$(DEPDIR)/bfin_libbfinbsp_a-_exit.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bfin/_exit.c' object='bfin/bfin_libbfinbsp_a-_exit.obj' libtool=no @AMDEPBACKSLASH@ +nios2/nios2_libnios2_a-getpid.o: nios2/getpid.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nios2/nios2_libnios2_a-getpid.o -MD -MP -MF nios2/$(DEPDIR)/nios2_libnios2_a-getpid.Tpo -c -o nios2/nios2_libnios2_a-getpid.o `test -f 'nios2/getpid.c' || echo '$(srcdir)/'`nios2/getpid.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) nios2/$(DEPDIR)/nios2_libnios2_a-getpid.Tpo nios2/$(DEPDIR)/nios2_libnios2_a-getpid.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nios2/getpid.c' object='nios2/nios2_libnios2_a-getpid.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bfin_libbfinbsp_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bfin/bfin_libbfinbsp_a-_exit.obj `if test -f 'bfin/_exit.c'; then $(CYGPATH_W) 'bfin/_exit.c'; else $(CYGPATH_W) '$(srcdir)/bfin/_exit.c'; fi` +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nios2/nios2_libnios2_a-getpid.o `test -f 'nios2/getpid.c' || echo '$(srcdir)/'`nios2/getpid.c -bfin/bfin_libsim_a-clear_cache_range.o: bfin/clear_cache_range.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bfin_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT bfin/bfin_libsim_a-clear_cache_range.o -MD -MP -MF bfin/$(DEPDIR)/bfin_libsim_a-clear_cache_range.Tpo -c -o bfin/bfin_libsim_a-clear_cache_range.o `test -f 'bfin/clear_cache_range.c' || echo '$(srcdir)/'`bfin/clear_cache_range.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) bfin/$(DEPDIR)/bfin_libsim_a-clear_cache_range.Tpo bfin/$(DEPDIR)/bfin_libsim_a-clear_cache_range.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bfin/clear_cache_range.c' object='bfin/bfin_libsim_a-clear_cache_range.o' libtool=no @AMDEPBACKSLASH@ +nios2/nios2_libnios2_a-getpid.obj: nios2/getpid.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nios2/nios2_libnios2_a-getpid.obj -MD -MP -MF nios2/$(DEPDIR)/nios2_libnios2_a-getpid.Tpo -c -o nios2/nios2_libnios2_a-getpid.obj `if test -f 'nios2/getpid.c'; then $(CYGPATH_W) 'nios2/getpid.c'; else $(CYGPATH_W) '$(srcdir)/nios2/getpid.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) nios2/$(DEPDIR)/nios2_libnios2_a-getpid.Tpo nios2/$(DEPDIR)/nios2_libnios2_a-getpid.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nios2/getpid.c' object='nios2/nios2_libnios2_a-getpid.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bfin_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bfin/bfin_libsim_a-clear_cache_range.o `test -f 'bfin/clear_cache_range.c' || echo '$(srcdir)/'`bfin/clear_cache_range.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nios2/nios2_libnios2_a-getpid.obj `if test -f 'nios2/getpid.c'; then $(CYGPATH_W) 'nios2/getpid.c'; else $(CYGPATH_W) '$(srcdir)/nios2/getpid.c'; fi` -bfin/bfin_libsim_a-clear_cache_range.obj: bfin/clear_cache_range.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bfin_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT bfin/bfin_libsim_a-clear_cache_range.obj -MD -MP -MF bfin/$(DEPDIR)/bfin_libsim_a-clear_cache_range.Tpo -c -o bfin/bfin_libsim_a-clear_cache_range.obj `if test -f 'bfin/clear_cache_range.c'; then $(CYGPATH_W) 'bfin/clear_cache_range.c'; else $(CYGPATH_W) '$(srcdir)/bfin/clear_cache_range.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) bfin/$(DEPDIR)/bfin_libsim_a-clear_cache_range.Tpo bfin/$(DEPDIR)/bfin_libsim_a-clear_cache_range.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bfin/clear_cache_range.c' object='bfin/bfin_libsim_a-clear_cache_range.obj' libtool=no @AMDEPBACKSLASH@ +nios2/nios2_libnios2_a-kill.o: nios2/kill.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nios2/nios2_libnios2_a-kill.o -MD -MP -MF nios2/$(DEPDIR)/nios2_libnios2_a-kill.Tpo -c -o nios2/nios2_libnios2_a-kill.o `test -f 'nios2/kill.c' || echo '$(srcdir)/'`nios2/kill.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) nios2/$(DEPDIR)/nios2_libnios2_a-kill.Tpo nios2/$(DEPDIR)/nios2_libnios2_a-kill.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nios2/kill.c' object='nios2/nios2_libnios2_a-kill.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bfin_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bfin/bfin_libsim_a-clear_cache_range.obj `if test -f 'bfin/clear_cache_range.c'; then $(CYGPATH_W) 'bfin/clear_cache_range.c'; else $(CYGPATH_W) '$(srcdir)/bfin/clear_cache_range.c'; fi` +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nios2/nios2_libnios2_a-kill.o `test -f 'nios2/kill.c' || echo '$(srcdir)/'`nios2/kill.c -bfin/bfin_libsim_a-syscalls.o: bfin/syscalls.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bfin_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT bfin/bfin_libsim_a-syscalls.o -MD -MP -MF bfin/$(DEPDIR)/bfin_libsim_a-syscalls.Tpo -c -o bfin/bfin_libsim_a-syscalls.o `test -f 'bfin/syscalls.c' || echo '$(srcdir)/'`bfin/syscalls.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) bfin/$(DEPDIR)/bfin_libsim_a-syscalls.Tpo bfin/$(DEPDIR)/bfin_libsim_a-syscalls.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bfin/syscalls.c' object='bfin/bfin_libsim_a-syscalls.o' libtool=no @AMDEPBACKSLASH@ +nios2/nios2_libnios2_a-kill.obj: nios2/kill.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nios2/nios2_libnios2_a-kill.obj -MD -MP -MF nios2/$(DEPDIR)/nios2_libnios2_a-kill.Tpo -c -o nios2/nios2_libnios2_a-kill.obj `if test -f 'nios2/kill.c'; then $(CYGPATH_W) 'nios2/kill.c'; else $(CYGPATH_W) '$(srcdir)/nios2/kill.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) nios2/$(DEPDIR)/nios2_libnios2_a-kill.Tpo nios2/$(DEPDIR)/nios2_libnios2_a-kill.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nios2/kill.c' object='nios2/nios2_libnios2_a-kill.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bfin_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bfin/bfin_libsim_a-syscalls.o `test -f 'bfin/syscalls.c' || echo '$(srcdir)/'`bfin/syscalls.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nios2/nios2_libnios2_a-kill.obj `if test -f 'nios2/kill.c'; then $(CYGPATH_W) 'nios2/kill.c'; else $(CYGPATH_W) '$(srcdir)/nios2/kill.c'; fi` -bfin/bfin_libsim_a-syscalls.obj: bfin/syscalls.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bfin_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT bfin/bfin_libsim_a-syscalls.obj -MD -MP -MF bfin/$(DEPDIR)/bfin_libsim_a-syscalls.Tpo -c -o bfin/bfin_libsim_a-syscalls.obj `if test -f 'bfin/syscalls.c'; then $(CYGPATH_W) 'bfin/syscalls.c'; else $(CYGPATH_W) '$(srcdir)/bfin/syscalls.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) bfin/$(DEPDIR)/bfin_libsim_a-syscalls.Tpo bfin/$(DEPDIR)/bfin_libsim_a-syscalls.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bfin/syscalls.c' object='bfin/bfin_libsim_a-syscalls.obj' libtool=no @AMDEPBACKSLASH@ +nios2/nios2_libnios2_a-sbrk.o: nios2/sbrk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nios2/nios2_libnios2_a-sbrk.o -MD -MP -MF nios2/$(DEPDIR)/nios2_libnios2_a-sbrk.Tpo -c -o nios2/nios2_libnios2_a-sbrk.o `test -f 'nios2/sbrk.c' || echo '$(srcdir)/'`nios2/sbrk.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) nios2/$(DEPDIR)/nios2_libnios2_a-sbrk.Tpo nios2/$(DEPDIR)/nios2_libnios2_a-sbrk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nios2/sbrk.c' object='nios2/nios2_libnios2_a-sbrk.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(bfin_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o bfin/bfin_libsim_a-syscalls.obj `if test -f 'bfin/syscalls.c'; then $(CYGPATH_W) 'bfin/syscalls.c'; else $(CYGPATH_W) '$(srcdir)/bfin/syscalls.c'; fi` +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nios2/nios2_libnios2_a-sbrk.o `test -f 'nios2/sbrk.c' || echo '$(srcdir)/'`nios2/sbrk.c + +nios2/nios2_libnios2_a-sbrk.obj: nios2/sbrk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT nios2/nios2_libnios2_a-sbrk.obj -MD -MP -MF nios2/$(DEPDIR)/nios2_libnios2_a-sbrk.Tpo -c -o nios2/nios2_libnios2_a-sbrk.obj `if test -f 'nios2/sbrk.c'; then $(CYGPATH_W) 'nios2/sbrk.c'; else $(CYGPATH_W) '$(srcdir)/nios2/sbrk.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) nios2/$(DEPDIR)/nios2_libnios2_a-sbrk.Tpo nios2/$(DEPDIR)/nios2_libnios2_a-sbrk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nios2/sbrk.c' object='nios2/nios2_libnios2_a-sbrk.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(nios2_libnios2_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o nios2/nios2_libnios2_a-sbrk.obj `if test -f 'nios2/sbrk.c'; then $(CYGPATH_W) 'nios2/sbrk.c'; else $(CYGPATH_W) '$(srcdir)/nios2/sbrk.c'; fi` riscv/riscv_libgloss_a-sys_access.o: riscv/sys_access.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libgloss_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libgloss_a-sys_access.o -MD -MP -MF riscv/$(DEPDIR)/riscv_libgloss_a-sys_access.Tpo -c -o riscv/riscv_libgloss_a-sys_access.o `test -f 'riscv/sys_access.c' || echo '$(srcdir)/'`riscv/sys_access.c @@ -2354,6 +7824,524 @@ riscv/riscv_libsemihost_a-semihost-sys_write.obj: riscv/semihost-sys_write.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsemihost_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsemihost_a-semihost-sys_write.obj `if test -f 'riscv/semihost-sys_write.c'; then $(CYGPATH_W) 'riscv/semihost-sys_write.c'; else $(CYGPATH_W) '$(srcdir)/riscv/semihost-sys_write.c'; fi` +riscv/riscv_libsim_a-sys_access.o: riscv/sys_access.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_access.o -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_access.Tpo -c -o riscv/riscv_libsim_a-sys_access.o `test -f 'riscv/sys_access.c' || echo '$(srcdir)/'`riscv/sys_access.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_access.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_access.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_access.c' object='riscv/riscv_libsim_a-sys_access.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_access.o `test -f 'riscv/sys_access.c' || echo '$(srcdir)/'`riscv/sys_access.c + +riscv/riscv_libsim_a-sys_access.obj: riscv/sys_access.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_access.obj -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_access.Tpo -c -o riscv/riscv_libsim_a-sys_access.obj `if test -f 'riscv/sys_access.c'; then $(CYGPATH_W) 'riscv/sys_access.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_access.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_access.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_access.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_access.c' object='riscv/riscv_libsim_a-sys_access.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_access.obj `if test -f 'riscv/sys_access.c'; then $(CYGPATH_W) 'riscv/sys_access.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_access.c'; fi` + +riscv/riscv_libsim_a-sys_chdir.o: riscv/sys_chdir.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_chdir.o -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_chdir.Tpo -c -o riscv/riscv_libsim_a-sys_chdir.o `test -f 'riscv/sys_chdir.c' || echo '$(srcdir)/'`riscv/sys_chdir.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_chdir.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_chdir.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_chdir.c' object='riscv/riscv_libsim_a-sys_chdir.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_chdir.o `test -f 'riscv/sys_chdir.c' || echo '$(srcdir)/'`riscv/sys_chdir.c + +riscv/riscv_libsim_a-sys_chdir.obj: riscv/sys_chdir.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_chdir.obj -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_chdir.Tpo -c -o riscv/riscv_libsim_a-sys_chdir.obj `if test -f 'riscv/sys_chdir.c'; then $(CYGPATH_W) 'riscv/sys_chdir.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_chdir.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_chdir.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_chdir.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_chdir.c' object='riscv/riscv_libsim_a-sys_chdir.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_chdir.obj `if test -f 'riscv/sys_chdir.c'; then $(CYGPATH_W) 'riscv/sys_chdir.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_chdir.c'; fi` + +riscv/riscv_libsim_a-sys_chmod.o: riscv/sys_chmod.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_chmod.o -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_chmod.Tpo -c -o riscv/riscv_libsim_a-sys_chmod.o `test -f 'riscv/sys_chmod.c' || echo '$(srcdir)/'`riscv/sys_chmod.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_chmod.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_chmod.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_chmod.c' object='riscv/riscv_libsim_a-sys_chmod.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_chmod.o `test -f 'riscv/sys_chmod.c' || echo '$(srcdir)/'`riscv/sys_chmod.c + +riscv/riscv_libsim_a-sys_chmod.obj: riscv/sys_chmod.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_chmod.obj -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_chmod.Tpo -c -o riscv/riscv_libsim_a-sys_chmod.obj `if test -f 'riscv/sys_chmod.c'; then $(CYGPATH_W) 'riscv/sys_chmod.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_chmod.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_chmod.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_chmod.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_chmod.c' object='riscv/riscv_libsim_a-sys_chmod.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_chmod.obj `if test -f 'riscv/sys_chmod.c'; then $(CYGPATH_W) 'riscv/sys_chmod.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_chmod.c'; fi` + +riscv/riscv_libsim_a-sys_chown.o: riscv/sys_chown.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_chown.o -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_chown.Tpo -c -o riscv/riscv_libsim_a-sys_chown.o `test -f 'riscv/sys_chown.c' || echo '$(srcdir)/'`riscv/sys_chown.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_chown.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_chown.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_chown.c' object='riscv/riscv_libsim_a-sys_chown.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_chown.o `test -f 'riscv/sys_chown.c' || echo '$(srcdir)/'`riscv/sys_chown.c + +riscv/riscv_libsim_a-sys_chown.obj: riscv/sys_chown.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_chown.obj -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_chown.Tpo -c -o riscv/riscv_libsim_a-sys_chown.obj `if test -f 'riscv/sys_chown.c'; then $(CYGPATH_W) 'riscv/sys_chown.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_chown.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_chown.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_chown.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_chown.c' object='riscv/riscv_libsim_a-sys_chown.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_chown.obj `if test -f 'riscv/sys_chown.c'; then $(CYGPATH_W) 'riscv/sys_chown.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_chown.c'; fi` + +riscv/riscv_libsim_a-sys_close.o: riscv/sys_close.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_close.o -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_close.Tpo -c -o riscv/riscv_libsim_a-sys_close.o `test -f 'riscv/sys_close.c' || echo '$(srcdir)/'`riscv/sys_close.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_close.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_close.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_close.c' object='riscv/riscv_libsim_a-sys_close.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_close.o `test -f 'riscv/sys_close.c' || echo '$(srcdir)/'`riscv/sys_close.c + +riscv/riscv_libsim_a-sys_close.obj: riscv/sys_close.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_close.obj -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_close.Tpo -c -o riscv/riscv_libsim_a-sys_close.obj `if test -f 'riscv/sys_close.c'; then $(CYGPATH_W) 'riscv/sys_close.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_close.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_close.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_close.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_close.c' object='riscv/riscv_libsim_a-sys_close.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_close.obj `if test -f 'riscv/sys_close.c'; then $(CYGPATH_W) 'riscv/sys_close.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_close.c'; fi` + +riscv/riscv_libsim_a-sys_conv_stat.o: riscv/sys_conv_stat.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_conv_stat.o -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_conv_stat.Tpo -c -o riscv/riscv_libsim_a-sys_conv_stat.o `test -f 'riscv/sys_conv_stat.c' || echo '$(srcdir)/'`riscv/sys_conv_stat.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_conv_stat.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_conv_stat.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_conv_stat.c' object='riscv/riscv_libsim_a-sys_conv_stat.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_conv_stat.o `test -f 'riscv/sys_conv_stat.c' || echo '$(srcdir)/'`riscv/sys_conv_stat.c + +riscv/riscv_libsim_a-sys_conv_stat.obj: riscv/sys_conv_stat.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_conv_stat.obj -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_conv_stat.Tpo -c -o riscv/riscv_libsim_a-sys_conv_stat.obj `if test -f 'riscv/sys_conv_stat.c'; then $(CYGPATH_W) 'riscv/sys_conv_stat.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_conv_stat.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_conv_stat.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_conv_stat.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_conv_stat.c' object='riscv/riscv_libsim_a-sys_conv_stat.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_conv_stat.obj `if test -f 'riscv/sys_conv_stat.c'; then $(CYGPATH_W) 'riscv/sys_conv_stat.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_conv_stat.c'; fi` + +riscv/riscv_libsim_a-sys_execve.o: riscv/sys_execve.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_execve.o -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_execve.Tpo -c -o riscv/riscv_libsim_a-sys_execve.o `test -f 'riscv/sys_execve.c' || echo '$(srcdir)/'`riscv/sys_execve.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_execve.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_execve.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_execve.c' object='riscv/riscv_libsim_a-sys_execve.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_execve.o `test -f 'riscv/sys_execve.c' || echo '$(srcdir)/'`riscv/sys_execve.c + +riscv/riscv_libsim_a-sys_execve.obj: riscv/sys_execve.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_execve.obj -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_execve.Tpo -c -o riscv/riscv_libsim_a-sys_execve.obj `if test -f 'riscv/sys_execve.c'; then $(CYGPATH_W) 'riscv/sys_execve.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_execve.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_execve.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_execve.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_execve.c' object='riscv/riscv_libsim_a-sys_execve.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_execve.obj `if test -f 'riscv/sys_execve.c'; then $(CYGPATH_W) 'riscv/sys_execve.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_execve.c'; fi` + +riscv/riscv_libsim_a-sys_exit.o: riscv/sys_exit.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_exit.o -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_exit.Tpo -c -o riscv/riscv_libsim_a-sys_exit.o `test -f 'riscv/sys_exit.c' || echo '$(srcdir)/'`riscv/sys_exit.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_exit.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_exit.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_exit.c' object='riscv/riscv_libsim_a-sys_exit.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_exit.o `test -f 'riscv/sys_exit.c' || echo '$(srcdir)/'`riscv/sys_exit.c + +riscv/riscv_libsim_a-sys_exit.obj: riscv/sys_exit.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_exit.obj -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_exit.Tpo -c -o riscv/riscv_libsim_a-sys_exit.obj `if test -f 'riscv/sys_exit.c'; then $(CYGPATH_W) 'riscv/sys_exit.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_exit.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_exit.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_exit.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_exit.c' object='riscv/riscv_libsim_a-sys_exit.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_exit.obj `if test -f 'riscv/sys_exit.c'; then $(CYGPATH_W) 'riscv/sys_exit.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_exit.c'; fi` + +riscv/riscv_libsim_a-sys_faccessat.o: riscv/sys_faccessat.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_faccessat.o -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_faccessat.Tpo -c -o riscv/riscv_libsim_a-sys_faccessat.o `test -f 'riscv/sys_faccessat.c' || echo '$(srcdir)/'`riscv/sys_faccessat.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_faccessat.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_faccessat.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_faccessat.c' object='riscv/riscv_libsim_a-sys_faccessat.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_faccessat.o `test -f 'riscv/sys_faccessat.c' || echo '$(srcdir)/'`riscv/sys_faccessat.c + +riscv/riscv_libsim_a-sys_faccessat.obj: riscv/sys_faccessat.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_faccessat.obj -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_faccessat.Tpo -c -o riscv/riscv_libsim_a-sys_faccessat.obj `if test -f 'riscv/sys_faccessat.c'; then $(CYGPATH_W) 'riscv/sys_faccessat.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_faccessat.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_faccessat.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_faccessat.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_faccessat.c' object='riscv/riscv_libsim_a-sys_faccessat.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_faccessat.obj `if test -f 'riscv/sys_faccessat.c'; then $(CYGPATH_W) 'riscv/sys_faccessat.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_faccessat.c'; fi` + +riscv/riscv_libsim_a-sys_fork.o: riscv/sys_fork.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_fork.o -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_fork.Tpo -c -o riscv/riscv_libsim_a-sys_fork.o `test -f 'riscv/sys_fork.c' || echo '$(srcdir)/'`riscv/sys_fork.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_fork.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_fork.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_fork.c' object='riscv/riscv_libsim_a-sys_fork.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_fork.o `test -f 'riscv/sys_fork.c' || echo '$(srcdir)/'`riscv/sys_fork.c + +riscv/riscv_libsim_a-sys_fork.obj: riscv/sys_fork.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_fork.obj -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_fork.Tpo -c -o riscv/riscv_libsim_a-sys_fork.obj `if test -f 'riscv/sys_fork.c'; then $(CYGPATH_W) 'riscv/sys_fork.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_fork.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_fork.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_fork.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_fork.c' object='riscv/riscv_libsim_a-sys_fork.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_fork.obj `if test -f 'riscv/sys_fork.c'; then $(CYGPATH_W) 'riscv/sys_fork.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_fork.c'; fi` + +riscv/riscv_libsim_a-sys_fstat.o: riscv/sys_fstat.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_fstat.o -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_fstat.Tpo -c -o riscv/riscv_libsim_a-sys_fstat.o `test -f 'riscv/sys_fstat.c' || echo '$(srcdir)/'`riscv/sys_fstat.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_fstat.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_fstat.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_fstat.c' object='riscv/riscv_libsim_a-sys_fstat.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_fstat.o `test -f 'riscv/sys_fstat.c' || echo '$(srcdir)/'`riscv/sys_fstat.c + +riscv/riscv_libsim_a-sys_fstat.obj: riscv/sys_fstat.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_fstat.obj -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_fstat.Tpo -c -o riscv/riscv_libsim_a-sys_fstat.obj `if test -f 'riscv/sys_fstat.c'; then $(CYGPATH_W) 'riscv/sys_fstat.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_fstat.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_fstat.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_fstat.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_fstat.c' object='riscv/riscv_libsim_a-sys_fstat.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_fstat.obj `if test -f 'riscv/sys_fstat.c'; then $(CYGPATH_W) 'riscv/sys_fstat.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_fstat.c'; fi` + +riscv/riscv_libsim_a-sys_fstatat.o: riscv/sys_fstatat.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_fstatat.o -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_fstatat.Tpo -c -o riscv/riscv_libsim_a-sys_fstatat.o `test -f 'riscv/sys_fstatat.c' || echo '$(srcdir)/'`riscv/sys_fstatat.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_fstatat.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_fstatat.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_fstatat.c' object='riscv/riscv_libsim_a-sys_fstatat.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_fstatat.o `test -f 'riscv/sys_fstatat.c' || echo '$(srcdir)/'`riscv/sys_fstatat.c + +riscv/riscv_libsim_a-sys_fstatat.obj: riscv/sys_fstatat.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_fstatat.obj -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_fstatat.Tpo -c -o riscv/riscv_libsim_a-sys_fstatat.obj `if test -f 'riscv/sys_fstatat.c'; then $(CYGPATH_W) 'riscv/sys_fstatat.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_fstatat.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_fstatat.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_fstatat.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_fstatat.c' object='riscv/riscv_libsim_a-sys_fstatat.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_fstatat.obj `if test -f 'riscv/sys_fstatat.c'; then $(CYGPATH_W) 'riscv/sys_fstatat.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_fstatat.c'; fi` + +riscv/riscv_libsim_a-sys_ftime.o: riscv/sys_ftime.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_ftime.o -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_ftime.Tpo -c -o riscv/riscv_libsim_a-sys_ftime.o `test -f 'riscv/sys_ftime.c' || echo '$(srcdir)/'`riscv/sys_ftime.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_ftime.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_ftime.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_ftime.c' object='riscv/riscv_libsim_a-sys_ftime.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_ftime.o `test -f 'riscv/sys_ftime.c' || echo '$(srcdir)/'`riscv/sys_ftime.c + +riscv/riscv_libsim_a-sys_ftime.obj: riscv/sys_ftime.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_ftime.obj -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_ftime.Tpo -c -o riscv/riscv_libsim_a-sys_ftime.obj `if test -f 'riscv/sys_ftime.c'; then $(CYGPATH_W) 'riscv/sys_ftime.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_ftime.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_ftime.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_ftime.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_ftime.c' object='riscv/riscv_libsim_a-sys_ftime.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_ftime.obj `if test -f 'riscv/sys_ftime.c'; then $(CYGPATH_W) 'riscv/sys_ftime.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_ftime.c'; fi` + +riscv/riscv_libsim_a-sys_getcwd.o: riscv/sys_getcwd.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_getcwd.o -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_getcwd.Tpo -c -o riscv/riscv_libsim_a-sys_getcwd.o `test -f 'riscv/sys_getcwd.c' || echo '$(srcdir)/'`riscv/sys_getcwd.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_getcwd.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_getcwd.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_getcwd.c' object='riscv/riscv_libsim_a-sys_getcwd.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_getcwd.o `test -f 'riscv/sys_getcwd.c' || echo '$(srcdir)/'`riscv/sys_getcwd.c + +riscv/riscv_libsim_a-sys_getcwd.obj: riscv/sys_getcwd.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_getcwd.obj -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_getcwd.Tpo -c -o riscv/riscv_libsim_a-sys_getcwd.obj `if test -f 'riscv/sys_getcwd.c'; then $(CYGPATH_W) 'riscv/sys_getcwd.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_getcwd.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_getcwd.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_getcwd.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_getcwd.c' object='riscv/riscv_libsim_a-sys_getcwd.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_getcwd.obj `if test -f 'riscv/sys_getcwd.c'; then $(CYGPATH_W) 'riscv/sys_getcwd.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_getcwd.c'; fi` + +riscv/riscv_libsim_a-sys_getpid.o: riscv/sys_getpid.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_getpid.o -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_getpid.Tpo -c -o riscv/riscv_libsim_a-sys_getpid.o `test -f 'riscv/sys_getpid.c' || echo '$(srcdir)/'`riscv/sys_getpid.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_getpid.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_getpid.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_getpid.c' object='riscv/riscv_libsim_a-sys_getpid.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_getpid.o `test -f 'riscv/sys_getpid.c' || echo '$(srcdir)/'`riscv/sys_getpid.c + +riscv/riscv_libsim_a-sys_getpid.obj: riscv/sys_getpid.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_getpid.obj -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_getpid.Tpo -c -o riscv/riscv_libsim_a-sys_getpid.obj `if test -f 'riscv/sys_getpid.c'; then $(CYGPATH_W) 'riscv/sys_getpid.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_getpid.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_getpid.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_getpid.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_getpid.c' object='riscv/riscv_libsim_a-sys_getpid.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_getpid.obj `if test -f 'riscv/sys_getpid.c'; then $(CYGPATH_W) 'riscv/sys_getpid.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_getpid.c'; fi` + +riscv/riscv_libsim_a-sys_gettimeofday.o: riscv/sys_gettimeofday.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_gettimeofday.o -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_gettimeofday.Tpo -c -o riscv/riscv_libsim_a-sys_gettimeofday.o `test -f 'riscv/sys_gettimeofday.c' || echo '$(srcdir)/'`riscv/sys_gettimeofday.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_gettimeofday.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_gettimeofday.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_gettimeofday.c' object='riscv/riscv_libsim_a-sys_gettimeofday.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_gettimeofday.o `test -f 'riscv/sys_gettimeofday.c' || echo '$(srcdir)/'`riscv/sys_gettimeofday.c + +riscv/riscv_libsim_a-sys_gettimeofday.obj: riscv/sys_gettimeofday.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_gettimeofday.obj -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_gettimeofday.Tpo -c -o riscv/riscv_libsim_a-sys_gettimeofday.obj `if test -f 'riscv/sys_gettimeofday.c'; then $(CYGPATH_W) 'riscv/sys_gettimeofday.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_gettimeofday.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_gettimeofday.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_gettimeofday.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_gettimeofday.c' object='riscv/riscv_libsim_a-sys_gettimeofday.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_gettimeofday.obj `if test -f 'riscv/sys_gettimeofday.c'; then $(CYGPATH_W) 'riscv/sys_gettimeofday.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_gettimeofday.c'; fi` + +riscv/riscv_libsim_a-sys_isatty.o: riscv/sys_isatty.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_isatty.o -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_isatty.Tpo -c -o riscv/riscv_libsim_a-sys_isatty.o `test -f 'riscv/sys_isatty.c' || echo '$(srcdir)/'`riscv/sys_isatty.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_isatty.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_isatty.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_isatty.c' object='riscv/riscv_libsim_a-sys_isatty.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_isatty.o `test -f 'riscv/sys_isatty.c' || echo '$(srcdir)/'`riscv/sys_isatty.c + +riscv/riscv_libsim_a-sys_isatty.obj: riscv/sys_isatty.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_isatty.obj -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_isatty.Tpo -c -o riscv/riscv_libsim_a-sys_isatty.obj `if test -f 'riscv/sys_isatty.c'; then $(CYGPATH_W) 'riscv/sys_isatty.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_isatty.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_isatty.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_isatty.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_isatty.c' object='riscv/riscv_libsim_a-sys_isatty.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_isatty.obj `if test -f 'riscv/sys_isatty.c'; then $(CYGPATH_W) 'riscv/sys_isatty.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_isatty.c'; fi` + +riscv/riscv_libsim_a-sys_kill.o: riscv/sys_kill.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_kill.o -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_kill.Tpo -c -o riscv/riscv_libsim_a-sys_kill.o `test -f 'riscv/sys_kill.c' || echo '$(srcdir)/'`riscv/sys_kill.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_kill.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_kill.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_kill.c' object='riscv/riscv_libsim_a-sys_kill.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_kill.o `test -f 'riscv/sys_kill.c' || echo '$(srcdir)/'`riscv/sys_kill.c + +riscv/riscv_libsim_a-sys_kill.obj: riscv/sys_kill.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_kill.obj -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_kill.Tpo -c -o riscv/riscv_libsim_a-sys_kill.obj `if test -f 'riscv/sys_kill.c'; then $(CYGPATH_W) 'riscv/sys_kill.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_kill.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_kill.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_kill.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_kill.c' object='riscv/riscv_libsim_a-sys_kill.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_kill.obj `if test -f 'riscv/sys_kill.c'; then $(CYGPATH_W) 'riscv/sys_kill.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_kill.c'; fi` + +riscv/riscv_libsim_a-sys_link.o: riscv/sys_link.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_link.o -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_link.Tpo -c -o riscv/riscv_libsim_a-sys_link.o `test -f 'riscv/sys_link.c' || echo '$(srcdir)/'`riscv/sys_link.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_link.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_link.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_link.c' object='riscv/riscv_libsim_a-sys_link.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_link.o `test -f 'riscv/sys_link.c' || echo '$(srcdir)/'`riscv/sys_link.c + +riscv/riscv_libsim_a-sys_link.obj: riscv/sys_link.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_link.obj -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_link.Tpo -c -o riscv/riscv_libsim_a-sys_link.obj `if test -f 'riscv/sys_link.c'; then $(CYGPATH_W) 'riscv/sys_link.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_link.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_link.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_link.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_link.c' object='riscv/riscv_libsim_a-sys_link.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_link.obj `if test -f 'riscv/sys_link.c'; then $(CYGPATH_W) 'riscv/sys_link.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_link.c'; fi` + +riscv/riscv_libsim_a-sys_lseek.o: riscv/sys_lseek.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_lseek.o -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_lseek.Tpo -c -o riscv/riscv_libsim_a-sys_lseek.o `test -f 'riscv/sys_lseek.c' || echo '$(srcdir)/'`riscv/sys_lseek.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_lseek.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_lseek.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_lseek.c' object='riscv/riscv_libsim_a-sys_lseek.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_lseek.o `test -f 'riscv/sys_lseek.c' || echo '$(srcdir)/'`riscv/sys_lseek.c + +riscv/riscv_libsim_a-sys_lseek.obj: riscv/sys_lseek.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_lseek.obj -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_lseek.Tpo -c -o riscv/riscv_libsim_a-sys_lseek.obj `if test -f 'riscv/sys_lseek.c'; then $(CYGPATH_W) 'riscv/sys_lseek.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_lseek.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_lseek.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_lseek.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_lseek.c' object='riscv/riscv_libsim_a-sys_lseek.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_lseek.obj `if test -f 'riscv/sys_lseek.c'; then $(CYGPATH_W) 'riscv/sys_lseek.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_lseek.c'; fi` + +riscv/riscv_libsim_a-sys_lstat.o: riscv/sys_lstat.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_lstat.o -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_lstat.Tpo -c -o riscv/riscv_libsim_a-sys_lstat.o `test -f 'riscv/sys_lstat.c' || echo '$(srcdir)/'`riscv/sys_lstat.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_lstat.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_lstat.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_lstat.c' object='riscv/riscv_libsim_a-sys_lstat.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_lstat.o `test -f 'riscv/sys_lstat.c' || echo '$(srcdir)/'`riscv/sys_lstat.c + +riscv/riscv_libsim_a-sys_lstat.obj: riscv/sys_lstat.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_lstat.obj -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_lstat.Tpo -c -o riscv/riscv_libsim_a-sys_lstat.obj `if test -f 'riscv/sys_lstat.c'; then $(CYGPATH_W) 'riscv/sys_lstat.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_lstat.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_lstat.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_lstat.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_lstat.c' object='riscv/riscv_libsim_a-sys_lstat.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_lstat.obj `if test -f 'riscv/sys_lstat.c'; then $(CYGPATH_W) 'riscv/sys_lstat.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_lstat.c'; fi` + +riscv/riscv_libsim_a-sys_open.o: riscv/sys_open.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_open.o -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_open.Tpo -c -o riscv/riscv_libsim_a-sys_open.o `test -f 'riscv/sys_open.c' || echo '$(srcdir)/'`riscv/sys_open.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_open.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_open.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_open.c' object='riscv/riscv_libsim_a-sys_open.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_open.o `test -f 'riscv/sys_open.c' || echo '$(srcdir)/'`riscv/sys_open.c + +riscv/riscv_libsim_a-sys_open.obj: riscv/sys_open.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_open.obj -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_open.Tpo -c -o riscv/riscv_libsim_a-sys_open.obj `if test -f 'riscv/sys_open.c'; then $(CYGPATH_W) 'riscv/sys_open.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_open.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_open.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_open.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_open.c' object='riscv/riscv_libsim_a-sys_open.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_open.obj `if test -f 'riscv/sys_open.c'; then $(CYGPATH_W) 'riscv/sys_open.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_open.c'; fi` + +riscv/riscv_libsim_a-sys_openat.o: riscv/sys_openat.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_openat.o -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_openat.Tpo -c -o riscv/riscv_libsim_a-sys_openat.o `test -f 'riscv/sys_openat.c' || echo '$(srcdir)/'`riscv/sys_openat.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_openat.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_openat.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_openat.c' object='riscv/riscv_libsim_a-sys_openat.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_openat.o `test -f 'riscv/sys_openat.c' || echo '$(srcdir)/'`riscv/sys_openat.c + +riscv/riscv_libsim_a-sys_openat.obj: riscv/sys_openat.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_openat.obj -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_openat.Tpo -c -o riscv/riscv_libsim_a-sys_openat.obj `if test -f 'riscv/sys_openat.c'; then $(CYGPATH_W) 'riscv/sys_openat.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_openat.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_openat.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_openat.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_openat.c' object='riscv/riscv_libsim_a-sys_openat.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_openat.obj `if test -f 'riscv/sys_openat.c'; then $(CYGPATH_W) 'riscv/sys_openat.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_openat.c'; fi` + +riscv/riscv_libsim_a-sys_read.o: riscv/sys_read.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_read.o -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_read.Tpo -c -o riscv/riscv_libsim_a-sys_read.o `test -f 'riscv/sys_read.c' || echo '$(srcdir)/'`riscv/sys_read.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_read.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_read.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_read.c' object='riscv/riscv_libsim_a-sys_read.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_read.o `test -f 'riscv/sys_read.c' || echo '$(srcdir)/'`riscv/sys_read.c + +riscv/riscv_libsim_a-sys_read.obj: riscv/sys_read.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_read.obj -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_read.Tpo -c -o riscv/riscv_libsim_a-sys_read.obj `if test -f 'riscv/sys_read.c'; then $(CYGPATH_W) 'riscv/sys_read.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_read.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_read.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_read.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_read.c' object='riscv/riscv_libsim_a-sys_read.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_read.obj `if test -f 'riscv/sys_read.c'; then $(CYGPATH_W) 'riscv/sys_read.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_read.c'; fi` + +riscv/riscv_libsim_a-sys_sbrk.o: riscv/sys_sbrk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_sbrk.o -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_sbrk.Tpo -c -o riscv/riscv_libsim_a-sys_sbrk.o `test -f 'riscv/sys_sbrk.c' || echo '$(srcdir)/'`riscv/sys_sbrk.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_sbrk.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_sbrk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_sbrk.c' object='riscv/riscv_libsim_a-sys_sbrk.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_sbrk.o `test -f 'riscv/sys_sbrk.c' || echo '$(srcdir)/'`riscv/sys_sbrk.c + +riscv/riscv_libsim_a-sys_sbrk.obj: riscv/sys_sbrk.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_sbrk.obj -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_sbrk.Tpo -c -o riscv/riscv_libsim_a-sys_sbrk.obj `if test -f 'riscv/sys_sbrk.c'; then $(CYGPATH_W) 'riscv/sys_sbrk.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_sbrk.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_sbrk.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_sbrk.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_sbrk.c' object='riscv/riscv_libsim_a-sys_sbrk.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_sbrk.obj `if test -f 'riscv/sys_sbrk.c'; then $(CYGPATH_W) 'riscv/sys_sbrk.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_sbrk.c'; fi` + +riscv/riscv_libsim_a-sys_stat.o: riscv/sys_stat.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_stat.o -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_stat.Tpo -c -o riscv/riscv_libsim_a-sys_stat.o `test -f 'riscv/sys_stat.c' || echo '$(srcdir)/'`riscv/sys_stat.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_stat.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_stat.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_stat.c' object='riscv/riscv_libsim_a-sys_stat.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_stat.o `test -f 'riscv/sys_stat.c' || echo '$(srcdir)/'`riscv/sys_stat.c + +riscv/riscv_libsim_a-sys_stat.obj: riscv/sys_stat.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_stat.obj -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_stat.Tpo -c -o riscv/riscv_libsim_a-sys_stat.obj `if test -f 'riscv/sys_stat.c'; then $(CYGPATH_W) 'riscv/sys_stat.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_stat.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_stat.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_stat.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_stat.c' object='riscv/riscv_libsim_a-sys_stat.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_stat.obj `if test -f 'riscv/sys_stat.c'; then $(CYGPATH_W) 'riscv/sys_stat.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_stat.c'; fi` + +riscv/riscv_libsim_a-sys_sysconf.o: riscv/sys_sysconf.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_sysconf.o -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_sysconf.Tpo -c -o riscv/riscv_libsim_a-sys_sysconf.o `test -f 'riscv/sys_sysconf.c' || echo '$(srcdir)/'`riscv/sys_sysconf.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_sysconf.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_sysconf.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_sysconf.c' object='riscv/riscv_libsim_a-sys_sysconf.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_sysconf.o `test -f 'riscv/sys_sysconf.c' || echo '$(srcdir)/'`riscv/sys_sysconf.c + +riscv/riscv_libsim_a-sys_sysconf.obj: riscv/sys_sysconf.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_sysconf.obj -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_sysconf.Tpo -c -o riscv/riscv_libsim_a-sys_sysconf.obj `if test -f 'riscv/sys_sysconf.c'; then $(CYGPATH_W) 'riscv/sys_sysconf.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_sysconf.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_sysconf.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_sysconf.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_sysconf.c' object='riscv/riscv_libsim_a-sys_sysconf.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_sysconf.obj `if test -f 'riscv/sys_sysconf.c'; then $(CYGPATH_W) 'riscv/sys_sysconf.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_sysconf.c'; fi` + +riscv/riscv_libsim_a-sys_times.o: riscv/sys_times.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_times.o -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_times.Tpo -c -o riscv/riscv_libsim_a-sys_times.o `test -f 'riscv/sys_times.c' || echo '$(srcdir)/'`riscv/sys_times.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_times.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_times.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_times.c' object='riscv/riscv_libsim_a-sys_times.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_times.o `test -f 'riscv/sys_times.c' || echo '$(srcdir)/'`riscv/sys_times.c + +riscv/riscv_libsim_a-sys_times.obj: riscv/sys_times.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_times.obj -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_times.Tpo -c -o riscv/riscv_libsim_a-sys_times.obj `if test -f 'riscv/sys_times.c'; then $(CYGPATH_W) 'riscv/sys_times.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_times.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_times.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_times.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_times.c' object='riscv/riscv_libsim_a-sys_times.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_times.obj `if test -f 'riscv/sys_times.c'; then $(CYGPATH_W) 'riscv/sys_times.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_times.c'; fi` + +riscv/riscv_libsim_a-sys_unlink.o: riscv/sys_unlink.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_unlink.o -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_unlink.Tpo -c -o riscv/riscv_libsim_a-sys_unlink.o `test -f 'riscv/sys_unlink.c' || echo '$(srcdir)/'`riscv/sys_unlink.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_unlink.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_unlink.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_unlink.c' object='riscv/riscv_libsim_a-sys_unlink.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_unlink.o `test -f 'riscv/sys_unlink.c' || echo '$(srcdir)/'`riscv/sys_unlink.c + +riscv/riscv_libsim_a-sys_unlink.obj: riscv/sys_unlink.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_unlink.obj -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_unlink.Tpo -c -o riscv/riscv_libsim_a-sys_unlink.obj `if test -f 'riscv/sys_unlink.c'; then $(CYGPATH_W) 'riscv/sys_unlink.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_unlink.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_unlink.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_unlink.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_unlink.c' object='riscv/riscv_libsim_a-sys_unlink.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_unlink.obj `if test -f 'riscv/sys_unlink.c'; then $(CYGPATH_W) 'riscv/sys_unlink.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_unlink.c'; fi` + +riscv/riscv_libsim_a-sys_utime.o: riscv/sys_utime.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_utime.o -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_utime.Tpo -c -o riscv/riscv_libsim_a-sys_utime.o `test -f 'riscv/sys_utime.c' || echo '$(srcdir)/'`riscv/sys_utime.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_utime.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_utime.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_utime.c' object='riscv/riscv_libsim_a-sys_utime.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_utime.o `test -f 'riscv/sys_utime.c' || echo '$(srcdir)/'`riscv/sys_utime.c + +riscv/riscv_libsim_a-sys_utime.obj: riscv/sys_utime.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_utime.obj -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_utime.Tpo -c -o riscv/riscv_libsim_a-sys_utime.obj `if test -f 'riscv/sys_utime.c'; then $(CYGPATH_W) 'riscv/sys_utime.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_utime.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_utime.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_utime.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_utime.c' object='riscv/riscv_libsim_a-sys_utime.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_utime.obj `if test -f 'riscv/sys_utime.c'; then $(CYGPATH_W) 'riscv/sys_utime.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_utime.c'; fi` + +riscv/riscv_libsim_a-sys_wait.o: riscv/sys_wait.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_wait.o -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_wait.Tpo -c -o riscv/riscv_libsim_a-sys_wait.o `test -f 'riscv/sys_wait.c' || echo '$(srcdir)/'`riscv/sys_wait.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_wait.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_wait.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_wait.c' object='riscv/riscv_libsim_a-sys_wait.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_wait.o `test -f 'riscv/sys_wait.c' || echo '$(srcdir)/'`riscv/sys_wait.c + +riscv/riscv_libsim_a-sys_wait.obj: riscv/sys_wait.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_wait.obj -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_wait.Tpo -c -o riscv/riscv_libsim_a-sys_wait.obj `if test -f 'riscv/sys_wait.c'; then $(CYGPATH_W) 'riscv/sys_wait.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_wait.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_wait.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_wait.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_wait.c' object='riscv/riscv_libsim_a-sys_wait.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_wait.obj `if test -f 'riscv/sys_wait.c'; then $(CYGPATH_W) 'riscv/sys_wait.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_wait.c'; fi` + +riscv/riscv_libsim_a-sys_write.o: riscv/sys_write.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_write.o -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_write.Tpo -c -o riscv/riscv_libsim_a-sys_write.o `test -f 'riscv/sys_write.c' || echo '$(srcdir)/'`riscv/sys_write.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_write.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_write.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_write.c' object='riscv/riscv_libsim_a-sys_write.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_write.o `test -f 'riscv/sys_write.c' || echo '$(srcdir)/'`riscv/sys_write.c + +riscv/riscv_libsim_a-sys_write.obj: riscv/sys_write.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT riscv/riscv_libsim_a-sys_write.obj -MD -MP -MF riscv/$(DEPDIR)/riscv_libsim_a-sys_write.Tpo -c -o riscv/riscv_libsim_a-sys_write.obj `if test -f 'riscv/sys_write.c'; then $(CYGPATH_W) 'riscv/sys_write.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_write.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) riscv/$(DEPDIR)/riscv_libsim_a-sys_write.Tpo riscv/$(DEPDIR)/riscv_libsim_a-sys_write.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='riscv/sys_write.c' object='riscv/riscv_libsim_a-sys_write.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(riscv_libsim_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o riscv/riscv_libsim_a-sys_write.obj `if test -f 'riscv/sys_write.c'; then $(CYGPATH_W) 'riscv/sys_write.c'; else $(CYGPATH_W) '$(srcdir)/riscv/sys_write.c'; fi` + +xtensa/xtensa_libgloss_a-syscalls.o: xtensa/syscalls.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xtensa_libgloss_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xtensa/xtensa_libgloss_a-syscalls.o -MD -MP -MF xtensa/$(DEPDIR)/xtensa_libgloss_a-syscalls.Tpo -c -o xtensa/xtensa_libgloss_a-syscalls.o `test -f 'xtensa/syscalls.c' || echo '$(srcdir)/'`xtensa/syscalls.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) xtensa/$(DEPDIR)/xtensa_libgloss_a-syscalls.Tpo xtensa/$(DEPDIR)/xtensa_libgloss_a-syscalls.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xtensa/syscalls.c' object='xtensa/xtensa_libgloss_a-syscalls.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xtensa_libgloss_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xtensa/xtensa_libgloss_a-syscalls.o `test -f 'xtensa/syscalls.c' || echo '$(srcdir)/'`xtensa/syscalls.c + +xtensa/xtensa_libgloss_a-syscalls.obj: xtensa/syscalls.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xtensa_libgloss_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xtensa/xtensa_libgloss_a-syscalls.obj -MD -MP -MF xtensa/$(DEPDIR)/xtensa_libgloss_a-syscalls.Tpo -c -o xtensa/xtensa_libgloss_a-syscalls.obj `if test -f 'xtensa/syscalls.c'; then $(CYGPATH_W) 'xtensa/syscalls.c'; else $(CYGPATH_W) '$(srcdir)/xtensa/syscalls.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) xtensa/$(DEPDIR)/xtensa_libgloss_a-syscalls.Tpo xtensa/$(DEPDIR)/xtensa_libgloss_a-syscalls.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xtensa/syscalls.c' object='xtensa/xtensa_libgloss_a-syscalls.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xtensa_libgloss_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xtensa/xtensa_libgloss_a-syscalls.obj `if test -f 'xtensa/syscalls.c'; then $(CYGPATH_W) 'xtensa/syscalls.c'; else $(CYGPATH_W) '$(srcdir)/xtensa/syscalls.c'; fi` + +xtensa/boards/esp32/xtensa_libgloss_a-board.o: xtensa/boards/esp32/board.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xtensa_libgloss_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xtensa/boards/esp32/xtensa_libgloss_a-board.o -MD -MP -MF xtensa/boards/esp32/$(DEPDIR)/xtensa_libgloss_a-board.Tpo -c -o xtensa/boards/esp32/xtensa_libgloss_a-board.o `test -f 'xtensa/boards/esp32/board.c' || echo '$(srcdir)/'`xtensa/boards/esp32/board.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) xtensa/boards/esp32/$(DEPDIR)/xtensa_libgloss_a-board.Tpo xtensa/boards/esp32/$(DEPDIR)/xtensa_libgloss_a-board.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xtensa/boards/esp32/board.c' object='xtensa/boards/esp32/xtensa_libgloss_a-board.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xtensa_libgloss_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xtensa/boards/esp32/xtensa_libgloss_a-board.o `test -f 'xtensa/boards/esp32/board.c' || echo '$(srcdir)/'`xtensa/boards/esp32/board.c + +xtensa/boards/esp32/xtensa_libgloss_a-board.obj: xtensa/boards/esp32/board.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xtensa_libgloss_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xtensa/boards/esp32/xtensa_libgloss_a-board.obj -MD -MP -MF xtensa/boards/esp32/$(DEPDIR)/xtensa_libgloss_a-board.Tpo -c -o xtensa/boards/esp32/xtensa_libgloss_a-board.obj `if test -f 'xtensa/boards/esp32/board.c'; then $(CYGPATH_W) 'xtensa/boards/esp32/board.c'; else $(CYGPATH_W) '$(srcdir)/xtensa/boards/esp32/board.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) xtensa/boards/esp32/$(DEPDIR)/xtensa_libgloss_a-board.Tpo xtensa/boards/esp32/$(DEPDIR)/xtensa_libgloss_a-board.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xtensa/boards/esp32/board.c' object='xtensa/boards/esp32/xtensa_libgloss_a-board.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xtensa_libgloss_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xtensa/boards/esp32/xtensa_libgloss_a-board.obj `if test -f 'xtensa/boards/esp32/board.c'; then $(CYGPATH_W) 'xtensa/boards/esp32/board.c'; else $(CYGPATH_W) '$(srcdir)/xtensa/boards/esp32/board.c'; fi` + +xtensa/boards/esp32s3/xtensa_libgloss_a-board.o: xtensa/boards/esp32s3/board.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xtensa_libgloss_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xtensa/boards/esp32s3/xtensa_libgloss_a-board.o -MD -MP -MF xtensa/boards/esp32s3/$(DEPDIR)/xtensa_libgloss_a-board.Tpo -c -o xtensa/boards/esp32s3/xtensa_libgloss_a-board.o `test -f 'xtensa/boards/esp32s3/board.c' || echo '$(srcdir)/'`xtensa/boards/esp32s3/board.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) xtensa/boards/esp32s3/$(DEPDIR)/xtensa_libgloss_a-board.Tpo xtensa/boards/esp32s3/$(DEPDIR)/xtensa_libgloss_a-board.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xtensa/boards/esp32s3/board.c' object='xtensa/boards/esp32s3/xtensa_libgloss_a-board.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xtensa_libgloss_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xtensa/boards/esp32s3/xtensa_libgloss_a-board.o `test -f 'xtensa/boards/esp32s3/board.c' || echo '$(srcdir)/'`xtensa/boards/esp32s3/board.c + +xtensa/boards/esp32s3/xtensa_libgloss_a-board.obj: xtensa/boards/esp32s3/board.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xtensa_libgloss_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xtensa/boards/esp32s3/xtensa_libgloss_a-board.obj -MD -MP -MF xtensa/boards/esp32s3/$(DEPDIR)/xtensa_libgloss_a-board.Tpo -c -o xtensa/boards/esp32s3/xtensa_libgloss_a-board.obj `if test -f 'xtensa/boards/esp32s3/board.c'; then $(CYGPATH_W) 'xtensa/boards/esp32s3/board.c'; else $(CYGPATH_W) '$(srcdir)/xtensa/boards/esp32s3/board.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) xtensa/boards/esp32s3/$(DEPDIR)/xtensa_libgloss_a-board.Tpo xtensa/boards/esp32s3/$(DEPDIR)/xtensa_libgloss_a-board.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xtensa/boards/esp32s3/board.c' object='xtensa/boards/esp32s3/xtensa_libgloss_a-board.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xtensa_libgloss_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xtensa/boards/esp32s3/xtensa_libgloss_a-board.obj `if test -f 'xtensa/boards/esp32s3/board.c'; then $(CYGPATH_W) 'xtensa/boards/esp32s3/board.c'; else $(CYGPATH_W) '$(srcdir)/xtensa/boards/esp32s3/board.c'; fi` + +xtensa/xtensa_libsys_openocd_a-syscalls.o: xtensa/syscalls.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xtensa_libsys_openocd_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xtensa/xtensa_libsys_openocd_a-syscalls.o -MD -MP -MF xtensa/$(DEPDIR)/xtensa_libsys_openocd_a-syscalls.Tpo -c -o xtensa/xtensa_libsys_openocd_a-syscalls.o `test -f 'xtensa/syscalls.c' || echo '$(srcdir)/'`xtensa/syscalls.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) xtensa/$(DEPDIR)/xtensa_libsys_openocd_a-syscalls.Tpo xtensa/$(DEPDIR)/xtensa_libsys_openocd_a-syscalls.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xtensa/syscalls.c' object='xtensa/xtensa_libsys_openocd_a-syscalls.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xtensa_libsys_openocd_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xtensa/xtensa_libsys_openocd_a-syscalls.o `test -f 'xtensa/syscalls.c' || echo '$(srcdir)/'`xtensa/syscalls.c + +xtensa/xtensa_libsys_openocd_a-syscalls.obj: xtensa/syscalls.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xtensa_libsys_openocd_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xtensa/xtensa_libsys_openocd_a-syscalls.obj -MD -MP -MF xtensa/$(DEPDIR)/xtensa_libsys_openocd_a-syscalls.Tpo -c -o xtensa/xtensa_libsys_openocd_a-syscalls.obj `if test -f 'xtensa/syscalls.c'; then $(CYGPATH_W) 'xtensa/syscalls.c'; else $(CYGPATH_W) '$(srcdir)/xtensa/syscalls.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) xtensa/$(DEPDIR)/xtensa_libsys_openocd_a-syscalls.Tpo xtensa/$(DEPDIR)/xtensa_libsys_openocd_a-syscalls.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xtensa/syscalls.c' object='xtensa/xtensa_libsys_openocd_a-syscalls.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xtensa_libsys_openocd_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xtensa/xtensa_libsys_openocd_a-syscalls.obj `if test -f 'xtensa/syscalls.c'; then $(CYGPATH_W) 'xtensa/syscalls.c'; else $(CYGPATH_W) '$(srcdir)/xtensa/syscalls.c'; fi` + +xtensa/xtensa_libsys_qemu_a-syscalls.o: xtensa/syscalls.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xtensa_libsys_qemu_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xtensa/xtensa_libsys_qemu_a-syscalls.o -MD -MP -MF xtensa/$(DEPDIR)/xtensa_libsys_qemu_a-syscalls.Tpo -c -o xtensa/xtensa_libsys_qemu_a-syscalls.o `test -f 'xtensa/syscalls.c' || echo '$(srcdir)/'`xtensa/syscalls.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) xtensa/$(DEPDIR)/xtensa_libsys_qemu_a-syscalls.Tpo xtensa/$(DEPDIR)/xtensa_libsys_qemu_a-syscalls.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xtensa/syscalls.c' object='xtensa/xtensa_libsys_qemu_a-syscalls.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xtensa_libsys_qemu_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xtensa/xtensa_libsys_qemu_a-syscalls.o `test -f 'xtensa/syscalls.c' || echo '$(srcdir)/'`xtensa/syscalls.c + +xtensa/xtensa_libsys_qemu_a-syscalls.obj: xtensa/syscalls.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xtensa_libsys_qemu_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT xtensa/xtensa_libsys_qemu_a-syscalls.obj -MD -MP -MF xtensa/$(DEPDIR)/xtensa_libsys_qemu_a-syscalls.Tpo -c -o xtensa/xtensa_libsys_qemu_a-syscalls.obj `if test -f 'xtensa/syscalls.c'; then $(CYGPATH_W) 'xtensa/syscalls.c'; else $(CYGPATH_W) '$(srcdir)/xtensa/syscalls.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) xtensa/$(DEPDIR)/xtensa_libsys_qemu_a-syscalls.Tpo xtensa/$(DEPDIR)/xtensa_libsys_qemu_a-syscalls.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xtensa/syscalls.c' object='xtensa/xtensa_libsys_qemu_a-syscalls.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xtensa_libsys_qemu_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o xtensa/xtensa_libsys_qemu_a-syscalls.obj `if test -f 'xtensa/syscalls.c'; then $(CYGPATH_W) 'xtensa/syscalls.c'; else $(CYGPATH_W) '$(srcdir)/xtensa/syscalls.c'; fi` + wince_stub_exe-wince-stub.o: wince-stub.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(wince_stub_exe_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT wince_stub_exe-wince-stub.o -MD -MP -MF $(DEPDIR)/wince_stub_exe-wince-stub.Tpo -c -o wince_stub_exe-wince-stub.o `test -f 'wince-stub.c' || echo '$(srcdir)/'`wince-stub.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/wince_stub_exe-wince-stub.Tpo $(DEPDIR)/wince_stub_exe-wince-stub.Po @@ -2367,6 +8355,12 @@ wince_stub_exe-wince-stub.obj: wince-stub.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wince-stub.c' object='wince_stub_exe-wince-stub.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(wince_stub_exe_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o wince_stub_exe-wince-stub.obj `if test -f 'wince-stub.c'; then $(CYGPATH_W) 'wince-stub.c'; else $(CYGPATH_W) '$(srcdir)/wince-stub.c'; fi` + +.s.o: + $(AM_V_CCAS)$(CCASCOMPILE) -c -o $@ $< + +.s.obj: + $(AM_V_CCAS)$(CCASCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` doc/$(am__dirstamp): @$(MKDIR_P) doc @: > doc/$(am__dirstamp) @@ -2507,6 +8501,48 @@ maintainer-clean-aminfo: echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \ rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \ done +install-aarch64_cpu_initcpuinitDATA: $(aarch64_cpu_initcpuinit_DATA) + @$(NORMAL_INSTALL) + @list='$(aarch64_cpu_initcpuinit_DATA)'; test -n "$(aarch64_cpu_initcpuinitdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(aarch64_cpu_initcpuinitdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(aarch64_cpu_initcpuinitdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(aarch64_cpu_initcpuinitdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(aarch64_cpu_initcpuinitdir)" || exit $$?; \ + done + +uninstall-aarch64_cpu_initcpuinitDATA: + @$(NORMAL_UNINSTALL) + @list='$(aarch64_cpu_initcpuinit_DATA)'; test -n "$(aarch64_cpu_initcpuinitdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(aarch64_cpu_initcpuinitdir)'; $(am__uninstall_files_from_dir) +install-arm_cpu_initcpuinitDATA: $(arm_cpu_initcpuinit_DATA) + @$(NORMAL_INSTALL) + @list='$(arm_cpu_initcpuinit_DATA)'; test -n "$(arm_cpu_initcpuinitdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(arm_cpu_initcpuinitdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(arm_cpu_initcpuinitdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(arm_cpu_initcpuinitdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(arm_cpu_initcpuinitdir)" || exit $$?; \ + done + +uninstall-arm_cpu_initcpuinitDATA: + @$(NORMAL_UNINSTALL) + @list='$(arm_cpu_initcpuinit_DATA)'; test -n "$(arm_cpu_initcpuinitdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(arm_cpu_initcpuinitdir)'; $(am__uninstall_files_from_dir) install-includemachinetoolDATA: $(includemachinetool_DATA) @$(NORMAL_INSTALL) @list='$(includemachinetool_DATA)'; test -n "$(includemachinetooldir)" || list=; \ @@ -2570,6 +8606,27 @@ uninstall-includetoolDATA: @list='$(includetool_DATA)'; test -n "$(includetooldir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(includetooldir)'; $(am__uninstall_files_from_dir) +install-includetoolasmleonDATA: $(includetoolasmleon_DATA) + @$(NORMAL_INSTALL) + @list='$(includetoolasmleon_DATA)'; test -n "$(includetoolasmleondir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(includetoolasmleondir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(includetoolasmleondir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(includetoolasmleondir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(includetoolasmleondir)" || exit $$?; \ + done + +uninstall-includetoolasmleonDATA: + @$(NORMAL_UNINSTALL) + @list='$(includetoolasmleon_DATA)'; test -n "$(includetoolasmleondir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(includetoolasmleondir)'; $(am__uninstall_files_from_dir) install-multilibtoolDATA: $(multilibtool_DATA) @$(NORMAL_INSTALL) @list='$(multilibtool_DATA)'; test -n "$(multilibtooldir)" || list=; \ @@ -2591,6 +8648,27 @@ uninstall-multilibtoolDATA: @list='$(multilibtool_DATA)'; test -n "$(multilibtooldir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(multilibtooldir)'; $(am__uninstall_files_from_dir) +install-pru_devicespecsDATA: $(pru_devicespecs_DATA) + @$(NORMAL_INSTALL) + @list='$(pru_devicespecs_DATA)'; test -n "$(pru_devicespecsdir)" || list=; \ + if test -n "$$list"; then \ + echo " $(MKDIR_P) '$(DESTDIR)$(pru_devicespecsdir)'"; \ + $(MKDIR_P) "$(DESTDIR)$(pru_devicespecsdir)" || exit 1; \ + fi; \ + for p in $$list; do \ + if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ + echo "$$d$$p"; \ + done | $(am__base_list) | \ + while read files; do \ + echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pru_devicespecsdir)'"; \ + $(INSTALL_DATA) $$files "$(DESTDIR)$(pru_devicespecsdir)" || exit $$?; \ + done + +uninstall-pru_devicespecsDATA: + @$(NORMAL_UNINSTALL) + @list='$(pru_devicespecs_DATA)'; test -n "$(pru_devicespecsdir)" || list=; \ + files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ + dir='$(DESTDIR)$(pru_devicespecsdir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. @@ -2704,7 +8782,7 @@ all-am: Makefile $(INFO_DEPS) $(LIBRARIES) $(PROGRAMS) $(DATA) \ config.h all-local installdirs: installdirs-recursive installdirs-am: - for dir in "$(DESTDIR)$(multilibtooldir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(infodir)" "$(DESTDIR)$(includemachinetooldir)" "$(DESTDIR)$(includesystooldir)" "$(DESTDIR)$(includetooldir)" "$(DESTDIR)$(multilibtooldir)"; do \ + for dir in "$(DESTDIR)$(multilibtooldir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(multilibtooldir)" "$(DESTDIR)$(infodir)" "$(DESTDIR)$(aarch64_cpu_initcpuinitdir)" "$(DESTDIR)$(arm_cpu_initcpuinitdir)" "$(DESTDIR)$(includemachinetooldir)" "$(DESTDIR)$(includesystooldir)" "$(DESTDIR)$(includetooldir)" "$(DESTDIR)$(includetoolasmleondir)" "$(DESTDIR)$(multilibtooldir)" "$(DESTDIR)$(pru_devicespecsdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive @@ -2729,35 +8807,108 @@ install-strip: mostlyclean-generic: clean-generic: + -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) + -rm -f aarch64/$(DEPDIR)/$(am__dirstamp) + -rm -f aarch64/$(am__dirstamp) + -rm -f arc/$(DEPDIR)/$(am__dirstamp) + -rm -f arc/$(am__dirstamp) + -rm -f arm/$(DEPDIR)/$(am__dirstamp) + -rm -f arm/$(am__dirstamp) -rm -f bfin/$(DEPDIR)/$(am__dirstamp) -rm -f bfin/$(am__dirstamp) + -rm -f cr16/$(DEPDIR)/$(am__dirstamp) + -rm -f cr16/$(am__dirstamp) + -rm -f csky/$(DEPDIR)/$(am__dirstamp) + -rm -f csky/$(am__dirstamp) + -rm -f d30v/$(DEPDIR)/$(am__dirstamp) + -rm -f d30v/$(am__dirstamp) -rm -f doc/$(am__dirstamp) + -rm -f epiphany/$(DEPDIR)/$(am__dirstamp) + -rm -f epiphany/$(am__dirstamp) + -rm -f fr30/$(DEPDIR)/$(am__dirstamp) + -rm -f fr30/$(am__dirstamp) + -rm -f frv/$(DEPDIR)/$(am__dirstamp) + -rm -f frv/$(am__dirstamp) + -rm -f ft32/$(DEPDIR)/$(am__dirstamp) + -rm -f ft32/$(am__dirstamp) + -rm -f i386/$(DEPDIR)/$(am__dirstamp) + -rm -f i386/$(am__dirstamp) + -rm -f i960/$(DEPDIR)/$(am__dirstamp) + -rm -f i960/$(am__dirstamp) -rm -f iq2000/$(DEPDIR)/$(am__dirstamp) -rm -f iq2000/$(am__dirstamp) -rm -f libnosys/$(DEPDIR)/$(am__dirstamp) -rm -f libnosys/$(am__dirstamp) -rm -f lm32/$(DEPDIR)/$(am__dirstamp) -rm -f lm32/$(am__dirstamp) + -rm -f m32r/$(DEPDIR)/$(am__dirstamp) + -rm -f m32r/$(am__dirstamp) + -rm -f mcore/$(DEPDIR)/$(am__dirstamp) + -rm -f mcore/$(am__dirstamp) + -rm -f microblaze/$(DEPDIR)/$(am__dirstamp) + -rm -f microblaze/$(am__dirstamp) + -rm -f mn10200/$(DEPDIR)/$(am__dirstamp) + -rm -f mn10200/$(am__dirstamp) + -rm -f mn10300/$(DEPDIR)/$(am__dirstamp) + -rm -f mn10300/$(am__dirstamp) + -rm -f moxie/$(DEPDIR)/$(am__dirstamp) + -rm -f moxie/$(am__dirstamp) + -rm -f msp430/$(DEPDIR)/$(am__dirstamp) + -rm -f msp430/$(am__dirstamp) + -rm -f nds32/$(DEPDIR)/$(am__dirstamp) + -rm -f nds32/$(am__dirstamp) + -rm -f nios2/$(DEPDIR)/$(am__dirstamp) + -rm -f nios2/$(am__dirstamp) + -rm -f or1k/$(DEPDIR)/$(am__dirstamp) + -rm -f or1k/$(am__dirstamp) + -rm -f or1k/boards/$(DEPDIR)/$(am__dirstamp) + -rm -f or1k/boards/$(am__dirstamp) + -rm -f pru/$(DEPDIR)/$(am__dirstamp) + -rm -f pru/$(am__dirstamp) -rm -f riscv/$(DEPDIR)/$(am__dirstamp) -rm -f riscv/$(am__dirstamp) + -rm -f rl78/$(DEPDIR)/$(am__dirstamp) + -rm -f rl78/$(am__dirstamp) + -rm -f rx/$(DEPDIR)/$(am__dirstamp) + -rm -f rx/$(am__dirstamp) + -rm -f sparc/$(DEPDIR)/$(am__dirstamp) + -rm -f sparc/$(am__dirstamp) + -rm -f sparc_leon/$(DEPDIR)/$(am__dirstamp) + -rm -f sparc_leon/$(am__dirstamp) + -rm -f tic6x/$(DEPDIR)/$(am__dirstamp) + -rm -f tic6x/$(am__dirstamp) + -rm -f v850/$(DEPDIR)/$(am__dirstamp) + -rm -f v850/$(am__dirstamp) + -rm -f visium/$(DEPDIR)/$(am__dirstamp) + -rm -f visium/$(am__dirstamp) -rm -f wince/$(am__dirstamp) + -rm -f xstormy16/$(DEPDIR)/$(am__dirstamp) + -rm -f xstormy16/$(am__dirstamp) + -rm -f xtensa/$(DEPDIR)/$(am__dirstamp) + -rm -f xtensa/$(am__dirstamp) + -rm -f xtensa/boards/esp32/$(DEPDIR)/$(am__dirstamp) + -rm -f xtensa/boards/esp32/$(am__dirstamp) + -rm -f xtensa/boards/esp32s3/$(DEPDIR)/$(am__dirstamp) + -rm -f xtensa/boards/esp32s3/$(am__dirstamp) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." +@HAVE_DOC_FALSE@html-local: clean: clean-recursive clean-am: clean-aminfo clean-binPROGRAMS clean-checkPROGRAMS \ clean-generic clean-local clean-multilibtoolLIBRARIES \ - clean-noinstLIBRARIES mostlyclean-am + clean-multilibtoolPROGRAMS clean-noinstLIBRARIES \ + mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -rf ./$(DEPDIR) bfin/$(DEPDIR) iq2000/$(DEPDIR) libnosys/$(DEPDIR) lm32/$(DEPDIR) riscv/$(DEPDIR) + -rm -rf ./$(DEPDIR) aarch64/$(DEPDIR) arc/$(DEPDIR) arm/$(DEPDIR) bfin/$(DEPDIR) cr16/$(DEPDIR) csky/$(DEPDIR) d30v/$(DEPDIR) epiphany/$(DEPDIR) fr30/$(DEPDIR) frv/$(DEPDIR) ft32/$(DEPDIR) i386/$(DEPDIR) i960/$(DEPDIR) iq2000/$(DEPDIR) libnosys/$(DEPDIR) lm32/$(DEPDIR) m32r/$(DEPDIR) mcore/$(DEPDIR) microblaze/$(DEPDIR) mn10200/$(DEPDIR) mn10300/$(DEPDIR) moxie/$(DEPDIR) msp430/$(DEPDIR) nds32/$(DEPDIR) nios2/$(DEPDIR) or1k/$(DEPDIR) or1k/boards/$(DEPDIR) pru/$(DEPDIR) riscv/$(DEPDIR) rl78/$(DEPDIR) rx/$(DEPDIR) sparc/$(DEPDIR) sparc_leon/$(DEPDIR) tic6x/$(DEPDIR) v850/$(DEPDIR) visium/$(DEPDIR) xstormy16/$(DEPDIR) xtensa/$(DEPDIR) xtensa/boards/esp32/$(DEPDIR) xtensa/boards/esp32s3/$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-local distclean-tags @@ -2768,16 +8919,18 @@ dvi-am: $(DVIS) html: html-recursive -html-am: $(HTMLS) +html-am: $(HTMLS) html-local info: info-recursive info-am: $(INFO_DEPS) -install-data-am: install-includemachinetoolDATA \ +install-data-am: install-aarch64_cpu_initcpuinitDATA \ + install-arm_cpu_initcpuinitDATA install-includemachinetoolDATA \ install-includesystoolDATA install-includetoolDATA \ - install-info-am install-multilibtoolDATA \ - install-multilibtoolLIBRARIES + install-includetoolasmleonDATA install-info-am \ + install-multilibtoolDATA install-multilibtoolLIBRARIES \ + install-multilibtoolPROGRAMS install-pru_devicespecsDATA install-dvi: install-dvi-recursive @@ -2899,7 +9052,7 @@ installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache - -rm -rf ./$(DEPDIR) bfin/$(DEPDIR) iq2000/$(DEPDIR) libnosys/$(DEPDIR) lm32/$(DEPDIR) riscv/$(DEPDIR) + -rm -rf ./$(DEPDIR) aarch64/$(DEPDIR) arc/$(DEPDIR) arm/$(DEPDIR) bfin/$(DEPDIR) cr16/$(DEPDIR) csky/$(DEPDIR) d30v/$(DEPDIR) epiphany/$(DEPDIR) fr30/$(DEPDIR) frv/$(DEPDIR) ft32/$(DEPDIR) i386/$(DEPDIR) i960/$(DEPDIR) iq2000/$(DEPDIR) libnosys/$(DEPDIR) lm32/$(DEPDIR) m32r/$(DEPDIR) mcore/$(DEPDIR) microblaze/$(DEPDIR) mn10200/$(DEPDIR) mn10300/$(DEPDIR) moxie/$(DEPDIR) msp430/$(DEPDIR) nds32/$(DEPDIR) nios2/$(DEPDIR) or1k/$(DEPDIR) or1k/boards/$(DEPDIR) pru/$(DEPDIR) riscv/$(DEPDIR) rl78/$(DEPDIR) rx/$(DEPDIR) sparc/$(DEPDIR) sparc_leon/$(DEPDIR) tic6x/$(DEPDIR) v850/$(DEPDIR) visium/$(DEPDIR) xstormy16/$(DEPDIR) xtensa/$(DEPDIR) xtensa/boards/esp32/$(DEPDIR) xtensa/boards/esp32s3/$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-aminfo \ maintainer-clean-generic maintainer-clean-local @@ -2917,11 +9070,14 @@ ps: ps-recursive ps-am: $(PSS) -uninstall-am: uninstall-binPROGRAMS uninstall-dvi-am uninstall-html-am \ +uninstall-am: uninstall-aarch64_cpu_initcpuinitDATA \ + uninstall-arm_cpu_initcpuinitDATA uninstall-binPROGRAMS \ + uninstall-dvi-am uninstall-html-am \ uninstall-includemachinetoolDATA uninstall-includesystoolDATA \ - uninstall-includetoolDATA uninstall-info-am \ - uninstall-multilibtoolDATA uninstall-multilibtoolLIBRARIES \ - uninstall-pdf-am uninstall-ps-am + uninstall-includetoolDATA uninstall-includetoolasmleonDATA \ + uninstall-info-am uninstall-multilibtoolDATA \ + uninstall-multilibtoolLIBRARIES uninstall-multilibtoolPROGRAMS \ + uninstall-pdf-am uninstall-pru_devicespecsDATA uninstall-ps-am .MAKE: $(am__recursive_targets) all check-am install-am install-strip @@ -2929,32 +9085,48 @@ uninstall-am: uninstall-binPROGRAMS uninstall-dvi-am uninstall-html-am \ am--refresh check check-am clean clean-aminfo \ clean-binPROGRAMS clean-checkPROGRAMS clean-cscope \ clean-generic clean-local clean-multilibtoolLIBRARIES \ - clean-noinstLIBRARIES cscope cscopelist-am ctags ctags-am \ - dist-info distclean distclean-compile distclean-generic \ - distclean-hdr distclean-local distclean-tags dvi dvi-am html \ - html-am info info-am install install-am install-binPROGRAMS \ + clean-multilibtoolPROGRAMS clean-noinstLIBRARIES cscope \ + cscopelist-am ctags ctags-am dist-info distclean \ + distclean-compile distclean-generic distclean-hdr \ + distclean-local distclean-tags dvi dvi-am html html-am \ + html-local info info-am install \ + install-aarch64_cpu_initcpuinitDATA install-am \ + install-arm_cpu_initcpuinitDATA install-binPROGRAMS \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-exec-local install-html \ install-html-am install-includemachinetoolDATA \ install-includesystoolDATA install-includetoolDATA \ - install-info install-info-am install-man \ - install-multilibtoolDATA install-multilibtoolLIBRARIES \ - install-pdf install-pdf-am install-ps install-ps-am \ - install-strip installcheck installcheck-am installdirs \ - installdirs-am maintainer-clean maintainer-clean-aminfo \ - maintainer-clean-generic maintainer-clean-local mostlyclean \ - mostlyclean-aminfo mostlyclean-compile mostlyclean-generic \ - mostlyclean-local pdf pdf-am ps ps-am tags tags-am uninstall \ - uninstall-am uninstall-binPROGRAMS uninstall-dvi-am \ - uninstall-html-am uninstall-includemachinetoolDATA \ - uninstall-includesystoolDATA uninstall-includetoolDATA \ + install-includetoolasmleonDATA install-info install-info-am \ + install-man install-multilibtoolDATA \ + install-multilibtoolLIBRARIES install-multilibtoolPROGRAMS \ + install-pdf install-pdf-am install-pru_devicespecsDATA \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs installdirs-am maintainer-clean \ + maintainer-clean-aminfo maintainer-clean-generic \ + maintainer-clean-local mostlyclean mostlyclean-aminfo \ + mostlyclean-compile mostlyclean-generic mostlyclean-local pdf \ + pdf-am ps ps-am tags tags-am uninstall \ + uninstall-aarch64_cpu_initcpuinitDATA uninstall-am \ + uninstall-arm_cpu_initcpuinitDATA uninstall-binPROGRAMS \ + uninstall-dvi-am uninstall-html-am \ + uninstall-includemachinetoolDATA uninstall-includesystoolDATA \ + uninstall-includetoolDATA uninstall-includetoolasmleonDATA \ uninstall-info-am uninstall-multilibtoolDATA \ - uninstall-multilibtoolLIBRARIES uninstall-pdf-am \ - uninstall-ps-am + uninstall-multilibtoolLIBRARIES uninstall-multilibtoolPROGRAMS \ + uninstall-pdf-am uninstall-pru_devicespecsDATA uninstall-ps-am .PRECIOUS: Makefile +%.dis: % + $(AM_V_GEN)$(OBJDUMP) -d $< > $@ +%.bin: % + $(AM_V_GEN)$(OBJCOPY) -O binary $< $@ +%.hex: % + $(AM_V_GEN)$(OBJCOPY) -O ihex $< $@ +%.srec: % + $(AM_V_GEN)$(OBJCOPY) -O srec $< $@ + # GNU Make needs to see an explicit $(MAKE) variable in the command it # runs to enable its job server during parallel builds. Hence the # comments below. @@ -2982,22 +9154,87 @@ clean-local: clean-multi distclean-local: distclean-multi maintainer-clean-local: maintainer-clean-multi +@HAVE_DOC_TRUE@html-local: doc/porting/index.html +@HAVE_DOC_TRUE@doc/porting/index.html: doc/porting.texi doc/$(am__dirstamp) +@HAVE_DOC_TRUE@ $(AM_V_GEN)$(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) \ +@HAVE_DOC_TRUE@ --split=node $< -o $(@D) + +@CONFIG_AARCH64_TRUE@aarch64/crt0.$(OBJEXT): aarch64/crt0.S +@CONFIG_AARCH64_TRUE@ $(AM_V_CPPAS)$(CPPASCOMPILE) -DSEMIHOST_V2 -o $@ -c $< +@CONFIG_AARCH64_TRUE@aarch64/rdimon-crt0.$(OBJEXT): aarch64/crt0.S +@CONFIG_AARCH64_TRUE@ $(AM_V_CPPAS)$(CPPASCOMPILE) -DSEMIHOST_V2 -DARM_RDI_MONITOR -o $@ -c $< + +@CONFIG_AARCH64_TRUE@aarch64/%.specs: aarch64/$(AARCH64_OBJTYPE)%.specs +@CONFIG_AARCH64_TRUE@ $(AM_V_GEN)cp $< $@ + +@CONFIG_AARCH64_TRUE@aarch64/cpu-init/$(am__dirstamp): +@CONFIG_AARCH64_TRUE@ @$(MKDIR_P) aarch64/cpu-init +@CONFIG_AARCH64_TRUE@ @: > $@ + +@CONFIG_AARCH64_TRUE@aarch64/cpu-init/rdimon-aem-el3.$(OBJEXT): aarch64/cpu-init/rdimon-aem-el3.S aarch64/cpu-init/$(am__dirstamp) +@CONFIG_AARCH64_TRUE@ $(AM_V_CC)$(COMPILE) $(aarch64_cpu_init_CPPFLAGS) -DARM_RDI_MONITOR -o $@ -c $< + +@CONFIG_AARCH64_TRUE@aarch64/cpu-init/rdimon-aem-v8-r.$(OBJEXT): aarch64/cpu-init/rdimon-aem-el3.S aarch64/cpu-init/$(am__dirstamp) +@CONFIG_AARCH64_TRUE@ $(AM_V_CC)$(COMPILE) $(aarch64_cpu_init_CPPFLAGS) -DARM_RDI_MONITOR -DBUILD_FOR_R_PROFILE -o $@ -c $< + +@CONFIG_ARM_TRUE@arm/redboot-syscalls.o: arm/redboot-syscalls.c +@CONFIG_ARM_TRUE@ $(AM_V_CC)$(COMPILE) -DSEMIHOST_V2 -o $@ -c $< + +@CONFIG_ARM_TRUE@arm/rdpmon-crt0.o: arm/crt0.S +@CONFIG_ARM_TRUE@ $(AM_V_CPPAS)$(CPPASCOMPILE) -DSEMIHOST_V2 -DARM_RDP_MONITOR -o $@ -c $< + +@CONFIG_ARM_TRUE@arm/rdimon-crt0.o: arm/crt0.S +@CONFIG_ARM_TRUE@ $(AM_V_CPPAS)$(CPPASCOMPILE) $(arm_RDIMON_CPPFLAGS) -o $@ -c $< + +@CONFIG_ARM_TRUE@arm/rdimon-crt0-v2m.o: arm/crt0.S +@CONFIG_ARM_TRUE@ $(AM_V_CPPAS)$(CPPASCOMPILE) $(arm_RDIMON_V2M_CPPFLAGS) -o $@ -c $< + +@CONFIG_ARM_TRUE@arm/%.specs: arm/$(ARM_OBJTYPE)%.specs +@CONFIG_ARM_TRUE@ $(AM_V_GEN)cp $< $@ + +@CONFIG_ARM_TRUE@arm/%.ld: arm/$(ARM_OBJTYPE)%.ld +@CONFIG_ARM_TRUE@ $(AM_V_GEN)cp $< $@ + +@CONFIG_ARM_TRUE@arm/cpu-init/$(am__dirstamp): +@CONFIG_ARM_TRUE@ @$(MKDIR_P) arm/cpu-init +@CONFIG_ARM_TRUE@ @: > $@ + +@CONFIG_ARM_TRUE@arm/cpu-init/rdimon-aem.$(OBJEXT): arm/cpu-init/rdimon-aem.S arm/cpu-init/$(am__dirstamp) +@CONFIG_ARM_TRUE@ @$(MKDIR_P) arm/cpu-init +@CONFIG_ARM_TRUE@ $(AM_V_CC)$(COMPILE) -DARM_RDI_MONITOR -o $@ -c $< + @CONFIG_BFIN_TRUE@bfin/basiccrt.$(OBJEXT): bfin/basiccrt.S -@CONFIG_BFIN_TRUE@ $(AM_V_CC)$(COMPILE) $(bfin_CPPFLAGS) -o $@ -c $< $(if $(findstring mcpu=,$(CFLAGS)),,-mcpu=bf532-any) +@CONFIG_BFIN_TRUE@ $(AM_V_CPPAS)$(CPPASCOMPILE) $(bfin_CPPFLAGS) -o $@ -c $< $(if $(findstring mcpu=,$(CFLAGS)),,-mcpu=bf532-any) @CONFIG_BFIN_TRUE@bfin/basiccrts.$(OBJEXT): bfin/basiccrt.S -@CONFIG_BFIN_TRUE@ $(AM_V_CC)$(COMPILE) $(bfin_CPPFLAGS) -o $@ -c $< $(if $(findstring mcpu=,$(CFLAGS)),,-mcpu=bf532-any) -D__BFIN_SDRAM +@CONFIG_BFIN_TRUE@ $(AM_V_CPPAS)$(CPPASCOMPILE) $(bfin_CPPFLAGS) -o $@ -c $< $(if $(findstring mcpu=,$(CFLAGS)),,-mcpu=bf532-any) -D__BFIN_SDRAM @CONFIG_BFIN_TRUE@bfin/basiccrt561.$(OBJEXT): bfin/basiccrt.S -@CONFIG_BFIN_TRUE@ $(AM_V_CC)$(COMPILE) $(bfin_CPPFLAGS) -o $@ -c $< $(if $(findstring mcpu=,$(CFLAGS)),-mcpu=bf561-any,-mcpu=bf561-none) +@CONFIG_BFIN_TRUE@ $(AM_V_CPPAS)$(CPPASCOMPILE) $(bfin_CPPFLAGS) -o $@ -c $< $(if $(findstring mcpu=,$(CFLAGS)),-mcpu=bf561-any,-mcpu=bf561-none) @CONFIG_BFIN_TRUE@bfin/basiccrt561s.$(OBJEXT): bfin/basiccrt.S -@CONFIG_BFIN_TRUE@ $(AM_V_CC)$(COMPILE) $(bfin_CPPFLAGS) -o $@ -c $< $(if $(findstring mcpu=,$(CFLAGS)),-mcpu=bf561-any,-mcpu=bf561-none) -D__BFIN_SDRAM +@CONFIG_BFIN_TRUE@ $(AM_V_CPPAS)$(CPPASCOMPILE) $(bfin_CPPFLAGS) -o $@ -c $< $(if $(findstring mcpu=,$(CFLAGS)),-mcpu=bf561-any,-mcpu=bf561-none) -D__BFIN_SDRAM @CONFIG_BFIN_TRUE@bfin/basiccrt561b.$(OBJEXT): bfin/basiccrt.S -@CONFIG_BFIN_TRUE@ $(AM_V_CC)$(COMPILE) $(bfin_CPPFLAGS) -o $@ -c $< $(if $(findstring mcpu=,$(CFLAGS)),-mcpu=bf561-any,-mcpu=bf561-none) -D__ADSPBF561_COREB__ +@CONFIG_BFIN_TRUE@ $(AM_V_CPPAS)$(CPPASCOMPILE) $(bfin_CPPFLAGS) -o $@ -c $< $(if $(findstring mcpu=,$(CFLAGS)),-mcpu=bf561-any,-mcpu=bf561-none) -D__ADSPBF561_COREB__ @CONFIG_BFIN_TRUE@bfin/basiccrt60x.$(OBJEXT): bfin/basiccrt.S -@CONFIG_BFIN_TRUE@ $(AM_V_CC)$(COMPILE) $(bfin_CPPFLAGS) -o $@ -c $< $(if $(findstring mcpu=,$(CFLAGS)),-mcpu=bf608-any,-mcpu=bf608-none) +@CONFIG_BFIN_TRUE@ $(AM_V_CPPAS)$(CPPASCOMPILE) $(bfin_CPPFLAGS) -o $@ -c $< $(if $(findstring mcpu=,$(CFLAGS)),-mcpu=bf608-any,-mcpu=bf608-none) @CONFIG_BFIN_TRUE@bfin/basiccrt60xs.$(OBJEXT): bfin/basiccrt.S -@CONFIG_BFIN_TRUE@ $(AM_V_CC)$(COMPILE) $(bfin_CPPFLAGS) -o $@ -c $< $(if $(findstring mcpu=,$(CFLAGS)),-mcpu=bf608-any,-mcpu=bf608-none) -D__BFIN_SDRAM +@CONFIG_BFIN_TRUE@ $(AM_V_CPPAS)$(CPPASCOMPILE) $(bfin_CPPFLAGS) -o $@ -c $< $(if $(findstring mcpu=,$(CFLAGS)),-mcpu=bf608-any,-mcpu=bf608-none) -D__BFIN_SDRAM @CONFIG_BFIN_TRUE@bfin/basiccrt60xc1.$(OBJEXT): bfin/basiccrt.S -@CONFIG_BFIN_TRUE@ $(AM_V_CC)$(COMPILE) $(bfin_CPPFLAGS) -o $@ -c $< $(if $(findstring mcpu=,$(CFLAGS)),-mcpu=bf608-any,-mcpu=bf608-none) -D__ADSPBF60x_CORE1__ +@CONFIG_BFIN_TRUE@ $(AM_V_CPPAS)$(CPPASCOMPILE) $(bfin_CPPFLAGS) -o $@ -c $< $(if $(findstring mcpu=,$(CFLAGS)),-mcpu=bf608-any,-mcpu=bf608-none) -D__ADSPBF60x_CORE1__ +@CONFIG_MCORE_TRUE@@MCORE_BUILD_ELF_TRUE@mcore/cmb.ld: mcore/elf-cmb.ld +@CONFIG_MCORE_TRUE@@MCORE_BUILD_ELF_TRUE@ $(AM_V_GEN)cp $< $@ +@CONFIG_MCORE_TRUE@@MCORE_BUILD_ELF_TRUE@mcore/cmb.specs: mcore/elf-cmb.specs +@CONFIG_MCORE_TRUE@@MCORE_BUILD_ELF_TRUE@ $(AM_V_GEN)cp $< $@ +@CONFIG_MCORE_TRUE@@MCORE_BUILD_PE_TRUE@mcore/cmb.ld: mcore/pe-cmb.ld +@CONFIG_MCORE_TRUE@@MCORE_BUILD_PE_TRUE@ $(AM_V_GEN)cp $< $@ +@CONFIG_MCORE_TRUE@@MCORE_BUILD_PE_TRUE@mcore/cmb.specs: mcore/pe-cmb.specs +@CONFIG_MCORE_TRUE@@MCORE_BUILD_PE_TRUE@ $(AM_V_GEN)cp $< $@ +@CONFIG_SPARC_TRUE@@SPARC_BUILD_CYGMON_TRUE@sparc/cygmon.ld: $(srcdir)/sparc/@SPARC_CYGMONLDSCRIPTTEMPL@ sparc/Makefile.inc +@CONFIG_SPARC_TRUE@@SPARC_BUILD_CYGMON_TRUE@ $(AM_V_GEN)sed 's/TARGET_OBJ_FORMAT/$(sparc_$(SPARC_CPU)_OBJ_FORMAT)/g;s/TARGET_RAM_START/$(sparc_$(SPARC_CPU)_RAM_START)/g;' < $< > $@ + +# check_PROGRAMS += sparc/dtor +# sparc_ex934_test_SOURCES = sparc/dtor.C +# sparc_ex934_test_LDFLAGS = $(AM_LDFLAGS) -N -Wl,-T$(srcdir)/sparc/elfsim.ld -nostdlib +@CONFIG_XSTORMY16_TRUE@xstormy16/eva_stub.hex: xstormy16/eva_stub.elf +@CONFIG_XSTORMY16_TRUE@ $(AM_V_GEN)$(OBJCOPY) -O ihex $< $@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. diff --git a/libgloss/aarch64/Makefile.in b/libgloss/aarch64/Makefile.in deleted file mode 100644 index e84aa6927a..0000000000 --- a/libgloss/aarch64/Makefile.in +++ /dev/null @@ -1,224 +0,0 @@ -# Copyright (c) 2012 ARM Ltd. All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# 3. The name of the company may not be used to endorse or promote -# products derived from this software without specific prior written -# permission. -# -# THIS SOFTWARE IS PROVIDED BY ARM LTD ``AS IS'' AND ANY EXPRESS OR IMPLIED -# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -# IN NO EVENT SHALL ARM LTD BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED -# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -DESTDIR = -VPATH = @srcdir@ @srcdir@/.. -srcdir = @srcdir@ -objdir = . -srcroot = $(srcdir)/../.. -objroot = $(objdir)/../.. - -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -host_alias = @host_alias@ -target_alias = @target_alias@ - -bindir = @bindir@ -libdir = @libdir@ -tooldir = $(exec_prefix)/$(target_alias) - -objtype = @objtype@ - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -# Multilib support variables. -# TOP is used instead of MULTI{BUILD,SRC}TOP. -MULTISRCTOP = -MULTIBUILDTOP = -MULTIDIRS = -MULTISUBDIR = -MULTILIBNAME = -MULTIDO = true -MULTICLEAN = true -MULTI_FLAGS_FOR_TARGET = MULTI_DEFAULT_FLAGS -MULTI_DEFAULT_FLAGS = -DSEMIHOST_V2 - -SHELL = /bin/sh - -mkinstalldirs = $(SHELL) $(srcroot)/mkinstalldirs - -CC = @CC@ - -AS = @AS@ -AR = @AR@ -LD = @LD@ -RANLIB = @RANLIB@ - -SUBDIRS = @subdirs@ - -OBJDUMP = `if [ -f ${objroot}/../binutils/objdump ] ; \ - then echo ${objroot}/../binutils/objdump ; \ - else t='$(program_transform_name)'; echo objdump | sed -e $$t ; fi` -OBJCOPY = `if [ -f ${objroot}/../binutils/objcopy ] ; \ - then echo ${objroot}/../binutils/objcopy ; \ - else t='$(program_transform_name)'; echo objcopy | sed -e $$t ; fi` - -OBJS = ftruncate.o libcfunc.o syscalls.o truncate.o _exit.o _kill.o -CRT0 = crt0.o -CRT0_INSTALL = install-crt0 - -RDIMON_CRT0 = rdimon-crt0${${MULTILIBNAME}}.o -RDIMON_BSP = librdimon${${MULTILIBNAME}}.a -RDIMON_OBJS = $(patsubst %,rdimon-%,$(OBJS)) -RDIMON_SCRIPTS = rdimon${${MULTILIBNAME}}.specs \ - aem-ve${${MULTILIBNAME}}.specs \ - aem-validation${${MULTILIBNAME}}.specs \ - aem-v8-r${${MULTILIBNAME}}.specs -RDIMON_INSTALL = install-rdimon - -CFLAGS = -g - -# Host specific makefile fragment comes in here. -@host_makefile_frag@ - -# -# build a test program for each target board. Just trying to get -# it to link is a good test, so we ignore all the errors for now. -# - -all: ${CRT0} ${RDIMON_CRT0} ${RDIMON_BSP} ${RDIMON_SCRIPTS} - @rootpre=`pwd`/; export rootpre; \ - srcrootpre=`cd $(srcdir); pwd`/; export srcrootpre; \ - for dir in .. ${SUBDIRS}; do \ - if [ x$$dir != x.. ]; then \ - if [ -d $$dir ]; then \ - (cd $$dir; $(MAKE) $(FLAGS_TO_PASS)); \ - else true; fi; \ - else true; fi; \ - done - $(MAKE) $(AM_MAKEFLAGS) all-recursive - -# -# here's where we build the test programs for each target -# -.PHONY: test -test: - -# -crt0.o: crt0.S - $(CC) $(CFLAGS_FOR_TARGET) $($(MULTI_FLAGS_FOR_TARGET)) $(CFLAGS) $(INCLUDES) -o $@ -c $< - -rdimon-crt0${${MULTILIBNAME}}.o: crt0.S - $(CC) $(CFLAGS_FOR_TARGET) $($(MULTI_FLAGS_FOR_TARGET)) $(CFLAGS) $(INCLUDES) -DARM_RDI_MONITOR -o $@ -c $< - -#rdimon-trap.o: trap.S -# $(CC) $(CFLAGS_FOR_TARGET) $($(MULTI_FLAGS_FOR_TARGET)) $(CFLAGS) $(INCLUDES) -DARM_RDI_MONITOR -o $@ -c $< - -rdimon-_exit.o: _exit.c - $(CC) $(CFLAGS_FOR_TARGET) $($(MULTI_FLAGS_FOR_TARGET)) $(CFLAGS) $(INCLUDES) -DARM_RDI_MONITOR -o $@ -c $< - -rdimon-ftruncate.o: ftruncate.c - $(CC) $(CFLAGS_FOR_TARGET) $($(MULTI_FLAGS_FOR_TARGET)) $(CFLAGS) $(INCLUDES) -DARM_RDI_MONITOR -o $@ -c $< - -rdimon-_kill.o: _kill.c - $(CC) $(CFLAGS_FOR_TARGET) $($(MULTI_FLAGS_FOR_TARGET)) $(CFLAGS) $(INCLUDES) -DARM_RDI_MONITOR -o $@ -c $< - -rdimon-libcfunc.o: libcfunc.c - $(CC) $(CFLAGS_FOR_TARGET) $($(MULTI_FLAGS_FOR_TARGET)) $(CFLAGS) $(INCLUDES) -DARM_RDI_MONITOR -o $@ -c $< - -rdimon-syscalls.o: syscalls.c - $(CC) $(CFLAGS_FOR_TARGET) $($(MULTI_FLAGS_FOR_TARGET)) $(CFLAGS) $(INCLUDES) -DARM_RDI_MONITOR -o $@ -c $< - -rdimon-truncate.o: truncate.c - $(CC) $(CFLAGS_FOR_TARGET) $($(MULTI_FLAGS_FOR_TARGET)) $(CFLAGS) $(INCLUDES) -DARM_RDI_MONITOR -o $@ -c $< - -$(RDIMON_BSP): $(RDIMON_OBJS) - ${AR} ${ARFLAGS} $@ $^ - ${RANLIB} $@ - -# Multilib support. -.PHONY: libgloss-multi-do all-multi clean-multi install-multi - -all-recursive: all-multi -clean-recursive: clean-multi -install-recursive: install-multi - -# The $(MAKE) comments below are to enable parallel building. -all-multi: - $(MAKE) $(AM_MAKEFLAGS) DO=all libgloss-multi-do - -clean-multi: - $(MAKE) $(AM_MAKEFLAGS) DO=clean libgloss-multi-do - -install-multi: - $(MAKE) $(AM_MAKEFLAGS) DO=install libgloss-multi-do - -clean mostlyclean: - rm -f a.out core *.i *.o *-test *.srec *.dis *.x $(SIM_BSP) ${RDIMON_SCRIPTS} - @rootpre=`pwd`/; export rootpre; \ - srcrootpre=`cd $(srcdir); pwd`/; export srcrootpre; \ - for dir in .. ${SUBDIRS}; do \ - if [ x$$dir != x.. ]; then \ - if [ -d $$dir ]; then \ - (cd $$dir; $(MAKE) $(FLAGS_TO_PASS) clean); \ - else true; fi; \ - else true; fi; \ - done - $(MAKE) $(AM_MAKEFLAGS) clean-recursive - -distclean maintainer-clean realclean: clean - rm -f Makefile config.status *~ - -.PHONY: install info install-info clean-info -install: ${CRT0_INSTALL} ${RDIMON_INSTALL} - @rootpre=`pwd`/; export rootpre; \ - srcrootpre=`cd $(srcdir); pwd`/; export srcrootpre; \ - for dir in .. ${SUBDIRS}; do \ - if [ x$$dir != x.. ]; then \ - if [ -d $$dir ]; then \ - (cd $$dir; $(MAKE) $(FLAGS_TO_PASS) install); \ - else true; fi; \ - else true; fi; \ - done - $(MAKE) $(AM_MAKEFLAGS) install-recursive - -install-crt0: - ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR} - ${INSTALL_DATA} ${CRT0} $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x - -install-rdimon: - ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR} - set -e; for x in ${RDIMON_CRT0} ${RDIMON_BSP}; do ${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done - set -e; for x in ${RDIMON_SCRIPTS}; do ${INSTALL_DATA} ${srcdir}/${objtype}$$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done - -# Make copies of the scripts to facilitate in-tree bootstrapping. -${RDIMON_SCRIPTS}: %: ${objtype}% - cp $< $@ - -doc: -info: -install-info: -clean-info: - -Makefile: Makefile.in config.status @host_makefile_frag_path@ - $(SHELL) config.status - -config.status: configure - $(SHELL) config.status --recheck - -include $(srcdir)/../multi-build.in diff --git a/libgloss/aarch64/Makefile.inc b/libgloss/aarch64/Makefile.inc new file mode 100644 index 0000000000..b9c8d98336 --- /dev/null +++ b/libgloss/aarch64/Makefile.inc @@ -0,0 +1,34 @@ +multilibtool_LIBRARIES += %D%/librdimon.a +%C%_librdimon_a_SOURCES = \ + %D%/_exit.c \ + %D%/_kill.c \ + %D%/ftruncate.c \ + %D%/libcfunc.c \ + %D%/syscalls.c \ + %D%/truncate.c +%C%_librdimon_a_CPPFLAGS = \ + $(AM_CPPFLAGS) \ + -DSEMIHOST_V2 -DARM_RDI_MONITOR + +%C%_SPECS = \ + %D%/aem-v8-r.specs \ + %D%/aem-validation.specs \ + %D%/aem-ve.specs \ + %D%/rdimon.specs +multilibtool_DATA += \ + %D%/crt0.o \ + %D%/rdimon-crt0.o \ + $(%C%_SPECS) + +%D%/crt0.$(OBJEXT): %D%/crt0.S + $(AM_V_CPPAS)$(CPPASCOMPILE) -DSEMIHOST_V2 -o $@ -c $< +%D%/rdimon-crt0.$(OBJEXT): %D%/crt0.S + $(AM_V_CPPAS)$(CPPASCOMPILE) -DSEMIHOST_V2 -DARM_RDI_MONITOR -o $@ -c $< + +## Make copies of the scripts to facilitate in-tree bootstrapping. +%D%/%.specs: %D%/$(AARCH64_OBJTYPE)%.specs + $(AM_V_GEN)cp $< $@ + +CLEANFILES += $(%C%_SPECS) + +include %D%/cpu-init/Makefile.inc diff --git a/libgloss/aarch64/acinclude.m4 b/libgloss/aarch64/acinclude.m4 new file mode 100644 index 0000000000..df08e871a1 --- /dev/null +++ b/libgloss/aarch64/acinclude.m4 @@ -0,0 +1,7 @@ +AARCH64_OBJTYPE= +case "${target}" in + *-*-elf) + AARCH64_OBJTYPE=elf- + ;; +esac +AC_SUBST(AARCH64_OBJTYPE) diff --git a/libgloss/aarch64/aclocal.m4 b/libgloss/aarch64/aclocal.m4 deleted file mode 100644 index 36a6b1f3af..0000000000 --- a/libgloss/aarch64/aclocal.m4 +++ /dev/null @@ -1,546 +0,0 @@ -# generated automatically by aclocal 1.15.1 -*- Autoconf -*- - -# Copyright (C) 1996-2017 Free Software Foundation, Inc. - -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) -# Copyright (C) 2011-2017 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_PROG_AR([ACT-IF-FAIL]) -# ------------------------- -# Try to determine the archiver interface, and trigger the ar-lib wrapper -# if it is needed. If the detection of archiver interface fails, run -# ACT-IF-FAIL (default is to abort configure with a proper error message). -AC_DEFUN([AM_PROG_AR], -[AC_BEFORE([$0], [LT_INIT])dnl -AC_BEFORE([$0], [AC_PROG_LIBTOOL])dnl -AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -AC_REQUIRE_AUX_FILE([ar-lib])dnl -AC_CHECK_TOOLS([AR], [ar lib "link -lib"], [false]) -: ${AR=ar} - -AC_CACHE_CHECK([the archiver ($AR) interface], [am_cv_ar_interface], - [AC_LANG_PUSH([C]) - am_cv_ar_interface=ar - AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int some_variable = 0;]])], - [am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&AS_MESSAGE_LOG_FD' - AC_TRY_EVAL([am_ar_try]) - if test "$ac_status" -eq 0; then - am_cv_ar_interface=ar - else - am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&AS_MESSAGE_LOG_FD' - AC_TRY_EVAL([am_ar_try]) - if test "$ac_status" -eq 0; then - am_cv_ar_interface=lib - else - am_cv_ar_interface=unknown - fi - fi - rm -f conftest.lib libconftest.a - ]) - AC_LANG_POP([C])]) - -case $am_cv_ar_interface in -ar) - ;; -lib) - # Microsoft lib, so override with the ar-lib wrapper script. - # FIXME: It is wrong to rewrite AR. - # But if we don't then we get into trouble of one sort or another. - # A longer-term fix would be to have automake use am__AR in this case, - # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something - # similar. - AR="$am_aux_dir/ar-lib $AR" - ;; -unknown) - m4_default([$1], - [AC_MSG_ERROR([could not determine $AR interface])]) - ;; -esac -AC_SUBST([AR])dnl -]) - -# Figure out how to run the assembler. -*- Autoconf -*- - -# Copyright (C) 2001-2017 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_PROG_AS -# ---------- -AC_DEFUN([AM_PROG_AS], -[# By default we simply use the C compiler to build assembly code. -AC_REQUIRE([AC_PROG_CC]) -test "${CCAS+set}" = set || CCAS=$CC -test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS -AC_ARG_VAR([CCAS], [assembler compiler command (defaults to CC)]) -AC_ARG_VAR([CCASFLAGS], [assembler compiler flags (defaults to CFLAGS)]) -_AM_IF_OPTION([no-dependencies],, [_AM_DEPENDENCIES([CCAS])])dnl -]) - -# AM_AUX_DIR_EXPAND -*- Autoconf -*- - -# Copyright (C) 2001-2017 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets -# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to -# '$srcdir', '$srcdir/..', or '$srcdir/../..'. -# -# Of course, Automake must honor this variable whenever it calls a -# tool from the auxiliary directory. The problem is that $srcdir (and -# therefore $ac_aux_dir as well) can be either absolute or relative, -# depending on how configure is run. This is pretty annoying, since -# it makes $ac_aux_dir quite unusable in subdirectories: in the top -# source directory, any form will work fine, but in subdirectories a -# relative path needs to be adjusted first. -# -# $ac_aux_dir/missing -# fails when called from a subdirectory if $ac_aux_dir is relative -# $top_srcdir/$ac_aux_dir/missing -# fails if $ac_aux_dir is absolute, -# fails when called from a subdirectory in a VPATH build with -# a relative $ac_aux_dir -# -# The reason of the latter failure is that $top_srcdir and $ac_aux_dir -# are both prefixed by $srcdir. In an in-source build this is usually -# harmless because $srcdir is '.', but things will broke when you -# start a VPATH build or use an absolute $srcdir. -# -# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, -# iff we strip the leading $srcdir from $ac_aux_dir. That would be: -# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` -# and then we would define $MISSING as -# MISSING="\${SHELL} $am_aux_dir/missing" -# This will work as long as MISSING is not called from configure, because -# unfortunately $(top_srcdir) has no meaning in configure. -# However there are other variables, like CC, which are often used in -# configure, and could therefore not use this "fixed" $ac_aux_dir. -# -# Another solution, used here, is to always expand $ac_aux_dir to an -# absolute PATH. The drawback is that using absolute paths prevent a -# configured tree to be moved without reconfiguration. - -AC_DEFUN([AM_AUX_DIR_EXPAND], -[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl -# Expand $ac_aux_dir to an absolute path. -am_aux_dir=`cd "$ac_aux_dir" && pwd` -]) - -# AM_CONDITIONAL -*- Autoconf -*- - -# Copyright (C) 1997-2017 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_CONDITIONAL(NAME, SHELL-CONDITION) -# ------------------------------------- -# Define a conditional. -AC_DEFUN([AM_CONDITIONAL], -[AC_PREREQ([2.52])dnl - m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], - [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl -AC_SUBST([$1_TRUE])dnl -AC_SUBST([$1_FALSE])dnl -_AM_SUBST_NOTMAKE([$1_TRUE])dnl -_AM_SUBST_NOTMAKE([$1_FALSE])dnl -m4_define([_AM_COND_VALUE_$1], [$2])dnl -if $2; then - $1_TRUE= - $1_FALSE='#' -else - $1_TRUE='#' - $1_FALSE= -fi -AC_CONFIG_COMMANDS_PRE( -[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then - AC_MSG_ERROR([[conditional "$1" was never defined. -Usually this means the macro was only invoked conditionally.]]) -fi])]) - -# Copyright (C) 1999-2017 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - - -# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be -# written in clear, in which case automake, when reading aclocal.m4, -# will think it sees a *use*, and therefore will trigger all it's -# C support machinery. Also note that it means that autoscan, seeing -# CC etc. in the Makefile, will ask for an AC_PROG_CC use... - - -# _AM_DEPENDENCIES(NAME) -# ---------------------- -# See how the compiler implements dependency checking. -# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". -# We try a few techniques and use that to set a single cache variable. -# -# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was -# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular -# dependency, and given that the user is not expected to run this macro, -# just rely on AC_PROG_CC. -AC_DEFUN([_AM_DEPENDENCIES], -[AC_REQUIRE([AM_SET_DEPDIR])dnl -AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl -AC_REQUIRE([AM_MAKE_INCLUDE])dnl -AC_REQUIRE([AM_DEP_TRACK])dnl - -m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], - [$1], [CXX], [depcc="$CXX" am_compiler_list=], - [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], - [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], - [$1], [UPC], [depcc="$UPC" am_compiler_list=], - [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], - [depcc="$$1" am_compiler_list=]) - -AC_CACHE_CHECK([dependency style of $depcc], - [am_cv_$1_dependencies_compiler_type], -[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named 'D' -- because '-MD' means "put the output - # in D". - rm -rf conftest.dir - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_$1_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` - fi - am__universal=false - m4_case([$1], [CC], - [case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac], - [CXX], - [case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac]) - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with - # Solaris 10 /bin/sh. - echo '/* dummy */' > sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with '-c' and '-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle '-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs. - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # After this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested. - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvc7 | msvc7msys | msvisualcpp | msvcmsys) - # This compiler won't grok '-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_$1_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_$1_dependencies_compiler_type=none -fi -]) -AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) -AM_CONDITIONAL([am__fastdep$1], [ - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) -]) - - -# AM_SET_DEPDIR -# ------------- -# Choose a directory name for dependency files. -# This macro is AC_REQUIREd in _AM_DEPENDENCIES. -AC_DEFUN([AM_SET_DEPDIR], -[AC_REQUIRE([AM_SET_LEADING_DOT])dnl -AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl -]) - - -# AM_DEP_TRACK -# ------------ -AC_DEFUN([AM_DEP_TRACK], -[AC_ARG_ENABLE([dependency-tracking], [dnl -AS_HELP_STRING( - [--enable-dependency-tracking], - [do not reject slow dependency extractors]) -AS_HELP_STRING( - [--disable-dependency-tracking], - [speeds up one-time build])]) -if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' - am__nodep='_no' -fi -AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) -AC_SUBST([AMDEPBACKSLASH])dnl -_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl -AC_SUBST([am__nodep])dnl -_AM_SUBST_NOTMAKE([am__nodep])dnl -]) - -# Generate code to set up dependency tracking. -*- Autoconf -*- - -# Copyright (C) 1999-2017 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - - -# _AM_OUTPUT_DEPENDENCY_COMMANDS -# ------------------------------ -AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], -[{ - # Older Autoconf quotes --file arguments for eval, but not when files - # are listed without --file. Let's play safe and only enable the eval - # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac - shift - for mf - do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named 'Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`AS_DIRNAME("$mf")` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running 'make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "$am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`AS_DIRNAME(["$file"])` - AS_MKDIR_P([$dirpart/$fdir]) - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done - done -} -])# _AM_OUTPUT_DEPENDENCY_COMMANDS - - -# AM_OUTPUT_DEPENDENCY_COMMANDS -# ----------------------------- -# This macro should only be invoked once -- use via AC_REQUIRE. -# -# This code is only required when automatic dependency tracking -# is enabled. FIXME. This creates each '.P' file that we will -# need in order to bootstrap the dependency handling code. -AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], -[AC_CONFIG_COMMANDS([depfiles], - [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], - [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) -]) - -# Check to see how 'make' treats includes. -*- Autoconf -*- - -# Copyright (C) 2001-2017 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_MAKE_INCLUDE() -# ----------------- -# Check to see how make treats includes. -AC_DEFUN([AM_MAKE_INCLUDE], -[am_make=${MAKE-make} -cat > confinc << 'END' -am__doit: - @echo this is the am__doit target -.PHONY: am__doit -END -# If we don't find an include directive, just comment out the code. -AC_MSG_CHECKING([for style of include used by $am_make]) -am__include="#" -am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from 'make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD - ;; - esac -fi -AC_SUBST([am__include]) -AC_SUBST([am__quote]) -AC_MSG_RESULT([$_am_result]) -rm -f confinc confmf -]) - -# Helper functions for option handling. -*- Autoconf -*- - -# Copyright (C) 2001-2017 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# _AM_MANGLE_OPTION(NAME) -# ----------------------- -AC_DEFUN([_AM_MANGLE_OPTION], -[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) - -# _AM_SET_OPTION(NAME) -# -------------------- -# Set option NAME. Presently that only means defining a flag for this option. -AC_DEFUN([_AM_SET_OPTION], -[m4_define(_AM_MANGLE_OPTION([$1]), [1])]) - -# _AM_SET_OPTIONS(OPTIONS) -# ------------------------ -# OPTIONS is a space-separated list of Automake options. -AC_DEFUN([_AM_SET_OPTIONS], -[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) - -# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) -# ------------------------------------------- -# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. -AC_DEFUN([_AM_IF_OPTION], -[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) - -# Copyright (C) 2006-2017 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# _AM_SUBST_NOTMAKE(VARIABLE) -# --------------------------- -# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. -# This macro is traced by Automake. -AC_DEFUN([_AM_SUBST_NOTMAKE]) - -# AM_SUBST_NOTMAKE(VARIABLE) -# -------------------------- -# Public sister of _AM_SUBST_NOTMAKE. -AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) - -m4_include([../../config/depstand.m4]) -m4_include([../../config/lead-dot.m4]) -m4_include([../../config/multi.m4]) -m4_include([../../config/override.m4]) diff --git a/libgloss/aarch64/configure b/libgloss/aarch64/configure deleted file mode 100755 index 4408ef6c34..0000000000 --- a/libgloss/aarch64/configure +++ /dev/null @@ -1,4784 +0,0 @@ -#! /bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69. -# -# -# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. -# -# -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -as_myself= -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -# Use a proper internal environment variable to ensure we don't fall - # into an infinite loop, continuously re-executing ourselves. - if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then - _as_can_reexec=no; export _as_can_reexec; - # We cannot yet assume a decent shell, so we have to provide a -# neutralization value for shells without unset; and this also -# works around shells that cannot unset nonexistent variables. -# Preserve -v and -x to the replacement shell. -BASH_ENV=/dev/null -ENV=/dev/null -(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV -case $- in # (((( - *v*x* | *x*v* ) as_opts=-vx ;; - *v* ) as_opts=-v ;; - *x* ) as_opts=-x ;; - * ) as_opts= ;; -esac -exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} -# Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 -as_fn_exit 255 - fi - # We don't want this to propagate to other subprocesses. - { _as_can_reexec=; unset _as_can_reexec;} -if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi -" - as_required="as_fn_return () { (exit \$1); } -as_fn_success () { as_fn_return 0; } -as_fn_failure () { as_fn_return 1; } -as_fn_ret_success () { return 0; } -as_fn_ret_failure () { return 1; } - -exitcode=0 -as_fn_success || { exitcode=1; echo as_fn_success failed.; } -as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } -as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } -as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : - -else - exitcode=1; echo positional parameters were not saved. -fi -test x\$exitcode = x0 || exit 1 -test -x / || exit 1" - as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO - as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO - eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && - test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1" - if (eval "$as_required") 2>/dev/null; then : - as_have_required=yes -else - as_have_required=no -fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : - -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_found=false -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - as_found=: - case $as_dir in #( - /*) - for as_base in sh bash ksh sh5; do - # Try only shells that exist, to save several forks. - as_shell=$as_dir/$as_base - if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : - CONFIG_SHELL=$as_shell as_have_required=yes - if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : - break 2 -fi -fi - done;; - esac - as_found=false -done -$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi; } -IFS=$as_save_IFS - - - if test "x$CONFIG_SHELL" != x; then : - export CONFIG_SHELL - # We cannot yet assume a decent shell, so we have to provide a -# neutralization value for shells without unset; and this also -# works around shells that cannot unset nonexistent variables. -# Preserve -v and -x to the replacement shell. -BASH_ENV=/dev/null -ENV=/dev/null -(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV -case $- in # (((( - *v*x* | *x*v* ) as_opts=-vx ;; - *v* ) as_opts=-v ;; - *x* ) as_opts=-x ;; - * ) as_opts= ;; -esac -exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} -# Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 -exit 255 -fi - - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." - else - $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, -$0: including any error possibly output before this -$0: message. Then install a modern shell, or manually run -$0: the script under such a shell if you do have one." - fi - exit 1 -fi -fi -fi -SHELL=${CONFIG_SHELL-/bin/sh} -export SHELL -# Unset more variables known to interfere with behavior of common tools. -CLICOLOR_FORCE= GREP_OPTIONS= -unset CLICOLOR_FORCE GREP_OPTIONS - -## --------------------- ## -## M4sh Shell Functions. ## -## --------------------- ## -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p - -# as_fn_executable_p FILE -# ----------------------- -# Test if FILE is an executable regular file. -as_fn_executable_p () -{ - test -f "$1" && test -x "$1" -} # as_fn_executable_p -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - - - as_lineno_1=$LINENO as_lineno_1a=$LINENO - as_lineno_2=$LINENO as_lineno_2a=$LINENO - eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && - test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { - # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } - - # If we had to re-execute with $CONFIG_SHELL, we're ensured to have - # already done that, so ensure we don't try to do so again and fall - # in an infinite loop. This has already happened in practice. - _as_can_reexec=no; export _as_can_reexec - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -pR'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -pR' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -pR' - fi -else - as_ln_s='cp -pR' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -as_test_x='test -x' -as_executable_p=as_fn_executable_p - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -test -n "$DJDIR" || exec 7<&0 &1 - -# Name of the host. -# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, -# so uname gets run too. -ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` - -# -# Initializations. -# -ac_default_prefix=/usr/local -ac_clean_files= -ac_config_libobj_dir=. -LIBOBJS= -cross_compiling=no -subdirs= -MFLAGS= -MAKEFLAGS= - -# Identity of this package. -PACKAGE_NAME= -PACKAGE_TARNAME= -PACKAGE_VERSION= -PACKAGE_STRING= -PACKAGE_BUGREPORT= -PACKAGE_URL= - -ac_unique_file="crt0.S" -ac_no_link=no -ac_subst_vars='LTLIBOBJS -LIBOBJS -multi_basedir -subdirs -host_makefile_frag_path -objtype -RANLIB -LD -ac_ct_AR -AR -am__fastdepCCAS_FALSE -am__fastdepCCAS_TRUE -CCASDEPMODE -am__nodep -AMDEPBACKSLASH -AMDEP_FALSE -AMDEP_TRUE -am__quote -am__include -DEPDIR -am__leading_dot -CCASFLAGS -CCAS -OBJEXT -EXEEXT -ac_ct_CC -CPPFLAGS -LDFLAGS -CFLAGS -CC -INSTALL_DATA -INSTALL_SCRIPT -INSTALL_PROGRAM -target_os -target_vendor -target_cpu -target -host_os -host_vendor -host_cpu -host -build_os -build_vendor -build_cpu -build -target_alias -host_alias -build_alias -LIBS -ECHO_T -ECHO_N -ECHO_C -DEFS -mandir -localedir -libdir -psdir -pdfdir -dvidir -htmldir -infodir -docdir -oldincludedir -includedir -localstatedir -sharedstatedir -sysconfdir -datadir -datarootdir -libexecdir -sbindir -bindir -program_transform_name -prefix -exec_prefix -PACKAGE_URL -PACKAGE_BUGREPORT -PACKAGE_STRING -PACKAGE_VERSION -PACKAGE_TARNAME -PACKAGE_NAME -PATH_SEPARATOR -SHELL' -ac_subst_files='host_makefile_frag' -ac_user_opts=' -enable_option_checking -enable_dependency_tracking -enable_multilib -' - ac_precious_vars='build_alias -host_alias -target_alias -CC -CFLAGS -LDFLAGS -LIBS -CPPFLAGS -CCAS -CCASFLAGS' - - -# Initialize some variables set by options. -ac_init_help= -ac_init_version=false -ac_unrecognized_opts= -ac_unrecognized_sep= -# The variables have the same names as the options, with -# dashes changed to underlines. -cache_file=/dev/null -exec_prefix=NONE -no_create= -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -verbose= -x_includes=NONE -x_libraries=NONE - -# Installation directory options. -# These are left unexpanded so users can "make install exec_prefix=/foo" -# and all the variables that are supposed to be based on exec_prefix -# by default will actually change. -# Use braces instead of parens because sh, perl, etc. also accept them. -# (The list follows the same order as the GNU Coding Standards.) -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datarootdir='${prefix}/share' -datadir='${datarootdir}' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -includedir='${prefix}/include' -oldincludedir='/usr/include' -docdir='${datarootdir}/doc/${PACKAGE}' -infodir='${datarootdir}/info' -htmldir='${docdir}' -dvidir='${docdir}' -pdfdir='${docdir}' -psdir='${docdir}' -libdir='${exec_prefix}/lib' -localedir='${datarootdir}/locale' -mandir='${datarootdir}/man' - -ac_prev= -ac_dashdash= -for ac_option -do - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval $ac_prev=\$ac_option - ac_prev= - continue - fi - - case $ac_option in - *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; - *=) ac_optarg= ;; - *) ac_optarg=yes ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case $ac_dashdash$ac_option in - --) - ac_dashdash=yes ;; - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir=$ac_optarg ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build_alias ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build_alias=$ac_optarg ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file=$ac_optarg ;; - - --config-cache | -C) - cache_file=config.cache ;; - - -datadir | --datadir | --datadi | --datad) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=*) - datadir=$ac_optarg ;; - - -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ - | --dataroo | --dataro | --datar) - ac_prev=datarootdir ;; - -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ - | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) - datarootdir=$ac_optarg ;; - - -disable-* | --disable-*) - ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=no ;; - - -docdir | --docdir | --docdi | --doc | --do) - ac_prev=docdir ;; - -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) - docdir=$ac_optarg ;; - - -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) - ac_prev=dvidir ;; - -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) - dvidir=$ac_optarg ;; - - -enable-* | --enable-*) - ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=\$ac_optarg ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix=$ac_optarg ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he | -h) - ac_init_help=long ;; - -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) - ac_init_help=recursive ;; - -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) - ac_init_help=short ;; - - -host | --host | --hos | --ho) - ac_prev=host_alias ;; - -host=* | --host=* | --hos=* | --ho=*) - host_alias=$ac_optarg ;; - - -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) - ac_prev=htmldir ;; - -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ - | --ht=*) - htmldir=$ac_optarg ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir=$ac_optarg ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir=$ac_optarg ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir=$ac_optarg ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir=$ac_optarg ;; - - -localedir | --localedir | --localedi | --localed | --locale) - ac_prev=localedir ;; - -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) - localedir=$ac_optarg ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst | --locals) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) - localstatedir=$ac_optarg ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir=$ac_optarg ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c | -n) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir=$ac_optarg ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix=$ac_optarg ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix=$ac_optarg ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix=$ac_optarg ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name=$ac_optarg ;; - - -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) - ac_prev=pdfdir ;; - -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) - pdfdir=$ac_optarg ;; - - -psdir | --psdir | --psdi | --psd | --ps) - ac_prev=psdir ;; - -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) - psdir=$ac_optarg ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir=$ac_optarg ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir=$ac_optarg ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site=$ac_optarg ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir=$ac_optarg ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir=$ac_optarg ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target_alias ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target_alias=$ac_optarg ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers | -V) - ac_init_version=: ;; - - -with-* | --with-*) - ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=\$ac_optarg ;; - - -without-* | --without-*) - ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=no ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes=$ac_optarg ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries=$ac_optarg ;; - - -*) as_fn_error $? "unrecognized option: \`$ac_option' -Try \`$0 --help' for more information" - ;; - - *=*) - ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` - # Reject names that are not valid shell variable names. - case $ac_envvar in #( - '' | [0-9]* | *[!_$as_cr_alnum]* ) - as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; - esac - eval $ac_envvar=\$ac_optarg - export $ac_envvar ;; - - *) - # FIXME: should be removed in autoconf 3.0. - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" - ;; - - esac -done - -if test -n "$ac_prev"; then - ac_option=--`echo $ac_prev | sed 's/_/-/g'` - as_fn_error $? "missing argument to $ac_option" -fi - -if test -n "$ac_unrecognized_opts"; then - case $enable_option_checking in - no) ;; - fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; - *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; - esac -fi - -# Check all directory arguments for consistency. -for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ - datadir sysconfdir sharedstatedir localstatedir includedir \ - oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir -do - eval ac_val=\$$ac_var - # Remove trailing slashes. - case $ac_val in - */ ) - ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` - eval $ac_var=\$ac_val;; - esac - # Be sure to have absolute directory names. - case $ac_val in - [\\/$]* | ?:[\\/]* ) continue;; - NONE | '' ) case $ac_var in *prefix ) continue;; esac;; - esac - as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" -done - -# There might be people who depend on the old broken behavior: `$host' -# used to hold the argument of --host etc. -# FIXME: To remove some day. -build=$build_alias -host=$host_alias -target=$target_alias - -# FIXME: To remove some day. -if test "x$host_alias" != x; then - if test "x$build_alias" = x; then - cross_compiling=maybe - elif test "x$build_alias" != "x$host_alias"; then - cross_compiling=yes - fi -fi - -ac_tool_prefix= -test -n "$host_alias" && ac_tool_prefix=$host_alias- - -test "$silent" = yes && exec 6>/dev/null - - -ac_pwd=`pwd` && test -n "$ac_pwd" && -ac_ls_di=`ls -di .` && -ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - as_fn_error $? "working directory cannot be determined" -test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - as_fn_error $? "pwd does not report name of working directory" - - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then the parent directory. - ac_confdir=`$as_dirname -- "$as_myself" || -$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_myself" : 'X\(//\)[^/]' \| \ - X"$as_myself" : 'X\(//\)$' \| \ - X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_myself" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - srcdir=$ac_confdir - if test ! -r "$srcdir/$ac_unique_file"; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r "$srcdir/$ac_unique_file"; then - test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" -fi -ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" -ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" - pwd)` -# When building in place, set srcdir=. -if test "$ac_abs_confdir" = "$ac_pwd"; then - srcdir=. -fi -# Remove unnecessary trailing slashes from srcdir. -# Double slashes in file names in object file debugging info -# mess up M-x gdb in Emacs. -case $srcdir in -*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; -esac -for ac_var in $ac_precious_vars; do - eval ac_env_${ac_var}_set=\${${ac_var}+set} - eval ac_env_${ac_var}_value=\$${ac_var} - eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} - eval ac_cv_env_${ac_var}_value=\$${ac_var} -done - -# -# Report the --help message. -# -if test "$ac_init_help" = "long"; then - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat <<_ACEOF -\`configure' configures this package to adapt to many kinds of systems. - -Usage: $0 [OPTION]... [VAR=VALUE]... - -To assign environment variables (e.g., CC, CFLAGS...), specify them as -VAR=VALUE. See below for descriptions of some of the useful variables. - -Defaults for the options are specified in brackets. - -Configuration: - -h, --help display this help and exit - --help=short display options specific to this package - --help=recursive display the short help of all the included packages - -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking ...' messages - --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' - -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] - -Installation directories: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] - -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. - -For better control, use the options below. - -Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] - --datadir=DIR read-only architecture-independent data [DATAROOTDIR] - --infodir=DIR info documentation [DATAROOTDIR/info] - --localedir=DIR locale-dependent data [DATAROOTDIR/locale] - --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] -_ACEOF - - cat <<\_ACEOF - -Program names: - --program-prefix=PREFIX prepend PREFIX to installed program names - --program-suffix=SUFFIX append SUFFIX to installed program names - --program-transform-name=PROGRAM run sed PROGRAM on installed program names - -System types: - --build=BUILD configure for building on BUILD [guessed] - --host=HOST cross-compile to build programs to run on HOST [BUILD] - --target=TARGET configure for building compilers for TARGET [HOST] -_ACEOF -fi - -if test -n "$ac_init_help"; then - - cat <<\_ACEOF - -Optional Features: - --disable-option-checking ignore unrecognized --enable/--with options - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --enable-dependency-tracking - do not reject slow dependency extractors - --disable-dependency-tracking - speeds up one-time build - --enable-multilib build many library versions (default) - -Some influential environment variables: - CC C compiler command - CFLAGS C compiler flags - LDFLAGS linker flags, e.g. -L if you have libraries in a - nonstandard directory - LIBS libraries to pass to the linker, e.g. -l - CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if - you have headers in a nonstandard directory - CCAS assembler compiler command (defaults to CC) - CCASFLAGS assembler compiler flags (defaults to CFLAGS) - -Use these variables to override the choices made by `configure' or to help -it to find libraries and programs with nonstandard names/locations. - -Report bugs to the package provider. -_ACEOF -ac_status=$? -fi - -if test "$ac_init_help" = "recursive"; then - # If there are subdirs, report their specific --help. - for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d "$ac_dir" || - { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || - continue - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. - if test -f "$ac_srcdir/configure.gnu"; then - echo && - $SHELL "$ac_srcdir/configure.gnu" --help=recursive - elif test -f "$ac_srcdir/configure"; then - echo && - $SHELL "$ac_srcdir/configure" --help=recursive - else - $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi || ac_status=$? - cd "$ac_pwd" || { ac_status=$?; break; } - done -fi - -test -n "$ac_init_help" && exit $ac_status -if $ac_init_version; then - cat <<\_ACEOF -configure -generated by GNU Autoconf 2.69 - -Copyright (C) 2012 Free Software Foundation, Inc. -This configure script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it. -_ACEOF - exit -fi - -## ------------------------ ## -## Autoconf initialization. ## -## ------------------------ ## - -# ac_fn_c_try_compile LINENO -# -------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_compile -cat >config.log <<_ACEOF -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. - -It was created by $as_me, which was -generated by GNU Autoconf 2.69. Invocation command line was - - $ $0 $@ - -_ACEOF -exec 5>>config.log -{ -cat <<_ASUNAME -## --------- ## -## Platform. ## -## --------- ## - -hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` - -/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` -/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` - -_ASUNAME - -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - $as_echo "PATH: $as_dir" - done -IFS=$as_save_IFS - -} >&5 - -cat >&5 <<_ACEOF - - -## ----------- ## -## Core tests. ## -## ----------- ## - -_ACEOF - - -# Keep a trace of the command line. -# Strip out --no-create and --no-recursion so they do not pile up. -# Strip out --silent because we don't want to record it for future runs. -# Also quote any args containing shell meta-characters. -# Make two passes to allow for proper duplicate-argument suppression. -ac_configure_args= -ac_configure_args0= -ac_configure_args1= -ac_must_keep_next=false -for ac_pass in 1 2 -do - for ac_arg - do - case $ac_arg in - -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - continue ;; - *\'*) - ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - case $ac_pass in - 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; - 2) - as_fn_append ac_configure_args1 " '$ac_arg'" - if test $ac_must_keep_next = true; then - ac_must_keep_next=false # Got value, back to normal. - else - case $ac_arg in - *=* | --config-cache | -C | -disable-* | --disable-* \ - | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ - | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ - | -with-* | --with-* | -without-* | --without-* | --x) - case "$ac_configure_args0 " in - "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; - esac - ;; - -* ) ac_must_keep_next=true ;; - esac - fi - as_fn_append ac_configure_args " '$ac_arg'" - ;; - esac - done -done -{ ac_configure_args0=; unset ac_configure_args0;} -{ ac_configure_args1=; unset ac_configure_args1;} - -# When interrupted or exit'd, cleanup temporary files, and complete -# config.log. We remove comments because anyway the quotes in there -# would cause problems or look ugly. -# WARNING: Use '\'' to represent an apostrophe within the trap. -# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. -trap 'exit_status=$? - # Save into config.log some information that might help in debugging. - { - echo - - $as_echo "## ---------------- ## -## Cache variables. ## -## ---------------- ##" - echo - # The following way of writing the cache mishandles newlines in values, -( - for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - (set) 2>&1 | - case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - sed -n \ - "s/'\''/'\''\\\\'\'''\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" - ;; #( - *) - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) - echo - - $as_echo "## ----------------- ## -## Output variables. ## -## ----------------- ##" - echo - for ac_var in $ac_subst_vars - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - - if test -n "$ac_subst_files"; then - $as_echo "## ------------------- ## -## File substitutions. ## -## ------------------- ##" - echo - for ac_var in $ac_subst_files - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - fi - - if test -s confdefs.h; then - $as_echo "## ----------- ## -## confdefs.h. ## -## ----------- ##" - echo - cat confdefs.h - echo - fi - test "$ac_signal" != 0 && - $as_echo "$as_me: caught signal $ac_signal" - $as_echo "$as_me: exit $exit_status" - } >&5 - rm -f core *.core core.conftest.* && - rm -f -r conftest* confdefs* conf$$* $ac_clean_files && - exit $exit_status -' 0 -for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal -done -ac_signal=0 - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -f -r conftest* confdefs.h - -$as_echo "/* confdefs.h */" > confdefs.h - -# Predefined preprocessor variables. - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_URL "$PACKAGE_URL" -_ACEOF - - -# Let the site file select an alternate cache file if it wants to. -# Prefer an explicitly selected file to automatically selected ones. -ac_site_file1=NONE -ac_site_file2=NONE -if test -n "$CONFIG_SITE"; then - # We do not want a PATH search for config.site. - case $CONFIG_SITE in #(( - -*) ac_site_file1=./$CONFIG_SITE;; - */*) ac_site_file1=$CONFIG_SITE;; - *) ac_site_file1=./$CONFIG_SITE;; - esac -elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site -else - ac_site_file1=$ac_default_prefix/share/config.site - ac_site_file2=$ac_default_prefix/etc/config.site -fi -for ac_site_file in "$ac_site_file1" "$ac_site_file2" -do - test "x$ac_site_file" = xNONE && continue - if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -$as_echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" \ - || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "failed to load site script $ac_site_file -See \`config.log' for more details" "$LINENO" 5; } - fi -done - -if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special files - # actually), so we avoid doing that. DJGPP emulates it as a regular file. - if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . "$cache_file";; - *) . "./$cache_file";; - esac - fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file -fi - -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - # differences in whitespace do not lead to failure. - ac_old_val_w=`echo x $ac_old_val` - ac_new_val_w=`echo x $ac_new_val` - if test "$ac_old_val_w" != "$ac_new_val_w"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - ac_cache_corrupted=: - else - { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} - eval $ac_var=\$ac_old_val - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) as_fn_append ac_configure_args " '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 -fi -## -------------------- ## -## Main body of script. ## -## -------------------- ## - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - - - - -ac_aux_dir= -for ac_dir in ../.. "$srcdir"/../..; do - if test -f "$ac_dir/install-sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f "$ac_dir/install.sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f "$ac_dir/shtool"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi -done -if test -z "$ac_aux_dir"; then - as_fn_error $? "cannot find install-sh, install.sh, or shtool in ../.. \"$srcdir\"/../.." "$LINENO" 5 -fi - -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. - - - -# Make sure we can run config.sub. -$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -$as_echo_n "checking build system type... " >&6; } -if ${ac_cv_build+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_build_alias=$build_alias -test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` -test "x$ac_build_alias" = x && - as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 -ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -$as_echo "$ac_cv_build" >&6; } -case $ac_cv_build in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; -esac -build=$ac_cv_build -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_build -shift -build_cpu=$1 -build_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -build_os=$* -IFS=$ac_save_IFS -case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -$as_echo_n "checking host system type... " >&6; } -if ${ac_cv_host+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "x$host_alias" = x; then - ac_cv_host=$ac_cv_build -else - ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -$as_echo "$ac_cv_host" >&6; } -case $ac_cv_host in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; -esac -host=$ac_cv_host -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_host -shift -host_cpu=$1 -host_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -host_os=$* -IFS=$ac_save_IFS -case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 -$as_echo_n "checking target system type... " >&6; } -if ${ac_cv_target+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "x$target_alias" = x; then - ac_cv_target=$ac_cv_host -else - ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 -$as_echo "$ac_cv_target" >&6; } -case $ac_cv_target in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;; -esac -target=$ac_cv_target -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_target -shift -target_cpu=$1 -target_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -target_os=$* -IFS=$ac_save_IFS -case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac - - -# The aliases save the names the user supplied, while $host etc. -# will get canonicalized. -test -n "$target_alias" && - test "$program_prefix$program_suffix$program_transform_name" = \ - NONENONEs,x,x, && - program_prefix=${target_alias}- - -test "$program_prefix" != NONE && - program_transform_name="s&^&$program_prefix&;$program_transform_name" -# Use a double $ so make ignores it. -test "$program_suffix" != NONE && - program_transform_name="s&\$&$program_suffix&;$program_transform_name" -# Double any \ or $. -# By default was `s,x,x', remove it if useless. -ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' -program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` - - -# Find a good install program. We prefer a C program (faster), -# so one script is as good as another. But avoid the broken or -# incompatible versions: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AmigaOS /C/install, which installs bootblocks on floppy discs -# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# OS/2's system install, which has a completely different semantic -# ./install, which can be erroneously created by make from ./install.sh. -# Reject install programs that cannot install multiple files. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 -$as_echo_n "checking for a BSD-compatible install... " >&6; } -if test -z "$INSTALL"; then -if ${ac_cv_path_install+:} false; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in #(( - ./ | .// | /[cC]/* | \ - /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ - /usr/ucb/* ) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # by default. - for ac_prog in ginstall scoinst install; do - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then - if test $ac_prog = install && - grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - elif test $ac_prog = install && - grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # program-specific install script used by HP pwplus--don't use. - : - else - rm -rf conftest.one conftest.two conftest.dir - echo one > conftest.one - echo two > conftest.two - mkdir conftest.dir - if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && - test -s conftest.one && test -s conftest.two && - test -s conftest.dir/conftest.one && - test -s conftest.dir/conftest.two - then - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 - fi - fi - fi - done - done - ;; -esac - - done -IFS=$as_save_IFS - -rm -rf conftest.one conftest.two conftest.dir - -fi - if test "${ac_cv_path_install+set}" = set; then - INSTALL=$ac_cv_path_install - else - # As a last resort, use the slow shell script. Don't cache a - # value for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - INSTALL=$ac_install_sh - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 -$as_echo "$INSTALL" >&6; } - -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' - -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' - -test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -else - CC="$ac_cv_prog_CC" -fi - -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CC" && break -done - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi - -fi - - -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "no acceptable C compiler found in \$PATH -See \`config.log' for more details" "$LINENO" 5; } - -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - ac_no_link=no - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" -# Try to create an executable without -o first, disregard a.out. -# It will help us diagnose broken compilers, and finding out an intuition -# of exeext. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -$as_echo_n "checking whether the C compiler works... " >&6; } -ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` - -# The possible output files: -ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" - -ac_rmfiles= -for ac_file in $ac_files -do - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - * ) ac_rmfiles="$ac_rmfiles $ac_file";; - esac -done -rm -f $ac_rmfiles - -if { { ac_try="$ac_link_default" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link_default") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' -# in a Makefile. We should not override ac_cv_exeext if it was cached, -# so that the user can short-circuit this test for compilers unknown to -# Autoconf. -for ac_file in $ac_files '' -do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) - ;; - [ab].out ) - # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; - then :; else - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - fi - # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' - # argument, so we may need to know it at that point already. - # Even if this section looks crufty: it has the advantage of - # actually working. - break;; - * ) - break;; - esac -done -test "$ac_cv_exeext" = no && ac_cv_exeext= - -else - ac_file='' -fi -if test -z "$ac_file"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -$as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "C compiler cannot create executables -See \`config.log' for more details" "$LINENO" 5; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -$as_echo_n "checking for C compiler default output file name... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -$as_echo "$ac_file" >&6; } -ac_exeext=$ac_cv_exeext - -rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -$as_echo_n "checking for suffix of executables... " >&6; } -if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. -for ac_file in conftest.exe conftest conftest.*; do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - break;; - * ) break;; - esac -done -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details" "$LINENO" 5; } -fi -rm -f conftest conftest$ac_cv_exeext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -$as_echo "$ac_cv_exeext" >&6; } - -rm -f conftest.$ac_ext -EXEEXT=$ac_cv_exeext -ac_exeext=$EXEEXT -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -FILE *f = fopen ("conftest.out", "w"); - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -ac_clean_files="$ac_clean_files conftest.out" -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } -if test "$cross_compiling" != yes; then - { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if { ac_try='./conftest$ac_cv_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details" "$LINENO" 5; } - fi - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } - -rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out -ac_clean_files=$ac_clean_files_save - -else - rm -f -r a.out a.exe b.out conftest.$ac_ext conftest.o conftest.obj conftest.dSYM - ac_no_link=yes - # Setting cross_compile will disable run tests; it will - # also disable AC_CHECK_FILE but that's generally - # correct if we can't link. - cross_compiling=yes - EXEEXT= - # Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } -if test "$cross_compiling" != yes; then - { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if { ac_try='./conftest$ac_cv_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details" "$LINENO" 5; } - fi - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -$as_echo_n "checking for suffix of object files... " >&6; } -if ${ac_cv_objext+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.o conftest.obj -if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - for ac_file in conftest.o conftest.obj conftest.*; do - test -f "$ac_file" || continue; - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; - *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` - break;; - esac -done -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of object files: cannot compile -See \`config.log' for more details" "$LINENO" 5; } -fi -rm -f conftest.$ac_cv_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -$as_echo "$ac_cv_objext" >&6; } -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if ${ac_cv_c_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GCC=yes -else - GCC= -fi -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if ${ac_cv_prog_cc_g+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -else - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if ${ac_cv_prog_cc_c89+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -struct stat; -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c89=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : - -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -rm -rf .tst 2>/dev/null -mkdir .tst 2>/dev/null -if test -d .tst; then - am__leading_dot=. -else - am__leading_dot=_ -fi -rmdir .tst 2>/dev/null - -DEPDIR="${am__leading_dot}deps" - -ac_config_commands="$ac_config_commands depfiles" - - -am_make=${MAKE-make} -cat > confinc << 'END' -am__doit: - @echo this is the am__doit target -.PHONY: am__doit -END -# If we don't find an include directive, just comment out the code. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 -$as_echo_n "checking for style of include used by $am_make... " >&6; } -am__include="#" -am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from 'make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD - ;; - esac -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 -$as_echo "$_am_result" >&6; } -rm -f confinc confmf - -# Check whether --enable-dependency-tracking was given. -if test "${enable_dependency_tracking+set}" = set; then : - enableval=$enable_dependency_tracking; -fi - -if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' - am__nodep='_no' -fi - if test "x$enable_dependency_tracking" != xno; then - AMDEP_TRUE= - AMDEP_FALSE='#' -else - AMDEP_TRUE='#' - AMDEP_FALSE= -fi - - -# By default we simply use the C compiler to build assembly code. - -test "${CCAS+set}" = set || CCAS=$CC -test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS - - - -depcc="$CCAS" am_compiler_list= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 -$as_echo_n "checking dependency style of $depcc... " >&6; } -if ${am_cv_CCAS_dependencies_compiler_type+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named 'D' -- because '-MD' means "put the output - # in D". - rm -rf conftest.dir - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CCAS_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - am__universal=false - - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with - # Solaris 10 /bin/sh. - echo '/* dummy */' > sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with '-c' and '-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle '-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs. - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # After this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested. - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvc7 | msvc7msys | msvisualcpp | msvcmsys) - # This compiler won't grok '-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CCAS_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CCAS_dependencies_compiler_type=none -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CCAS_dependencies_compiler_type" >&5 -$as_echo "$am_cv_CCAS_dependencies_compiler_type" >&6; } -CCASDEPMODE=depmode=$am_cv_CCAS_dependencies_compiler_type - - if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CCAS_dependencies_compiler_type" = gcc3; then - am__fastdepCCAS_TRUE= - am__fastdepCCAS_FALSE='#' -else - am__fastdepCCAS_TRUE='#' - am__fastdepCCAS_FALSE= -fi - - -# Expand $ac_aux_dir to an absolute path. -am_aux_dir=`cd "$ac_aux_dir" && pwd` - - -if test -n "$ac_tool_prefix"; then - for ac_prog in ar lib "link -lib" - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_AR="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AR=$ac_cv_prog_AR -if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$AR" && break - done -fi -if test -z "$AR"; then - ac_ct_AR=$AR - for ac_prog in ar lib "link -lib" -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_AR"; then - ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_AR="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_AR=$ac_cv_prog_ac_ct_AR -if test -n "$ac_ct_AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -$as_echo "$ac_ct_AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_AR" && break -done - - if test "x$ac_ct_AR" = x; then - AR="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - AR=$ac_ct_AR - fi -fi - -: ${AR=ar} - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the archiver ($AR) interface" >&5 -$as_echo_n "checking the archiver ($AR) interface... " >&6; } -if ${am_cv_ar_interface+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - am_cv_ar_interface=ar - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int some_variable = 0; -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&5' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 - (eval $am_ar_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if test "$ac_status" -eq 0; then - am_cv_ar_interface=ar - else - am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&5' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 - (eval $am_ar_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if test "$ac_status" -eq 0; then - am_cv_ar_interface=lib - else - am_cv_ar_interface=unknown - fi - fi - rm -f conftest.lib libconftest.a - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_ar_interface" >&5 -$as_echo "$am_cv_ar_interface" >&6; } - -case $am_cv_ar_interface in -ar) - ;; -lib) - # Microsoft lib, so override with the ar-lib wrapper script. - # FIXME: It is wrong to rewrite AR. - # But if we don't then we get into trouble of one sort or another. - # A longer-term fix would be to have automake use am__AR in this case, - # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something - # similar. - AR="$am_aux_dir/ar-lib $AR" - ;; -unknown) - as_fn_error $? "could not determine $AR interface" "$LINENO" 5 - ;; -esac - -LD=${LD-ld} - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. -set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -RANLIB=$ac_cv_prog_RANLIB -if test -n "$RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 -$as_echo "$RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_RANLIB"; then - ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_RANLIB="ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB -if test -n "$ac_ct_RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 -$as_echo "$ac_ct_RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_RANLIB" = x; then - RANLIB=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - RANLIB=$ac_ct_RANLIB - fi -else - RANLIB="$ac_cv_prog_RANLIB" -fi - - -case "${target}" in - *-*-elf) - objtype=elf- - ;; -esac - - - -host_makefile_frag=`cd $srcdir/../config;pwd`/default.mh - -host_makefile_frag_path=$host_makefile_frag - - - -# Configure cpu init plug-ins -if test -d "${srcdir}/cpu-init"; then - subdirs="${subdirs} cpu-init" - ac_config_files="$ac_config_files cpu-init/Makefile" - - -fi - -# Default to --enable-multilib -# Check whether --enable-multilib was given. -if test "${enable_multilib+set}" = set; then : - enableval=$enable_multilib; case "$enableval" in - yes) multilib=yes ;; - no) multilib=no ;; - *) as_fn_error $? "bad value $enableval for multilib option" "$LINENO" 5 ;; - esac -else - multilib=yes -fi - - -# We may get other options which we leave undocumented: -# --with-target-subdir, --with-multisrctop, --with-multisubdir -# See config-ml.in if you want the gory details. - -if test "$srcdir" = "."; then - if test "$with_target_subdir" != "."; then - multi_basedir="$srcdir/$with_multisrctop../../.." - else - multi_basedir="$srcdir/$with_multisrctop../.." - fi -else - multi_basedir="$srcdir/../.." -fi - - -# Even if the default multilib is not a cross compilation, -# it may be that some of the other multilibs are. -if test $cross_compiling = no && test $multilib = yes \ - && test "x${with_multisubdir}" != x ; then - cross_compiling=maybe -fi - -ac_config_commands="$ac_config_commands default-1" - - -ac_config_files="$ac_config_files Makefile" - -cat >confcache <<\_ACEOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. -# -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. -# -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. - -_ACEOF - -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, we kill variables containing newlines. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -( - for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - - (set) 2>&1 | - case $as_nl`(ac_space=' '; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes: double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \. - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) | - sed ' - /^ac_cv_env_/b end - t clear - :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - :end' >>confcache -if diff "$cache_file" confcache >/dev/null 2>&1; then :; else - if test -w "$cache_file"; then - if test "x$cache_file" != "x/dev/null"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} - if test ! -f "$cache_file" || test -h "$cache_file"; then - cat confcache >"$cache_file" - else - case $cache_file in #( - */* | ?:*) - mv -f confcache "$cache_file"$$ && - mv -f "$cache_file"$$ "$cache_file" ;; #( - *) - mv -f confcache "$cache_file" ;; - esac - fi - fi - else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi -fi -rm -f confcache - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -# Transform confdefs.h into DEFS. -# Protect against shell expansion while executing Makefile rules. -# Protect against Makefile macro expansion. -# -# If the first sed substitution is executed (which looks for macros that -# take arguments), then branch to the quote section. Otherwise, -# look for a macro that doesn't take arguments. -ac_script=' -:mline -/\\$/{ - N - s,\\\n,, - b mline -} -t clear -:clear -s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g -t quote -s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g -t quote -b any -:quote -s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g -s/\[/\\&/g -s/\]/\\&/g -s/\$/$$/g -H -:any -${ - g - s/^\n// - s/\n/ /g - p -} -' -DEFS=`sed -n "$ac_script" confdefs.h` - - -ac_libobjs= -ac_ltlibobjs= -U= -for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. - ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`$as_echo "$ac_i" | sed "$ac_script"` - # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR - # will be set to the directory where LIBOBJS objects are built. - as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" - as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' -done -LIBOBJS=$ac_libobjs - -LTLIBOBJS=$ac_ltlibobjs - - -if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then - as_fn_error $? "conditional \"AMDEP\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${am__fastdepCCAS_TRUE}" && test -z "${am__fastdepCCAS_FALSE}"; then - as_fn_error $? "conditional \"am__fastdepCCAS\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi - -: "${CONFIG_STATUS=./config.status}" -ac_write_fail=0 -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} -as_write_fail=0 -cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 -#! $SHELL -# Generated by $as_me. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false - -SHELL=\${CONFIG_SHELL-$SHELL} -export SHELL -_ASEOF -cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -as_myself= -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -pR'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -pR' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -pR' - fi -else - as_ln_s='cp -pR' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - - -# as_fn_executable_p FILE -# ----------------------- -# Test if FILE is an executable regular file. -as_fn_executable_p () -{ - test -f "$1" && test -x "$1" -} # as_fn_executable_p -as_test_x='test -x' -as_executable_p=as_fn_executable_p - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -exec 6>&1 -## ----------------------------------- ## -## Main body of $CONFIG_STATUS script. ## -## ----------------------------------- ## -_ASEOF -test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# Save the log message, to keep $0 and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by $as_me, which was -generated by GNU Autoconf 2.69. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" - -_ACEOF - -case $ac_config_files in *" -"*) set x $ac_config_files; shift; ac_config_files=$*;; -esac - - - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# Files that config.status was made for. -config_files="$ac_config_files" -config_commands="$ac_config_commands" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions -from templates according to the current configuration. Unless the files -and actions are specified as TAGs, all are instantiated by default. - -Usage: $0 [OPTION]... [TAG]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - --config print configuration, then exit - -q, --quiet, --silent - do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - -Configuration files: -$config_files - -Configuration commands: -$config_commands - -Report bugs to the package provider." - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" -ac_cs_version="\\ -config.status -configured by $0, generated by GNU Autoconf 2.69, - with options \\"\$ac_cs_config\\" - -Copyright (C) 2012 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." - -ac_pwd='$ac_pwd' -srcdir='$srcdir' -INSTALL='$INSTALL' -test -n "\$AWK" || AWK=awk -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# The default lists apply if the user does not specify any file. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=?*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - --*=) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg= - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - esac - - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; - --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - '') as_fn_error $? "missing file argument" ;; - esac - as_fn_append CONFIG_FILES " '$ac_optarg'" - ac_need_defaults=false;; - --he | --h | --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) as_fn_error $? "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; - - *) as_fn_append ac_config_targets " $1" - ac_need_defaults=false ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -if \$ac_cs_recheck; then - set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion - shift - \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 - CONFIG_SHELL='$SHELL' - export CONFIG_SHELL - exec "\$@" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX - $as_echo "$ac_log" -} >&5 - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# -# INIT-COMMANDS -# -AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" - -srcdir="$srcdir" -host="$host" -target="$target" -with_multisubdir="$with_multisubdir" -with_multisrctop="$with_multisrctop" -with_target_subdir="$with_target_subdir" -ac_configure_args="${multilib_arg} ${ac_configure_args}" -multi_basedir="$multi_basedir" -CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} -CC="$CC" -CXX="$CXX" -GFORTRAN="$GFORTRAN" -GCJ="$GCJ" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; - "cpu-init/Makefile") CONFIG_FILES="$CONFIG_FILES cpu-init/Makefile" ;; - "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - - *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; - esac -done - - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= ac_tmp= - trap 'exit_status=$? - : "${ac_tmp:=$tmp}" - { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status -' 0 - trap 'as_fn_exit 1' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 -ac_tmp=$tmp - -# Set up the scripts for CONFIG_FILES section. -# No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. -if test -n "$CONFIG_FILES"; then - -if $AWK 'BEGIN { getline <"/dev/null" }' /dev/null; then - ac_cs_awk_getline=: - ac_cs_awk_pipe_init= - ac_cs_awk_read_file=' - while ((getline aline < (F[key])) > 0) - print(aline) - close(F[key])' - ac_cs_awk_pipe_fini= -else - ac_cs_awk_getline=false - ac_cs_awk_pipe_init="print \"cat <<'|#_!!_#|' &&\"" - ac_cs_awk_read_file=' - print "|#_!!_#|" - print "cat " F[key] " &&" - '$ac_cs_awk_pipe_init - # The final `:' finishes the AND list. - ac_cs_awk_pipe_fini='END { print "|#_!!_#|"; print ":" }' -fi -ac_cr=`echo X | tr X '\015'` -# On cygwin, bash can eat \r inside `` if the user requested igncr. -# But we know of no other shell where ac_cr would be empty at this -# point, so we can use a bashism as a fallback. -if test "x$ac_cr" = x; then - eval ac_cr=\$\'\\r\' -fi -ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` -if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then - ac_cs_awk_cr='\\r' -else - ac_cs_awk_cr=$ac_cr -fi - -echo 'BEGIN {' >"$ac_tmp/subs1.awk" && -_ACEOF - -# Create commands to substitute file output variables. -{ - echo "cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1" && - echo 'cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&' && - echo "$ac_subst_files" | sed 's/.*/F["&"]="$&"/' && - echo "_ACAWK" && - echo "_ACEOF" -} >conf$$files.sh && -. ./conf$$files.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 -rm -f conf$$files.sh - -{ - echo "cat >conf$$subs.awk <<_ACEOF" && - echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && - echo "_ACEOF" -} >conf$$subs.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 -ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` -ac_delim='%!_!# ' -for ac_last_try in false false false false false :; do - . ./conf$$subs.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 - - ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` - if test $ac_delim_n = $ac_delim_num; then - break - elif $ac_last_try; then - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done -rm -f conf$$subs.sh - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && -_ACEOF -sed -n ' -h -s/^/S["/; s/!.*/"]=/ -p -g -s/^[^!]*!// -:repl -t repl -s/'"$ac_delim"'$// -t delim -:nl -h -s/\(.\{148\}\)..*/\1/ -t more1 -s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ -p -n -b repl -:more1 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t nl -:delim -h -s/\(.\{148\}\)..*/\1/ -t more2 -s/["\\]/\\&/g; s/^/"/; s/$/"/ -p -b -:more2 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t delim -' >$CONFIG_STATUS || ac_write_fail=1 -rm -f conf$$subs.awk -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -_ACAWK -cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && - for (key in S) S_is_set[key] = 1 - FS = "" - \$ac_cs_awk_pipe_init -} -{ - line = $ 0 - nfields = split(line, field, "@") - substed = 0 - len = length(field[1]) - for (i = 2; i < nfields; i++) { - key = field[i] - keylen = length(key) - if (S_is_set[key]) { - value = S[key] - line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) - len += length(value) + length(field[++i]) - substed = 1 - } else - len += 1 + keylen - } - if (nfields == 3 && !substed) { - key = field[2] - if (F[key] != "" && line ~ /^[ ]*@.*@[ ]*$/) { - \$ac_cs_awk_read_file - next - } - } - print line -} -\$ac_cs_awk_pipe_fini -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then - sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" -else - cat -fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ - || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 -_ACEOF - -# VPATH may cause trouble with some makes, so we remove sole $(srcdir), -# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ -h -s/// -s/^/:/ -s/[ ]*$/:/ -s/:\$(srcdir):/:/g -s/:\${srcdir}:/:/g -s/:@srcdir@:/:/g -s/^:*// -s/:*$// -x -s/\(=[ ]*\).*/\1/ -G -s/\n// -s/^[^=]*=[ ]*$// -}' -fi - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -fi # test -n "$CONFIG_FILES" - - -eval set X " :F $CONFIG_FILES :C $CONFIG_COMMANDS" -shift -for ac_tag -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$ac_tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; - esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac - as_fn_append ac_file_inputs " '$ac_f'" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' - `' by configure.' - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} - fi - # Neutralize special characters interpreted by sed in replacement strings. - case $configure_input in #( - *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | - sed 's/[\\\\&|]/\\\\&/g'`;; #( - *) ac_sed_conf_input=$configure_input;; - esac - - case $ac_tag in - *:-:* | *:-) cat >"$ac_tmp/stdin" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir="$ac_dir"; as_fn_mkdir_p - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - case $ac_mode in - :F) - # - # CONFIG_FILE - # - - case $INSTALL in - [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; - esac -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# If the template does not know about datarootdir, expand it. -# FIXME: This hack should be removed a few years after 2.60. -ac_datarootdir_hack=; ac_datarootdir_seen= -ac_sed_dataroot=' -/datarootdir/ { - p - q -} -/@datadir@/p -/@docdir@/p -/@infodir@/p -/@localedir@/p -/@mandir@/p' -case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in -*datarootdir*) ac_datarootdir_seen=yes;; -*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - ac_datarootdir_hack=' - s&@datadir@&$datadir&g - s&@docdir@&$docdir&g - s&@infodir@&$infodir&g - s&@localedir@&$localedir&g - s&@mandir@&$mandir&g - s&\\\${datarootdir}&$datarootdir&g' ;; -esac -_ACEOF - -# Neutralize VPATH when `$srcdir' = `.'. -# Shell code in configure.ac might set extrasub. -# FIXME: do we really want to maintain this feature? -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_sed_extra="$ac_vpsub -$extrasub -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s|@configure_input@|$ac_sed_conf_input|;t t -s&@top_builddir@&$ac_top_builddir_sub&;t t -s&@top_build_prefix@&$ac_top_build_prefix&;t t -s&@srcdir@&$ac_srcdir&;t t -s&@abs_srcdir@&$ac_abs_srcdir&;t t -s&@top_srcdir@&$ac_top_srcdir&;t t -s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -s&@builddir@&$ac_builddir&;t t -s&@abs_builddir@&$ac_abs_builddir&;t t -s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -s&@INSTALL@&$ac_INSTALL&;t t -$ac_datarootdir_hack -" -eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | -if $ac_cs_awk_getline; then - $AWK -f "$ac_tmp/subs.awk" -else - $AWK -f "$ac_tmp/subs.awk" | $SHELL -fi \ - >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ - "$ac_tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&2;} - - rm -f "$ac_tmp/stdin" - case $ac_file in - -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; - *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; - esac \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - ;; - - - :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 -$as_echo "$as_me: executing $ac_file commands" >&6;} - ;; - esac - - - case $ac_file$ac_mode in - "depfiles":C) test x"$AMDEP_TRUE" != x"" || { - # Older Autoconf quotes --file arguments for eval, but not when files - # are listed without --file. Let's play safe and only enable the eval - # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac - shift - for mf - do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named 'Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`$as_dirname -- "$mf" || -$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$mf" : 'X\(//\)[^/]' \| \ - X"$mf" : 'X\(//\)$' \| \ - X"$mf" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$mf" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running 'make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "$am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`$as_dirname -- "$file" || -$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$file" : 'X\(//\)[^/]' \| \ - X"$file" : 'X\(//\)$' \| \ - X"$file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir=$dirpart/$fdir; as_fn_mkdir_p - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done - done -} - ;; - "cpu-init/Makefile":F) ac_file=cpu-init/Makefile . ${srcdir}/../../config-ml.in - ;; - "default-1":C) -# Only add multilib support code if we just rebuilt the top-level -# Makefile. -case " $CONFIG_FILES " in - *" Makefile "*) - ac_file=Makefile . ${multi_basedir}/config-ml.in - ;; -esac ;; - - esac -done # for ac_tag - - -as_fn_exit 0 -_ACEOF -ac_clean_files=$ac_clean_files_save - -test $ac_write_fail = 0 || - as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 - - -# configure is writing to config.log, and then calls config.status. -# config.status does its own redirection, appending to config.log. -# Unfortunately, on DOS this fails, as config.log is still kept open -# by configure, so config.status won't be able to write to it; its -# output is simply discarded. So we exec the FD to /dev/null, -# effectively closing config.log, so it can be properly (re)opened and -# appended to by config.status. When coming back to configure, we -# need to make the FD available again. -if test "$no_create" != yes; then - ac_cs_success=: - ac_config_status_args= - test "$silent" = yes && - ac_config_status_args="$ac_config_status_args --quiet" - exec 5>/dev/null - $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false - exec 5>>config.log - # Use ||, not &&, to avoid exiting from the if with $? = 1, which - # would make configure fail if this is the last instruction. - $ac_cs_success || as_fn_exit 1 -fi -if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} -fi - diff --git a/libgloss/aarch64/configure.ac b/libgloss/aarch64/configure.ac deleted file mode 100644 index d691f11a71..0000000000 --- a/libgloss/aarch64/configure.ac +++ /dev/null @@ -1,49 +0,0 @@ -dnl Process this file with autoconf to produce a configure script. -AC_INIT(crt0.S) - -AC_CONFIG_AUX_DIR(../..) - -AC_CANONICAL_SYSTEM -AC_ARG_PROGRAM - -AC_PROG_INSTALL - -AC_NO_EXECUTABLES -AC_PROG_CC -AM_PROG_AS -AM_PROG_AR -LD=${LD-ld} -AC_SUBST(LD) -AC_PROG_RANLIB - -case "${target}" in - *-*-elf) - objtype=elf- - ;; -esac - -AC_SUBST(objtype) - -host_makefile_frag=`cd $srcdir/../config;pwd`/default.mh - -dnl We have to assign the same value to other variables because autoconf -dnl doesn't provide a mechanism to substitute a replacement keyword with -dnl arbitrary data or pathnames. -dnl -host_makefile_frag_path=$host_makefile_frag -AC_SUBST(host_makefile_frag_path) -AC_SUBST_FILE(host_makefile_frag) - -# Configure cpu init plug-ins -if test -d "${srcdir}/cpu-init"; then - subdirs="${subdirs} cpu-init" - AC_CONFIG_FILES([cpu-init/Makefile], [dnl - ac_file=cpu-init/Makefile . ${srcdir}/../../config-ml.in - ]) - AC_SUBST(subdirs) -fi - -AM_ENABLE_MULTILIB(, ../..) - -AC_CONFIG_FILES([Makefile]) -AC_OUTPUT diff --git a/libgloss/aarch64/cpu-init/Makefile.in b/libgloss/aarch64/cpu-init/Makefile.in deleted file mode 100644 index 22648b2af9..0000000000 --- a/libgloss/aarch64/cpu-init/Makefile.in +++ /dev/null @@ -1,110 +0,0 @@ -# Copyright (c) 2012 ARM Ltd. All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# 3. The name of the company may not be used to endorse or promote -# products derived from this software without specific prior written -# permission. -# -# THIS SOFTWARE IS PROVIDED BY ARM LTD ``AS IS'' AND ANY EXPRESS OR IMPLIED -# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -# IN NO EVENT SHALL ARM LTD BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED -# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -DESTDIR = -VPATH = @srcdir@ @srcdir@/.. @srcdir@/../.. -srcdir = @srcdir@ -objdir = . -srcroot = $(srcdir)/../../.. -objroot = $(objdir)/../../.. - -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -host_alias = @host_alias@ -target_alias = @target_alias@ - -bindir = @bindir@ -libdir = @libdir@ -tooldir = $(exec_prefix)/$(target_alias) - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -# Multilib support variables. -# TOP is used instead of MULTI{BUILD,SRC}TOP. -MULTISRCTOP = -MULTIBUILDTOP = -MULTIDIRS = -MULTISUBDIR = -MULTIDO = true -MULTICLEAN = true - -SHELL = /bin/sh - -CC = @CC@ - -AS = @AS@ -AR = @AR@ -LD = @LD@ -RANLIB = @RANLIB@ - -CPU_INIT_OBJS = rdimon-aem-el3.o rdimon-aem-v8-r.o -CPU_INIT_INSTALL = install-cpu-init - -CFLAGS = -g - -# Host specific makefile fragment comes in here. -@host_makefile_frag@ - -.PHONY: all -all: ${CPU_INIT_OBJS} - -# -# here's where we build the test programs for each target -# -.PHONY: test -test: - -rdimon-aem-el3.o : rdimon-aem-el3.S - $(CC) $(CFLAGS_FOR_TARGET) $(CFLAGS) $(INCLUDES) -DARM_RDI_MONITOR -o $@ -c $< - -rdimon-aem-v8-r.o : rdimon-aem-el3.S - $(CC) $(CFLAGS_FOR_TARGET) $(CFLAGS) $(INCLUDES) -DARM_RDI_MONITOR -DBUILD_FOR_R_PROFILE -o $@ -c $< - -clean mostlyclean: - rm -f a.out core *.i *.o *-test *.srec *.dis *.x - -distclean maintainer-clean realclean: clean - rm -f Makefile *~ - -.PHONY: install info install-info clean-info -install: ${CPU_INIT_INSTALL} - -install-cpu-init: - test -d $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/cpu-init || mkdir $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/cpu-init - set -e; for x in ${CPU_INIT_OBJS}; do ${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/cpu-init/$$x; done - -doc: -info: -install-info: -clean-info: - -Makefile: Makefile.in ../config.status @host_makefile_frag_path@ - $(SHELL) ../config.status --file cpu-init/Makefile - -../config.status: ../configure - $(SHELL) ../config.status --recheck diff --git a/libgloss/aarch64/cpu-init/Makefile.inc b/libgloss/aarch64/cpu-init/Makefile.inc new file mode 100644 index 0000000000..031369ee7e --- /dev/null +++ b/libgloss/aarch64/cpu-init/Makefile.inc @@ -0,0 +1,20 @@ +%C%_CPPFLAGS = -I$(srcdir)/%D%/.. + +%C%cpuinitdir = $(tooldir)/lib$(MULTISUBDIR)/cpu-init +%C%cpuinit_DATA = \ + %D%/rdimon-aem-el3.o \ + %D%/rdimon-aem-v8-r.o + +## The manual dirstamp is needed as automake doesn't recognize compile rules +## via DATA. If we ever add rules it does know about, we can drop this. +%D%/$(am__dirstamp): + @$(MKDIR_P) %D% + @: > $@ + +%D%/rdimon-aem-el3.$(OBJEXT): %D%/rdimon-aem-el3.S %D%/$(am__dirstamp) + $(AM_V_CC)$(COMPILE) $(%C%_CPPFLAGS) -DARM_RDI_MONITOR -o $@ -c $< + +%D%/rdimon-aem-v8-r.$(OBJEXT): %D%/rdimon-aem-el3.S %D%/$(am__dirstamp) + $(AM_V_CC)$(COMPILE) $(%C%_CPPFLAGS) -DARM_RDI_MONITOR -DBUILD_FOR_R_PROFILE -o $@ -c $< + +CLEANFILES += $(%C%cpuinit_DATA) diff --git a/libgloss/arc/Makefile.in b/libgloss/arc/Makefile.in deleted file mode 100644 index e343dd2228..0000000000 --- a/libgloss/arc/Makefile.in +++ /dev/null @@ -1,122 +0,0 @@ -# -# -DESTDIR = -VPATH = @srcdir@ @srcdir@/.. -srcdir = @srcdir@ -objdir = . -srcroot = $(srcdir)/../.. -objroot = $(objdir)/../.. -mkinstalldirs = $(SHELL) $(srcroot)/mkinstalldirs - -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -host_alias = @host_alias@ -target_alias = @target_alias@ - -bindir = @bindir@ -libdir = @libdir@ -tooldir = $(exec_prefix)/$(target_alias) - -objtype = @objtype@ - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -# Multilib support variables. -# TOP is used instead of MULTI{BUILD,SRC}TOP. -MULTIDIRS = -MULTISUBDIR = -MULTIDO = true -MULTICLEAN = true - -SHELL = /bin/sh - -CC = @CC@ - -AS = @AS@ -AR = @AR@ -LD = @LD@ -RANLIB = @RANLIB@ - -OBJDUMP = `if [ -f ${objroot}/../binutils/objdump ] ; \ - then echo ${objroot}/../binutils/objdump ; \ - else t='$(program_transform_name)'; echo objdump | sed -e $$t ; fi` -OBJCOPY = `if [ -f ${objroot}/../binutils/objcopy ] ; \ - then echo ${objroot}/../binutils/objcopy ; \ - else t='$(program_transform_name)'; echo objcopy | sed -e $$t ; fi` - -CRT0 = gcrt0.o crt0.o -CRT0_INSTALL = install-crt0 - -NSIM_BSP = libnsim.a -NSIM_OBJS = \ - libcfunc.o \ - nsim-syscalls.o \ - sbrk.o \ - mcount.o -NSIM_INSTALL = install-nsim -NSIM_SCRIPTS = nsim.specs - -NANO_SCRIPTS = nano.specs -NANO_INSTALL = install-nano - -CFLAGS = -g - -# Host specific makefile fragment comes in here. -@host_makefile_frag@ - -all: $(CRT0) $(NSIM_BSP) - -$(NSIM_BSP): $(NSIM_OBJS) - $(AR) $(ARFLAGS) $@ $? - $(RANLIB) $@ - -libcfunc.o: libcfunc.c -nsim-syscalls.o: nsim-syscalls.c -sbrk.o: sbrk.c -mcount.o: mcount.c -gcrt0.o: gcrt0.S crt0.S -crt0.o: crt0.S - -clean mostlyclean: - rm -f *.o *.a - -distclean maintainer-clean realclean: clean - rm -f Makefile *~ - -.PHONY: install info install-info clean-info doc dvi -install: $(CRT0_INSTALL) $(NSIM_INSTALL) $(NANO_INSTALL) - -# multilibdir may not exist yet - libgcc for ARC depends on libc, hence -# newlib/libgloss is built before libgcc. And in parallel build libgloss maybe -# built and installed before newlib, therefore libgloss has to create target -# directory. - -$(CRT0_INSTALL): - $(mkinstalldirs) $(DESTDIR)${tooldir}/lib${MULTISUBDIR} - for c in $(CRT0); do \ - b=`basename $$c`; \ - ${INSTALL_DATA} $$c $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$b ;\ - done - -$(NSIM_INSTALL): - $(mkinstalldirs) $(DESTDIR)${tooldir}/lib${MULTISUBDIR} - $(INSTALL_DATA) $(NSIM_BSP) $(DESTDIR)$(tooldir)/lib$(MULTISUBDIR)/$(NSIM_BSP) - for x in $(NSIM_SCRIPTS); do \ - $(INSTALL_DATA) $(srcdir)/$$x $(DESTDIR)$(tooldir)/lib$(MULTISUBDIR)/$$x; done - -$(NANO_INSTALL): - $(mkinstalldirs) $(DESTDIR)${tooldir}/lib${MULTISUBDIR} - for x in $(NANO_SCRIPTS); do \ - $(INSTALL_DATA) $(srcdir)/$$x $(DESTDIR)$(tooldir)/lib$(MULTISUBDIR)/$$x; done - -doc: -info: -dvi: -install-info: -clean-info: - -Makefile: Makefile.in ../config.status - cd .. && $(SHELL) config.status diff --git a/libgloss/arc/Makefile.inc b/libgloss/arc/Makefile.inc new file mode 100644 index 0000000000..fe9cc76104 --- /dev/null +++ b/libgloss/arc/Makefile.inc @@ -0,0 +1,12 @@ +multilibtool_LIBRARIES += %D%/libnsim.a +%C%_libnsim_a_SOURCES = \ + %D%/libcfunc.c \ + %D%/mcount.c \ + %D%/nsim-syscalls.c \ + %D%/sbrk.c + +multilibtool_DATA += \ + %D%/crt0.o \ + %D%/gcrt0.o \ + %D%/nano.specs \ + %D%/nsim.specs diff --git a/libgloss/arm/Makefile.in b/libgloss/arm/Makefile.in deleted file mode 100644 index 45d889409a..0000000000 --- a/libgloss/arm/Makefile.in +++ /dev/null @@ -1,272 +0,0 @@ -# -# -DESTDIR = -VPATH = @srcdir@ @srcdir@/.. -srcdir = @srcdir@ -objdir = . -srcroot = $(srcdir)/../.. -objroot = $(objdir)/../.. - -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -host_alias = @host_alias@ -target_alias = @target_alias@ - -bindir = @bindir@ -libdir = @libdir@ -tooldir = $(exec_prefix)/$(target_alias) - -objtype = @objtype@ - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -# Multilib support variables. -# TOP is used instead of MULTI{BUILD,SRC}TOP. -MULTISRCTOP = -MULTIBUILDTOP = -MULTIDIRS = -MULTISUBDIR = -MULTILIBNAME = -MULTIDO = true -MULTICLEAN = true -MULTI_FLAGS_FOR_TARGET = MULTI_DEFAULT_FLAGS -MULTI_DEFAULT_FLAGS = -DSEMIHOST_V2 - -MULTIDIRS += semihv2m -MULTIDIR_semihv2m_FLAGS = $(MULTI_DEFAULT_FLAGS) -DSEMIHOST_V2_MIXED_MODE -MULTIDIR_semihv2m_NAME = -v2m - -SHELL = /bin/sh - -mkinstalldirs = $(SHELL) $(srcroot)/mkinstalldirs - -CC = @CC@ - -AS = @AS@ -AR = @AR@ -LD = @LD@ -RANLIB = @RANLIB@ - -SUBDIRS = @subdirs@ - -OBJDUMP = `if [ -f ${objroot}/../binutils/objdump ] ; \ - then echo ${objroot}/../binutils/objdump ; \ - else t='$(program_transform_name)'; echo objdump | sed -e $$t ; fi` -OBJCOPY = `if [ -f ${objroot}/../binutils/objcopy ] ; \ - then echo ${objroot}/../binutils/objcopy ; \ - else t='$(program_transform_name)'; echo objcopy | sed -e $$t ; fi` - -@BUILD_CRT0_TRUE@CRT0 = crt0.o -@BUILD_CRT0_TRUE@CRT0_INSTALL = install-crt0 -@BUILD_CRT0_FALSE@CRT0 = -@BUILD_CRT0_FALSE@CRT0_INSTALL = - -NANO_SCRIPTS=nano.specs -NANO_INSTALL=install-nano - -LINUX_CRT0 = linux-crt0.o -LINUX_BSP = libgloss-linux.a -LINUX_OBJS = linux-syscalls0.o linux-syscalls1.o -LINUX_SCRIPTS = linux.specs -LINUX_INSTALL = install-linux - -REDBOOT_CRT0 = redboot-crt0.o -REDBOOT_OBJS = redboot-syscalls.o -REDBOOT_SCRIPTS = redboot.ld redboot.specs -REDBOOT_INSTALL = install-redboot - -RDPMON_CRT0 = rdpmon-crt0.o -RDPMON_BSP = librdpmon.a -RDPMON_OBJS = ftruncate.o libcfunc.o syscalls.o trap.o truncate.o _exit.o _kill.o -RDPMON_SCRIPTS = rdpmon.specs -RDPMON_INSTALL = install-rdpmon - -RDIMON_CRT0 = rdimon-crt0${${MULTILIBNAME}}.o -RDIMON_BSP = librdimon${${MULTILIBNAME}}.a -RDIMON_OBJS = $(patsubst %,rdimon-%,$(RDPMON_OBJS)) -RDIMON_SCRIPTS = rdimon${${MULTILIBNAME}}.specs \ - aprofile-validation${${MULTILIBNAME}}.specs \ - aprofile-ve${${MULTILIBNAME}}.specs -RDIMON_INSTALL = install-rdimon - -CFLAGS = -g - -# Here is all of the eval board stuff -PID_SCRIPTS = pid.specs -PID_INSTALL = install-pid - -IQ80310_SCRIPTS = iq80310.specs -IQ80310_INSTALL = install-iq80310 - - -# Host specific makefile fragment comes in here. -@host_makefile_frag@ - -INCLUDES += `if [ -d ${objroot}/newlib ]; then echo -I$(srcroot)/newlib/libc/machine/arm; fi` - -# -# build a test program for each target board. Just trying to get -# it to link is a good test, so we ignore all the errors for now. -# -all: ${CRT0} ${LINUX_CRT0} ${LINUX_BSP} ${REDBOOT_CRT0} ${REDBOOT_OBJS} ${RDPMON_CRT0} ${RDPMON_BSP} ${RDIMON_CRT0} ${RDIMON_BSP} - @rootpre=`pwd`/; export rootpre; \ - srcrootpre=`cd $(srcdir); pwd`/; export srcrootpre; \ - for dir in .. ${SUBDIRS}; do \ - if [ x$$dir != x.. ]; then \ - if [ -d $$dir ]; then \ - (cd $$dir; $(MAKE) $(FLAGS_TO_PASS)); \ - else true; fi; \ - else true; fi; \ - done - $(MAKE) $(AM_MAKEFLAGS) all-recursive - -# -# here's where we build the test programs for each target -# -.PHONY: test -test: - -# -crt0.o: crt0.S -redboot-crt0.o: redboot-crt0.S -redboot-syscalls.o: redboot-syscalls.c $(srcdir)/../syscall.h - $(CC) $(CFLAGS_FOR_TARGET) $($(MULTI_FLAGS_FOR_TARGET)) $(CFLAGS) $(INCLUDES) -o $@ -c $< - -rdpmon-crt0.o: crt0.S - $(CC) $(CFLAGS_FOR_TARGET) $($(MULTI_FLAGS_FOR_TARGET)) $(CFLAGS) $(INCLUDES) -DARM_RDP_MONITOR -o $@ -c $< - -rdimon-crt0${${MULTILIBNAME}}.o: crt0.S - $(CC) $(CFLAGS_FOR_TARGET) $($(MULTI_FLAGS_FOR_TARGET)) $(CFLAGS) $(INCLUDES) -DARM_RDI_MONITOR -o $@ -c $< - -rdimon-ftruncate.o: ftruncate.c - $(CC) $(CFLAGS_FOR_TARGET) $($(MULTI_FLAGS_FOR_TARGET)) $(CFLAGS) $(INCLUDES) -DARM_RDI_MONITOR -o $@ -c $< - -rdimon-trap.o: trap.S - $(CC) $(CFLAGS_FOR_TARGET) $($(MULTI_FLAGS_FOR_TARGET)) $(CFLAGS) $(INCLUDES) -DARM_RDI_MONITOR -o $@ -c $< - -rdimon-truncate.o: truncate.c - $(CC) $(CFLAGS_FOR_TARGET) $($(MULTI_FLAGS_FOR_TARGET)) $(CFLAGS) $(INCLUDES) -DARM_RDI_MONITOR -o $@ -c $< - -rdimon-_exit.o: _exit.c - $(CC) $(CFLAGS_FOR_TARGET) $($(MULTI_FLAGS_FOR_TARGET)) $(CFLAGS) $(INCLUDES) -DARM_RDI_MONITOR -o $@ -c $< - -rdimon-_kill.o: _kill.c - $(CC) $(CFLAGS_FOR_TARGET) $($(MULTI_FLAGS_FOR_TARGET)) $(CFLAGS) $(INCLUDES) -DARM_RDI_MONITOR -o $@ -c $< - -rdimon-syscalls.o: syscalls.c - $(CC) $(CFLAGS_FOR_TARGET) $($(MULTI_FLAGS_FOR_TARGET)) $(CFLAGS) $(INCLUDES) -DARM_RDI_MONITOR -o $@ -c $< - -rdimon-libcfunc.o: libcfunc.c - $(CC) $(CFLAGS_FOR_TARGET) $($(MULTI_FLAGS_FOR_TARGET)) $(CFLAGS) $(INCLUDES) -DARM_RDI_MONITOR -o $@ -c $< - -$(LINUX_BSP): $(LINUX_OBJS) - ${AR} ${ARFLAGS} $@ $^ - ${RANLIB} $@ - -$(RDPMON_BSP): $(RDPMON_OBJS) - ${AR} ${ARFLAGS} $@ $^ - ${RANLIB} $@ - -$(RDIMON_BSP): $(RDIMON_OBJS) - ${AR} ${ARFLAGS} $@ $^ - ${RANLIB} $@ - -# Multilib support. -.PHONY: libgloss-multi-do all-multi clean-multi install-multi - -all-recursive: all-multi -clean-recursive: clean-multi -install-recursive: install-multi - -# The $(MAKE) comments below are to enable parallel building. -all-multi: - $(MAKE) $(AM_MAKEFLAGS) DO=all libgloss-multi-do - -clean-multi: - $(MAKE) $(AM_MAKEFLAGS) DO=clean libgloss-multi-do - -install-multi: - $(MAKE) $(AM_MAKEFLAGS) DO=install libgloss-multi-do - -clean mostlyclean: - rm -f a.out core *.i *.o *-test *.srec *.dis *.x $(SIM_BSP) $(IQ80310_BSP) - @rootpre=`pwd`/; export rootpre; \ - srcrootpre=`cd $(srcdir); pwd`/; export srcrootpre; \ - for dir in .. ${SUBDIRS}; do \ - if [ x$$dir != x.. ]; then \ - if [ -d $$dir ]; then \ - (cd $$dir; $(MAKE) $(FLAGS_TO_PASS) clean); \ - else true; fi; \ - else true; fi; \ - done - $(MAKE) $(AM_MAKEFLAGS) clean-recursive - -distclean maintainer-clean realclean: clean - rm -f Makefile config.status *~ - -.PHONY: install info install-info clean-info -install: ${CRT0_INSTALL} ${LINUX_INSTALL} ${REDBOOT_INSTALL} ${RDPMON_INSTALL} ${RDIMON_INSTALL} ${IQ80310_INSTALL} ${PID_INSTALL} ${NANO_INSTALL} - @rootpre=`pwd`/; export rootpre; \ - srcrootpre=`cd $(srcdir); pwd`/; export srcrootpre; \ - for dir in .. ${SUBDIRS}; do \ - if [ x$$dir != x.. ]; then \ - if [ -d $$dir ]; then \ - (cd $$dir; $(MAKE) $(FLAGS_TO_PASS) install); \ - else true; fi; \ - else true; fi; \ - done - $(MAKE) $(AM_MAKEFLAGS) install-recursive - -install-nano: - ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR} - set -e; for x in ${NANO_SCRIPTS}; do ${INSTALL_DATA} ${srcdir}/${objtype}$$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done - -install-crt0: - ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR} - ${INSTALL_DATA} ${CRT0} $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x - -install-linux: - ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR} - set -e; for x in ${LINUX_CRT0} ${LINUX_BSP}; do ${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done - set -e; for x in ${LINUX_SCRIPTS}; do ${INSTALL_DATA} ${srcdir}/${objtype}$$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done - -install-redboot: - ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR} - set -e; for x in ${REDBOOT_CRT0} ${REDBOOT_OBJS}; do ${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done - set -e; for x in ${REDBOOT_SCRIPTS}; do ${INSTALL_DATA} ${srcdir}/${objtype}$$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done - -install-rdpmon: - ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR} - set -e; for x in ${RDPMON_CRT0} ${RDPMON_BSP}; do ${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done - set -e; for x in ${RDPMON_SCRIPTS}; do ${INSTALL_DATA} ${srcdir}/${objtype}$$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done - -install-rdimon: - ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR} - set -e; for x in ${RDIMON_CRT0} ${RDIMON_BSP}; do ${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done - set -e; for x in ${RDIMON_SCRIPTS}; do ${INSTALL_DATA} ${srcdir}/${objtype}$$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done - - -install-pid: - ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR} - set -e; for x in ${PID_SCRIPTS}; do ${INSTALL_DATA} ${srcdir}/${objtype}$$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done - -install-iq80310: - ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR} - set -e; for x in ${IQ80310_SCRIPTS}; do ${INSTALL_DATA} ${srcdir}/${objtype}$$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done - - -doc: -info: -install-info: -clean-info: - -Makefile: Makefile.in config.status @host_makefile_frag_path@ - $(SHELL) config.status - -config.status: configure - $(SHELL) config.status --recheck - -include $(srcdir)/../multi-build.in diff --git a/libgloss/arm/Makefile.inc b/libgloss/arm/Makefile.inc new file mode 100644 index 0000000000..41fce3c999 --- /dev/null +++ b/libgloss/arm/Makefile.inc @@ -0,0 +1,89 @@ +if !MAY_SUPPLY_SYSCALLS +multilibtool_DATA += %D%/crt0.o +endif + +%C%_SPECS = + +## nano files. +%C%_SPECS += %D%/nano.specs + +## Linux files. +%C%_SPECS += %D%/linux.specs +multilibtool_DATA += %D%/linux-crt0.o +multilibtool_LIBRARIES += %D%/libgloss-linux.a +%C%_libgloss_linux_a_SOURCES = \ + %D%/linux-syscalls0.c \ + %D%/linux-syscalls1.c + +## RedBoot files. +%C%_SPECS += %D%/redboot.ld %D%/redboot.specs +multilibtool_DATA += \ + %D%/redboot-crt0.o \ + %D%/redboot-syscalls.o + +%D%/redboot-syscalls.o: %D%/redboot-syscalls.c + $(AM_V_CC)$(COMPILE) -DSEMIHOST_V2 -o $@ -c $< + +## rdpmon files. +%C%_SPECS += %D%/rdpmon.specs +multilibtool_DATA += %D%/rdpmon-crt0.o +multilibtool_LIBRARIES += %D%/librdpmon.a +%C%_librdpmon_a_SOURCES = \ + %D%/_exit.c \ + %D%/_kill.c \ + %D%/ftruncate.c \ + %D%/libcfunc.c \ + %D%/syscalls.c \ + %D%/trap.S \ + %D%/truncate.c + +%D%/rdpmon-crt0.o: %D%/crt0.S + $(AM_V_CPPAS)$(CPPASCOMPILE) -DSEMIHOST_V2 -DARM_RDP_MONITOR -o $@ -c $< + +## rdimon files. +%C%_SPECS += \ + %D%/rdimon.specs \ + %D%/rdimon-v2m.specs \ + %D%/aprofile-validation.specs \ + %D%/aprofile-validation-v2m.specs \ + %D%/aprofile-ve-v2m.specs \ + %D%/aprofile-ve.specs +multilibtool_DATA += \ + %D%/rdimon-crt0.o \ + %D%/rdimon-crt0-v2m.o +multilibtool_LIBRARIES += \ + %D%/librdimon.a \ + %D%/librdimon-v2m.a + +%C%_RDIMON_CPPFLAGS = -DSEMIHOST_V2 -DARM_RDI_MONITOR +%C%_RDIMON_V2M_CPPFLAGS = $(%C%_RDIMON_CPPFLAGS) -DSEMIHOST_V2_MIXED_MODE + +%D%/rdimon-crt0.o: %D%/crt0.S + $(AM_V_CPPAS)$(CPPASCOMPILE) $(%C%_RDIMON_CPPFLAGS) -o $@ -c $< + +%D%/rdimon-crt0-v2m.o: %D%/crt0.S + $(AM_V_CPPAS)$(CPPASCOMPILE) $(%C%_RDIMON_V2M_CPPFLAGS) -o $@ -c $< + +%C%_librdimon_a_SOURCES = $(%C%_librdpmon_a_SOURCES) +%C%_librdimon_a_CPPFLAGS = $(AM_CPPFLAGS) $(%C%_RDIMON_CPPFLAGS) +%C%_librdimon_v2m_a_SOURCES = $(%C%_librdpmon_a_SOURCES) +%C%_librdimon_v2m_a_CPPFLAGS = $(AM_CPPFLAGS) $(%C%_RDIMON_V2M_CPPFLAGS) + +## Here is all of the eval board stuff. +%C%_SPECS += \ + %D%/pid.specs \ + %D%/iq80310.specs + +multilibtool_DATA += \ + $(%C%_SPECS) + +## Make copies of the scripts to facilitate in-tree bootstrapping. +%D%/%.specs: %D%/$(ARM_OBJTYPE)%.specs + $(AM_V_GEN)cp $< $@ + +%D%/%.ld: %D%/$(ARM_OBJTYPE)%.ld + $(AM_V_GEN)cp $< $@ + +CLEANFILES += $(%C%_SPECS) + +include %D%/cpu-init/Makefile.inc diff --git a/libgloss/arm/acinclude.m4 b/libgloss/arm/acinclude.m4 new file mode 100644 index 0000000000..d61474d3ad --- /dev/null +++ b/libgloss/arm/acinclude.m4 @@ -0,0 +1,10 @@ +ARM_OBJTYPE= +case "${target}" in + *-*-elf | *-*-eabi* | *-*-tirtos*) + ARM_OBJTYPE=elf- + ;; + *-*-coff) + ARM_OBJTYPE=coff- + ;; +esac +AC_SUBST(ARM_OBJTYPE) diff --git a/libgloss/arm/aclocal.m4 b/libgloss/arm/aclocal.m4 deleted file mode 100644 index 36a6b1f3af..0000000000 --- a/libgloss/arm/aclocal.m4 +++ /dev/null @@ -1,546 +0,0 @@ -# generated automatically by aclocal 1.15.1 -*- Autoconf -*- - -# Copyright (C) 1996-2017 Free Software Foundation, Inc. - -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) -# Copyright (C) 2011-2017 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_PROG_AR([ACT-IF-FAIL]) -# ------------------------- -# Try to determine the archiver interface, and trigger the ar-lib wrapper -# if it is needed. If the detection of archiver interface fails, run -# ACT-IF-FAIL (default is to abort configure with a proper error message). -AC_DEFUN([AM_PROG_AR], -[AC_BEFORE([$0], [LT_INIT])dnl -AC_BEFORE([$0], [AC_PROG_LIBTOOL])dnl -AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl -AC_REQUIRE_AUX_FILE([ar-lib])dnl -AC_CHECK_TOOLS([AR], [ar lib "link -lib"], [false]) -: ${AR=ar} - -AC_CACHE_CHECK([the archiver ($AR) interface], [am_cv_ar_interface], - [AC_LANG_PUSH([C]) - am_cv_ar_interface=ar - AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int some_variable = 0;]])], - [am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&AS_MESSAGE_LOG_FD' - AC_TRY_EVAL([am_ar_try]) - if test "$ac_status" -eq 0; then - am_cv_ar_interface=ar - else - am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&AS_MESSAGE_LOG_FD' - AC_TRY_EVAL([am_ar_try]) - if test "$ac_status" -eq 0; then - am_cv_ar_interface=lib - else - am_cv_ar_interface=unknown - fi - fi - rm -f conftest.lib libconftest.a - ]) - AC_LANG_POP([C])]) - -case $am_cv_ar_interface in -ar) - ;; -lib) - # Microsoft lib, so override with the ar-lib wrapper script. - # FIXME: It is wrong to rewrite AR. - # But if we don't then we get into trouble of one sort or another. - # A longer-term fix would be to have automake use am__AR in this case, - # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something - # similar. - AR="$am_aux_dir/ar-lib $AR" - ;; -unknown) - m4_default([$1], - [AC_MSG_ERROR([could not determine $AR interface])]) - ;; -esac -AC_SUBST([AR])dnl -]) - -# Figure out how to run the assembler. -*- Autoconf -*- - -# Copyright (C) 2001-2017 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_PROG_AS -# ---------- -AC_DEFUN([AM_PROG_AS], -[# By default we simply use the C compiler to build assembly code. -AC_REQUIRE([AC_PROG_CC]) -test "${CCAS+set}" = set || CCAS=$CC -test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS -AC_ARG_VAR([CCAS], [assembler compiler command (defaults to CC)]) -AC_ARG_VAR([CCASFLAGS], [assembler compiler flags (defaults to CFLAGS)]) -_AM_IF_OPTION([no-dependencies],, [_AM_DEPENDENCIES([CCAS])])dnl -]) - -# AM_AUX_DIR_EXPAND -*- Autoconf -*- - -# Copyright (C) 2001-2017 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets -# $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to -# '$srcdir', '$srcdir/..', or '$srcdir/../..'. -# -# Of course, Automake must honor this variable whenever it calls a -# tool from the auxiliary directory. The problem is that $srcdir (and -# therefore $ac_aux_dir as well) can be either absolute or relative, -# depending on how configure is run. This is pretty annoying, since -# it makes $ac_aux_dir quite unusable in subdirectories: in the top -# source directory, any form will work fine, but in subdirectories a -# relative path needs to be adjusted first. -# -# $ac_aux_dir/missing -# fails when called from a subdirectory if $ac_aux_dir is relative -# $top_srcdir/$ac_aux_dir/missing -# fails if $ac_aux_dir is absolute, -# fails when called from a subdirectory in a VPATH build with -# a relative $ac_aux_dir -# -# The reason of the latter failure is that $top_srcdir and $ac_aux_dir -# are both prefixed by $srcdir. In an in-source build this is usually -# harmless because $srcdir is '.', but things will broke when you -# start a VPATH build or use an absolute $srcdir. -# -# So we could use something similar to $top_srcdir/$ac_aux_dir/missing, -# iff we strip the leading $srcdir from $ac_aux_dir. That would be: -# am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` -# and then we would define $MISSING as -# MISSING="\${SHELL} $am_aux_dir/missing" -# This will work as long as MISSING is not called from configure, because -# unfortunately $(top_srcdir) has no meaning in configure. -# However there are other variables, like CC, which are often used in -# configure, and could therefore not use this "fixed" $ac_aux_dir. -# -# Another solution, used here, is to always expand $ac_aux_dir to an -# absolute PATH. The drawback is that using absolute paths prevent a -# configured tree to be moved without reconfiguration. - -AC_DEFUN([AM_AUX_DIR_EXPAND], -[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl -# Expand $ac_aux_dir to an absolute path. -am_aux_dir=`cd "$ac_aux_dir" && pwd` -]) - -# AM_CONDITIONAL -*- Autoconf -*- - -# Copyright (C) 1997-2017 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_CONDITIONAL(NAME, SHELL-CONDITION) -# ------------------------------------- -# Define a conditional. -AC_DEFUN([AM_CONDITIONAL], -[AC_PREREQ([2.52])dnl - m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], - [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl -AC_SUBST([$1_TRUE])dnl -AC_SUBST([$1_FALSE])dnl -_AM_SUBST_NOTMAKE([$1_TRUE])dnl -_AM_SUBST_NOTMAKE([$1_FALSE])dnl -m4_define([_AM_COND_VALUE_$1], [$2])dnl -if $2; then - $1_TRUE= - $1_FALSE='#' -else - $1_TRUE='#' - $1_FALSE= -fi -AC_CONFIG_COMMANDS_PRE( -[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then - AC_MSG_ERROR([[conditional "$1" was never defined. -Usually this means the macro was only invoked conditionally.]]) -fi])]) - -# Copyright (C) 1999-2017 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - - -# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be -# written in clear, in which case automake, when reading aclocal.m4, -# will think it sees a *use*, and therefore will trigger all it's -# C support machinery. Also note that it means that autoscan, seeing -# CC etc. in the Makefile, will ask for an AC_PROG_CC use... - - -# _AM_DEPENDENCIES(NAME) -# ---------------------- -# See how the compiler implements dependency checking. -# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". -# We try a few techniques and use that to set a single cache variable. -# -# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was -# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular -# dependency, and given that the user is not expected to run this macro, -# just rely on AC_PROG_CC. -AC_DEFUN([_AM_DEPENDENCIES], -[AC_REQUIRE([AM_SET_DEPDIR])dnl -AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl -AC_REQUIRE([AM_MAKE_INCLUDE])dnl -AC_REQUIRE([AM_DEP_TRACK])dnl - -m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], - [$1], [CXX], [depcc="$CXX" am_compiler_list=], - [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], - [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], - [$1], [UPC], [depcc="$UPC" am_compiler_list=], - [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], - [depcc="$$1" am_compiler_list=]) - -AC_CACHE_CHECK([dependency style of $depcc], - [am_cv_$1_dependencies_compiler_type], -[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named 'D' -- because '-MD' means "put the output - # in D". - rm -rf conftest.dir - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_$1_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` - fi - am__universal=false - m4_case([$1], [CC], - [case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac], - [CXX], - [case " $depcc " in #( - *\ -arch\ *\ -arch\ *) am__universal=true ;; - esac]) - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with - # Solaris 10 /bin/sh. - echo '/* dummy */' > sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with '-c' and '-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle '-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs. - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # After this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested. - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvc7 | msvc7msys | msvisualcpp | msvcmsys) - # This compiler won't grok '-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_$1_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_$1_dependencies_compiler_type=none -fi -]) -AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) -AM_CONDITIONAL([am__fastdep$1], [ - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) -]) - - -# AM_SET_DEPDIR -# ------------- -# Choose a directory name for dependency files. -# This macro is AC_REQUIREd in _AM_DEPENDENCIES. -AC_DEFUN([AM_SET_DEPDIR], -[AC_REQUIRE([AM_SET_LEADING_DOT])dnl -AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl -]) - - -# AM_DEP_TRACK -# ------------ -AC_DEFUN([AM_DEP_TRACK], -[AC_ARG_ENABLE([dependency-tracking], [dnl -AS_HELP_STRING( - [--enable-dependency-tracking], - [do not reject slow dependency extractors]) -AS_HELP_STRING( - [--disable-dependency-tracking], - [speeds up one-time build])]) -if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' - am__nodep='_no' -fi -AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) -AC_SUBST([AMDEPBACKSLASH])dnl -_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl -AC_SUBST([am__nodep])dnl -_AM_SUBST_NOTMAKE([am__nodep])dnl -]) - -# Generate code to set up dependency tracking. -*- Autoconf -*- - -# Copyright (C) 1999-2017 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - - -# _AM_OUTPUT_DEPENDENCY_COMMANDS -# ------------------------------ -AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], -[{ - # Older Autoconf quotes --file arguments for eval, but not when files - # are listed without --file. Let's play safe and only enable the eval - # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac - shift - for mf - do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named 'Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`AS_DIRNAME("$mf")` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running 'make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "$am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`AS_DIRNAME(["$file"])` - AS_MKDIR_P([$dirpart/$fdir]) - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done - done -} -])# _AM_OUTPUT_DEPENDENCY_COMMANDS - - -# AM_OUTPUT_DEPENDENCY_COMMANDS -# ----------------------------- -# This macro should only be invoked once -- use via AC_REQUIRE. -# -# This code is only required when automatic dependency tracking -# is enabled. FIXME. This creates each '.P' file that we will -# need in order to bootstrap the dependency handling code. -AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], -[AC_CONFIG_COMMANDS([depfiles], - [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], - [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) -]) - -# Check to see how 'make' treats includes. -*- Autoconf -*- - -# Copyright (C) 2001-2017 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# AM_MAKE_INCLUDE() -# ----------------- -# Check to see how make treats includes. -AC_DEFUN([AM_MAKE_INCLUDE], -[am_make=${MAKE-make} -cat > confinc << 'END' -am__doit: - @echo this is the am__doit target -.PHONY: am__doit -END -# If we don't find an include directive, just comment out the code. -AC_MSG_CHECKING([for style of include used by $am_make]) -am__include="#" -am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from 'make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD - ;; - esac -fi -AC_SUBST([am__include]) -AC_SUBST([am__quote]) -AC_MSG_RESULT([$_am_result]) -rm -f confinc confmf -]) - -# Helper functions for option handling. -*- Autoconf -*- - -# Copyright (C) 2001-2017 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# _AM_MANGLE_OPTION(NAME) -# ----------------------- -AC_DEFUN([_AM_MANGLE_OPTION], -[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) - -# _AM_SET_OPTION(NAME) -# -------------------- -# Set option NAME. Presently that only means defining a flag for this option. -AC_DEFUN([_AM_SET_OPTION], -[m4_define(_AM_MANGLE_OPTION([$1]), [1])]) - -# _AM_SET_OPTIONS(OPTIONS) -# ------------------------ -# OPTIONS is a space-separated list of Automake options. -AC_DEFUN([_AM_SET_OPTIONS], -[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) - -# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) -# ------------------------------------------- -# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. -AC_DEFUN([_AM_IF_OPTION], -[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) - -# Copyright (C) 2006-2017 Free Software Foundation, Inc. -# -# This file is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# _AM_SUBST_NOTMAKE(VARIABLE) -# --------------------------- -# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. -# This macro is traced by Automake. -AC_DEFUN([_AM_SUBST_NOTMAKE]) - -# AM_SUBST_NOTMAKE(VARIABLE) -# -------------------------- -# Public sister of _AM_SUBST_NOTMAKE. -AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) - -m4_include([../../config/depstand.m4]) -m4_include([../../config/lead-dot.m4]) -m4_include([../../config/multi.m4]) -m4_include([../../config/override.m4]) diff --git a/libgloss/arm/arm.h b/libgloss/arm/arm.h index 10e5b0509c..f3cd49308f 100644 --- a/libgloss/arm/arm.h +++ b/libgloss/arm/arm.h @@ -29,7 +29,7 @@ #ifndef _LIBGLOSS_ARM_H #define _LIBGLOSS_ARM_H -#include "acle-compat.h" +#include "arm-acle-compat.h" /* Checking for targets supporting only Thumb instructions (eg. ARMv6-M) or supporting Thumb-2 instructions, whether ARM instructions are available or diff --git a/libgloss/arm/configure b/libgloss/arm/configure deleted file mode 100755 index b5ac9db2c0..0000000000 --- a/libgloss/arm/configure +++ /dev/null @@ -1,4813 +0,0 @@ -#! /bin/sh -# Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69. -# -# -# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. -# -# -# This configure script is free software; the Free Software Foundation -# gives unlimited permission to copy, distribute and modify it. -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -as_myself= -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - -# Use a proper internal environment variable to ensure we don't fall - # into an infinite loop, continuously re-executing ourselves. - if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then - _as_can_reexec=no; export _as_can_reexec; - # We cannot yet assume a decent shell, so we have to provide a -# neutralization value for shells without unset; and this also -# works around shells that cannot unset nonexistent variables. -# Preserve -v and -x to the replacement shell. -BASH_ENV=/dev/null -ENV=/dev/null -(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV -case $- in # (((( - *v*x* | *x*v* ) as_opts=-vx ;; - *v* ) as_opts=-v ;; - *x* ) as_opts=-x ;; - * ) as_opts= ;; -esac -exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} -# Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 -as_fn_exit 255 - fi - # We don't want this to propagate to other subprocesses. - { _as_can_reexec=; unset _as_can_reexec;} -if test "x$CONFIG_SHELL" = x; then - as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which - # is contrary to our usage. Disable this feature. - alias -g '\${1+\"\$@\"}'='\"\$@\"' - setopt NO_GLOB_SUBST -else - case \`(set -o) 2>/dev/null\` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi -" - as_required="as_fn_return () { (exit \$1); } -as_fn_success () { as_fn_return 0; } -as_fn_failure () { as_fn_return 1; } -as_fn_ret_success () { return 0; } -as_fn_ret_failure () { return 1; } - -exitcode=0 -as_fn_success || { exitcode=1; echo as_fn_success failed.; } -as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } -as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } -as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } -if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : - -else - exitcode=1; echo positional parameters were not saved. -fi -test x\$exitcode = x0 || exit 1 -test -x / || exit 1" - as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO - as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO - eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && - test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1" - if (eval "$as_required") 2>/dev/null; then : - as_have_required=yes -else - as_have_required=no -fi - if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : - -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -as_found=false -for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - as_found=: - case $as_dir in #( - /*) - for as_base in sh bash ksh sh5; do - # Try only shells that exist, to save several forks. - as_shell=$as_dir/$as_base - if { test -f "$as_shell" || test -f "$as_shell.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : - CONFIG_SHELL=$as_shell as_have_required=yes - if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : - break 2 -fi -fi - done;; - esac - as_found=false -done -$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && - { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : - CONFIG_SHELL=$SHELL as_have_required=yes -fi; } -IFS=$as_save_IFS - - - if test "x$CONFIG_SHELL" != x; then : - export CONFIG_SHELL - # We cannot yet assume a decent shell, so we have to provide a -# neutralization value for shells without unset; and this also -# works around shells that cannot unset nonexistent variables. -# Preserve -v and -x to the replacement shell. -BASH_ENV=/dev/null -ENV=/dev/null -(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV -case $- in # (((( - *v*x* | *x*v* ) as_opts=-vx ;; - *v* ) as_opts=-v ;; - *x* ) as_opts=-x ;; - * ) as_opts= ;; -esac -exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} -# Admittedly, this is quite paranoid, since all the known shells bail -# out after a failed `exec'. -$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 -exit 255 -fi - - if test x$as_have_required = xno; then : - $as_echo "$0: This script requires a shell more modern than all" - $as_echo "$0: the shells that I found on your system." - if test x${ZSH_VERSION+set} = xset ; then - $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" - $as_echo "$0: be upgraded to zsh 4.3.4 or later." - else - $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, -$0: including any error possibly output before this -$0: message. Then install a modern shell, or manually run -$0: the script under such a shell if you do have one." - fi - exit 1 -fi -fi -fi -SHELL=${CONFIG_SHELL-/bin/sh} -export SHELL -# Unset more variables known to interfere with behavior of common tools. -CLICOLOR_FORCE= GREP_OPTIONS= -unset CLICOLOR_FORCE GREP_OPTIONS - -## --------------------- ## -## M4sh Shell Functions. ## -## --------------------- ## -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p - -# as_fn_executable_p FILE -# ----------------------- -# Test if FILE is an executable regular file. -as_fn_executable_p () -{ - test -f "$1" && test -x "$1" -} # as_fn_executable_p -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - - - as_lineno_1=$LINENO as_lineno_1a=$LINENO - as_lineno_2=$LINENO as_lineno_2a=$LINENO - eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && - test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { - # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) - sed -n ' - p - /[$]LINENO/= - ' <$as_myself | - sed ' - s/[$]LINENO.*/&-/ - t lineno - b - :lineno - N - :loop - s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ - t loop - s/-\n.*// - ' >$as_me.lineno && - chmod +x "$as_me.lineno" || - { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } - - # If we had to re-execute with $CONFIG_SHELL, we're ensured to have - # already done that, so ensure we don't try to do so again and fall - # in an infinite loop. This has already happened in practice. - _as_can_reexec=no; export _as_can_reexec - # Don't try to exec as it changes $[0], causing all sort of problems - # (the dirname of $[0] is not the place where we might find the - # original and so on. Autoconf is especially sensitive to this). - . "./$as_me.lineno" - # Exit status is that of the last command. - exit -} - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -pR'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -pR' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -pR' - fi -else - as_ln_s='cp -pR' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - -as_test_x='test -x' -as_executable_p=as_fn_executable_p - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -test -n "$DJDIR" || exec 7<&0 &1 - -# Name of the host. -# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, -# so uname gets run too. -ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` - -# -# Initializations. -# -ac_default_prefix=/usr/local -ac_clean_files= -ac_config_libobj_dir=. -LIBOBJS= -cross_compiling=no -subdirs= -MFLAGS= -MAKEFLAGS= - -# Identity of this package. -PACKAGE_NAME= -PACKAGE_TARNAME= -PACKAGE_VERSION= -PACKAGE_STRING= -PACKAGE_BUGREPORT= -PACKAGE_URL= - -ac_unique_file="redboot-crt0.S" -ac_no_link=no -ac_subst_vars='LTLIBOBJS -LIBOBJS -multi_basedir -subdirs -host_makefile_frag_path -objtype -RANLIB -LD -ac_ct_AR -AR -am__fastdepCCAS_FALSE -am__fastdepCCAS_TRUE -CCASDEPMODE -am__nodep -AMDEPBACKSLASH -AMDEP_FALSE -AMDEP_TRUE -am__quote -am__include -DEPDIR -am__leading_dot -CCASFLAGS -CCAS -OBJEXT -EXEEXT -ac_ct_CC -CPPFLAGS -LDFLAGS -CFLAGS -CC -INSTALL_DATA -INSTALL_SCRIPT -INSTALL_PROGRAM -target_os -target_vendor -target_cpu -target -host_os -host_vendor -host_cpu -host -build_os -build_vendor -build_cpu -build -BUILD_CRT0_FALSE -BUILD_CRT0_TRUE -target_alias -host_alias -build_alias -LIBS -ECHO_T -ECHO_N -ECHO_C -DEFS -mandir -localedir -libdir -psdir -pdfdir -dvidir -htmldir -infodir -docdir -oldincludedir -includedir -localstatedir -sharedstatedir -sysconfdir -datadir -datarootdir -libexecdir -sbindir -bindir -program_transform_name -prefix -exec_prefix -PACKAGE_URL -PACKAGE_BUGREPORT -PACKAGE_STRING -PACKAGE_VERSION -PACKAGE_TARNAME -PACKAGE_NAME -PATH_SEPARATOR -SHELL' -ac_subst_files='host_makefile_frag' -ac_user_opts=' -enable_option_checking -enable_newlib_supplied_syscalls -enable_dependency_tracking -enable_multilib -' - ac_precious_vars='build_alias -host_alias -target_alias -CC -CFLAGS -LDFLAGS -LIBS -CPPFLAGS -CCAS -CCASFLAGS' - - -# Initialize some variables set by options. -ac_init_help= -ac_init_version=false -ac_unrecognized_opts= -ac_unrecognized_sep= -# The variables have the same names as the options, with -# dashes changed to underlines. -cache_file=/dev/null -exec_prefix=NONE -no_create= -no_recursion= -prefix=NONE -program_prefix=NONE -program_suffix=NONE -program_transform_name=s,x,x, -silent= -site= -srcdir= -verbose= -x_includes=NONE -x_libraries=NONE - -# Installation directory options. -# These are left unexpanded so users can "make install exec_prefix=/foo" -# and all the variables that are supposed to be based on exec_prefix -# by default will actually change. -# Use braces instead of parens because sh, perl, etc. also accept them. -# (The list follows the same order as the GNU Coding Standards.) -bindir='${exec_prefix}/bin' -sbindir='${exec_prefix}/sbin' -libexecdir='${exec_prefix}/libexec' -datarootdir='${prefix}/share' -datadir='${datarootdir}' -sysconfdir='${prefix}/etc' -sharedstatedir='${prefix}/com' -localstatedir='${prefix}/var' -includedir='${prefix}/include' -oldincludedir='/usr/include' -docdir='${datarootdir}/doc/${PACKAGE}' -infodir='${datarootdir}/info' -htmldir='${docdir}' -dvidir='${docdir}' -pdfdir='${docdir}' -psdir='${docdir}' -libdir='${exec_prefix}/lib' -localedir='${datarootdir}/locale' -mandir='${datarootdir}/man' - -ac_prev= -ac_dashdash= -for ac_option -do - # If the previous option needs an argument, assign it. - if test -n "$ac_prev"; then - eval $ac_prev=\$ac_option - ac_prev= - continue - fi - - case $ac_option in - *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; - *=) ac_optarg= ;; - *) ac_optarg=yes ;; - esac - - # Accept the important Cygnus configure options, so we can diagnose typos. - - case $ac_dashdash$ac_option in - --) - ac_dashdash=yes ;; - - -bindir | --bindir | --bindi | --bind | --bin | --bi) - ac_prev=bindir ;; - -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) - bindir=$ac_optarg ;; - - -build | --build | --buil | --bui | --bu) - ac_prev=build_alias ;; - -build=* | --build=* | --buil=* | --bui=* | --bu=*) - build_alias=$ac_optarg ;; - - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) - cache_file=$ac_optarg ;; - - --config-cache | -C) - cache_file=config.cache ;; - - -datadir | --datadir | --datadi | --datad) - ac_prev=datadir ;; - -datadir=* | --datadir=* | --datadi=* | --datad=*) - datadir=$ac_optarg ;; - - -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ - | --dataroo | --dataro | --datar) - ac_prev=datarootdir ;; - -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ - | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) - datarootdir=$ac_optarg ;; - - -disable-* | --disable-*) - ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=no ;; - - -docdir | --docdir | --docdi | --doc | --do) - ac_prev=docdir ;; - -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) - docdir=$ac_optarg ;; - - -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) - ac_prev=dvidir ;; - -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) - dvidir=$ac_optarg ;; - - -enable-* | --enable-*) - ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid feature name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"enable_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval enable_$ac_useropt=\$ac_optarg ;; - - -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ - | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ - | --exec | --exe | --ex) - ac_prev=exec_prefix ;; - -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ - | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ - | --exec=* | --exe=* | --ex=*) - exec_prefix=$ac_optarg ;; - - -gas | --gas | --ga | --g) - # Obsolete; use --with-gas. - with_gas=yes ;; - - -help | --help | --hel | --he | -h) - ac_init_help=long ;; - -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) - ac_init_help=recursive ;; - -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) - ac_init_help=short ;; - - -host | --host | --hos | --ho) - ac_prev=host_alias ;; - -host=* | --host=* | --hos=* | --ho=*) - host_alias=$ac_optarg ;; - - -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) - ac_prev=htmldir ;; - -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ - | --ht=*) - htmldir=$ac_optarg ;; - - -includedir | --includedir | --includedi | --included | --include \ - | --includ | --inclu | --incl | --inc) - ac_prev=includedir ;; - -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ - | --includ=* | --inclu=* | --incl=* | --inc=*) - includedir=$ac_optarg ;; - - -infodir | --infodir | --infodi | --infod | --info | --inf) - ac_prev=infodir ;; - -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) - infodir=$ac_optarg ;; - - -libdir | --libdir | --libdi | --libd) - ac_prev=libdir ;; - -libdir=* | --libdir=* | --libdi=* | --libd=*) - libdir=$ac_optarg ;; - - -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ - | --libexe | --libex | --libe) - ac_prev=libexecdir ;; - -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ - | --libexe=* | --libex=* | --libe=*) - libexecdir=$ac_optarg ;; - - -localedir | --localedir | --localedi | --localed | --locale) - ac_prev=localedir ;; - -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) - localedir=$ac_optarg ;; - - -localstatedir | --localstatedir | --localstatedi | --localstated \ - | --localstate | --localstat | --localsta | --localst | --locals) - ac_prev=localstatedir ;; - -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ - | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) - localstatedir=$ac_optarg ;; - - -mandir | --mandir | --mandi | --mand | --man | --ma | --m) - ac_prev=mandir ;; - -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) - mandir=$ac_optarg ;; - - -nfp | --nfp | --nf) - # Obsolete; use --without-fp. - with_fp=no ;; - - -no-create | --no-create | --no-creat | --no-crea | --no-cre \ - | --no-cr | --no-c | -n) - no_create=yes ;; - - -no-recursion | --no-recursion | --no-recursio | --no-recursi \ - | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) - no_recursion=yes ;; - - -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ - | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ - | --oldin | --oldi | --old | --ol | --o) - ac_prev=oldincludedir ;; - -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ - | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ - | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) - oldincludedir=$ac_optarg ;; - - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - prefix=$ac_optarg ;; - - -program-prefix | --program-prefix | --program-prefi | --program-pref \ - | --program-pre | --program-pr | --program-p) - ac_prev=program_prefix ;; - -program-prefix=* | --program-prefix=* | --program-prefi=* \ - | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) - program_prefix=$ac_optarg ;; - - -program-suffix | --program-suffix | --program-suffi | --program-suff \ - | --program-suf | --program-su | --program-s) - ac_prev=program_suffix ;; - -program-suffix=* | --program-suffix=* | --program-suffi=* \ - | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) - program_suffix=$ac_optarg ;; - - -program-transform-name | --program-transform-name \ - | --program-transform-nam | --program-transform-na \ - | --program-transform-n | --program-transform- \ - | --program-transform | --program-transfor \ - | --program-transfo | --program-transf \ - | --program-trans | --program-tran \ - | --progr-tra | --program-tr | --program-t) - ac_prev=program_transform_name ;; - -program-transform-name=* | --program-transform-name=* \ - | --program-transform-nam=* | --program-transform-na=* \ - | --program-transform-n=* | --program-transform-=* \ - | --program-transform=* | --program-transfor=* \ - | --program-transfo=* | --program-transf=* \ - | --program-trans=* | --program-tran=* \ - | --progr-tra=* | --program-tr=* | --program-t=*) - program_transform_name=$ac_optarg ;; - - -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) - ac_prev=pdfdir ;; - -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) - pdfdir=$ac_optarg ;; - - -psdir | --psdir | --psdi | --psd | --ps) - ac_prev=psdir ;; - -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) - psdir=$ac_optarg ;; - - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - silent=yes ;; - - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) - ac_prev=sbindir ;; - -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ - | --sbi=* | --sb=*) - sbindir=$ac_optarg ;; - - -sharedstatedir | --sharedstatedir | --sharedstatedi \ - | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ - | --sharedst | --shareds | --shared | --share | --shar \ - | --sha | --sh) - ac_prev=sharedstatedir ;; - -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ - | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ - | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ - | --sha=* | --sh=*) - sharedstatedir=$ac_optarg ;; - - -site | --site | --sit) - ac_prev=site ;; - -site=* | --site=* | --sit=*) - site=$ac_optarg ;; - - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - srcdir=$ac_optarg ;; - - -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ - | --syscon | --sysco | --sysc | --sys | --sy) - ac_prev=sysconfdir ;; - -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ - | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) - sysconfdir=$ac_optarg ;; - - -target | --target | --targe | --targ | --tar | --ta | --t) - ac_prev=target_alias ;; - -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) - target_alias=$ac_optarg ;; - - -v | -verbose | --verbose | --verbos | --verbo | --verb) - verbose=yes ;; - - -version | --version | --versio | --versi | --vers | -V) - ac_init_version=: ;; - - -with-* | --with-*) - ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=\$ac_optarg ;; - - -without-* | --without-*) - ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` - # Reject names that are not valid shell variable names. - expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && - as_fn_error $? "invalid package name: $ac_useropt" - ac_useropt_orig=$ac_useropt - ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` - case $ac_user_opts in - *" -"with_$ac_useropt" -"*) ;; - *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" - ac_unrecognized_sep=', ';; - esac - eval with_$ac_useropt=no ;; - - --x) - # Obsolete; use --with-x. - with_x=yes ;; - - -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ - | --x-incl | --x-inc | --x-in | --x-i) - ac_prev=x_includes ;; - -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ - | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) - x_includes=$ac_optarg ;; - - -x-libraries | --x-libraries | --x-librarie | --x-librari \ - | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) - ac_prev=x_libraries ;; - -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ - | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) - x_libraries=$ac_optarg ;; - - -*) as_fn_error $? "unrecognized option: \`$ac_option' -Try \`$0 --help' for more information" - ;; - - *=*) - ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` - # Reject names that are not valid shell variable names. - case $ac_envvar in #( - '' | [0-9]* | *[!_$as_cr_alnum]* ) - as_fn_error $? "invalid variable name: \`$ac_envvar'" ;; - esac - eval $ac_envvar=\$ac_optarg - export $ac_envvar ;; - - *) - # FIXME: should be removed in autoconf 3.0. - $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 - expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && - $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 - : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}" - ;; - - esac -done - -if test -n "$ac_prev"; then - ac_option=--`echo $ac_prev | sed 's/_/-/g'` - as_fn_error $? "missing argument to $ac_option" -fi - -if test -n "$ac_unrecognized_opts"; then - case $enable_option_checking in - no) ;; - fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;; - *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; - esac -fi - -# Check all directory arguments for consistency. -for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ - datadir sysconfdir sharedstatedir localstatedir includedir \ - oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir -do - eval ac_val=\$$ac_var - # Remove trailing slashes. - case $ac_val in - */ ) - ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` - eval $ac_var=\$ac_val;; - esac - # Be sure to have absolute directory names. - case $ac_val in - [\\/$]* | ?:[\\/]* ) continue;; - NONE | '' ) case $ac_var in *prefix ) continue;; esac;; - esac - as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val" -done - -# There might be people who depend on the old broken behavior: `$host' -# used to hold the argument of --host etc. -# FIXME: To remove some day. -build=$build_alias -host=$host_alias -target=$target_alias - -# FIXME: To remove some day. -if test "x$host_alias" != x; then - if test "x$build_alias" = x; then - cross_compiling=maybe - elif test "x$build_alias" != "x$host_alias"; then - cross_compiling=yes - fi -fi - -ac_tool_prefix= -test -n "$host_alias" && ac_tool_prefix=$host_alias- - -test "$silent" = yes && exec 6>/dev/null - - -ac_pwd=`pwd` && test -n "$ac_pwd" && -ac_ls_di=`ls -di .` && -ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || - as_fn_error $? "working directory cannot be determined" -test "X$ac_ls_di" = "X$ac_pwd_ls_di" || - as_fn_error $? "pwd does not report name of working directory" - - -# Find the source files, if location was not specified. -if test -z "$srcdir"; then - ac_srcdir_defaulted=yes - # Try the directory containing this script, then the parent directory. - ac_confdir=`$as_dirname -- "$as_myself" || -$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_myself" : 'X\(//\)[^/]' \| \ - X"$as_myself" : 'X\(//\)$' \| \ - X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_myself" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - srcdir=$ac_confdir - if test ! -r "$srcdir/$ac_unique_file"; then - srcdir=.. - fi -else - ac_srcdir_defaulted=no -fi -if test ! -r "$srcdir/$ac_unique_file"; then - test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." - as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir" -fi -ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" -ac_abs_confdir=`( - cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg" - pwd)` -# When building in place, set srcdir=. -if test "$ac_abs_confdir" = "$ac_pwd"; then - srcdir=. -fi -# Remove unnecessary trailing slashes from srcdir. -# Double slashes in file names in object file debugging info -# mess up M-x gdb in Emacs. -case $srcdir in -*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; -esac -for ac_var in $ac_precious_vars; do - eval ac_env_${ac_var}_set=\${${ac_var}+set} - eval ac_env_${ac_var}_value=\$${ac_var} - eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} - eval ac_cv_env_${ac_var}_value=\$${ac_var} -done - -# -# Report the --help message. -# -if test "$ac_init_help" = "long"; then - # Omit some internal or obsolete options to make the list less imposing. - # This message is too long to be a string in the A/UX 3.1 sh. - cat <<_ACEOF -\`configure' configures this package to adapt to many kinds of systems. - -Usage: $0 [OPTION]... [VAR=VALUE]... - -To assign environment variables (e.g., CC, CFLAGS...), specify them as -VAR=VALUE. See below for descriptions of some of the useful variables. - -Defaults for the options are specified in brackets. - -Configuration: - -h, --help display this help and exit - --help=short display options specific to this package - --help=recursive display the short help of all the included packages - -V, --version display version information and exit - -q, --quiet, --silent do not print \`checking ...' messages - --cache-file=FILE cache test results in FILE [disabled] - -C, --config-cache alias for \`--cache-file=config.cache' - -n, --no-create do not create output files - --srcdir=DIR find the sources in DIR [configure dir or \`..'] - -Installation directories: - --prefix=PREFIX install architecture-independent files in PREFIX - [$ac_default_prefix] - --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX - [PREFIX] - -By default, \`make install' will install all the files in -\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify -an installation prefix other than \`$ac_default_prefix' using \`--prefix', -for instance \`--prefix=\$HOME'. - -For better control, use the options below. - -Fine tuning of the installation directories: - --bindir=DIR user executables [EPREFIX/bin] - --sbindir=DIR system admin executables [EPREFIX/sbin] - --libexecdir=DIR program executables [EPREFIX/libexec] - --sysconfdir=DIR read-only single-machine data [PREFIX/etc] - --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] - --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --libdir=DIR object code libraries [EPREFIX/lib] - --includedir=DIR C header files [PREFIX/include] - --oldincludedir=DIR C header files for non-gcc [/usr/include] - --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] - --datadir=DIR read-only architecture-independent data [DATAROOTDIR] - --infodir=DIR info documentation [DATAROOTDIR/info] - --localedir=DIR locale-dependent data [DATAROOTDIR/locale] - --mandir=DIR man documentation [DATAROOTDIR/man] - --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] - --htmldir=DIR html documentation [DOCDIR] - --dvidir=DIR dvi documentation [DOCDIR] - --pdfdir=DIR pdf documentation [DOCDIR] - --psdir=DIR ps documentation [DOCDIR] -_ACEOF - - cat <<\_ACEOF - -Program names: - --program-prefix=PREFIX prepend PREFIX to installed program names - --program-suffix=SUFFIX append SUFFIX to installed program names - --program-transform-name=PROGRAM run sed PROGRAM on installed program names - -System types: - --build=BUILD configure for building on BUILD [guessed] - --host=HOST cross-compile to build programs to run on HOST [BUILD] - --target=TARGET configure for building compilers for TARGET [HOST] -_ACEOF -fi - -if test -n "$ac_init_help"; then - - cat <<\_ACEOF - -Optional Features: - --disable-option-checking ignore unrecognized --enable/--with options - --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) - --enable-FEATURE[=ARG] include FEATURE [ARG=yes] - --disable-newlib-supplied-syscalls disable newlib from supplying syscalls - --enable-dependency-tracking - do not reject slow dependency extractors - --disable-dependency-tracking - speeds up one-time build - --enable-multilib build many library versions (default) - -Some influential environment variables: - CC C compiler command - CFLAGS C compiler flags - LDFLAGS linker flags, e.g. -L if you have libraries in a - nonstandard directory - LIBS libraries to pass to the linker, e.g. -l - CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if - you have headers in a nonstandard directory - CCAS assembler compiler command (defaults to CC) - CCASFLAGS assembler compiler flags (defaults to CFLAGS) - -Use these variables to override the choices made by `configure' or to help -it to find libraries and programs with nonstandard names/locations. - -Report bugs to the package provider. -_ACEOF -ac_status=$? -fi - -if test "$ac_init_help" = "recursive"; then - # If there are subdirs, report their specific --help. - for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue - test -d "$ac_dir" || - { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || - continue - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - cd "$ac_dir" || { ac_status=$?; continue; } - # Check for guested configure. - if test -f "$ac_srcdir/configure.gnu"; then - echo && - $SHELL "$ac_srcdir/configure.gnu" --help=recursive - elif test -f "$ac_srcdir/configure"; then - echo && - $SHELL "$ac_srcdir/configure" --help=recursive - else - $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 - fi || ac_status=$? - cd "$ac_pwd" || { ac_status=$?; break; } - done -fi - -test -n "$ac_init_help" && exit $ac_status -if $ac_init_version; then - cat <<\_ACEOF -configure -generated by GNU Autoconf 2.69 - -Copyright (C) 2012 Free Software Foundation, Inc. -This configure script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it. -_ACEOF - exit -fi - -## ------------------------ ## -## Autoconf initialization. ## -## ------------------------ ## - -# ac_fn_c_try_compile LINENO -# -------------------------- -# Try to compile conftest.$ac_ext, and return whether this succeeded. -ac_fn_c_try_compile () -{ - as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - rm -f conftest.$ac_objext - if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - grep -v '^ *+' conftest.err >conftest.er1 - cat conftest.er1 >&5 - mv -f conftest.er1 conftest.err - fi - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } && { - test -z "$ac_c_werror_flag" || - test ! -s conftest.err - } && test -s conftest.$ac_objext; then : - ac_retval=0 -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - - ac_retval=1 -fi - eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno - as_fn_set_status $ac_retval - -} # ac_fn_c_try_compile -cat >config.log <<_ACEOF -This file contains any messages produced by compilers while -running configure, to aid debugging if configure makes a mistake. - -It was created by $as_me, which was -generated by GNU Autoconf 2.69. Invocation command line was - - $ $0 $@ - -_ACEOF -exec 5>>config.log -{ -cat <<_ASUNAME -## --------- ## -## Platform. ## -## --------- ## - -hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` -uname -m = `(uname -m) 2>/dev/null || echo unknown` -uname -r = `(uname -r) 2>/dev/null || echo unknown` -uname -s = `(uname -s) 2>/dev/null || echo unknown` -uname -v = `(uname -v) 2>/dev/null || echo unknown` - -/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` -/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` - -/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` -/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` -/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` -/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` -/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` -/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` -/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` - -_ASUNAME - -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - $as_echo "PATH: $as_dir" - done -IFS=$as_save_IFS - -} >&5 - -cat >&5 <<_ACEOF - - -## ----------- ## -## Core tests. ## -## ----------- ## - -_ACEOF - - -# Keep a trace of the command line. -# Strip out --no-create and --no-recursion so they do not pile up. -# Strip out --silent because we don't want to record it for future runs. -# Also quote any args containing shell meta-characters. -# Make two passes to allow for proper duplicate-argument suppression. -ac_configure_args= -ac_configure_args0= -ac_configure_args1= -ac_must_keep_next=false -for ac_pass in 1 2 -do - for ac_arg - do - case $ac_arg in - -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil) - continue ;; - *\'*) - ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - case $ac_pass in - 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; - 2) - as_fn_append ac_configure_args1 " '$ac_arg'" - if test $ac_must_keep_next = true; then - ac_must_keep_next=false # Got value, back to normal. - else - case $ac_arg in - *=* | --config-cache | -C | -disable-* | --disable-* \ - | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ - | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ - | -with-* | --with-* | -without-* | --without-* | --x) - case "$ac_configure_args0 " in - "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; - esac - ;; - -* ) ac_must_keep_next=true ;; - esac - fi - as_fn_append ac_configure_args " '$ac_arg'" - ;; - esac - done -done -{ ac_configure_args0=; unset ac_configure_args0;} -{ ac_configure_args1=; unset ac_configure_args1;} - -# When interrupted or exit'd, cleanup temporary files, and complete -# config.log. We remove comments because anyway the quotes in there -# would cause problems or look ugly. -# WARNING: Use '\'' to represent an apostrophe within the trap. -# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. -trap 'exit_status=$? - # Save into config.log some information that might help in debugging. - { - echo - - $as_echo "## ---------------- ## -## Cache variables. ## -## ---------------- ##" - echo - # The following way of writing the cache mishandles newlines in values, -( - for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - (set) 2>&1 | - case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - sed -n \ - "s/'\''/'\''\\\\'\'''\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" - ;; #( - *) - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) - echo - - $as_echo "## ----------------- ## -## Output variables. ## -## ----------------- ##" - echo - for ac_var in $ac_subst_vars - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - - if test -n "$ac_subst_files"; then - $as_echo "## ------------------- ## -## File substitutions. ## -## ------------------- ##" - echo - for ac_var in $ac_subst_files - do - eval ac_val=\$$ac_var - case $ac_val in - *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; - esac - $as_echo "$ac_var='\''$ac_val'\''" - done | sort - echo - fi - - if test -s confdefs.h; then - $as_echo "## ----------- ## -## confdefs.h. ## -## ----------- ##" - echo - cat confdefs.h - echo - fi - test "$ac_signal" != 0 && - $as_echo "$as_me: caught signal $ac_signal" - $as_echo "$as_me: exit $exit_status" - } >&5 - rm -f core *.core core.conftest.* && - rm -f -r conftest* confdefs* conf$$* $ac_clean_files && - exit $exit_status -' 0 -for ac_signal in 1 2 13 15; do - trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal -done -ac_signal=0 - -# confdefs.h avoids OS command line length limits that DEFS can exceed. -rm -f -r conftest* confdefs.h - -$as_echo "/* confdefs.h */" > confdefs.h - -# Predefined preprocessor variables. - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_NAME "$PACKAGE_NAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_TARNAME "$PACKAGE_TARNAME" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_VERSION "$PACKAGE_VERSION" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_STRING "$PACKAGE_STRING" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" -_ACEOF - -cat >>confdefs.h <<_ACEOF -#define PACKAGE_URL "$PACKAGE_URL" -_ACEOF - - -# Let the site file select an alternate cache file if it wants to. -# Prefer an explicitly selected file to automatically selected ones. -ac_site_file1=NONE -ac_site_file2=NONE -if test -n "$CONFIG_SITE"; then - # We do not want a PATH search for config.site. - case $CONFIG_SITE in #(( - -*) ac_site_file1=./$CONFIG_SITE;; - */*) ac_site_file1=$CONFIG_SITE;; - *) ac_site_file1=./$CONFIG_SITE;; - esac -elif test "x$prefix" != xNONE; then - ac_site_file1=$prefix/share/config.site - ac_site_file2=$prefix/etc/config.site -else - ac_site_file1=$ac_default_prefix/share/config.site - ac_site_file2=$ac_default_prefix/etc/config.site -fi -for ac_site_file in "$ac_site_file1" "$ac_site_file2" -do - test "x$ac_site_file" = xNONE && continue - if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 -$as_echo "$as_me: loading site script $ac_site_file" >&6;} - sed 's/^/| /' "$ac_site_file" >&5 - . "$ac_site_file" \ - || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "failed to load site script $ac_site_file -See \`config.log' for more details" "$LINENO" 5; } - fi -done - -if test -r "$cache_file"; then - # Some versions of bash will fail to source /dev/null (special files - # actually), so we avoid doing that. DJGPP emulates it as a regular file. - if test /dev/null != "$cache_file" && test -f "$cache_file"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 -$as_echo "$as_me: loading cache $cache_file" >&6;} - case $cache_file in - [\\/]* | ?:[\\/]* ) . "$cache_file";; - *) . "./$cache_file";; - esac - fi -else - { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 -$as_echo "$as_me: creating cache $cache_file" >&6;} - >$cache_file -fi - -# Check that the precious variables saved in the cache have kept the same -# value. -ac_cache_corrupted=false -for ac_var in $ac_precious_vars; do - eval ac_old_set=\$ac_cv_env_${ac_var}_set - eval ac_new_set=\$ac_env_${ac_var}_set - eval ac_old_val=\$ac_cv_env_${ac_var}_value - eval ac_new_val=\$ac_env_${ac_var}_value - case $ac_old_set,$ac_new_set in - set,) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,set) - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 -$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} - ac_cache_corrupted=: ;; - ,);; - *) - if test "x$ac_old_val" != "x$ac_new_val"; then - # differences in whitespace do not lead to failure. - ac_old_val_w=`echo x $ac_old_val` - ac_new_val_w=`echo x $ac_new_val` - if test "$ac_old_val_w" != "$ac_new_val_w"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 -$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} - ac_cache_corrupted=: - else - { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 -$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} - eval $ac_var=\$ac_old_val - fi - { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 -$as_echo "$as_me: former value: \`$ac_old_val'" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 -$as_echo "$as_me: current value: \`$ac_new_val'" >&2;} - fi;; - esac - # Pass precious variables to config.status. - if test "$ac_new_set" = set; then - case $ac_new_val in - *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; - *) ac_arg=$ac_var=$ac_new_val ;; - esac - case " $ac_configure_args " in - *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. - *) as_fn_append ac_configure_args " '$ac_arg'" ;; - esac - fi -done -if $ac_cache_corrupted; then - { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} - { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 -$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} - as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 -fi -## -------------------- ## -## Main body of script. ## -## -------------------- ## - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - - - - - -# Check whether --enable-newlib-supplied-syscalls was given. -if test "${enable_newlib_supplied_syscalls+set}" = set; then : - enableval=$enable_newlib_supplied_syscalls; case "${enableval}" in - yes) newlib_may_supply_syscalls=yes ;; - no) newlib_may_supply_syscalls=no ;; - *) as_fn_error $? "bad value ${enableval} for newlib-supplied-syscalls option" "$LINENO" 5 ;; - esac -else - newlib_may_supply_syscalls=yes -fi - -if test "x$newlib_may_supply_syscalls" = "xyes"; then - BUILD_CRT0_TRUE='#' - BUILD_CRT0_FALSE= -else - BUILD_CRT0_TRUE= - BUILD_CRT0_FALSE='#' -fi - - - - -ac_aux_dir= -for ac_dir in ../.. "$srcdir"/../..; do - if test -f "$ac_dir/install-sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install-sh -c" - break - elif test -f "$ac_dir/install.sh"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/install.sh -c" - break - elif test -f "$ac_dir/shtool"; then - ac_aux_dir=$ac_dir - ac_install_sh="$ac_aux_dir/shtool install -c" - break - fi -done -if test -z "$ac_aux_dir"; then - as_fn_error $? "cannot find install-sh, install.sh, or shtool in ../.. \"$srcdir\"/../.." "$LINENO" 5 -fi - -# These three variables are undocumented and unsupported, -# and are intended to be withdrawn in a future Autoconf release. -# They can cause serious problems if a builder's source tree is in a directory -# whose full name contains unusual characters. -ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. -ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. -ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. - - - -# Make sure we can run config.sub. -$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || - as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 -$as_echo_n "checking build system type... " >&6; } -if ${ac_cv_build+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_build_alias=$build_alias -test "x$ac_build_alias" = x && - ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` -test "x$ac_build_alias" = x && - as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 -ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 -$as_echo "$ac_cv_build" >&6; } -case $ac_cv_build in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; -esac -build=$ac_cv_build -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_build -shift -build_cpu=$1 -build_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -build_os=$* -IFS=$ac_save_IFS -case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 -$as_echo_n "checking host system type... " >&6; } -if ${ac_cv_host+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "x$host_alias" = x; then - ac_cv_host=$ac_cv_build -else - ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 -$as_echo "$ac_cv_host" >&6; } -case $ac_cv_host in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; -esac -host=$ac_cv_host -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_host -shift -host_cpu=$1 -host_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -host_os=$* -IFS=$ac_save_IFS -case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 -$as_echo_n "checking target system type... " >&6; } -if ${ac_cv_target+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test "x$target_alias" = x; then - ac_cv_target=$ac_cv_host -else - ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || - as_fn_error $? "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 -$as_echo "$ac_cv_target" >&6; } -case $ac_cv_target in -*-*-*) ;; -*) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;; -esac -target=$ac_cv_target -ac_save_IFS=$IFS; IFS='-' -set x $ac_cv_target -shift -target_cpu=$1 -target_vendor=$2 -shift; shift -# Remember, the first character of IFS is used to create $*, -# except with old shells: -target_os=$* -IFS=$ac_save_IFS -case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac - - -# The aliases save the names the user supplied, while $host etc. -# will get canonicalized. -test -n "$target_alias" && - test "$program_prefix$program_suffix$program_transform_name" = \ - NONENONEs,x,x, && - program_prefix=${target_alias}- - -test "$program_prefix" != NONE && - program_transform_name="s&^&$program_prefix&;$program_transform_name" -# Use a double $ so make ignores it. -test "$program_suffix" != NONE && - program_transform_name="s&\$&$program_suffix&;$program_transform_name" -# Double any \ or $. -# By default was `s,x,x', remove it if useless. -ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' -program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` - - -# Find a good install program. We prefer a C program (faster), -# so one script is as good as another. But avoid the broken or -# incompatible versions: -# SysV /etc/install, /usr/sbin/install -# SunOS /usr/etc/install -# IRIX /sbin/install -# AIX /bin/install -# AmigaOS /C/install, which installs bootblocks on floppy discs -# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag -# AFS /usr/afsws/bin/install, which mishandles nonexistent args -# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" -# OS/2's system install, which has a completely different semantic -# ./install, which can be erroneously created by make from ./install.sh. -# Reject install programs that cannot install multiple files. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 -$as_echo_n "checking for a BSD-compatible install... " >&6; } -if test -z "$INSTALL"; then -if ${ac_cv_path_install+:} false; then : - $as_echo_n "(cached) " >&6 -else - as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - # Account for people who put trailing slashes in PATH elements. -case $as_dir/ in #(( - ./ | .// | /[cC]/* | \ - /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ - ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ - /usr/ucb/* ) ;; - *) - # OSF1 and SCO ODT 3.0 have their own names for install. - # Don't use installbsd from OSF since it installs stuff as root - # by default. - for ac_prog in ginstall scoinst install; do - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then - if test $ac_prog = install && - grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # AIX install. It has an incompatible calling convention. - : - elif test $ac_prog = install && - grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then - # program-specific install script used by HP pwplus--don't use. - : - else - rm -rf conftest.one conftest.two conftest.dir - echo one > conftest.one - echo two > conftest.two - mkdir conftest.dir - if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && - test -s conftest.one && test -s conftest.two && - test -s conftest.dir/conftest.one && - test -s conftest.dir/conftest.two - then - ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" - break 3 - fi - fi - fi - done - done - ;; -esac - - done -IFS=$as_save_IFS - -rm -rf conftest.one conftest.two conftest.dir - -fi - if test "${ac_cv_path_install+set}" = set; then - INSTALL=$ac_cv_path_install - else - # As a last resort, use the slow shell script. Don't cache a - # value for INSTALL within a source directory, because that will - # break other packages using the cache if that directory is - # removed, or if the value is a relative name. - INSTALL=$ac_install_sh - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 -$as_echo "$INSTALL" >&6; } - -# Use test -z because SunOS4 sh mishandles braces in ${var-val}. -# It thinks the first close brace ends the variable substitution. -test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' - -test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' - -test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' - - - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. -set dummy ${ac_tool_prefix}gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_CC"; then - ac_ct_CC=$CC - # Extract the first word of "gcc", so it can be a program name with args. -set dummy gcc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="gcc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -else - CC="$ac_cv_prog_CC" -fi - -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. -set dummy ${ac_tool_prefix}cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="${ac_tool_prefix}cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - fi -fi -if test -z "$CC"; then - # Extract the first word of "cc", so it can be a program name with args. -set dummy cc; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else - ac_prog_rejected=no -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then - ac_prog_rejected=yes - continue - fi - ac_cv_prog_CC="cc" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -if test $ac_prog_rejected = yes; then - # We found a bogon in the path, so make sure we never use it. - set dummy $ac_cv_prog_CC - shift - if test $# != 0; then - # We chose a different compiler from the bogus one. - # However, it has the same basename, so the bogon will be chosen - # first if we set CC to just the basename; use the full file name. - shift - ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" - fi -fi -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$CC"; then - if test -n "$ac_tool_prefix"; then - for ac_prog in cl.exe - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$CC"; then - ac_cv_prog_CC="$CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_CC="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -CC=$ac_cv_prog_CC -if test -n "$CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 -$as_echo "$CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$CC" && break - done -fi -if test -z "$CC"; then - ac_ct_CC=$CC - for ac_prog in cl.exe -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_CC+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_CC"; then - ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_CC="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_CC=$ac_cv_prog_ac_ct_CC -if test -n "$ac_ct_CC"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 -$as_echo "$ac_ct_CC" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_CC" && break -done - - if test "x$ac_ct_CC" = x; then - CC="" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - CC=$ac_ct_CC - fi -fi - -fi - - -test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "no acceptable C compiler found in \$PATH -See \`config.log' for more details" "$LINENO" 5; } - -# Provide some information about the compiler. -$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 -set X $ac_compile -ac_compiler=$2 -for ac_option in --version -v -V -qversion; do - { { ac_try="$ac_compiler $ac_option >&5" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compiler $ac_option >&5") 2>conftest.err - ac_status=$? - if test -s conftest.err; then - sed '10a\ -... rest of stderr output deleted ... - 10q' conftest.err >conftest.er1 - cat conftest.er1 >&5 - fi - rm -f conftest.er1 conftest.err - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } -done - -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then - ac_no_link=no - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" -# Try to create an executable without -o first, disregard a.out. -# It will help us diagnose broken compilers, and finding out an intuition -# of exeext. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 -$as_echo_n "checking whether the C compiler works... " >&6; } -ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` - -# The possible output files: -ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" - -ac_rmfiles= -for ac_file in $ac_files -do - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - * ) ac_rmfiles="$ac_rmfiles $ac_file";; - esac -done -rm -f $ac_rmfiles - -if { { ac_try="$ac_link_default" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link_default") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. -# So ignore a value of `no', otherwise this would lead to `EXEEXT = no' -# in a Makefile. We should not override ac_cv_exeext if it was cached, -# so that the user can short-circuit this test for compilers unknown to -# Autoconf. -for ac_file in $ac_files '' -do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) - ;; - [ab].out ) - # We found the default executable, but exeext='' is most - # certainly right. - break;; - *.* ) - if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; - then :; else - ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - fi - # We set ac_cv_exeext here because the later test for it is not - # safe: cross compilers may not add the suffix if given an `-o' - # argument, so we may need to know it at that point already. - # Even if this section looks crufty: it has the advantage of - # actually working. - break;; - * ) - break;; - esac -done -test "$ac_cv_exeext" = no && ac_cv_exeext= - -else - ac_file='' -fi -if test -z "$ac_file"; then : - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -$as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error 77 "C compiler cannot create executables -See \`config.log' for more details" "$LINENO" 5; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 -$as_echo "yes" >&6; } -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 -$as_echo_n "checking for C compiler default output file name... " >&6; } -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 -$as_echo "$ac_file" >&6; } -ac_exeext=$ac_cv_exeext - -rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out -ac_clean_files=$ac_clean_files_save -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 -$as_echo_n "checking for suffix of executables... " >&6; } -if { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - # If both `conftest.exe' and `conftest' are `present' (well, observable) -# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will -# work properly (i.e., refer to `conftest.exe'), while it won't with -# `rm'. -for ac_file in conftest.exe conftest conftest.*; do - test -f "$ac_file" || continue - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; - *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` - break;; - * ) break;; - esac -done -else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of executables: cannot compile and link -See \`config.log' for more details" "$LINENO" 5; } -fi -rm -f conftest conftest$ac_cv_exeext -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 -$as_echo "$ac_cv_exeext" >&6; } - -rm -f conftest.$ac_ext -EXEEXT=$ac_cv_exeext -ac_exeext=$EXEEXT -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -int -main () -{ -FILE *f = fopen ("conftest.out", "w"); - return ferror (f) || fclose (f) != 0; - - ; - return 0; -} -_ACEOF -ac_clean_files="$ac_clean_files conftest.out" -# Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } -if test "$cross_compiling" != yes; then - { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if { ac_try='./conftest$ac_cv_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details" "$LINENO" 5; } - fi - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } - -rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out -ac_clean_files=$ac_clean_files_save - -else - rm -f -r a.out a.exe b.out conftest.$ac_ext conftest.o conftest.obj conftest.dSYM - ac_no_link=yes - # Setting cross_compile will disable run tests; it will - # also disable AC_CHECK_FILE but that's generally - # correct if we can't link. - cross_compiling=yes - EXEEXT= - # Check that the compiler produces executables we can run. If not, either -# the compiler is broken, or we cross compile. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 -$as_echo_n "checking whether we are cross compiling... " >&6; } -if test "$cross_compiling" != yes; then - { { ac_try="$ac_link" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_link") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if { ac_try='./conftest$ac_cv_exeext' - { { case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_try") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; }; then - cross_compiling=no - else - if test "$cross_compiling" = maybe; then - cross_compiling=yes - else - { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot run C compiled programs. -If you meant to cross compile, use \`--host'. -See \`config.log' for more details" "$LINENO" 5; } - fi - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 -$as_echo "$cross_compiling" >&6; } - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 -$as_echo_n "checking for suffix of object files... " >&6; } -if ${ac_cv_objext+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -rm -f conftest.o conftest.obj -if { { ac_try="$ac_compile" -case "(($ac_try" in - *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; - *) ac_try_echo=$ac_try;; -esac -eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" -$as_echo "$ac_try_echo"; } >&5 - (eval "$ac_compile") 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; }; then : - for ac_file in conftest.o conftest.obj conftest.*; do - test -f "$ac_file" || continue; - case $ac_file in - *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; - *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` - break;; - esac -done -else - $as_echo "$as_me: failed program was:" >&5 -sed 's/^/| /' conftest.$ac_ext >&5 - -{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 -$as_echo "$as_me: error: in \`$ac_pwd':" >&2;} -as_fn_error $? "cannot compute suffix of object files: cannot compile -See \`config.log' for more details" "$LINENO" 5; } -fi -rm -f conftest.$ac_cv_objext conftest.$ac_ext -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 -$as_echo "$ac_cv_objext" >&6; } -OBJEXT=$ac_cv_objext -ac_objext=$OBJEXT -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 -$as_echo_n "checking whether we are using the GNU C compiler... " >&6; } -if ${ac_cv_c_compiler_gnu+:} false; then : - $as_echo_n "(cached) " >&6 -else - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ -#ifndef __GNUC__ - choke me -#endif - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_compiler_gnu=yes -else - ac_compiler_gnu=no -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -ac_cv_c_compiler_gnu=$ac_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 -$as_echo "$ac_cv_c_compiler_gnu" >&6; } -if test $ac_compiler_gnu = yes; then - GCC=yes -else - GCC= -fi -ac_test_CFLAGS=${CFLAGS+set} -ac_save_CFLAGS=$CFLAGS -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 -$as_echo_n "checking whether $CC accepts -g... " >&6; } -if ${ac_cv_prog_cc_g+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_save_c_werror_flag=$ac_c_werror_flag - ac_c_werror_flag=yes - ac_cv_prog_cc_g=no - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -else - CFLAGS="" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - -else - ac_c_werror_flag=$ac_save_c_werror_flag - CFLAGS="-g" - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ - -int -main () -{ - - ; - return 0; -} -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_g=yes -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_c_werror_flag=$ac_save_c_werror_flag -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 -$as_echo "$ac_cv_prog_cc_g" >&6; } -if test "$ac_test_CFLAGS" = set; then - CFLAGS=$ac_save_CFLAGS -elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" - else - CFLAGS="-g" - fi -else - if test "$GCC" = yes; then - CFLAGS="-O2" - else - CFLAGS= - fi -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 -$as_echo_n "checking for $CC option to accept ISO C89... " >&6; } -if ${ac_cv_prog_cc_c89+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_cv_prog_cc_c89=no -ac_save_CC=$CC -cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -#include -#include -struct stat; -/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ -struct buf { int x; }; -FILE * (*rcsopen) (struct buf *, struct stat *, int); -static char *e (p, i) - char **p; - int i; -{ - return p[i]; -} -static char *f (char * (*g) (char **, int), char **p, ...) -{ - char *s; - va_list v; - va_start (v,p); - s = g (p, va_arg (v,int)); - va_end (v); - return s; -} - -/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has - function prototypes and stuff, but not '\xHH' hex character constants. - These don't provoke an error unfortunately, instead are silently treated - as 'x'. The following induces an error, until -std is added to get - proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an - array size at least. It's necessary to write '\x00'==0 to get something - that's true only with -std. */ -int osf4_cc_array ['\x00' == 0 ? 1 : -1]; - -/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters - inside strings and character constants. */ -#define FOO(x) 'x' -int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; - -int test (int i, double x); -struct s1 {int (*f) (int a);}; -struct s2 {int (*f) (double a);}; -int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); -int argc; -char **argv; -int -main () -{ -return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; - ; - return 0; -} -_ACEOF -for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ - -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" -do - CC="$ac_save_CC $ac_arg" - if ac_fn_c_try_compile "$LINENO"; then : - ac_cv_prog_cc_c89=$ac_arg -fi -rm -f core conftest.err conftest.$ac_objext - test "x$ac_cv_prog_cc_c89" != "xno" && break -done -rm -f conftest.$ac_ext -CC=$ac_save_CC - -fi -# AC_CACHE_VAL -case "x$ac_cv_prog_cc_c89" in - x) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 -$as_echo "none needed" >&6; } ;; - xno) - { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 -$as_echo "unsupported" >&6; } ;; - *) - CC="$CC $ac_cv_prog_cc_c89" - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 -$as_echo "$ac_cv_prog_cc_c89" >&6; } ;; -esac -if test "x$ac_cv_prog_cc_c89" != xno; then : - -fi - -ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -rm -rf .tst 2>/dev/null -mkdir .tst 2>/dev/null -if test -d .tst; then - am__leading_dot=. -else - am__leading_dot=_ -fi -rmdir .tst 2>/dev/null - -DEPDIR="${am__leading_dot}deps" - -ac_config_commands="$ac_config_commands depfiles" - - -am_make=${MAKE-make} -cat > confinc << 'END' -am__doit: - @echo this is the am__doit target -.PHONY: am__doit -END -# If we don't find an include directive, just comment out the code. -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 -$as_echo_n "checking for style of include used by $am_make... " >&6; } -am__include="#" -am__quote= -_am_result=none -# First try GNU make style include. -echo "include confinc" > confmf -# Ignore all kinds of additional output from 'make'. -case `$am_make -s -f confmf 2> /dev/null` in #( -*the\ am__doit\ target*) - am__include=include - am__quote= - _am_result=GNU - ;; -esac -# Now try BSD make style include. -if test "$am__include" = "#"; then - echo '.include "confinc"' > confmf - case `$am_make -s -f confmf 2> /dev/null` in #( - *the\ am__doit\ target*) - am__include=.include - am__quote="\"" - _am_result=BSD - ;; - esac -fi - - -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 -$as_echo "$_am_result" >&6; } -rm -f confinc confmf - -# Check whether --enable-dependency-tracking was given. -if test "${enable_dependency_tracking+set}" = set; then : - enableval=$enable_dependency_tracking; -fi - -if test "x$enable_dependency_tracking" != xno; then - am_depcomp="$ac_aux_dir/depcomp" - AMDEPBACKSLASH='\' - am__nodep='_no' -fi - if test "x$enable_dependency_tracking" != xno; then - AMDEP_TRUE= - AMDEP_FALSE='#' -else - AMDEP_TRUE='#' - AMDEP_FALSE= -fi - - -# By default we simply use the C compiler to build assembly code. - -test "${CCAS+set}" = set || CCAS=$CC -test "${CCASFLAGS+set}" = set || CCASFLAGS=$CFLAGS - - - -depcc="$CCAS" am_compiler_list= - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 -$as_echo_n "checking dependency style of $depcc... " >&6; } -if ${am_cv_CCAS_dependencies_compiler_type+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then - # We make a subdir and do the tests there. Otherwise we can end up - # making bogus files that we don't know about and never remove. For - # instance it was reported that on HP-UX the gcc test will end up - # making a dummy file named 'D' -- because '-MD' means "put the output - # in D". - rm -rf conftest.dir - mkdir conftest.dir - # Copy depcomp to subdir because otherwise we won't find it if we're - # using a relative directory. - cp "$am_depcomp" conftest.dir - cd conftest.dir - # We will build objects and dependencies in a subdirectory because - # it helps to detect inapplicable dependency modes. For instance - # both Tru64's cc and ICC support -MD to output dependencies as a - # side effect of compilation, but ICC will put the dependencies in - # the current directory while Tru64 will put them in the object - # directory. - mkdir sub - - am_cv_CCAS_dependencies_compiler_type=none - if test "$am_compiler_list" = ""; then - am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` - fi - am__universal=false - - - for depmode in $am_compiler_list; do - # Setup a source with many dependencies, because some compilers - # like to wrap large dependency lists on column 80 (with \), and - # we should not choose a depcomp mode which is confused by this. - # - # We need to recreate these files for each test, as the compiler may - # overwrite some of them when testing with obscure command lines. - # This happens at least with the AIX C compiler. - : > sub/conftest.c - for i in 1 2 3 4 5 6; do - echo '#include "conftst'$i'.h"' >> sub/conftest.c - # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with - # Solaris 10 /bin/sh. - echo '/* dummy */' > sub/conftst$i.h - done - echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf - - # We check with '-c' and '-o' for the sake of the "dashmstdout" - # mode. It turns out that the SunPro C++ compiler does not properly - # handle '-M -o', and we need to detect this. Also, some Intel - # versions had trouble with output in subdirs. - am__obj=sub/conftest.${OBJEXT-o} - am__minus_obj="-o $am__obj" - case $depmode in - gcc) - # This depmode causes a compiler race in universal mode. - test "$am__universal" = false || continue - ;; - nosideeffect) - # After this tag, mechanisms are not by side-effect, so they'll - # only be used when explicitly requested. - if test "x$enable_dependency_tracking" = xyes; then - continue - else - break - fi - ;; - msvc7 | msvc7msys | msvisualcpp | msvcmsys) - # This compiler won't grok '-c -o', but also, the minuso test has - # not run yet. These depmodes are late enough in the game, and - # so weak that their functioning should not be impacted. - am__obj=conftest.${OBJEXT-o} - am__minus_obj= - ;; - none) break ;; - esac - if depmode=$depmode \ - source=sub/conftest.c object=$am__obj \ - depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ - $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ - >/dev/null 2>conftest.err && - grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && - grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && - grep $am__obj sub/conftest.Po > /dev/null 2>&1 && - ${MAKE-make} -s -f confmf > /dev/null 2>&1; then - # icc doesn't choke on unknown options, it will just issue warnings - # or remarks (even with -Werror). So we grep stderr for any message - # that says an option was ignored or not supported. - # When given -MP, icc 7.0 and 7.1 complain thusly: - # icc: Command line warning: ignoring option '-M'; no argument required - # The diagnosis changed in icc 8.0: - # icc: Command line remark: option '-MP' not supported - if (grep 'ignoring option' conftest.err || - grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else - am_cv_CCAS_dependencies_compiler_type=$depmode - break - fi - fi - done - - cd .. - rm -rf conftest.dir -else - am_cv_CCAS_dependencies_compiler_type=none -fi - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CCAS_dependencies_compiler_type" >&5 -$as_echo "$am_cv_CCAS_dependencies_compiler_type" >&6; } -CCASDEPMODE=depmode=$am_cv_CCAS_dependencies_compiler_type - - if - test "x$enable_dependency_tracking" != xno \ - && test "$am_cv_CCAS_dependencies_compiler_type" = gcc3; then - am__fastdepCCAS_TRUE= - am__fastdepCCAS_FALSE='#' -else - am__fastdepCCAS_TRUE='#' - am__fastdepCCAS_FALSE= -fi - - -# Expand $ac_aux_dir to an absolute path. -am_aux_dir=`cd "$ac_aux_dir" && pwd` - - -if test -n "$ac_tool_prefix"; then - for ac_prog in ar lib "link -lib" - do - # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. -set dummy $ac_tool_prefix$ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$AR"; then - ac_cv_prog_AR="$AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_AR="$ac_tool_prefix$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -AR=$ac_cv_prog_AR -if test -n "$AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5 -$as_echo "$AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$AR" && break - done -fi -if test -z "$AR"; then - ac_ct_AR=$AR - for ac_prog in ar lib "link -lib" -do - # Extract the first word of "$ac_prog", so it can be a program name with args. -set dummy $ac_prog; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_AR+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_AR"; then - ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_AR="$ac_prog" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_AR=$ac_cv_prog_ac_ct_AR -if test -n "$ac_ct_AR"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5 -$as_echo "$ac_ct_AR" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - - test -n "$ac_ct_AR" && break -done - - if test "x$ac_ct_AR" = x; then - AR="false" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - AR=$ac_ct_AR - fi -fi - -: ${AR=ar} - -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the archiver ($AR) interface" >&5 -$as_echo_n "checking the archiver ($AR) interface... " >&6; } -if ${am_cv_ar_interface+:} false; then : - $as_echo_n "(cached) " >&6 -else - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - - am_cv_ar_interface=ar - cat confdefs.h - <<_ACEOF >conftest.$ac_ext -/* end confdefs.h. */ -int some_variable = 0; -_ACEOF -if ac_fn_c_try_compile "$LINENO"; then : - am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&5' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 - (eval $am_ar_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if test "$ac_status" -eq 0; then - am_cv_ar_interface=ar - else - am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&5' - { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 - (eval $am_ar_try) 2>&5 - ac_status=$? - $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 - test $ac_status = 0; } - if test "$ac_status" -eq 0; then - am_cv_ar_interface=lib - else - am_cv_ar_interface=unknown - fi - fi - rm -f conftest.lib libconftest.a - -fi -rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext - ac_ext=c -ac_cpp='$CPP $CPPFLAGS' -ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' -ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' -ac_compiler_gnu=$ac_cv_c_compiler_gnu - -fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_ar_interface" >&5 -$as_echo "$am_cv_ar_interface" >&6; } - -case $am_cv_ar_interface in -ar) - ;; -lib) - # Microsoft lib, so override with the ar-lib wrapper script. - # FIXME: It is wrong to rewrite AR. - # But if we don't then we get into trouble of one sort or another. - # A longer-term fix would be to have automake use am__AR in this case, - # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something - # similar. - AR="$am_aux_dir/ar-lib $AR" - ;; -unknown) - as_fn_error $? "could not determine $AR interface" "$LINENO" 5 - ;; -esac - -LD=${LD-ld} - -if test -n "$ac_tool_prefix"; then - # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. -set dummy ${ac_tool_prefix}ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$RANLIB"; then - ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -RANLIB=$ac_cv_prog_RANLIB -if test -n "$RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 -$as_echo "$RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - -fi -if test -z "$ac_cv_prog_RANLIB"; then - ac_ct_RANLIB=$RANLIB - # Extract the first word of "ranlib", so it can be a program name with args. -set dummy ranlib; ac_word=$2 -{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 -$as_echo_n "checking for $ac_word... " >&6; } -if ${ac_cv_prog_ac_ct_RANLIB+:} false; then : - $as_echo_n "(cached) " >&6 -else - if test -n "$ac_ct_RANLIB"; then - ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. -else -as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - for ac_exec_ext in '' $ac_executable_extensions; do - if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then - ac_cv_prog_ac_ct_RANLIB="ranlib" - $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 - break 2 - fi -done - done -IFS=$as_save_IFS - -fi -fi -ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB -if test -n "$ac_ct_RANLIB"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 -$as_echo "$ac_ct_RANLIB" >&6; } -else - { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 -$as_echo "no" >&6; } -fi - - if test "x$ac_ct_RANLIB" = x; then - RANLIB=":" - else - case $cross_compiling:$ac_tool_warned in -yes:) -{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 -$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} -ac_tool_warned=yes ;; -esac - RANLIB=$ac_ct_RANLIB - fi -else - RANLIB="$ac_cv_prog_RANLIB" -fi - - -case "${target}" in - *-*-elf | *-*-eabi* | *-*-tirtos*) - objtype=elf- - ;; - *-*-coff) - objtype=coff- - ;; -esac - - - -host_makefile_frag=`cd $srcdir/../config;pwd`/default.mh - -host_makefile_frag_path=$host_makefile_frag - - - -# Configure cpu init plug-ins -if test -d "${srcdir}/cpu-init"; then - subdirs="${subdirs} cpu-init" - ac_config_files="$ac_config_files cpu-init/Makefile" - - -fi - -# Default to --enable-multilib -# Check whether --enable-multilib was given. -if test "${enable_multilib+set}" = set; then : - enableval=$enable_multilib; case "$enableval" in - yes) multilib=yes ;; - no) multilib=no ;; - *) as_fn_error $? "bad value $enableval for multilib option" "$LINENO" 5 ;; - esac -else - multilib=yes -fi - - -# We may get other options which we leave undocumented: -# --with-target-subdir, --with-multisrctop, --with-multisubdir -# See config-ml.in if you want the gory details. - -if test "$srcdir" = "."; then - if test "$with_target_subdir" != "."; then - multi_basedir="$srcdir/$with_multisrctop../../.." - else - multi_basedir="$srcdir/$with_multisrctop../.." - fi -else - multi_basedir="$srcdir/../.." -fi - - -# Even if the default multilib is not a cross compilation, -# it may be that some of the other multilibs are. -if test $cross_compiling = no && test $multilib = yes \ - && test "x${with_multisubdir}" != x ; then - cross_compiling=maybe -fi - -ac_config_commands="$ac_config_commands default-1" - - -ac_config_files="$ac_config_files Makefile" - -cat >confcache <<\_ACEOF -# This file is a shell script that caches the results of configure -# tests run on this system so they can be shared between configure -# scripts and configure runs, see configure's option --config-cache. -# It is not useful on other systems. If it contains results you don't -# want to keep, you may remove or edit it. -# -# config.status only pays attention to the cache file if you give it -# the --recheck option to rerun configure. -# -# `ac_cv_env_foo' variables (set or unset) will be overridden when -# loading this file, other *unset* `ac_cv_foo' will be assigned the -# following values. - -_ACEOF - -# The following way of writing the cache mishandles newlines in values, -# but we know of no workaround that is simple, portable, and efficient. -# So, we kill variables containing newlines. -# Ultrix sh set writes to stderr and can't be redirected directly, -# and sets the high bit in the cache file unless we assign to the vars. -( - for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do - eval ac_val=\$$ac_var - case $ac_val in #( - *${as_nl}*) - case $ac_var in #( - *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 -$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; - esac - case $ac_var in #( - _ | IFS | as_nl) ;; #( - BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( - *) { eval $ac_var=; unset $ac_var;} ;; - esac ;; - esac - done - - (set) 2>&1 | - case $as_nl`(ac_space=' '; set) 2>&1` in #( - *${as_nl}ac_space=\ *) - # `set' does not quote correctly, so add quotes: double-quote - # substitution turns \\\\ into \\, and sed turns \\ into \. - sed -n \ - "s/'/'\\\\''/g; - s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" - ;; #( - *) - # `set' quotes correctly as required by POSIX, so do not add quotes. - sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" - ;; - esac | - sort -) | - sed ' - /^ac_cv_env_/b end - t clear - :clear - s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ - t end - s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ - :end' >>confcache -if diff "$cache_file" confcache >/dev/null 2>&1; then :; else - if test -w "$cache_file"; then - if test "x$cache_file" != "x/dev/null"; then - { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 -$as_echo "$as_me: updating cache $cache_file" >&6;} - if test ! -f "$cache_file" || test -h "$cache_file"; then - cat confcache >"$cache_file" - else - case $cache_file in #( - */* | ?:*) - mv -f confcache "$cache_file"$$ && - mv -f "$cache_file"$$ "$cache_file" ;; #( - *) - mv -f confcache "$cache_file" ;; - esac - fi - fi - else - { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 -$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} - fi -fi -rm -f confcache - -test "x$prefix" = xNONE && prefix=$ac_default_prefix -# Let make expand exec_prefix. -test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' - -# Transform confdefs.h into DEFS. -# Protect against shell expansion while executing Makefile rules. -# Protect against Makefile macro expansion. -# -# If the first sed substitution is executed (which looks for macros that -# take arguments), then branch to the quote section. Otherwise, -# look for a macro that doesn't take arguments. -ac_script=' -:mline -/\\$/{ - N - s,\\\n,, - b mline -} -t clear -:clear -s/^[ ]*#[ ]*define[ ][ ]*\([^ (][^ (]*([^)]*)\)[ ]*\(.*\)/-D\1=\2/g -t quote -s/^[ ]*#[ ]*define[ ][ ]*\([^ ][^ ]*\)[ ]*\(.*\)/-D\1=\2/g -t quote -b any -:quote -s/[ `~#$^&*(){}\\|;'\''"<>?]/\\&/g -s/\[/\\&/g -s/\]/\\&/g -s/\$/$$/g -H -:any -${ - g - s/^\n// - s/\n/ /g - p -} -' -DEFS=`sed -n "$ac_script" confdefs.h` - - -ac_libobjs= -ac_ltlibobjs= -U= -for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue - # 1. Remove the extension, and $U if already installed. - ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' - ac_i=`$as_echo "$ac_i" | sed "$ac_script"` - # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR - # will be set to the directory where LIBOBJS objects are built. - as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" - as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' -done -LIBOBJS=$ac_libobjs - -LTLIBOBJS=$ac_ltlibobjs - - -if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then - as_fn_error $? "conditional \"AMDEP\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi -if test -z "${am__fastdepCCAS_TRUE}" && test -z "${am__fastdepCCAS_FALSE}"; then - as_fn_error $? "conditional \"am__fastdepCCAS\" was never defined. -Usually this means the macro was only invoked conditionally." "$LINENO" 5 -fi - -: "${CONFIG_STATUS=./config.status}" -ac_write_fail=0 -ac_clean_files_save=$ac_clean_files -ac_clean_files="$ac_clean_files $CONFIG_STATUS" -{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 -$as_echo "$as_me: creating $CONFIG_STATUS" >&6;} -as_write_fail=0 -cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 -#! $SHELL -# Generated by $as_me. -# Run this file to recreate the current configuration. -# Compiler output produced by configure, useful for debugging -# configure, is in config.log if it exists. - -debug=false -ac_cs_recheck=false -ac_cs_silent=false - -SHELL=\${CONFIG_SHELL-$SHELL} -export SHELL -_ASEOF -cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 -## -------------------- ## -## M4sh Initialization. ## -## -------------------- ## - -# Be more Bourne compatible -DUALCASE=1; export DUALCASE # for MKS sh -if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : - emulate sh - NULLCMD=: - # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which - # is contrary to our usage. Disable this feature. - alias -g '${1+"$@"}'='"$@"' - setopt NO_GLOB_SUBST -else - case `(set -o) 2>/dev/null` in #( - *posix*) : - set -o posix ;; #( - *) : - ;; -esac -fi - - -as_nl=' -' -export as_nl -# Printing a long string crashes Solaris 7 /usr/bin/printf. -as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo -as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo -# Prefer a ksh shell builtin over an external printf program on Solaris, -# but without wasting forks for bash or zsh. -if test -z "$BASH_VERSION$ZSH_VERSION" \ - && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='print -r --' - as_echo_n='print -rn --' -elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then - as_echo='printf %s\n' - as_echo_n='printf %s' -else - if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then - as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' - as_echo_n='/usr/ucb/echo -n' - else - as_echo_body='eval expr "X$1" : "X\\(.*\\)"' - as_echo_n_body='eval - arg=$1; - case $arg in #( - *"$as_nl"*) - expr "X$arg" : "X\\(.*\\)$as_nl"; - arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; - esac; - expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" - ' - export as_echo_n_body - as_echo_n='sh -c $as_echo_n_body as_echo' - fi - export as_echo_body - as_echo='sh -c $as_echo_body as_echo' -fi - -# The user is always right. -if test "${PATH_SEPARATOR+set}" != set; then - PATH_SEPARATOR=: - (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { - (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || - PATH_SEPARATOR=';' - } -fi - - -# IFS -# We need space, tab and new line, in precisely that order. Quoting is -# there to prevent editors from complaining about space-tab. -# (If _AS_PATH_WALK were called with IFS unset, it would disable word -# splitting by setting IFS to empty value.) -IFS=" "" $as_nl" - -# Find who we are. Look in the path if we contain no directory separator. -as_myself= -case $0 in #(( - *[\\/]* ) as_myself=$0 ;; - *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR -for as_dir in $PATH -do - IFS=$as_save_IFS - test -z "$as_dir" && as_dir=. - test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break - done -IFS=$as_save_IFS - - ;; -esac -# We did not find ourselves, most probably we were run as `sh COMMAND' -# in which case we are not to be found in the path. -if test "x$as_myself" = x; then - as_myself=$0 -fi -if test ! -f "$as_myself"; then - $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 - exit 1 -fi - -# Unset variables that we do not need and which cause bugs (e.g. in -# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" -# suppresses any "Segmentation fault" message there. '((' could -# trigger a bug in pdksh 5.2.14. -for as_var in BASH_ENV ENV MAIL MAILPATH -do eval test x\${$as_var+set} = xset \ - && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : -done -PS1='$ ' -PS2='> ' -PS4='+ ' - -# NLS nuisances. -LC_ALL=C -export LC_ALL -LANGUAGE=C -export LANGUAGE - -# CDPATH. -(unset CDPATH) >/dev/null 2>&1 && unset CDPATH - - -# as_fn_error STATUS ERROR [LINENO LOG_FD] -# ---------------------------------------- -# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are -# provided, also output the error to LOG_FD, referencing LINENO. Then exit the -# script with STATUS, using 1 if that was 0. -as_fn_error () -{ - as_status=$1; test $as_status -eq 0 && as_status=1 - if test "$4"; then - as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack - $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 - fi - $as_echo "$as_me: error: $2" >&2 - as_fn_exit $as_status -} # as_fn_error - - -# as_fn_set_status STATUS -# ----------------------- -# Set $? to STATUS, without forking. -as_fn_set_status () -{ - return $1 -} # as_fn_set_status - -# as_fn_exit STATUS -# ----------------- -# Exit the shell with STATUS, even in a "trap 0" or "set -e" context. -as_fn_exit () -{ - set +e - as_fn_set_status $1 - exit $1 -} # as_fn_exit - -# as_fn_unset VAR -# --------------- -# Portably unset VAR. -as_fn_unset () -{ - { eval $1=; unset $1;} -} -as_unset=as_fn_unset -# as_fn_append VAR VALUE -# ---------------------- -# Append the text in VALUE to the end of the definition contained in VAR. Take -# advantage of any shell optimizations that allow amortized linear growth over -# repeated appends, instead of the typical quadratic growth present in naive -# implementations. -if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : - eval 'as_fn_append () - { - eval $1+=\$2 - }' -else - as_fn_append () - { - eval $1=\$$1\$2 - } -fi # as_fn_append - -# as_fn_arith ARG... -# ------------------ -# Perform arithmetic evaluation on the ARGs, and store the result in the -# global $as_val. Take advantage of shells that can avoid forks. The arguments -# must be portable across $(()) and expr. -if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : - eval 'as_fn_arith () - { - as_val=$(( $* )) - }' -else - as_fn_arith () - { - as_val=`expr "$@" || test $? -eq 1` - } -fi # as_fn_arith - - -if expr a : '\(a\)' >/dev/null 2>&1 && - test "X`expr 00001 : '.*\(...\)'`" = X001; then - as_expr=expr -else - as_expr=false -fi - -if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then - as_basename=basename -else - as_basename=false -fi - -if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then - as_dirname=dirname -else - as_dirname=false -fi - -as_me=`$as_basename -- "$0" || -$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ - X"$0" : 'X\(//\)$' \| \ - X"$0" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X/"$0" | - sed '/^.*\/\([^/][^/]*\)\/*$/{ - s//\1/ - q - } - /^X\/\(\/\/\)$/{ - s//\1/ - q - } - /^X\/\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - -# Avoid depending upon Character Ranges. -as_cr_letters='abcdefghijklmnopqrstuvwxyz' -as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' -as_cr_Letters=$as_cr_letters$as_cr_LETTERS -as_cr_digits='0123456789' -as_cr_alnum=$as_cr_Letters$as_cr_digits - -ECHO_C= ECHO_N= ECHO_T= -case `echo -n x` in #((((( --n*) - case `echo 'xy\c'` in - *c*) ECHO_T=' ';; # ECHO_T is single tab character. - xy) ECHO_C='\c';; - *) echo `echo ksh88 bug on AIX 6.1` > /dev/null - ECHO_T=' ';; - esac;; -*) - ECHO_N='-n';; -esac - -rm -f conf$$ conf$$.exe conf$$.file -if test -d conf$$.dir; then - rm -f conf$$.dir/conf$$.file -else - rm -f conf$$.dir - mkdir conf$$.dir 2>/dev/null -fi -if (echo >conf$$.file) 2>/dev/null; then - if ln -s conf$$.file conf$$ 2>/dev/null; then - as_ln_s='ln -s' - # ... but there are two gotchas: - # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. - # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. - # In both cases, we have to default to `cp -pR'. - ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || - as_ln_s='cp -pR' - elif ln conf$$.file conf$$ 2>/dev/null; then - as_ln_s=ln - else - as_ln_s='cp -pR' - fi -else - as_ln_s='cp -pR' -fi -rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file -rmdir conf$$.dir 2>/dev/null - - -# as_fn_mkdir_p -# ------------- -# Create "$as_dir" as a directory, including parents if necessary. -as_fn_mkdir_p () -{ - - case $as_dir in #( - -*) as_dir=./$as_dir;; - esac - test -d "$as_dir" || eval $as_mkdir_p || { - as_dirs= - while :; do - case $as_dir in #( - *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( - *) as_qdir=$as_dir;; - esac - as_dirs="'$as_qdir' $as_dirs" - as_dir=`$as_dirname -- "$as_dir" || -$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$as_dir" : 'X\(//\)[^/]' \| \ - X"$as_dir" : 'X\(//\)$' \| \ - X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$as_dir" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - test -d "$as_dir" && break - done - test -z "$as_dirs" || eval "mkdir $as_dirs" - } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir" - - -} # as_fn_mkdir_p -if mkdir -p . 2>/dev/null; then - as_mkdir_p='mkdir -p "$as_dir"' -else - test -d ./-p && rmdir ./-p - as_mkdir_p=false -fi - - -# as_fn_executable_p FILE -# ----------------------- -# Test if FILE is an executable regular file. -as_fn_executable_p () -{ - test -f "$1" && test -x "$1" -} # as_fn_executable_p -as_test_x='test -x' -as_executable_p=as_fn_executable_p - -# Sed expression to map a string onto a valid CPP name. -as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" - -# Sed expression to map a string onto a valid variable name. -as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" - - -exec 6>&1 -## ----------------------------------- ## -## Main body of $CONFIG_STATUS script. ## -## ----------------------------------- ## -_ASEOF -test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# Save the log message, to keep $0 and so on meaningful, and to -# report actual input values of CONFIG_FILES etc. instead of their -# values after options handling. -ac_log=" -This file was extended by $as_me, which was -generated by GNU Autoconf 2.69. Invocation command line was - - CONFIG_FILES = $CONFIG_FILES - CONFIG_HEADERS = $CONFIG_HEADERS - CONFIG_LINKS = $CONFIG_LINKS - CONFIG_COMMANDS = $CONFIG_COMMANDS - $ $0 $@ - -on `(hostname || uname -n) 2>/dev/null | sed 1q` -" - -_ACEOF - -case $ac_config_files in *" -"*) set x $ac_config_files; shift; ac_config_files=$*;; -esac - - - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# Files that config.status was made for. -config_files="$ac_config_files" -config_commands="$ac_config_commands" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -ac_cs_usage="\ -\`$as_me' instantiates files and other configuration actions -from templates according to the current configuration. Unless the files -and actions are specified as TAGs, all are instantiated by default. - -Usage: $0 [OPTION]... [TAG]... - - -h, --help print this help, then exit - -V, --version print version number and configuration settings, then exit - --config print configuration, then exit - -q, --quiet, --silent - do not print progress messages - -d, --debug don't remove temporary files - --recheck update $as_me by reconfiguring in the same conditions - --file=FILE[:TEMPLATE] - instantiate the configuration file FILE - -Configuration files: -$config_files - -Configuration commands: -$config_commands - -Report bugs to the package provider." - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" -ac_cs_version="\\ -config.status -configured by $0, generated by GNU Autoconf 2.69, - with options \\"\$ac_cs_config\\" - -Copyright (C) 2012 Free Software Foundation, Inc. -This config.status script is free software; the Free Software Foundation -gives unlimited permission to copy, distribute and modify it." - -ac_pwd='$ac_pwd' -srcdir='$srcdir' -INSTALL='$INSTALL' -test -n "\$AWK" || AWK=awk -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# The default lists apply if the user does not specify any file. -ac_need_defaults=: -while test $# != 0 -do - case $1 in - --*=?*) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` - ac_shift=: - ;; - --*=) - ac_option=`expr "X$1" : 'X\([^=]*\)='` - ac_optarg= - ac_shift=: - ;; - *) - ac_option=$1 - ac_optarg=$2 - ac_shift=shift - ;; - esac - - case $ac_option in - # Handling of the options. - -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) - ac_cs_recheck=: ;; - --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) - $as_echo "$ac_cs_version"; exit ;; - --config | --confi | --conf | --con | --co | --c ) - $as_echo "$ac_cs_config"; exit ;; - --debug | --debu | --deb | --de | --d | -d ) - debug=: ;; - --file | --fil | --fi | --f ) - $ac_shift - case $ac_optarg in - *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; - '') as_fn_error $? "missing file argument" ;; - esac - as_fn_append CONFIG_FILES " '$ac_optarg'" - ac_need_defaults=false;; - --he | --h | --help | --hel | -h ) - $as_echo "$ac_cs_usage"; exit ;; - -q | -quiet | --quiet | --quie | --qui | --qu | --q \ - | -silent | --silent | --silen | --sile | --sil | --si | --s) - ac_cs_silent=: ;; - - # This is an error. - -*) as_fn_error $? "unrecognized option: \`$1' -Try \`$0 --help' for more information." ;; - - *) as_fn_append ac_config_targets " $1" - ac_need_defaults=false ;; - - esac - shift -done - -ac_configure_extra_args= - -if $ac_cs_silent; then - exec 6>/dev/null - ac_configure_extra_args="$ac_configure_extra_args --silent" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -if \$ac_cs_recheck; then - set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion - shift - \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 - CONFIG_SHELL='$SHELL' - export CONFIG_SHELL - exec "\$@" -fi - -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -exec 5>>config.log -{ - echo - sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX -## Running $as_me. ## -_ASBOX - $as_echo "$ac_log" -} >&5 - -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -# -# INIT-COMMANDS -# -AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" - -srcdir="$srcdir" -host="$host" -target="$target" -with_multisubdir="$with_multisubdir" -with_multisrctop="$with_multisrctop" -with_target_subdir="$with_target_subdir" -ac_configure_args="${multilib_arg} ${ac_configure_args}" -multi_basedir="$multi_basedir" -CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} -CC="$CC" -CXX="$CXX" -GFORTRAN="$GFORTRAN" -GCJ="$GCJ" - -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 - -# Handling of arguments. -for ac_config_target in $ac_config_targets -do - case $ac_config_target in - "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; - "cpu-init/Makefile") CONFIG_FILES="$CONFIG_FILES cpu-init/Makefile" ;; - "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; - "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; - - *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; - esac -done - - -# If the user did not use the arguments to specify the items to instantiate, -# then the envvar interface is used. Set only those that are not. -# We use the long form for the default assignment because of an extremely -# bizarre bug on SunOS 4.1.3. -if $ac_need_defaults; then - test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files - test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands -fi - -# Have a temporary directory for convenience. Make it in the build tree -# simply because there is no reason against having it here, and in addition, -# creating and moving files from /tmp can sometimes cause problems. -# Hook for its removal unless debugging. -# Note that there is a small window in which the directory will not be cleaned: -# after its creation but before its name has been assigned to `$tmp'. -$debug || -{ - tmp= ac_tmp= - trap 'exit_status=$? - : "${ac_tmp:=$tmp}" - { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status -' 0 - trap 'as_fn_exit 1' 1 2 13 15 -} -# Create a (secure) tmp directory for tmp files. - -{ - tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && - test -d "$tmp" -} || -{ - tmp=./conf$$-$RANDOM - (umask 077 && mkdir "$tmp") -} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 -ac_tmp=$tmp - -# Set up the scripts for CONFIG_FILES section. -# No need to generate them if there are no CONFIG_FILES. -# This happens for instance with `./config.status config.h'. -if test -n "$CONFIG_FILES"; then - -if $AWK 'BEGIN { getline <"/dev/null" }' /dev/null; then - ac_cs_awk_getline=: - ac_cs_awk_pipe_init= - ac_cs_awk_read_file=' - while ((getline aline < (F[key])) > 0) - print(aline) - close(F[key])' - ac_cs_awk_pipe_fini= -else - ac_cs_awk_getline=false - ac_cs_awk_pipe_init="print \"cat <<'|#_!!_#|' &&\"" - ac_cs_awk_read_file=' - print "|#_!!_#|" - print "cat " F[key] " &&" - '$ac_cs_awk_pipe_init - # The final `:' finishes the AND list. - ac_cs_awk_pipe_fini='END { print "|#_!!_#|"; print ":" }' -fi -ac_cr=`echo X | tr X '\015'` -# On cygwin, bash can eat \r inside `` if the user requested igncr. -# But we know of no other shell where ac_cr would be empty at this -# point, so we can use a bashism as a fallback. -if test "x$ac_cr" = x; then - eval ac_cr=\$\'\\r\' -fi -ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` -if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then - ac_cs_awk_cr='\\r' -else - ac_cs_awk_cr=$ac_cr -fi - -echo 'BEGIN {' >"$ac_tmp/subs1.awk" && -_ACEOF - -# Create commands to substitute file output variables. -{ - echo "cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1" && - echo 'cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&' && - echo "$ac_subst_files" | sed 's/.*/F["&"]="$&"/' && - echo "_ACAWK" && - echo "_ACEOF" -} >conf$$files.sh && -. ./conf$$files.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 -rm -f conf$$files.sh - -{ - echo "cat >conf$$subs.awk <<_ACEOF" && - echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && - echo "_ACEOF" -} >conf$$subs.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 -ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'` -ac_delim='%!_!# ' -for ac_last_try in false false false false false :; do - . ./conf$$subs.sh || - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 - - ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` - if test $ac_delim_n = $ac_delim_num; then - break - elif $ac_last_try; then - as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5 - else - ac_delim="$ac_delim!$ac_delim _$ac_delim!! " - fi -done -rm -f conf$$subs.sh - -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK && -_ACEOF -sed -n ' -h -s/^/S["/; s/!.*/"]=/ -p -g -s/^[^!]*!// -:repl -t repl -s/'"$ac_delim"'$// -t delim -:nl -h -s/\(.\{148\}\)..*/\1/ -t more1 -s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ -p -n -b repl -:more1 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t nl -:delim -h -s/\(.\{148\}\)..*/\1/ -t more2 -s/["\\]/\\&/g; s/^/"/; s/$/"/ -p -b -:more2 -s/["\\]/\\&/g; s/^/"/; s/$/"\\/ -p -g -s/.\{148\}// -t delim -' >$CONFIG_STATUS || ac_write_fail=1 -rm -f conf$$subs.awk -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -_ACAWK -cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && - for (key in S) S_is_set[key] = 1 - FS = "" - \$ac_cs_awk_pipe_init -} -{ - line = $ 0 - nfields = split(line, field, "@") - substed = 0 - len = length(field[1]) - for (i = 2; i < nfields; i++) { - key = field[i] - keylen = length(key) - if (S_is_set[key]) { - value = S[key] - line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) - len += length(value) + length(field[++i]) - substed = 1 - } else - len += 1 + keylen - } - if (nfields == 3 && !substed) { - key = field[2] - if (F[key] != "" && line ~ /^[ ]*@.*@[ ]*$/) { - \$ac_cs_awk_read_file - next - } - } - print line -} -\$ac_cs_awk_pipe_fini -_ACAWK -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then - sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" -else - cat -fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \ - || as_fn_error $? "could not setup config files machinery" "$LINENO" 5 -_ACEOF - -# VPATH may cause trouble with some makes, so we remove sole $(srcdir), -# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and -# trailing colons and then remove the whole line if VPATH becomes empty -# (actually we leave an empty line to preserve line numbers). -if test "x$srcdir" = x.; then - ac_vpsub='/^[ ]*VPATH[ ]*=[ ]*/{ -h -s/// -s/^/:/ -s/[ ]*$/:/ -s/:\$(srcdir):/:/g -s/:\${srcdir}:/:/g -s/:@srcdir@:/:/g -s/^:*// -s/:*$// -x -s/\(=[ ]*\).*/\1/ -G -s/\n// -s/^[^=]*=[ ]*$// -}' -fi - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -fi # test -n "$CONFIG_FILES" - - -eval set X " :F $CONFIG_FILES :C $CONFIG_COMMANDS" -shift -for ac_tag -do - case $ac_tag in - :[FHLC]) ac_mode=$ac_tag; continue;; - esac - case $ac_mode$ac_tag in - :[FHL]*:*);; - :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; - :[FH]-) ac_tag=-:-;; - :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; - esac - ac_save_IFS=$IFS - IFS=: - set x $ac_tag - IFS=$ac_save_IFS - shift - ac_file=$1 - shift - - case $ac_mode in - :L) ac_source=$1;; - :[FH]) - ac_file_inputs= - for ac_f - do - case $ac_f in - -) ac_f="$ac_tmp/stdin";; - *) # Look for the file first in the build tree, then in the source tree - # (if the path is not absolute). The absolute path cannot be DOS-style, - # because $ac_f cannot contain `:'. - test -f "$ac_f" || - case $ac_f in - [\\/$]*) false;; - *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; - esac || - as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; - esac - case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac - as_fn_append ac_file_inputs " '$ac_f'" - done - - # Let's still pretend it is `configure' which instantiates (i.e., don't - # use $as_me), people would be surprised to read: - # /* config.h. Generated by config.status. */ - configure_input='Generated from '` - $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' - `' by configure.' - if test x"$ac_file" != x-; then - configure_input="$ac_file. $configure_input" - { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 -$as_echo "$as_me: creating $ac_file" >&6;} - fi - # Neutralize special characters interpreted by sed in replacement strings. - case $configure_input in #( - *\&* | *\|* | *\\* ) - ac_sed_conf_input=`$as_echo "$configure_input" | - sed 's/[\\\\&|]/\\\\&/g'`;; #( - *) ac_sed_conf_input=$configure_input;; - esac - - case $ac_tag in - *:-:* | *:-) cat >"$ac_tmp/stdin" \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; - esac - ;; - esac - - ac_dir=`$as_dirname -- "$ac_file" || -$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$ac_file" : 'X\(//\)[^/]' \| \ - X"$ac_file" : 'X\(//\)$' \| \ - X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$ac_file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir="$ac_dir"; as_fn_mkdir_p - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - case $ac_mode in - :F) - # - # CONFIG_FILE - # - - case $INSTALL in - [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; - *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; - esac -_ACEOF - -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -# If the template does not know about datarootdir, expand it. -# FIXME: This hack should be removed a few years after 2.60. -ac_datarootdir_hack=; ac_datarootdir_seen= -ac_sed_dataroot=' -/datarootdir/ { - p - q -} -/@datadir@/p -/@docdir@/p -/@infodir@/p -/@localedir@/p -/@mandir@/p' -case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in -*datarootdir*) ac_datarootdir_seen=yes;; -*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 -$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} -_ACEOF -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 - ac_datarootdir_hack=' - s&@datadir@&$datadir&g - s&@docdir@&$docdir&g - s&@infodir@&$infodir&g - s&@localedir@&$localedir&g - s&@mandir@&$mandir&g - s&\\\${datarootdir}&$datarootdir&g' ;; -esac -_ACEOF - -# Neutralize VPATH when `$srcdir' = `.'. -# Shell code in configure.ac might set extrasub. -# FIXME: do we really want to maintain this feature? -cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 -ac_sed_extra="$ac_vpsub -$extrasub -_ACEOF -cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 -:t -/@[a-zA-Z_][a-zA-Z_0-9]*@/!b -s|@configure_input@|$ac_sed_conf_input|;t t -s&@top_builddir@&$ac_top_builddir_sub&;t t -s&@top_build_prefix@&$ac_top_build_prefix&;t t -s&@srcdir@&$ac_srcdir&;t t -s&@abs_srcdir@&$ac_abs_srcdir&;t t -s&@top_srcdir@&$ac_top_srcdir&;t t -s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t -s&@builddir@&$ac_builddir&;t t -s&@abs_builddir@&$ac_abs_builddir&;t t -s&@abs_top_builddir@&$ac_abs_top_builddir&;t t -s&@INSTALL@&$ac_INSTALL&;t t -$ac_datarootdir_hack -" -eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | -if $ac_cs_awk_getline; then - $AWK -f "$ac_tmp/subs.awk" -else - $AWK -f "$ac_tmp/subs.awk" | $SHELL -fi \ - >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - -test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && - { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && - { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ - "$ac_tmp/out"`; test -z "$ac_out"; } && - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&5 -$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' -which seems to be undefined. Please make sure it is defined" >&2;} - - rm -f "$ac_tmp/stdin" - case $ac_file in - -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; - *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";; - esac \ - || as_fn_error $? "could not create $ac_file" "$LINENO" 5 - ;; - - - :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 -$as_echo "$as_me: executing $ac_file commands" >&6;} - ;; - esac - - - case $ac_file$ac_mode in - "depfiles":C) test x"$AMDEP_TRUE" != x"" || { - # Older Autoconf quotes --file arguments for eval, but not when files - # are listed without --file. Let's play safe and only enable the eval - # if we detect the quoting. - case $CONFIG_FILES in - *\'*) eval set x "$CONFIG_FILES" ;; - *) set x $CONFIG_FILES ;; - esac - shift - for mf - do - # Strip MF so we end up with the name of the file. - mf=`echo "$mf" | sed -e 's/:.*$//'` - # Check whether this is an Automake generated Makefile or not. - # We used to match only the files named 'Makefile.in', but - # some people rename them; so instead we look at the file content. - # Grep'ing the first line is not enough: some people post-process - # each Makefile.in and add a new line on top of each file to say so. - # Grep'ing the whole file is not good either: AIX grep has a line - # limit of 2048, but all sed's we know have understand at least 4000. - if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then - dirpart=`$as_dirname -- "$mf" || -$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$mf" : 'X\(//\)[^/]' \| \ - X"$mf" : 'X\(//\)$' \| \ - X"$mf" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$mf" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - else - continue - fi - # Extract the definition of DEPDIR, am__include, and am__quote - # from the Makefile without running 'make'. - DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` - test -z "$DEPDIR" && continue - am__include=`sed -n 's/^am__include = //p' < "$mf"` - test -z "$am__include" && continue - am__quote=`sed -n 's/^am__quote = //p' < "$mf"` - # Find all dependency output files, they are included files with - # $(DEPDIR) in their names. We invoke sed twice because it is the - # simplest approach to changing $(DEPDIR) to its actual value in the - # expansion. - for file in `sed -n " - s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ - sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do - # Make sure the directory exists. - test -f "$dirpart/$file" && continue - fdir=`$as_dirname -- "$file" || -$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ - X"$file" : 'X\(//\)[^/]' \| \ - X"$file" : 'X\(//\)$' \| \ - X"$file" : 'X\(/\)' \| . 2>/dev/null || -$as_echo X"$file" | - sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ - s//\1/ - q - } - /^X\(\/\/\)[^/].*/{ - s//\1/ - q - } - /^X\(\/\/\)$/{ - s//\1/ - q - } - /^X\(\/\).*/{ - s//\1/ - q - } - s/.*/./; q'` - as_dir=$dirpart/$fdir; as_fn_mkdir_p - # echo "creating $dirpart/$file" - echo '# dummy' > "$dirpart/$file" - done - done -} - ;; - "cpu-init/Makefile":F) ac_file=cpu-init/Makefile . ${srcdir}/../../config-ml.in - ;; - "default-1":C) -# Only add multilib support code if we just rebuilt the top-level -# Makefile. -case " $CONFIG_FILES " in - *" Makefile "*) - ac_file=Makefile . ${multi_basedir}/config-ml.in - ;; -esac ;; - - esac -done # for ac_tag - - -as_fn_exit 0 -_ACEOF -ac_clean_files=$ac_clean_files_save - -test $ac_write_fail = 0 || - as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 - - -# configure is writing to config.log, and then calls config.status. -# config.status does its own redirection, appending to config.log. -# Unfortunately, on DOS this fails, as config.log is still kept open -# by configure, so config.status won't be able to write to it; its -# output is simply discarded. So we exec the FD to /dev/null, -# effectively closing config.log, so it can be properly (re)opened and -# appended to by config.status. When coming back to configure, we -# need to make the FD available again. -if test "$no_create" != yes; then - ac_cs_success=: - ac_config_status_args= - test "$silent" = yes && - ac_config_status_args="$ac_config_status_args --quiet" - exec 5>/dev/null - $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false - exec 5>>config.log - # Use ||, not &&, to avoid exiting from the if with $? = 1, which - # would make configure fail if this is the last instruction. - $ac_cs_success || as_fn_exit 1 -fi -if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 -$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} -fi - diff --git a/libgloss/arm/configure.ac b/libgloss/arm/configure.ac deleted file mode 100644 index 44f5f73962..0000000000 --- a/libgloss/arm/configure.ac +++ /dev/null @@ -1,72 +0,0 @@ -dnl Process this file with autoconf to produce a configure script. -AC_INIT(redboot-crt0.S) - -dnl Support --disable-newlib-supplied-syscalls -AC_ARG_ENABLE(newlib-supplied-syscalls, -[ --disable-newlib-supplied-syscalls disable newlib from supplying syscalls], -[case "${enableval}" in - yes) newlib_may_supply_syscalls=yes ;; - no) newlib_may_supply_syscalls=no ;; - *) AC_MSG_ERROR(bad value ${enableval} for newlib-supplied-syscalls option) ;; - esac], [newlib_may_supply_syscalls=yes])dnl - -if test "x$newlib_may_supply_syscalls" = "xyes"; then - BUILD_CRT0_TRUE='#' - BUILD_CRT0_FALSE= -else - BUILD_CRT0_TRUE= - BUILD_CRT0_FALSE='#' -fi - -AC_SUBST(BUILD_CRT0_TRUE) -AC_SUBST(BUILD_CRT0_FALSE) - -AC_CONFIG_AUX_DIR(../..) - -AC_CANONICAL_SYSTEM -AC_ARG_PROGRAM - -AC_PROG_INSTALL - -AC_NO_EXECUTABLES -AC_PROG_CC -AM_PROG_AS -AM_PROG_AR -LD=${LD-ld} -AC_SUBST(LD) -AC_PROG_RANLIB - -case "${target}" in - *-*-elf | *-*-eabi* | *-*-tirtos*) - objtype=elf- - ;; - *-*-coff) - objtype=coff- - ;; -esac - -AC_SUBST(objtype) - -host_makefile_frag=`cd $srcdir/../config;pwd`/default.mh - -dnl We have to assign the same value to other variables because autoconf -dnl doesn't provide a mechanism to substitute a replacement keyword with -dnl arbitrary data or pathnames. -dnl -host_makefile_frag_path=$host_makefile_frag -AC_SUBST(host_makefile_frag_path) -AC_SUBST_FILE(host_makefile_frag) - -# Configure cpu init plug-ins -if test -d "${srcdir}/cpu-init"; then - subdirs="${subdirs} cpu-init" - AC_CONFIG_FILES([cpu-init/Makefile], [dnl - ac_file=cpu-init/Makefile . ${srcdir}/../../config-ml.in - ]) - AC_SUBST(subdirs) -fi - -AM_ENABLE_MULTILIB(, ../..) - -AC_CONFIG_FILES([Makefile]) -AC_OUTPUT diff --git a/libgloss/arm/cpu-init/Makefile.in b/libgloss/arm/cpu-init/Makefile.in deleted file mode 100644 index 547c58daf8..0000000000 --- a/libgloss/arm/cpu-init/Makefile.in +++ /dev/null @@ -1,87 +0,0 @@ -# -# -DESTDIR = -VPATH = @srcdir@ @srcdir@/.. @srcdir@/../.. -srcdir = @srcdir@ -objdir = . -srcroot = $(srcdir)/../../.. -objroot = $(objdir)/../../.. - -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -host_alias = @host_alias@ -target_alias = @target_alias@ - -bindir = @bindir@ -libdir = @libdir@ -tooldir = $(exec_prefix)/$(target_alias) - -objtype = @objtype@ - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -# Multilib support variables. -# TOP is used instead of MULTI{BUILD,SRC}TOP. -MULTISRCTOP = -MULTIBUILDTOP = -MULTIDIRS = -MULTISUBDIR = -MULTIDO = true -MULTICLEAN = true - -SHELL = /bin/sh - -CC = @CC@ - -AS = @AS@ -AR = @AR@ -LD = @LD@ -RANLIB = @RANLIB@ - -CPU_INIT_OBJS = rdimon-aem.o -CPU_INIT_INSTALL = install-cpu-init - -CFLAGS = -g - -# Host specific makefile fragment comes in here. -@host_makefile_frag@ - -.PHONY: all -all: ${CPU_INIT_OBJS} - -# -# here's where we build the test programs for each target -# -.PHONY: test -test: - -# Static pattern rule for assembling cpu init files to object files. -${CPU_INIT_OBJS}: %.o: %.S - $(CC) $(CFLAGS_FOR_TARGET) $(CFLAGS) $(INCLUDES) -DARM_RDI_MONITOR -o $@ -c $< - -clean mostlyclean: - rm -f a.out core *.i *.o *-test *.srec *.dis *.x - -distclean maintainer-clean realclean: clean - rm -f Makefile *~ - -.PHONY: install info install-info clean-info -install: ${CPU_INIT_INSTALL} - -install-cpu-init: - test -d $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/cpu-init || mkdir $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/cpu-init - set -e; for x in ${CPU_INIT_OBJS}; do ${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/cpu-init/$$x; done - -doc: -info: -install-info: -clean-info: - -Makefile: Makefile.in ../config.status @host_makefile_frag_path@ - $(SHELL) ../config.status --file cpu-init/Makefile - -../config.status: ../configure - $(SHELL) ../config.status --recheck diff --git a/libgloss/arm/cpu-init/Makefile.inc b/libgloss/arm/cpu-init/Makefile.inc new file mode 100644 index 0000000000..5a8a75657a --- /dev/null +++ b/libgloss/arm/cpu-init/Makefile.inc @@ -0,0 +1,15 @@ +%C%cpuinitdir = $(tooldir)/lib$(MULTISUBDIR)/cpu-init +%C%cpuinit_DATA = \ + %D%/rdimon-aem.o + +## The manual dirstamp is needed as automake doesn't recognize compile rules +## via DATA. If we ever add rules it does know about, we can drop this. +%D%/$(am__dirstamp): + @$(MKDIR_P) %D% + @: > $@ + +%D%/rdimon-aem.$(OBJEXT): %D%/rdimon-aem.S %D%/$(am__dirstamp) + @$(MKDIR_P) %D% + $(AM_V_CC)$(COMPILE) -DARM_RDI_MONITOR -o $@ -c $< + +CLEANFILES += $(%C%cpuinit_DATA) diff --git a/libgloss/arm/crt0.S b/libgloss/arm/crt0.S index 78515180bf..cd1a20d617 100644 --- a/libgloss/arm/crt0.S +++ b/libgloss/arm/crt0.S @@ -122,10 +122,10 @@ * +-----+ <- SP_svc of getting in and out of secure state are not as * | | simple as writing to the CPSR mode bits. * | IRQ | -= 0x2000 - Mode switch via CPSR is not allowed once in -* | | non-privileged mode, so we take care not to enter -* ^ +-----+ <- SP_und "User" to set up its SP, and also skip most -* s | | operations if already in that mode. -* t | UND | -= 0x1000 +* | | non-privileged mode or in hypervisor mode, so we +* ^ +-----+ <- SP_und take care not to enter "User" or "Hypervisor" mode +* s | | to set up its SP, and also skip most operations if +* t | UND | -= 0x1000 already in these modes. * a | | Input parameters: * c +-----+ <- SP_und - sp - Initialized SP * k | | - r2 - May contain SL value from semihosting @@ -149,12 +149,11 @@ #if (__ARM_ARCH_PROFILE != 'M') /* Following code is compatible for both ARM and Thumb ISA. */ mrs r4, CPSR - /* Test mode bits - in User of all are 0. */ - tst r4, #(CPSR_M_MASK) - /* "eq" means r4 AND #0x0F is 0. */ - beq .Lskip_cpu_modes - mov r3, sp /* Save input SP value. */ + ands r1, r4, #(CPSR_M_MASK) + beq .Lskip_cpu_modes + cmp r1, #(CPSR_M_HYP) + beq .Lskip_cpu_modes /* FIQ mode, interrupts disabled. */ mov r1, #(CPSR_M_FIQ|CPSR_M_32BIT|CPSR_I_MASK|CPSR_F_MASK) diff --git a/libgloss/bfin/Makefile.inc b/libgloss/bfin/Makefile.inc index 47ba12c064..8574ed51cc 100644 --- a/libgloss/bfin/Makefile.inc +++ b/libgloss/bfin/Makefile.inc @@ -56,18 +56,18 @@ multilibtool_LIBRARIES += %D%/libbfinbsp.a $(%C%_CPPFLAGS) %D%/basiccrt.$(OBJEXT): %D%/basiccrt.S - $(AM_V_CC)$(COMPILE) $(%C%_CPPFLAGS) -o $@ -c $< $(if $(findstring mcpu=,$(CFLAGS)),,-mcpu=bf532-any) + $(AM_V_CPPAS)$(CPPASCOMPILE) $(%C%_CPPFLAGS) -o $@ -c $< $(if $(findstring mcpu=,$(CFLAGS)),,-mcpu=bf532-any) %D%/basiccrts.$(OBJEXT): %D%/basiccrt.S - $(AM_V_CC)$(COMPILE) $(%C%_CPPFLAGS) -o $@ -c $< $(if $(findstring mcpu=,$(CFLAGS)),,-mcpu=bf532-any) -D__BFIN_SDRAM + $(AM_V_CPPAS)$(CPPASCOMPILE) $(%C%_CPPFLAGS) -o $@ -c $< $(if $(findstring mcpu=,$(CFLAGS)),,-mcpu=bf532-any) -D__BFIN_SDRAM %D%/basiccrt561.$(OBJEXT): %D%/basiccrt.S - $(AM_V_CC)$(COMPILE) $(%C%_CPPFLAGS) -o $@ -c $< $(if $(findstring mcpu=,$(CFLAGS)),-mcpu=bf561-any,-mcpu=bf561-none) + $(AM_V_CPPAS)$(CPPASCOMPILE) $(%C%_CPPFLAGS) -o $@ -c $< $(if $(findstring mcpu=,$(CFLAGS)),-mcpu=bf561-any,-mcpu=bf561-none) %D%/basiccrt561s.$(OBJEXT): %D%/basiccrt.S - $(AM_V_CC)$(COMPILE) $(%C%_CPPFLAGS) -o $@ -c $< $(if $(findstring mcpu=,$(CFLAGS)),-mcpu=bf561-any,-mcpu=bf561-none) -D__BFIN_SDRAM + $(AM_V_CPPAS)$(CPPASCOMPILE) $(%C%_CPPFLAGS) -o $@ -c $< $(if $(findstring mcpu=,$(CFLAGS)),-mcpu=bf561-any,-mcpu=bf561-none) -D__BFIN_SDRAM %D%/basiccrt561b.$(OBJEXT): %D%/basiccrt.S - $(AM_V_CC)$(COMPILE) $(%C%_CPPFLAGS) -o $@ -c $< $(if $(findstring mcpu=,$(CFLAGS)),-mcpu=bf561-any,-mcpu=bf561-none) -D__ADSPBF561_COREB__ + $(AM_V_CPPAS)$(CPPASCOMPILE) $(%C%_CPPFLAGS) -o $@ -c $< $(if $(findstring mcpu=,$(CFLAGS)),-mcpu=bf561-any,-mcpu=bf561-none) -D__ADSPBF561_COREB__ %D%/basiccrt60x.$(OBJEXT): %D%/basiccrt.S - $(AM_V_CC)$(COMPILE) $(%C%_CPPFLAGS) -o $@ -c $< $(if $(findstring mcpu=,$(CFLAGS)),-mcpu=bf608-any,-mcpu=bf608-none) + $(AM_V_CPPAS)$(CPPASCOMPILE) $(%C%_CPPFLAGS) -o $@ -c $< $(if $(findstring mcpu=,$(CFLAGS)),-mcpu=bf608-any,-mcpu=bf608-none) %D%/basiccrt60xs.$(OBJEXT): %D%/basiccrt.S - $(AM_V_CC)$(COMPILE) $(%C%_CPPFLAGS) -o $@ -c $< $(if $(findstring mcpu=,$(CFLAGS)),-mcpu=bf608-any,-mcpu=bf608-none) -D__BFIN_SDRAM + $(AM_V_CPPAS)$(CPPASCOMPILE) $(%C%_CPPFLAGS) -o $@ -c $< $(if $(findstring mcpu=,$(CFLAGS)),-mcpu=bf608-any,-mcpu=bf608-none) -D__BFIN_SDRAM %D%/basiccrt60xc1.$(OBJEXT): %D%/basiccrt.S - $(AM_V_CC)$(COMPILE) $(%C%_CPPFLAGS) -o $@ -c $< $(if $(findstring mcpu=,$(CFLAGS)),-mcpu=bf608-any,-mcpu=bf608-none) -D__ADSPBF60x_CORE1__ + $(AM_V_CPPAS)$(CPPASCOMPILE) $(%C%_CPPFLAGS) -o $@ -c $< $(if $(findstring mcpu=,$(CFLAGS)),-mcpu=bf608-any,-mcpu=bf608-none) -D__ADSPBF60x_CORE1__ diff --git a/libgloss/bfin/syscalls.c b/libgloss/bfin/syscalls.c index 7bd0bede18..0497d1d987 100644 --- a/libgloss/bfin/syscalls.c +++ b/libgloss/bfin/syscalls.c @@ -27,6 +27,8 @@ #include #include +extern int main (int, char **, char **); + register char *stack_ptr asm ("SP"); static inline int @@ -254,7 +256,7 @@ __setup_argv_for_main (int argc) do_syscall (SYS_argn, (void *)block); } - return main (argc, argv); + return main (argc, argv, NULL); } int @@ -263,7 +265,7 @@ __setup_argv_and_call_main () int argc = do_syscall (SYS_argc, 0); if (argc <= 0) - return main (argc, NULL); + return main (argc, NULL, NULL); else return __setup_argv_for_main (argc); } diff --git a/libgloss/config/default.mh b/libgloss/config/default.mh index 4e7f106f93..64dc02f05c 100644 --- a/libgloss/config/default.mh +++ b/libgloss/config/default.mh @@ -1,7 +1,7 @@ NEWLIB_CFLAGS = `if [ -d ${objroot}/newlib ]; then echo -I${objroot}/newlib/targ-include -I${srcroot}/newlib/libc/include; fi` NEWLIB_LDFLAGS = `if [ -d ${objroot}/newlib ]; then echo -B${objroot}/newlib/ -L${objroot}/newlib/; fi` -INCLUDES = -I. -I$(srcdir)/.. -I$(objdir)/.. +INCLUDES = -I. -I$(srcdir)/.. -I$(objdir)/.. -idirafter $(srcroot)/include # Note that when building the library, ${MULTILIB} is not the way multilib # options are passed; they're passed in $(CFLAGS). CFLAGS_FOR_TARGET = -O2 -g ${MULTILIB} ${INCLUDES} ${NEWLIB_CFLAGS} @@ -14,7 +14,7 @@ AR_FLAGS = rc .C.o: $(CC) $(CFLAGS_FOR_TARGET) -O2 $(INCLUDES) -c $(CFLAGS) $< .s.o: - $(AS) $(ASFLAGS_FOR_TARGET) $(INCLUDES) $(ASFLAGS) -o $*.o $< + $(AS) $(ASFLAGS_FOR_TARGET) $(ASFLAGS) -o $*.o $< # # GCC knows to run the preprocessor on .S files before it assembles them. diff --git a/libgloss/config/mn10200.mt b/libgloss/config/mn10200.mt deleted file mode 100644 index cf565c1de9..0000000000 --- a/libgloss/config/mn10200.mt +++ /dev/null @@ -1,3 +0,0 @@ -# Dummy target-specific Makefile fragment for MN10200. We can't -# use default.mt because it refers to generic source files whose -# names conflict with the MN10200-specific sources. diff --git a/libgloss/config/mn10300.mt b/libgloss/config/mn10300.mt deleted file mode 100644 index 6b4c522c13..0000000000 --- a/libgloss/config/mn10300.mt +++ /dev/null @@ -1,3 +0,0 @@ -# Dummy target-specific Makefile fragment for MN10300. We can't -# use default.mt because it refers to generic source files whose -# names conflict with the MN10300-specific sources. diff --git a/libgloss/config/ppc.mh b/libgloss/config/ppc.mh index a3d157bb8f..d1bfd7588e 100644 --- a/libgloss/config/ppc.mh +++ b/libgloss/config/ppc.mh @@ -18,7 +18,7 @@ AR_FLAGS = qc .C.o: $(CC) $(CFLAGS_FOR_TARGET) $(CFLAGS_MRELOCATABLE) -O2 $(INCLUDES) -c $(CFLAGS) $< .s.o: - $(AS) $(ASFLAGS_FOR_TARGET) $(INCLUDES) $(ASFLAGS) -o $*.o $< + $(AS) $(ASFLAGS_FOR_TARGET) $(ASFLAGS) -o $*.o $< # # GCC knows to run the preprocessor on .S files before it assembles them. diff --git a/libgloss/config/xc16x.mt b/libgloss/config/xc16x.mt deleted file mode 100644 index 2ac79cebce..0000000000 --- a/libgloss/config/xc16x.mt +++ /dev/null @@ -1,3 +0,0 @@ -# Dummy target-specific Makefile fragment for XC16X. We can't -# use default.mt because it refers to generic source files whose -# names conflict with the XC16X-specific sources. diff --git a/libgloss/configure b/libgloss/configure index 81ac9cc6c4..a49f586386 100755 --- a/libgloss/configure +++ b/libgloss/configure @@ -582,7 +582,6 @@ PACKAGE_BUGREPORT='' PACKAGE_URL='' ac_no_link=no -enable_option_checking=no ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS @@ -590,19 +589,41 @@ LIBOBJS multi_basedir target_makefile_frag_path host_makefile_frag_path +HAVE_XTENSA_BOARD_ESP_FALSE +HAVE_XTENSA_BOARD_ESP_TRUE +HAVE_XTENSA_BOARD_ESP32S3_FALSE +HAVE_XTENSA_BOARD_ESP32S3_TRUE +HAVE_XTENSA_BOARD_ESP32_FALSE +HAVE_XTENSA_BOARD_ESP32_TRUE +XTENSA_BOARD_ESP +SPARC_CYGMONLDSCRIPTTEMPL +SPARC_BUILD_SLITE_FALSE +SPARC_BUILD_SLITE_TRUE +SPARC_BUILD_SPLET_FALSE +SPARC_BUILD_SPLET_TRUE +SPARC_BUILD_CYGMON_FALSE +SPARC_BUILD_CYGMON_TRUE +SPARC_CPU MOXIE_BUILD_CRT0_FALSE MOXIE_BUILD_CRT0_TRUE -MN10300_BSP_LIST -MN10300_SCRIPT_LIST +MN10300_BUILD_LIBCYGMON_FALSE +MN10300_BUILD_LIBCYGMON_TRUE MIPS_CRT0 MIPS_BSP_LIST MIPS_SCRIPT_LIST MIPS_PART_SPECIFIC_DEFINES MIPS_PART_SPECIFIC_OBJ -MCORE_BSP_PREFIX +MCORE_BUILD_PE_FALSE +MCORE_BUILD_PE_TRUE +MCORE_BUILD_ELF_FALSE +MCORE_BUILD_ELF_TRUE M68K_TARGET I386_CPPFLAGS +ARM_OBJTYPE +AARCH64_OBJTYPE CPP +OBJDUMP +OBJCOPY RANLIB LD ac_ct_AR @@ -629,18 +650,82 @@ CPPFLAGS LDFLAGS CFLAGS CC +CONFIG_XTENSA_FALSE +CONFIG_XTENSA_TRUE +CONFIG_XSTORMY16_FALSE +CONFIG_XSTORMY16_TRUE CONFIG_WINCE_FALSE CONFIG_WINCE_TRUE +CONFIG_VISIUM_FALSE +CONFIG_VISIUM_TRUE +CONFIG_V850_FALSE +CONFIG_V850_TRUE +CONFIG_TIC6X_FALSE +CONFIG_TIC6X_TRUE +CONFIG_SPARC_LEON_FALSE +CONFIG_SPARC_LEON_TRUE +CONFIG_SPARC_FALSE +CONFIG_SPARC_TRUE +CONFIG_RX_FALSE +CONFIG_RX_TRUE +CONFIG_RL78_FALSE +CONFIG_RL78_TRUE CONFIG_RISCV_FALSE CONFIG_RISCV_TRUE +CONFIG_PRU_FALSE +CONFIG_PRU_TRUE +CONFIG_OR1K_FALSE +CONFIG_OR1K_TRUE +CONFIG_NIOS2_FALSE +CONFIG_NIOS2_TRUE +CONFIG_NDS32_FALSE +CONFIG_NDS32_TRUE +CONFIG_MSP430_FALSE +CONFIG_MSP430_TRUE +CONFIG_MOXIE_FALSE +CONFIG_MOXIE_TRUE +CONFIG_MN10300_FALSE +CONFIG_MN10300_TRUE +CONFIG_MN10200_FALSE +CONFIG_MN10200_TRUE +CONFIG_MICROBLAZE_FALSE +CONFIG_MICROBLAZE_TRUE +CONFIG_MCORE_FALSE +CONFIG_MCORE_TRUE +CONFIG_M32R_FALSE +CONFIG_M32R_TRUE CONFIG_LM32_FALSE CONFIG_LM32_TRUE CONFIG_LIBNOSYS_FALSE CONFIG_LIBNOSYS_TRUE CONFIG_IQ2000_FALSE CONFIG_IQ2000_TRUE +CONFIG_I960_FALSE +CONFIG_I960_TRUE +CONFIG_I386_FALSE +CONFIG_I386_TRUE +CONFIG_FT32_FALSE +CONFIG_FT32_TRUE +CONFIG_FRV_FALSE +CONFIG_FRV_TRUE +CONFIG_FR30_FALSE +CONFIG_FR30_TRUE +CONFIG_EPIPHANY_FALSE +CONFIG_EPIPHANY_TRUE +CONFIG_D30V_FALSE +CONFIG_D30V_TRUE +CONFIG_CSKY_FALSE +CONFIG_CSKY_TRUE +CONFIG_CR16_FALSE +CONFIG_CR16_TRUE CONFIG_BFIN_FALSE CONFIG_BFIN_TRUE +CONFIG_ARM_FALSE +CONFIG_ARM_TRUE +CONFIG_ARC_FALSE +CONFIG_ARC_TRUE +CONFIG_AARCH64_FALSE +CONFIG_AARCH64_TRUE subdirs HAVE_MULTISUBDIR_FALSE HAVE_MULTISUBDIR_TRUE @@ -688,6 +773,8 @@ build INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM +MAY_SUPPLY_SYSCALLS_FALSE +MAY_SUPPLY_SYSCALLS_TRUE target_alias host_alias build_alias @@ -707,7 +794,6 @@ infodir docdir oldincludedir includedir -runstatedir localstatedir sharedstatedir sysconfdir @@ -731,6 +817,7 @@ ac_subst_files='host_makefile_frag target_makefile_frag' ac_user_opts=' enable_option_checking +enable_newlib_supplied_syscalls enable_silent_rules enable_maintainer_mode enable_dependency_tracking @@ -747,8 +834,7 @@ CPPFLAGS CCAS CCASFLAGS CPP' -ac_subdirs_all='aarch64 -arm' + # Initialize some variables set by options. ac_init_help= @@ -786,7 +872,6 @@ datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' -runstatedir='${localstatedir}/run' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE_TARNAME}' @@ -1039,15 +1124,6 @@ do | -silent | --silent | --silen | --sile | --sil) silent=yes ;; - -runstatedir | --runstatedir | --runstatedi | --runstated \ - | --runstate | --runstat | --runsta | --runst | --runs \ - | --run | --ru | --r) - ac_prev=runstatedir ;; - -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ - | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ - | --run=* | --ru=* | --r=*) - runstatedir=$ac_optarg ;; - -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ @@ -1185,7 +1261,7 @@ fi for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ - libdir localedir mandir runstatedir + libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. @@ -1338,7 +1414,6 @@ Fine tuning of the installation directories: --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] - --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] @@ -1378,6 +1453,7 @@ Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] + --disable-newlib-supplied-syscalls disable newlib from supplying syscalls --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-maintainer-mode @@ -1948,6 +2024,26 @@ ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. +# Check whether --enable-newlib-supplied-syscalls was given. +if test "${enable_newlib_supplied_syscalls+set}" = set; then : + enableval=$enable_newlib_supplied_syscalls; case "${enableval}" in + yes) newlib_may_supply_syscalls=yes ;; + no) newlib_may_supply_syscalls=no ;; + *) as_fn_error $? "bad value ${enableval} for newlib-supplied-syscalls option" "$LINENO" 5 ;; + esac +else + newlib_may_supply_syscalls=yes +fi + + if test x${newlib_may_supply_syscalls} = xyes; then + MAY_SUPPLY_SYSCALLS_TRUE= + MAY_SUPPLY_SYSCALLS_FALSE='#' +else + MAY_SUPPLY_SYSCALLS_TRUE='#' + MAY_SUPPLY_SYSCALLS_FALSE= +fi + + # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: @@ -2726,37 +2822,23 @@ target_makefile_frag=${srcdir}/config/default.mt case "${target}" in aarch64*-*-*) - - -subdirs="$subdirs aarch64" - + config_aarch64=true config_testsuite=true ;; arc*-*-*) - ac_config_files="$ac_config_files arc/Makefile" - - subdirs="$subdirs arc" + config_arc=true ;; csky*-*-*) - ac_config_files="$ac_config_files csky/Makefile" - - subdirs="$subdirs csky" + config_csky=true ;; epiphany-*-*) - ac_config_files="$ac_config_files epiphany/Makefile" - - subdirs="$subdirs epiphany" - config_testsuite=true + config_epiphany=true ;; i[3456]86-*-elf* | i[3456]86-*-coff*) - ac_config_files="$ac_config_files i386/Makefile" - - subdirs="$subdirs i386" + config_i386=true ;; m32r-*-*) - ac_config_files="$ac_config_files m32r/Makefile" - - subdirs="$subdirs m32r" + config_m32r=true ;; m68hc11-*-* | m6811-*-* | m68hc12-*-* | m6812-*-*) ac_config_files="$ac_config_files m68hc11/Makefile" @@ -2764,9 +2846,7 @@ subdirs="$subdirs aarch64" subdirs="$subdirs m68hc11" ;; nds32*-*-*) - ac_config_files="$ac_config_files nds32/Makefile" - - subdirs="$subdirs nds32" + config_nds32=true ;; fido-*-* | m68*-*-*) ac_config_files="$ac_config_files m68k/Makefile" @@ -2779,19 +2859,13 @@ subdirs="$subdirs aarch64" subdirs="$subdirs pa" ;; i960-*-coff) - ac_config_files="$ac_config_files i960/Makefile" - - subdirs="$subdirs i960" + config_i960=true ;; sparc-*leon*-elf* | sparc-*leon*-none*) - ac_config_files="$ac_config_files sparc_leon/Makefile" - - subdirs="$subdirs sparc_leon" + config_sparc_leon=true ;; sparclet-*-aout* | sparc-*-elf* | sparc64-*-elf* | sparc86x-*-* | sparclite-*-*) - ac_config_files="$ac_config_files sparc/Makefile" - - subdirs="$subdirs sparc" + config_sparc=true ;; sh*-*-pe | mips*-*-pe | *arm*-wince-pe) config_wince=true @@ -2812,24 +2886,16 @@ subdirs="$subdirs aarch64" host_makefile_frag=${srcdir}/config/ppc.mh ;; mn10200-*-*) - ac_config_files="$ac_config_files mn10200/Makefile" - - subdirs="$subdirs mn10200" - target_makefile_frag=${srcdir}/config/mn10200.mt + config_mn10200=true ;; mn10300-*-*) - ac_config_files="$ac_config_files mn10300/Makefile" - - subdirs="$subdirs mn10300" - target_makefile_frag=${srcdir}/config/mn10300.mt + config_mn10300=true ;; bfin-*-*) config_bfin=true ;; cr16-*-*) - ac_config_files="$ac_config_files cr16/Makefile" - - subdirs="$subdirs cr16" + config_cr16=true ;; cris-*-* | crisv32-*-*) ac_config_files="$ac_config_files cris/Makefile" @@ -2842,32 +2908,22 @@ subdirs="$subdirs aarch64" subdirs="$subdirs crx" ;; d30v-*-*) - ac_config_files="$ac_config_files d30v/Makefile" - - subdirs="$subdirs d30v" + config_d30v=true ;; fr30-*-*) - ac_config_files="$ac_config_files fr30/Makefile" - - subdirs="$subdirs fr30" + config_fr30=true ;; frv*-*-*) - ac_config_files="$ac_config_files frv/Makefile" - - subdirs="$subdirs frv" + config_frv=true ;; ft32*-*-*) - ac_config_files="$ac_config_files ft32/Makefile" - - subdirs="$subdirs ft32" + config_ft32=true ;; lm32*-*-*) config_lm32=true ;; mcore-*-*) - ac_config_files="$ac_config_files mcore/Makefile" - - subdirs="$subdirs mcore" + config_mcore=true ;; mep-*-*) ac_config_files="$ac_config_files mep/Makefile" @@ -2875,14 +2931,10 @@ subdirs="$subdirs aarch64" subdirs="$subdirs mep" ;; moxie-*-*) - ac_config_files="$ac_config_files moxie/Makefile" - - subdirs="$subdirs moxie" + config_moxie=true ;; microblaze*-*-*) - ac_config_files="$ac_config_files microblaze/Makefile" - - subdirs="$subdirs microblaze" + config_microblaze=true ;; mt-*-*) ac_config_files="$ac_config_files mt/Makefile" @@ -2890,26 +2942,17 @@ subdirs="$subdirs aarch64" subdirs="$subdirs mt" ;; v850*-*-*) - ac_config_files="$ac_config_files v850/Makefile" - - subdirs="$subdirs v850" + config_v850=true ;; visium-*-*) - ac_config_files="$ac_config_files visium/Makefile" - - subdirs="$subdirs visium" + config_visium=true config_testsuite=false ;; - xc16x-*-*) - ac_config_files="$ac_config_files xc16x/Makefile" - - subdirs="$subdirs xc16x" - target_makefile_frag=${srcdir}/config/xc16x.mt - ;; xstormy16-*-*) - ac_config_files="$ac_config_files xstormy16/Makefile" - - subdirs="$subdirs xstormy16" + config_xstormy16=true + ;; + xtensa-*-*) + config_xtensa=true ;; m32c-*-*) ac_config_files="$ac_config_files m32c/Makefile" @@ -2917,24 +2960,17 @@ subdirs="$subdirs aarch64" subdirs="$subdirs m32c" ;; msp430-*-elf*) - ac_config_files="$ac_config_files msp430/Makefile" - - subdirs="$subdirs msp430" + config_msp430=true config_libnosys=false ;; rl78*-*-elf) - ac_config_files="$ac_config_files rl78/Makefile" - - subdirs="$subdirs rl78" + config_rl78=true ;; rx*-*-elf) - ac_config_files="$ac_config_files rx/Makefile" - - subdirs="$subdirs rx" + config_rx=true ;; arm*-*-elf | arm*-*-coff | arm*-*-*) - subdirs="$subdirs arm" - + config_arm=true ;; spu-*-elf) ac_config_files="$ac_config_files spu/Makefile" @@ -2945,31 +2981,48 @@ subdirs="$subdirs aarch64" config_libnosys=false ;; tic6x-*-*) - ac_config_files="$ac_config_files tic6x/Makefile" - - subdirs="$subdirs tic6x" + config_tic6x=true config_testsuite=false ;; iq2000-*-*) config_iq2000=true ;; or1k-*-* | or1knd-*-* ) - ac_config_files="$ac_config_files or1k/Makefile" - - subdirs="$subdirs or1k" + config_or1k=true ;; pru-*-*) - ac_config_files="$ac_config_files pru/Makefile" - - subdirs="$subdirs pru" + config_pru=true ;; nios2-*-*) - ac_config_files="$ac_config_files nios2/Makefile" - - subdirs="$subdirs nios2" + config_nios2=true ;; esac + + if test x$config_aarch64 = xtrue; then + CONFIG_AARCH64_TRUE= + CONFIG_AARCH64_FALSE='#' +else + CONFIG_AARCH64_TRUE='#' + CONFIG_AARCH64_FALSE= +fi + + if test x$config_arc = xtrue; then + CONFIG_ARC_TRUE= + CONFIG_ARC_FALSE='#' +else + CONFIG_ARC_TRUE='#' + CONFIG_ARC_FALSE= +fi + + if test x$config_arm = xtrue; then + CONFIG_ARM_TRUE= + CONFIG_ARM_FALSE='#' +else + CONFIG_ARM_TRUE='#' + CONFIG_ARM_FALSE= +fi + if test x$config_bfin = xtrue; then CONFIG_BFIN_TRUE= CONFIG_BFIN_FALSE='#' @@ -2978,6 +3031,78 @@ else CONFIG_BFIN_FALSE= fi + if test x$config_cr16 = xtrue; then + CONFIG_CR16_TRUE= + CONFIG_CR16_FALSE='#' +else + CONFIG_CR16_TRUE='#' + CONFIG_CR16_FALSE= +fi + + if test x$config_csky = xtrue; then + CONFIG_CSKY_TRUE= + CONFIG_CSKY_FALSE='#' +else + CONFIG_CSKY_TRUE='#' + CONFIG_CSKY_FALSE= +fi + + if test x$config_d30v = xtrue; then + CONFIG_D30V_TRUE= + CONFIG_D30V_FALSE='#' +else + CONFIG_D30V_TRUE='#' + CONFIG_D30V_FALSE= +fi + + if test x$config_epiphany = xtrue; then + CONFIG_EPIPHANY_TRUE= + CONFIG_EPIPHANY_FALSE='#' +else + CONFIG_EPIPHANY_TRUE='#' + CONFIG_EPIPHANY_FALSE= +fi + + if test x$config_fr30 = xtrue; then + CONFIG_FR30_TRUE= + CONFIG_FR30_FALSE='#' +else + CONFIG_FR30_TRUE='#' + CONFIG_FR30_FALSE= +fi + + if test x$config_frv = xtrue; then + CONFIG_FRV_TRUE= + CONFIG_FRV_FALSE='#' +else + CONFIG_FRV_TRUE='#' + CONFIG_FRV_FALSE= +fi + + if test x$config_ft32 = xtrue; then + CONFIG_FT32_TRUE= + CONFIG_FT32_FALSE='#' +else + CONFIG_FT32_TRUE='#' + CONFIG_FT32_FALSE= +fi + + if test x$config_i386 = xtrue; then + CONFIG_I386_TRUE= + CONFIG_I386_FALSE='#' +else + CONFIG_I386_TRUE='#' + CONFIG_I386_FALSE= +fi + + if test x$config_i960 = xtrue; then + CONFIG_I960_TRUE= + CONFIG_I960_FALSE='#' +else + CONFIG_I960_TRUE='#' + CONFIG_I960_FALSE= +fi + if test x$config_iq2000 = xtrue; then CONFIG_IQ2000_TRUE= CONFIG_IQ2000_FALSE='#' @@ -3002,6 +3127,94 @@ else CONFIG_LM32_FALSE= fi + if test x$config_m32r = xtrue; then + CONFIG_M32R_TRUE= + CONFIG_M32R_FALSE='#' +else + CONFIG_M32R_TRUE='#' + CONFIG_M32R_FALSE= +fi + + if test x$config_mcore = xtrue; then + CONFIG_MCORE_TRUE= + CONFIG_MCORE_FALSE='#' +else + CONFIG_MCORE_TRUE='#' + CONFIG_MCORE_FALSE= +fi + + if test x$config_microblaze = xtrue; then + CONFIG_MICROBLAZE_TRUE= + CONFIG_MICROBLAZE_FALSE='#' +else + CONFIG_MICROBLAZE_TRUE='#' + CONFIG_MICROBLAZE_FALSE= +fi + + if test x$config_mn10200 = xtrue; then + CONFIG_MN10200_TRUE= + CONFIG_MN10200_FALSE='#' +else + CONFIG_MN10200_TRUE='#' + CONFIG_MN10200_FALSE= +fi + + if test x$config_mn10300 = xtrue; then + CONFIG_MN10300_TRUE= + CONFIG_MN10300_FALSE='#' +else + CONFIG_MN10300_TRUE='#' + CONFIG_MN10300_FALSE= +fi + + if test x$config_moxie = xtrue; then + CONFIG_MOXIE_TRUE= + CONFIG_MOXIE_FALSE='#' +else + CONFIG_MOXIE_TRUE='#' + CONFIG_MOXIE_FALSE= +fi + + if test x$config_msp430 = xtrue; then + CONFIG_MSP430_TRUE= + CONFIG_MSP430_FALSE='#' +else + CONFIG_MSP430_TRUE='#' + CONFIG_MSP430_FALSE= +fi + + if test x$config_nds32 = xtrue; then + CONFIG_NDS32_TRUE= + CONFIG_NDS32_FALSE='#' +else + CONFIG_NDS32_TRUE='#' + CONFIG_NDS32_FALSE= +fi + + if test x$config_nios2 = xtrue; then + CONFIG_NIOS2_TRUE= + CONFIG_NIOS2_FALSE='#' +else + CONFIG_NIOS2_TRUE='#' + CONFIG_NIOS2_FALSE= +fi + + if test x$config_or1k = xtrue; then + CONFIG_OR1K_TRUE= + CONFIG_OR1K_FALSE='#' +else + CONFIG_OR1K_TRUE='#' + CONFIG_OR1K_FALSE= +fi + + if test x$config_pru = xtrue; then + CONFIG_PRU_TRUE= + CONFIG_PRU_FALSE='#' +else + CONFIG_PRU_TRUE='#' + CONFIG_PRU_FALSE= +fi + if test x$config_riscv = xtrue; then CONFIG_RISCV_TRUE= CONFIG_RISCV_FALSE='#' @@ -3010,6 +3223,62 @@ else CONFIG_RISCV_FALSE= fi + if test x$config_rl78 = xtrue; then + CONFIG_RL78_TRUE= + CONFIG_RL78_FALSE='#' +else + CONFIG_RL78_TRUE='#' + CONFIG_RL78_FALSE= +fi + + if test x$config_rx = xtrue; then + CONFIG_RX_TRUE= + CONFIG_RX_FALSE='#' +else + CONFIG_RX_TRUE='#' + CONFIG_RX_FALSE= +fi + + if test x$config_sparc = xtrue; then + CONFIG_SPARC_TRUE= + CONFIG_SPARC_FALSE='#' +else + CONFIG_SPARC_TRUE='#' + CONFIG_SPARC_FALSE= +fi + + if test x$config_sparc_leon = xtrue; then + CONFIG_SPARC_LEON_TRUE= + CONFIG_SPARC_LEON_FALSE='#' +else + CONFIG_SPARC_LEON_TRUE='#' + CONFIG_SPARC_LEON_FALSE= +fi + + if test x$config_tic6x = xtrue; then + CONFIG_TIC6X_TRUE= + CONFIG_TIC6X_FALSE='#' +else + CONFIG_TIC6X_TRUE='#' + CONFIG_TIC6X_FALSE= +fi + + if test x$config_v850 = xtrue; then + CONFIG_V850_TRUE= + CONFIG_V850_FALSE='#' +else + CONFIG_V850_TRUE='#' + CONFIG_V850_FALSE= +fi + + if test x$config_visium = xtrue; then + CONFIG_VISIUM_TRUE= + CONFIG_VISIUM_FALSE='#' +else + CONFIG_VISIUM_TRUE='#' + CONFIG_VISIUM_FALSE= +fi + if test x$config_wince = xtrue; then CONFIG_WINCE_TRUE= CONFIG_WINCE_FALSE='#' @@ -3018,6 +3287,22 @@ else CONFIG_WINCE_FALSE= fi + if test x$config_xstormy16 = xtrue; then + CONFIG_XSTORMY16_TRUE= + CONFIG_XSTORMY16_FALSE='#' +else + CONFIG_XSTORMY16_TRUE='#' + CONFIG_XSTORMY16_FALSE= +fi + + if test x$config_xtensa = xtrue; then + CONFIG_XTENSA_TRUE= + CONFIG_XTENSA_FALSE='#' +else + CONFIG_XTENSA_TRUE='#' + CONFIG_XTENSA_FALSE= +fi + @@ -4535,6 +4820,190 @@ else RANLIB="$ac_cv_prog_RANLIB" fi +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objcopy", so it can be a program name with args. +set dummy ${ac_tool_prefix}objcopy; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OBJCOPY+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJCOPY"; then + ac_cv_prog_OBJCOPY="$OBJCOPY" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OBJCOPY="${ac_tool_prefix}objcopy" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJCOPY=$ac_cv_prog_OBJCOPY +if test -n "$OBJCOPY"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJCOPY" >&5 +$as_echo "$OBJCOPY" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJCOPY"; then + ac_ct_OBJCOPY=$OBJCOPY + # Extract the first word of "objcopy", so it can be a program name with args. +set dummy objcopy; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OBJCOPY+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJCOPY"; then + ac_cv_prog_ac_ct_OBJCOPY="$ac_ct_OBJCOPY" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OBJCOPY="objcopy" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJCOPY=$ac_cv_prog_ac_ct_OBJCOPY +if test -n "$ac_ct_OBJCOPY"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJCOPY" >&5 +$as_echo "$ac_ct_OBJCOPY" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJCOPY" = x; then + OBJCOPY=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJCOPY=$ac_ct_OBJCOPY + fi +else + OBJCOPY="$ac_cv_prog_OBJCOPY" +fi + +if test -n "$ac_tool_prefix"; then + # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. +set dummy ${ac_tool_prefix}objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$OBJDUMP"; then + ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +OBJDUMP=$ac_cv_prog_OBJDUMP +if test -n "$OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 +$as_echo "$OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + +fi +if test -z "$ac_cv_prog_OBJDUMP"; then + ac_ct_OBJDUMP=$OBJDUMP + # Extract the first word of "objdump", so it can be a program name with args. +set dummy objdump; ac_word=$2 +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if ${ac_cv_prog_ac_ct_OBJDUMP+:} false; then : + $as_echo_n "(cached) " >&6 +else + if test -n "$ac_ct_OBJDUMP"; then + ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then + ac_cv_prog_ac_ct_OBJDUMP="objdump" + $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done + done +IFS=$as_save_IFS + +fi +fi +ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP +if test -n "$ac_ct_OBJDUMP"; then + { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 +$as_echo "$ac_ct_OBJDUMP" >&6; } +else + { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 +$as_echo "no" >&6; } +fi + + if test "x$ac_ct_OBJDUMP" = x; then + OBJDUMP=":" + else + case $cross_compiling:$ac_tool_warned in +yes:) +{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 +$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} +ac_tool_warned=yes ;; +esac + OBJDUMP=$ac_ct_OBJDUMP + fi +else + OBJDUMP="$ac_cv_prog_OBJDUMP" +fi + $as_echo "#define HAVE_GNU_LD 1" >>confdefs.h @@ -4833,6 +5302,25 @@ cat >>confdefs.h <<_ACEOF _ACEOF +AARCH64_OBJTYPE= +case "${target}" in + *-*-elf) + AARCH64_OBJTYPE=elf- + ;; +esac + + +ARM_OBJTYPE= +case "${target}" in + *-*-elf | *-*-eabi* | *-*-tirtos*) + ARM_OBJTYPE=elf- + ;; + *-*-coff) + ARM_OBJTYPE=coff- + ;; +esac + + I386_CPPFLAGS= case "${target}" in i[3456]86-*-coff) @@ -4867,6 +5355,7 @@ case "${target}" in v850*-*-*) ;; w65-*-*) ;; xstormy16-*-*) ;; + xtensa-*-*) ;; z8k-*-*) ;; *) $as_echo "#define MISSING_SYSCALL_NAMES 1" >>confdefs.h @@ -4920,15 +5409,31 @@ $as_echo "$M68K_TARGET" >&6; } esac -MCORE_BSP_PREFIX= -case "${target}" in - mcore-*-elf) - MCORE_BSP_PREFIX=elf- - ;; - mcore-*-pe) - MCORE_BSP_PREFIX=pe- - ;; +MCORE_BUILD_ELF=false +MCORE_BUILD_PE=false +case ${target} in #( + mcore-*-elf) : + MCORE_BUILD_ELF=true ;; #( + mcore-*-pe) : + MCORE_BUILD_PE=true ;; #( + *) : + ;; esac + if $MCORE_BUILD_ELF; then + MCORE_BUILD_ELF_TRUE= + MCORE_BUILD_ELF_FALSE='#' +else + MCORE_BUILD_ELF_TRUE='#' + MCORE_BUILD_ELF_FALSE= +fi + + if $MCORE_BUILD_PE; then + MCORE_BUILD_PE_TRUE= + MCORE_BUILD_PE_FALSE='#' +else + MCORE_BUILD_PE_TRUE='#' + MCORE_BUILD_PE_FALSE= +fi MIPS_PART_SPECIFIC_OBJ= @@ -4979,32 +5484,103 @@ esac -MN10300_SCRIPT_LIST= -MN10300_BSP_LIST= -case "${target}" in - mn10300-*elf) - MN10300_SCRIPT_LIST="eval sim asb2303 asb2305" - MN10300_BSP_LIST="libeval.a libcygmon.a" - ;; - *) - MN10300_SCRIPT_LIST="eval sim" - MN10300_BSP_LIST="libeval.a" - ;; +case ${target} in #( + mn10300-*elf) : + MN10300_BUILD_LIBCYGMON=true ;; #( + *) : + MN10300_BUILD_LIBCYGMON=false ;; esac + if $MN10300_BUILD_LIBCYGMON; then + MN10300_BUILD_LIBCYGMON_TRUE= + MN10300_BUILD_LIBCYGMON_FALSE='#' +else + MN10300_BUILD_LIBCYGMON_TRUE='#' + MN10300_BUILD_LIBCYGMON_FALSE= +fi +case ${target} in #( + moxie-*-moxiebox*) : + MOXIE_BUILD_CRT0=false ;; #( + *) : + MOXIE_BUILD_CRT0=true ;; +esac + if $MOXIE_BUILD_CRT0; then + MOXIE_BUILD_CRT0_TRUE= + MOXIE_BUILD_CRT0_FALSE='#' +else + MOXIE_BUILD_CRT0_TRUE='#' + MOXIE_BUILD_CRT0_FALSE= +fi -case "${target}" in - moxie-*-moxiebox*) - MOXIE_BUILD_CRT0_TRUE='#' - MOXIE_BUILD_CRT0_FALSE= - ;; - *) - MOXIE_BUILD_CRT0_TRUE= - MOXIE_BUILD_CRT0_FALSE='#' - ;; + +SPARC_CPU=SPARC +SPARC_BUILD_CYGMON=true +case ${target_cpu} in +sparclite*) SPARC_CPU=SLITE ;; +sparclet*) SPARC_CPU=SPLET SPARC_BUILD_CYGMON=false ;; +sparc64*) SPARC_CPU=SPARC64 ;; +sparc86x*) SPARC_CPU=SLITE ;; esac + if $SPARC_BUILD_CYGMON; then + SPARC_BUILD_CYGMON_TRUE= + SPARC_BUILD_CYGMON_FALSE='#' +else + SPARC_BUILD_CYGMON_TRUE='#' + SPARC_BUILD_CYGMON_FALSE= +fi + + if test "$SPARC_CPU" = "SPLET"; then + SPARC_BUILD_SPLET_TRUE= + SPARC_BUILD_SPLET_FALSE='#' +else + SPARC_BUILD_SPLET_TRUE='#' + SPARC_BUILD_SPLET_FALSE= +fi + + if test "$SPARC_CPU" = "SLITE"; then + SPARC_BUILD_SLITE_TRUE= + SPARC_BUILD_SLITE_FALSE='#' +else + SPARC_BUILD_SLITE_TRUE='#' + SPARC_BUILD_SLITE_FALSE= +fi + + +SPARC_CYGMONLDSCRIPTTEMPL=cygmon.ld.src +case ${target_cpu} in +sparc64*) SPARC_CYGMONLDSCRIPTTEMPL=cygmon-sparc64-ld.src ;; +sparclet-*-aout*) SPARC_CYGMONLDSCRIPTTEMPL=cygmon.ld.src; ac_config_files="$ac_config_files sparc/libsys/Makefile" + ;; +esac + + +XTENSA_BOARD_ESP=`echo $CC | sed 's/.*-mdynconfig=xtensa_\(.*\)\.so.*/\1/;s/.*-mcpu=\(^ *\).*/\1/;s/.* .*/unknown/'` + + if test x$XTENSA_BOARD_ESP = xesp32; then + HAVE_XTENSA_BOARD_ESP32_TRUE= + HAVE_XTENSA_BOARD_ESP32_FALSE='#' +else + HAVE_XTENSA_BOARD_ESP32_TRUE='#' + HAVE_XTENSA_BOARD_ESP32_FALSE= +fi + + if test x$XTENSA_BOARD_ESP = xesp32s3; then + HAVE_XTENSA_BOARD_ESP32S3_TRUE= + HAVE_XTENSA_BOARD_ESP32S3_FALSE='#' +else + HAVE_XTENSA_BOARD_ESP32S3_TRUE='#' + HAVE_XTENSA_BOARD_ESP32S3_FALSE= +fi + + if echo $XTENSA_BOARD_ESP | grep -w -e esp32 -e esp32s3 >/dev/null 2>&1; then + HAVE_XTENSA_BOARD_ESP_TRUE= + HAVE_XTENSA_BOARD_ESP_FALSE='#' +else + HAVE_XTENSA_BOARD_ESP_TRUE='#' + HAVE_XTENSA_BOARD_ESP_FALSE= +fi @@ -5187,6 +5763,10 @@ LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs +if test -z "${MAY_SUPPLY_SYSCALLS_TRUE}" && test -z "${MAY_SUPPLY_SYSCALLS_FALSE}"; then + as_fn_error $? "conditional \"MAY_SUPPLY_SYSCALLS\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then @@ -5215,10 +5795,58 @@ if test -z "${HAVE_MULTISUBDIR_TRUE}" && test -z "${HAVE_MULTISUBDIR_FALSE}"; th as_fn_error $? "conditional \"HAVE_MULTISUBDIR\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${CONFIG_AARCH64_TRUE}" && test -z "${CONFIG_AARCH64_FALSE}"; then + as_fn_error $? "conditional \"CONFIG_AARCH64\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${CONFIG_ARC_TRUE}" && test -z "${CONFIG_ARC_FALSE}"; then + as_fn_error $? "conditional \"CONFIG_ARC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${CONFIG_ARM_TRUE}" && test -z "${CONFIG_ARM_FALSE}"; then + as_fn_error $? "conditional \"CONFIG_ARM\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${CONFIG_BFIN_TRUE}" && test -z "${CONFIG_BFIN_FALSE}"; then as_fn_error $? "conditional \"CONFIG_BFIN\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${CONFIG_CR16_TRUE}" && test -z "${CONFIG_CR16_FALSE}"; then + as_fn_error $? "conditional \"CONFIG_CR16\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${CONFIG_CSKY_TRUE}" && test -z "${CONFIG_CSKY_FALSE}"; then + as_fn_error $? "conditional \"CONFIG_CSKY\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${CONFIG_D30V_TRUE}" && test -z "${CONFIG_D30V_FALSE}"; then + as_fn_error $? "conditional \"CONFIG_D30V\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${CONFIG_EPIPHANY_TRUE}" && test -z "${CONFIG_EPIPHANY_FALSE}"; then + as_fn_error $? "conditional \"CONFIG_EPIPHANY\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${CONFIG_FR30_TRUE}" && test -z "${CONFIG_FR30_FALSE}"; then + as_fn_error $? "conditional \"CONFIG_FR30\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${CONFIG_FRV_TRUE}" && test -z "${CONFIG_FRV_FALSE}"; then + as_fn_error $? "conditional \"CONFIG_FRV\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${CONFIG_FT32_TRUE}" && test -z "${CONFIG_FT32_FALSE}"; then + as_fn_error $? "conditional \"CONFIG_FT32\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${CONFIG_I386_TRUE}" && test -z "${CONFIG_I386_FALSE}"; then + as_fn_error $? "conditional \"CONFIG_I386\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${CONFIG_I960_TRUE}" && test -z "${CONFIG_I960_FALSE}"; then + as_fn_error $? "conditional \"CONFIG_I960\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${CONFIG_IQ2000_TRUE}" && test -z "${CONFIG_IQ2000_FALSE}"; then as_fn_error $? "conditional \"CONFIG_IQ2000\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -5231,14 +5859,94 @@ if test -z "${CONFIG_LM32_TRUE}" && test -z "${CONFIG_LM32_FALSE}"; then as_fn_error $? "conditional \"CONFIG_LM32\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${CONFIG_M32R_TRUE}" && test -z "${CONFIG_M32R_FALSE}"; then + as_fn_error $? "conditional \"CONFIG_M32R\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${CONFIG_MCORE_TRUE}" && test -z "${CONFIG_MCORE_FALSE}"; then + as_fn_error $? "conditional \"CONFIG_MCORE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${CONFIG_MICROBLAZE_TRUE}" && test -z "${CONFIG_MICROBLAZE_FALSE}"; then + as_fn_error $? "conditional \"CONFIG_MICROBLAZE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${CONFIG_MN10200_TRUE}" && test -z "${CONFIG_MN10200_FALSE}"; then + as_fn_error $? "conditional \"CONFIG_MN10200\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${CONFIG_MN10300_TRUE}" && test -z "${CONFIG_MN10300_FALSE}"; then + as_fn_error $? "conditional \"CONFIG_MN10300\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${CONFIG_MOXIE_TRUE}" && test -z "${CONFIG_MOXIE_FALSE}"; then + as_fn_error $? "conditional \"CONFIG_MOXIE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${CONFIG_MSP430_TRUE}" && test -z "${CONFIG_MSP430_FALSE}"; then + as_fn_error $? "conditional \"CONFIG_MSP430\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${CONFIG_NDS32_TRUE}" && test -z "${CONFIG_NDS32_FALSE}"; then + as_fn_error $? "conditional \"CONFIG_NDS32\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${CONFIG_NIOS2_TRUE}" && test -z "${CONFIG_NIOS2_FALSE}"; then + as_fn_error $? "conditional \"CONFIG_NIOS2\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${CONFIG_OR1K_TRUE}" && test -z "${CONFIG_OR1K_FALSE}"; then + as_fn_error $? "conditional \"CONFIG_OR1K\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${CONFIG_PRU_TRUE}" && test -z "${CONFIG_PRU_FALSE}"; then + as_fn_error $? "conditional \"CONFIG_PRU\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${CONFIG_RISCV_TRUE}" && test -z "${CONFIG_RISCV_FALSE}"; then as_fn_error $? "conditional \"CONFIG_RISCV\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${CONFIG_RL78_TRUE}" && test -z "${CONFIG_RL78_FALSE}"; then + as_fn_error $? "conditional \"CONFIG_RL78\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${CONFIG_RX_TRUE}" && test -z "${CONFIG_RX_FALSE}"; then + as_fn_error $? "conditional \"CONFIG_RX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${CONFIG_SPARC_TRUE}" && test -z "${CONFIG_SPARC_FALSE}"; then + as_fn_error $? "conditional \"CONFIG_SPARC\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${CONFIG_SPARC_LEON_TRUE}" && test -z "${CONFIG_SPARC_LEON_FALSE}"; then + as_fn_error $? "conditional \"CONFIG_SPARC_LEON\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${CONFIG_TIC6X_TRUE}" && test -z "${CONFIG_TIC6X_FALSE}"; then + as_fn_error $? "conditional \"CONFIG_TIC6X\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${CONFIG_V850_TRUE}" && test -z "${CONFIG_V850_FALSE}"; then + as_fn_error $? "conditional \"CONFIG_V850\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${CONFIG_VISIUM_TRUE}" && test -z "${CONFIG_VISIUM_FALSE}"; then + as_fn_error $? "conditional \"CONFIG_VISIUM\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${CONFIG_WINCE_TRUE}" && test -z "${CONFIG_WINCE_FALSE}"; then as_fn_error $? "conditional \"CONFIG_WINCE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${CONFIG_XSTORMY16_TRUE}" && test -z "${CONFIG_XSTORMY16_FALSE}"; then + as_fn_error $? "conditional \"CONFIG_XSTORMY16\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${CONFIG_XTENSA_TRUE}" && test -z "${CONFIG_XTENSA_FALSE}"; then + as_fn_error $? "conditional \"CONFIG_XTENSA\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -5251,6 +5959,46 @@ if test -z "${am__fastdepCCAS_TRUE}" && test -z "${am__fastdepCCAS_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCCAS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${MCORE_BUILD_ELF_TRUE}" && test -z "${MCORE_BUILD_ELF_FALSE}"; then + as_fn_error $? "conditional \"MCORE_BUILD_ELF\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${MCORE_BUILD_PE_TRUE}" && test -z "${MCORE_BUILD_PE_FALSE}"; then + as_fn_error $? "conditional \"MCORE_BUILD_PE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${MN10300_BUILD_LIBCYGMON_TRUE}" && test -z "${MN10300_BUILD_LIBCYGMON_FALSE}"; then + as_fn_error $? "conditional \"MN10300_BUILD_LIBCYGMON\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${MOXIE_BUILD_CRT0_TRUE}" && test -z "${MOXIE_BUILD_CRT0_FALSE}"; then + as_fn_error $? "conditional \"MOXIE_BUILD_CRT0\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${SPARC_BUILD_CYGMON_TRUE}" && test -z "${SPARC_BUILD_CYGMON_FALSE}"; then + as_fn_error $? "conditional \"SPARC_BUILD_CYGMON\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${SPARC_BUILD_SPLET_TRUE}" && test -z "${SPARC_BUILD_SPLET_FALSE}"; then + as_fn_error $? "conditional \"SPARC_BUILD_SPLET\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${SPARC_BUILD_SLITE_TRUE}" && test -z "${SPARC_BUILD_SLITE_FALSE}"; then + as_fn_error $? "conditional \"SPARC_BUILD_SLITE\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_XTENSA_BOARD_ESP32_TRUE}" && test -z "${HAVE_XTENSA_BOARD_ESP32_FALSE}"; then + as_fn_error $? "conditional \"HAVE_XTENSA_BOARD_ESP32\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_XTENSA_BOARD_ESP32S3_TRUE}" && test -z "${HAVE_XTENSA_BOARD_ESP32S3_FALSE}"; then + as_fn_error $? "conditional \"HAVE_XTENSA_BOARD_ESP32S3\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi +if test -z "${HAVE_XTENSA_BOARD_ESP_TRUE}" && test -z "${HAVE_XTENSA_BOARD_ESP_FALSE}"; then + as_fn_error $? "conditional \"HAVE_XTENSA_BOARD_ESP\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 @@ -5859,48 +6607,19 @@ for ac_config_target in $ac_config_targets do case $ac_config_target in "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;; - "arc/Makefile") CONFIG_FILES="$CONFIG_FILES arc/Makefile" ;; - "csky/Makefile") CONFIG_FILES="$CONFIG_FILES csky/Makefile" ;; - "epiphany/Makefile") CONFIG_FILES="$CONFIG_FILES epiphany/Makefile" ;; - "i386/Makefile") CONFIG_FILES="$CONFIG_FILES i386/Makefile" ;; - "m32r/Makefile") CONFIG_FILES="$CONFIG_FILES m32r/Makefile" ;; "m68hc11/Makefile") CONFIG_FILES="$CONFIG_FILES m68hc11/Makefile" ;; - "nds32/Makefile") CONFIG_FILES="$CONFIG_FILES nds32/Makefile" ;; "m68k/Makefile") CONFIG_FILES="$CONFIG_FILES m68k/Makefile" ;; "pa/Makefile") CONFIG_FILES="$CONFIG_FILES pa/Makefile" ;; - "i960/Makefile") CONFIG_FILES="$CONFIG_FILES i960/Makefile" ;; - "sparc_leon/Makefile") CONFIG_FILES="$CONFIG_FILES sparc_leon/Makefile" ;; - "sparc/Makefile") CONFIG_FILES="$CONFIG_FILES sparc/Makefile" ;; "mips/Makefile") CONFIG_FILES="$CONFIG_FILES mips/Makefile" ;; "rs6000/Makefile") CONFIG_FILES="$CONFIG_FILES rs6000/Makefile" ;; - "mn10200/Makefile") CONFIG_FILES="$CONFIG_FILES mn10200/Makefile" ;; - "mn10300/Makefile") CONFIG_FILES="$CONFIG_FILES mn10300/Makefile" ;; - "cr16/Makefile") CONFIG_FILES="$CONFIG_FILES cr16/Makefile" ;; "cris/Makefile") CONFIG_FILES="$CONFIG_FILES cris/Makefile" ;; "crx/Makefile") CONFIG_FILES="$CONFIG_FILES crx/Makefile" ;; - "d30v/Makefile") CONFIG_FILES="$CONFIG_FILES d30v/Makefile" ;; - "fr30/Makefile") CONFIG_FILES="$CONFIG_FILES fr30/Makefile" ;; - "frv/Makefile") CONFIG_FILES="$CONFIG_FILES frv/Makefile" ;; - "ft32/Makefile") CONFIG_FILES="$CONFIG_FILES ft32/Makefile" ;; - "mcore/Makefile") CONFIG_FILES="$CONFIG_FILES mcore/Makefile" ;; "mep/Makefile") CONFIG_FILES="$CONFIG_FILES mep/Makefile" ;; - "moxie/Makefile") CONFIG_FILES="$CONFIG_FILES moxie/Makefile" ;; - "microblaze/Makefile") CONFIG_FILES="$CONFIG_FILES microblaze/Makefile" ;; "mt/Makefile") CONFIG_FILES="$CONFIG_FILES mt/Makefile" ;; - "v850/Makefile") CONFIG_FILES="$CONFIG_FILES v850/Makefile" ;; - "visium/Makefile") CONFIG_FILES="$CONFIG_FILES visium/Makefile" ;; - "xc16x/Makefile") CONFIG_FILES="$CONFIG_FILES xc16x/Makefile" ;; - "xstormy16/Makefile") CONFIG_FILES="$CONFIG_FILES xstormy16/Makefile" ;; "m32c/Makefile") CONFIG_FILES="$CONFIG_FILES m32c/Makefile" ;; - "msp430/Makefile") CONFIG_FILES="$CONFIG_FILES msp430/Makefile" ;; - "rl78/Makefile") CONFIG_FILES="$CONFIG_FILES rl78/Makefile" ;; - "rx/Makefile") CONFIG_FILES="$CONFIG_FILES rx/Makefile" ;; "spu/Makefile") CONFIG_FILES="$CONFIG_FILES spu/Makefile" ;; - "tic6x/Makefile") CONFIG_FILES="$CONFIG_FILES tic6x/Makefile" ;; - "or1k/Makefile") CONFIG_FILES="$CONFIG_FILES or1k/Makefile" ;; - "pru/Makefile") CONFIG_FILES="$CONFIG_FILES pru/Makefile" ;; - "nios2/Makefile") CONFIG_FILES="$CONFIG_FILES nios2/Makefile" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; + "sparc/libsys/Makefile") CONFIG_FILES="$CONFIG_FILES sparc/libsys/Makefile" ;; "default-1") CONFIG_COMMANDS="$CONFIG_COMMANDS default-1" ;; "default-2") CONFIG_COMMANDS="$CONFIG_COMMANDS default-2" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; @@ -6680,151 +7399,6 @@ if test "$no_create" != yes; then # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi - -# -# CONFIG_SUBDIRS section. -# -if test "$no_recursion" != yes; then - - # Remove --cache-file, --srcdir, and --disable-option-checking arguments - # so they do not pile up. - ac_sub_configure_args= - ac_prev= - eval "set x $ac_configure_args" - shift - for ac_arg - do - if test -n "$ac_prev"; then - ac_prev= - continue - fi - case $ac_arg in - -cache-file | --cache-file | --cache-fil | --cache-fi \ - | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) - ac_prev=cache_file ;; - -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ - | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* \ - | --c=*) - ;; - --config-cache | -C) - ;; - -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) - ac_prev=srcdir ;; - -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) - ;; - -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) - ac_prev=prefix ;; - -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) - ;; - --disable-option-checking) - ;; - *) - case $ac_arg in - *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - as_fn_append ac_sub_configure_args " '$ac_arg'" ;; - esac - done - - # Always prepend --prefix to ensure using the same prefix - # in subdir configurations. - ac_arg="--prefix=$prefix" - case $ac_arg in - *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; - esac - ac_sub_configure_args="'$ac_arg' $ac_sub_configure_args" - - # Pass --silent - if test "$silent" = yes; then - ac_sub_configure_args="--silent $ac_sub_configure_args" - fi - - # Always prepend --disable-option-checking to silence warnings, since - # different subdirs can have different --enable and --with options. - ac_sub_configure_args="--disable-option-checking $ac_sub_configure_args" - - ac_popdir=`pwd` - for ac_dir in : $subdirs; do test "x$ac_dir" = x: && continue - - # Do not complain, so a configure script can configure whichever - # parts of a large source tree are present. - test -d "$srcdir/$ac_dir" || continue - - ac_msg="=== configuring in $ac_dir (`pwd`/$ac_dir)" - $as_echo "$as_me:${as_lineno-$LINENO}: $ac_msg" >&5 - $as_echo "$ac_msg" >&6 - as_dir="$ac_dir"; as_fn_mkdir_p - ac_builddir=. - -case "$ac_dir" in -.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; -*) - ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` - # A ".." for each directory in $ac_dir_suffix. - ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` - case $ac_top_builddir_sub in - "") ac_top_builddir_sub=. ac_top_build_prefix= ;; - *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; - esac ;; -esac -ac_abs_top_builddir=$ac_pwd -ac_abs_builddir=$ac_pwd$ac_dir_suffix -# for backward compatibility: -ac_top_builddir=$ac_top_build_prefix - -case $srcdir in - .) # We are building in place. - ac_srcdir=. - ac_top_srcdir=$ac_top_builddir_sub - ac_abs_top_srcdir=$ac_pwd ;; - [\\/]* | ?:[\\/]* ) # Absolute name. - ac_srcdir=$srcdir$ac_dir_suffix; - ac_top_srcdir=$srcdir - ac_abs_top_srcdir=$srcdir ;; - *) # Relative name. - ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix - ac_top_srcdir=$ac_top_build_prefix$srcdir - ac_abs_top_srcdir=$ac_pwd/$srcdir ;; -esac -ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix - - - cd "$ac_dir" - - # Check for guested configure; otherwise get Cygnus style configure. - if test -f "$ac_srcdir/configure.gnu"; then - ac_sub_configure=$ac_srcdir/configure.gnu - elif test -f "$ac_srcdir/configure"; then - ac_sub_configure=$ac_srcdir/configure - elif test -f "$ac_srcdir/configure.in"; then - # This should be Cygnus configure. - ac_sub_configure=$ac_aux_dir/configure - else - { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: no configuration information is in $ac_dir" >&5 -$as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2;} - ac_sub_configure= - fi - - # The recursion is here. - if test -n "$ac_sub_configure"; then - # Make the cache file name correct relative to the subdirectory. - case $cache_file in - [\\/]* | ?:[\\/]* ) ac_sub_cache_file=$cache_file ;; - *) # Relative name. - ac_sub_cache_file=$ac_top_build_prefix$cache_file ;; - esac - - { $as_echo "$as_me:${as_lineno-$LINENO}: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&5 -$as_echo "$as_me: running $SHELL $ac_sub_configure $ac_sub_configure_args --cache-file=$ac_sub_cache_file --srcdir=$ac_srcdir" >&6;} - # The eval makes quoting arguments work. - eval "\$SHELL \"\$ac_sub_configure\" $ac_sub_configure_args \ - --cache-file=\"\$ac_sub_cache_file\" --srcdir=\"\$ac_srcdir\"" || - as_fn_error $? "$ac_sub_configure failed for $ac_dir" "$LINENO" 5 - fi - - cd "$ac_popdir" - done -fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} diff --git a/libgloss/configure.ac b/libgloss/configure.ac index b683ef65d1..be7cb1212f 100644 --- a/libgloss/configure.ac +++ b/libgloss/configure.ac @@ -8,6 +8,18 @@ fi AC_CONFIG_AUX_DIR(..) +dnl Support --disable-newlib-supplied-syscalls +dnl NB: This is kept in sync with the newlib/acinclude.m4 option code. +AC_ARG_ENABLE(newlib-supplied-syscalls, +[ --disable-newlib-supplied-syscalls disable newlib from supplying syscalls], +[case "${enableval}" in + yes) newlib_may_supply_syscalls=yes ;; + no) newlib_may_supply_syscalls=no ;; + *) AC_MSG_ERROR(bad value ${enableval} for newlib-supplied-syscalls option) ;; + esac], [newlib_may_supply_syscalls=yes])dnl + +AM_CONDITIONAL(MAY_SUPPLY_SYSCALLS, test x[$]{newlib_may_supply_syscalls} = xyes) + AC_PROG_INSTALL AC_CANONICAL_SYSTEM @@ -36,37 +48,30 @@ target_makefile_frag=${srcdir}/config/default.mt case "${target}" in aarch64*-*-*) - AC_CONFIG_SUBDIRS(aarch64) + config_aarch64=true config_testsuite=true ;; arc*-*-*) - AC_CONFIG_FILES([arc/Makefile]) - subdirs="$subdirs arc" + config_arc=true ;; csky*-*-*) - AC_CONFIG_FILES([csky/Makefile]) - subdirs="$subdirs csky" + config_csky=true ;; epiphany-*-*) - AC_CONFIG_FILES([epiphany/Makefile]) - subdirs="$subdirs epiphany" - config_testsuite=true + config_epiphany=true ;; i[[3456]]86-*-elf* | i[[3456]]86-*-coff*) - AC_CONFIG_FILES([i386/Makefile]) - subdirs="$subdirs i386" + config_i386=true ;; m32r-*-*) - AC_CONFIG_FILES([m32r/Makefile]) - subdirs="$subdirs m32r" + config_m32r=true ;; m68hc11-*-* | m6811-*-* | m68hc12-*-* | m6812-*-*) AC_CONFIG_FILES([m68hc11/Makefile]) subdirs="$subdirs m68hc11" ;; nds32*-*-*) - AC_CONFIG_FILES([nds32/Makefile]) - subdirs="$subdirs nds32" + config_nds32=true ;; fido-*-* | m68*-*-*) AC_CONFIG_FILES([m68k/Makefile]) @@ -77,16 +82,13 @@ case "${target}" in subdirs="$subdirs pa" ;; i960-*-coff) - AC_CONFIG_FILES([i960/Makefile]) - subdirs="$subdirs i960" + config_i960=true ;; sparc-*leon*-elf* | sparc-*leon*-none*) - AC_CONFIG_FILES([sparc_leon/Makefile]) - subdirs="$subdirs sparc_leon" + config_sparc_leon=true ;; sparclet-*-aout* | sparc-*-elf* | sparc64-*-elf* | sparc86x-*-* | sparclite-*-*) - AC_CONFIG_FILES([sparc/Makefile]) - subdirs="$subdirs sparc" + config_sparc=true ;; sh*-*-pe | mips*-*-pe | *arm*-wince-pe) config_wince=true @@ -105,21 +107,16 @@ case "${target}" in host_makefile_frag=${srcdir}/config/ppc.mh ;; mn10200-*-*) - AC_CONFIG_FILES([mn10200/Makefile]) - subdirs="$subdirs mn10200" - target_makefile_frag=${srcdir}/config/mn10200.mt + config_mn10200=true ;; mn10300-*-*) - AC_CONFIG_FILES([mn10300/Makefile]) - subdirs="$subdirs mn10300" - target_makefile_frag=${srcdir}/config/mn10300.mt + config_mn10300=true ;; bfin-*-*) config_bfin=true ;; cr16-*-*) - AC_CONFIG_FILES([cr16/Makefile]) - subdirs="$subdirs cr16" + config_cr16=true ;; cris-*-* | crisv32-*-*) AC_CONFIG_FILES([cris/Makefile]) @@ -130,81 +127,66 @@ case "${target}" in subdirs="$subdirs crx" ;; d30v-*-*) - AC_CONFIG_FILES([d30v/Makefile]) - subdirs="$subdirs d30v" + config_d30v=true ;; fr30-*-*) - AC_CONFIG_FILES([fr30/Makefile]) - subdirs="$subdirs fr30" + config_fr30=true ;; frv*-*-*) - AC_CONFIG_FILES([frv/Makefile]) - subdirs="$subdirs frv" + config_frv=true ;; ft32*-*-*) - AC_CONFIG_FILES([ft32/Makefile]) - subdirs="$subdirs ft32" + config_ft32=true ;; lm32*-*-*) config_lm32=true ;; mcore-*-*) - AC_CONFIG_FILES([mcore/Makefile]) - subdirs="$subdirs mcore" + config_mcore=true ;; mep-*-*) AC_CONFIG_FILES([mep/Makefile]) subdirs="$subdirs mep" ;; moxie-*-*) - AC_CONFIG_FILES([moxie/Makefile]) - subdirs="$subdirs moxie" + config_moxie=true ;; microblaze*-*-*) - AC_CONFIG_FILES([microblaze/Makefile]) - subdirs="$subdirs microblaze" + config_microblaze=true ;; mt-*-*) AC_CONFIG_FILES([mt/Makefile]) subdirs="$subdirs mt" ;; v850*-*-*) - AC_CONFIG_FILES([v850/Makefile]) - subdirs="$subdirs v850" + config_v850=true ;; visium-*-*) - AC_CONFIG_FILES([visium/Makefile]) - subdirs="$subdirs visium" + config_visium=true config_testsuite=false ;; - xc16x-*-*) - AC_CONFIG_FILES([xc16x/Makefile]) - subdirs="$subdirs xc16x" - target_makefile_frag=${srcdir}/config/xc16x.mt - ;; xstormy16-*-*) - AC_CONFIG_FILES([xstormy16/Makefile]) - subdirs="$subdirs xstormy16" + config_xstormy16=true + ;; + xtensa-*-*) + config_xtensa=true ;; m32c-*-*) AC_CONFIG_FILES([m32c/Makefile]) subdirs="$subdirs m32c" ;; msp430-*-elf*) - AC_CONFIG_FILES([msp430/Makefile]) - subdirs="$subdirs msp430" + config_msp430=true config_libnosys=false ;; rl78*-*-elf) - AC_CONFIG_FILES([rl78/Makefile]) - subdirs="$subdirs rl78" + config_rl78=true ;; rx*-*-elf) - AC_CONFIG_FILES([rx/Makefile]) - subdirs="$subdirs rx" + config_rx=true ;; arm*-*-elf | arm*-*-coff | arm*-*-*) - AC_CONFIG_SUBDIRS([arm]) + config_arm=true ;; spu-*-elf) AC_CONFIG_FILES([spu/Makefile]) @@ -214,31 +196,32 @@ case "${target}" in config_libnosys=false ;; tic6x-*-*) - AC_CONFIG_FILES([tic6x/Makefile]) - subdirs="$subdirs tic6x" + config_tic6x=true config_testsuite=false ;; iq2000-*-*) config_iq2000=true ;; or1k-*-* | or1knd-*-* ) - AC_CONFIG_FILES([or1k/Makefile]) - subdirs="$subdirs or1k" + config_or1k=true ;; pru-*-*) - AC_CONFIG_FILES([pru/Makefile]) - subdirs="$subdirs pru" + config_pru=true ;; nios2-*-*) - AC_CONFIG_FILES([nios2/Makefile]) - subdirs="$subdirs nios2" + config_nios2=true ;; esac +AC_SUBST(subdirs) dnl These subdirs have converted to non-recursive make. Hopefully someday all dnl the ports above will too! m4_foreach_w([SUBDIR], [ - bfin iq2000 libnosys lm32 riscv wince + aarch64 arc arm bfin cr16 csky d30v epiphany fr30 frv ft32 i386 i960 iq2000 + libnosys lm32 + m32r mcore microblaze mn10200 mn10300 moxie msp430 + nds32 nios2 or1k pru riscv rl78 rx sparc sparc_leon tic6x v850 visium + wince xstormy16 xtensa ], [dnl AM_CONDITIONAL([CONFIG_]m4_toupper(SUBDIR), [test x$config_]SUBDIR = xtrue) ]) @@ -255,6 +238,8 @@ AM_PROG_AR LD=${LD-ld} AC_SUBST(LD) AC_PROG_RANLIB +AC_CHECK_TOOL(OBJCOPY, objcopy, :) +AC_CHECK_TOOL(OBJDUMP, objdump, :) AC_DEFINE(HAVE_GNU_LD, 1, [Using GNU LD]) @@ -330,6 +315,8 @@ dnl rm -f conftest* ]) AC_DEFINE_UNQUOTED(__SYMBOL_PREFIX, "$libc_cv_symbol_prefix", [symbol prefix]) +m4_include([aarch64/acinclude.m4]) +m4_include([arm/acinclude.m4]) m4_include([i386/acinclude.m4]) m4_include([libnosys/acinclude.m4]) m4_include([m68k/acinclude.m4]) @@ -337,6 +324,8 @@ m4_include([mcore/acinclude.m4]) m4_include([mips/acinclude.m4]) m4_include([mn10300/acinclude.m4]) m4_include([moxie/acinclude.m4]) +m4_include([sparc/acinclude.m4]) +m4_include([xtensa/acinclude.m4]) AC_CACHE_CHECK([for compiler search settings], libc_cv_compiler_isystem, [dnl for subdir in include include-fixed; do diff --git a/libgloss/cr16/Makefile.in b/libgloss/cr16/Makefile.in deleted file mode 100644 index 5416651880..0000000000 --- a/libgloss/cr16/Makefile.in +++ /dev/null @@ -1,158 +0,0 @@ -# -# - -DESTDIR = - -VPATH = @srcdir@ @srcdir@/.. -srcdir = @srcdir@ -objdir = . -srcroot = $(srcdir)/../.. -objroot = $(objdir)/../.. - -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -host_alias = @host_alias@ -target_alias = @target_alias@ - -bindir = @bindir@ -libdir = @libdir@ -tooldir = $(exec_prefix)/$(target_alias) - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -# Multilib support variables. -# TOP is used instead of MULTI{BUILD,SRC}TOP. -MULTIDIRS = -MULTISUBDIR = - -SHELL = /bin/sh - -mkinstalldirs = $(SHELL) $(srcroot)/mkinstalldirs - -CC = @CC@ - -AS = @AS@ -AR = @AR@ -LD = @LD@ -RANLIB = @RANLIB@ - -OBJDUMP = `if [ -f ${objroot}/../binutils/objdump ] ; \ - then echo ${objroot}/../binutils/objdump ; \ - else t='$(program_transform_name)'; echo objdump | sed -e $$t ; fi` -OBJCOPY = `if [ -f ${objroot}/../binutils/objcopy ] ; \ - then echo ${objroot}/../binutils/objcopy ; \ - else t='$(program_transform_name)'; echo objcopy | sed -e $$t ; fi` - -# Here is all of the handlers stuff -H_SCRIPTS = -H_BSP = libh.a -H_OBJS = intable.o dvz_hndl.o flg_hndl.o iad_hndl.o svc_hndl.o und_hndl.o -H_TEST = hndl-test -H_INSTALL = install-hndl - -# Here is all of the simulator stuff -SIM_SCRIPTS = sim.ld -SIM_BSP = libsim.a -SIM_OBJS = _exit.o close.o _getenv.o lseek.o open.o read.o \ - _rename.o sbrk.o time.o unlink.o write.o \ - stat.o putnum.o kill.o getpid.o isatty.o fstat.o -SIM_TEST = sim-test -SIM_INSTALL = install-sim - -# Here is all of the CRT stuff -CRT = crti.o crtn.o crt1.o -CRT_INSTALL = install-crt - -# Host specific makefile fragment comes in here. -@host_makefile_frag@ - -# -# build a test program for each target board. Just trying to get -# it to link is a good test, so we ignore all the errors for now. -# -all: ${CRT} ${SIM_BSP} ${H_BSP} - -# -# here's where we build the board support packages for each target -# -${H_BSP}: ${H_OBJS} - ${AR} ${ARFLAGS} ${H_BSP} ${H_OBJS} - ${RANLIB} ${H_BSP} - -${SIM_BSP}: ${SIM_OBJS} - ${AR} ${ARFLAGS} ${SIM_BSP} ${SIM_OBJS} - ${RANLIB} ${SIM_BSP} - -# -# here's where we build the test programs for each target -# -.PHONY: test -test: ${SIM_TEST} ${H_TEST} - -hndl-test: hndl-test.x hndl-test.dis - -hndl-test.x: test.o ${H_BSP} - ${CC} ${LDFLAGS_FOR_TARGET} -L${objdir} \ - test.o \ - -o hndl-test.x ${LIBS_FOR_TARGET} -lc ${H_BSP} -Wl,-T${SIM_SCRIPTS} - -hndl-test.dis: hndl-test.x - ${OBJDUMP} -d hndl-test.x > hndl-test.dis - - -sim-test: sim-test.x sim-test.dis - -sim-test.x: test.o ${SIM_BSP} - ${CC} ${LDFLAGS_FOR_TARGET} -L${objdir} \ - test.o \ - -o sim-test.x ${LIBS_FOR_TARGET} -lc ${SIM_BSP} -Wl,-T${SIM_SCRIPTS} - -sim-test.dis: sim-test.x - ${OBJDUMP} -d sim-test.x > sim-test.dis - -# -# -# -.c.S: - ${CC} ${CFLAGS_FOR_TARGET} -c $< - -clean mostlyclean: - rm -f a.out core *.i *.o *-test *.srec *.dis *.x $(SIM_BSP) $(H_BSP) - -distclean maintainer-clean realclean: clean - rm -f Makefile *~ - -.PHONY: install info install-info clean-info -install: ${CRT_INSTALL} ${SIM_INSTALL} ${H_INSTALL} - -install-crt: - ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR} - set -e; for x in ${CRT} ; do\ - ${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; \ - done - -install-sim: - ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR} - for x in ${SIM_BSP} ; do\ - ${INSTALL_PROGRAM} $${x} $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; \ - done - for x in ${SIM_SCRIPTS}; do\ - ${INSTALL_DATA} ${srcdir}/$${x} $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; \ - done - -install-hndl: - ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR} - for x in ${H_BSP}; do\ - ${INSTALL_PROGRAM} $${x} $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; \ - done - -doc: -info: -install-info: -clean-info: - -Makefile: Makefile.in ../config.status - cd .. && $(SHELL) config.status diff --git a/libgloss/cr16/Makefile.inc b/libgloss/cr16/Makefile.inc new file mode 100644 index 0000000000..d92302758f --- /dev/null +++ b/libgloss/cr16/Makefile.inc @@ -0,0 +1,40 @@ +multilibtool_DATA += \ + %D%/crti.o \ + %D%/crtn.o \ + %D%/crt1.o +libobjs_a_SOURCES += \ + %D%/crti.S \ + %D%/crtn.S \ + %D%/crt1.S + +multilibtool_LIBRARIES += %D%/libh.a +%C%_libh_a_SOURCES = \ + %D%/intable.c \ + %D%/dvz_hndl.c \ + %D%/flg_hndl.c \ + %D%/iad_hndl.c \ + %D%/svc_hndl.c \ + %D%/und_hndl.c + +multilibtool_DATA += \ + %D%/sim.ld + +multilibtool_LIBRARIES += %D%/libsim.a +%C%_libsim_a_SOURCES = \ + %D%/_exit.c \ + %D%/close.c \ + %D%/_getenv.c \ + %D%/lseek.c \ + %D%/open.c \ + %D%/read.c \ + %D%/_rename.c \ + %D%/sbrk.c \ + %D%/time.c \ + %D%/unlink.c \ + %D%/write.c \ + %D%/stat.c \ + %D%/putnum.c \ + %D%/kill.c \ + %D%/getpid.c \ + %D%/isatty.c \ + %D%/fstat.c diff --git a/libgloss/cris/gensyscalls b/libgloss/cris/gensyscalls index c36f284887..0b5b0731a7 100644 --- a/libgloss/cris/gensyscalls +++ b/libgloss/cris/gensyscalls @@ -1,5 +1,5 @@ #! /bin/sh -# Copyright (C) 2005, 2018 Axis Communications. +# Copyright (C) 2005, 2018, 2023 Axis Communications. # All rights reserved. # # Redistribution and use in source and binary forms, with or without @@ -40,13 +40,14 @@ lu='/* -*- buffer-read-only: t -*- #define R(x) return (x); } ' lui="$lu int" +lul="$lu long int" r=") { R (_Sys_" cat > close.c < execve.c < exit.c < link.c < lseek.c < open.c < read.c < rename.c < wait.c < write.c < #ifdef _HAVE_INITFINI_ARRAY #define _init __libc_init_array @@ -99,6 +100,7 @@ extern void _Libdtors (void); extern void __init__start (void) __attribute ((weak)); extern void __aout__ctors (void) __attribute ((weak)); +extern int main (int argc, char **argv, char **env); static void start1 () __asm__ ("__start1") __attribute ((__used__)); static void diff --git a/libgloss/cris/linunistd.h b/libgloss/cris/linunistd.h index 3a6f318a37..b627670f5b 100644 --- a/libgloss/cris/linunistd.h +++ b/libgloss/cris/linunistd.h @@ -1,5 +1,5 @@ /* Support for syscalls for cris*-axis-linux-gnu and simulators - Copyright (C) 1998-2005, 2018 Axis Communications. + Copyright (C) 1998-2005, 2018, 2023 Axis Communications. All rights reserved. Redistribution and use in source and binary forms, with or without @@ -32,10 +32,13 @@ #ifndef _ASM_ELINUX_UNISTD_H_ #define _ASM_ELINUX_UNISTD_H_ +#define _LIBC + /* Our callers might want to use link_warning, so provide it from here. */ #include "../config.h" #include "libnosys/warning.h" +#include #include /* @@ -357,7 +360,7 @@ static inline _syscall0(int,setup) static inline _syscall0(int,sync) static inline _syscall3(int,write,int,fd,const char *,buf,unsigned,count) static inline _syscall1(int,dup,int,fd) -static inline _syscall3(int,execve,const char *,file,char **,argv,char **,envp) +static inline _syscall3(int,execve,const char *,file,char *const *,argv,char *const *,envp) static inline _syscall3(int,open,const char *,file,int,flag,int,mode) static inline _syscall1(int,close,int,fd) static inline _syscall1(int,_exit,int,exitcode) diff --git a/libgloss/cris/outbyte.c b/libgloss/cris/outbyte.c index 1cb686b968..210339f8ef 100644 --- a/libgloss/cris/outbyte.c +++ b/libgloss/cris/outbyte.c @@ -1,7 +1,7 @@ /* Low-level kind-of-support for CRIS. Mostly used as a placeholder function. Too small and obvious to warrant a copyright notice. */ -#include +#include void outbyte (int ch) { diff --git a/libgloss/csky/Makefile.in b/libgloss/csky/Makefile.in deleted file mode 100644 index ebf7ef2cd4..0000000000 --- a/libgloss/csky/Makefile.in +++ /dev/null @@ -1,125 +0,0 @@ -# Copyright (c) 1995, 1996, 2001 Cygnus Support -*- mode:makefile -*- -# -# The authors hereby grant permission to use, copy, modify, distribute, -# and license this software and its documentation for any purpose, provided -# that existing copyright notices are retained in all copies and that this -# notice is included verbatim in any distributions. No written agreement, -# license, or royalty fee is required for any of the authorized uses. -# Modifications to this software may be copyrighted by their authors -# and need not follow the licensing terms described here, provided that -# the new terms are clearly indicated on the first page of each file where -# they apply. -# -# csky semihosting support. -# - -DESTDIR = -VPATH = @srcdir@ -srcdir = @srcdir@ -objdir = . -srcroot = $(srcdir)/../.. -objroot = $(objdir)/../.. - -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -host_alias = @host_alias@ -target_alias = @target_alias@ -program_transform_name = @program_transform_name@ - -bindir = @bindir@ -libdir = @libdir@ -tooldir = $(exec_prefix)/$(target_alias) - -# Multilib support variables. -# TOP is used instead of MULTI{BUILD,SRC}TOP. -MULTIDIRS = -MULTISUBDIR = -MULTIDO = true -MULTICLEAN = true - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -SHELL = /bin/sh - -mkinstalldirs = $(SHELL) $(srcroot)/mkinstalldirs - -CC = @CC@ - -AS = @AS@ -AR = @AR@ -LD = @LD@ -RANLIB = @RANLIB@ -AR_FLAGS = qv - -OBJDUMP = `if [ -f ${objroot}/../binutils/objdump ] ; \ - then echo ${objroot}/../binutils/objdump ; \ - else t='$(program_transform_name)'; echo objdump | sed -e $$t ; fi` -OBJCOPY = `if [ -f ${objroot}/../binutils/objcopy ] ; \ - then echo ${objroot}/../binutils/objcopy ; \ - else t='$(program_transform_name)'; echo objcopy | sed -e $$t ; fi` - -CRT0=crt0.S - -# -# here's all the hosted stuff -# -HOSTED_BSP= libsemi.a -HOSTED_SRS= io-semi.S -HOSTED_SRC= sbrk.c io-gdb.c io-exit.c io-close.c io-fstat.c io-gettimeofday.c \ - io-lseek.c io-read.c io-system.c io-unlink.c io-exit.c \ - io-gdb.c io-isatty.c io-open.c io-rename.c io-stat.c \ - io-time.c io-write.c kill.o getpid.o -HOSTED_OBJS= $(patsubst %.c,%.o,$(HOSTED_SRC)) - -INCLUDES+= -I/home/xialf/workspace/newlib-2.5.0.20171222/newlib/libc/include - -# Host specific makefile fragment comes in here. -@host_makefile_frag@ - -all :: $(HOSTED_BSP) - -# -# here's where we build the board support packages for each target -# - -# build hosted library -$(HOSTED_OBJS) : %.o : %.c - $(CC) $(CFLAGS_FOR_TARGET) $(CFLAGS) -nostdlib -DHOSTED=1 $(INCLUDES) -c $< -o $@ -$(HOSTED_SRS:%.S=%.o): %.o : %.S - $(CC) $(CFLAGS_FOR_TARGET) $(CFLAGS) -nostdlib -DHOSTED=1 $(INCLUDES) -c $< -o $@ - -$(HOSTED_BSP): $(HOSTED_OBJS) $(HOSTED_SRS:%.S=%.o) - ${AR} ${ARFLAGS} $@ $^ - ${RANLIB} $@ - -crt0.o: $(CRT0) - $(CC) $(CFLAGS_FOR_TARGET) $(CFLAGS) -c $< -o $@ - -.PHONY: install info dvi doc install-info clean-info -install:: install_hosted crt0.o - ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR} - $(INSTALL_PROGRAM) crt0.o $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$(crt0.o) - -.PHONY:install_hosted -install_hosted:: - ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR} - $(INSTALL_PROGRAM) $(HOSTED_BSP) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$(HOSTED_BSP) - -# target specific makefile fragment comes in here. -@target_makefile_frag@ - -clean mostlyclean: - rm -f a.out core *.i *~ *.a *.o *-test *.srec *.dis *.x *.map - -distclean maintainer-clean realclean: clean - rm -f Makefile - -info dvi doc: -install-info: -clean-info: - -Makefile: Makefile.in ../config.status - cd .. && $(SHELL) config.status diff --git a/libgloss/csky/Makefile.inc b/libgloss/csky/Makefile.inc new file mode 100644 index 0000000000..7f38d659cb --- /dev/null +++ b/libgloss/csky/Makefile.inc @@ -0,0 +1,36 @@ +## csky semihosting support. + +multilibtool_DATA += \ + %D%/crt0.o +libobjs_a_SOURCES += \ + %D%/crt0.S + +## Here's all the hosted stuff. + +multilibtool_LIBRARIES += %D%/libsemi.a +%C%_libsemi_a_SOURCES = \ + %D%/io-semi.S \ + %D%/sbrk.c \ + %D%/io-gdb.c \ + %D%/io-exit.c \ + %D%/io-close.c \ + %D%/io-fstat.c \ + %D%/io-gettimeofday.c \ + %D%/io-lseek.c \ + %D%/io-read.c \ + %D%/io-system.c \ + %D%/io-unlink.c \ + %D%/io-exit.c \ + %D%/io-gdb.c \ + %D%/io-isatty.c \ + %D%/io-open.c \ + %D%/io-rename.c \ + %D%/io-stat.c \ + %D%/io-time.c \ + %D%/io-write.c \ + %D%/kill.c \ + %D%/getpid.c +%C%_libsemi_a_CPPFLAGS = \ + $(AM_CPPFLAGS) \ + -nostdlib \ + -DHOSTED=1 diff --git a/libgloss/csky/crt0.S b/libgloss/csky/crt0.S index a0651a7346..49f7da3647 100644 --- a/libgloss/csky/crt0.S +++ b/libgloss/csky/crt0.S @@ -150,6 +150,8 @@ __start: * Assember start up done, C codes start here. */ __goto_c: + lrw r0, __libc_fini_array # Register global termination functions + jbsr atexit # to be called upon exit /*jsri main*/ lrw r5, __libc_init_array jsr r5 diff --git a/libgloss/csky/io-gettimeofday.c b/libgloss/csky/io-gettimeofday.c index 77f446fb80..59b1abb832 100644 --- a/libgloss/csky/io-gettimeofday.c +++ b/libgloss/csky/io-gettimeofday.c @@ -43,7 +43,7 @@ int gettimeofday (struct timeval *tv, void *tzvp) return -1; } parameters[0] = (uint32_t) >v; - parameters[1] = NULL; + parameters[1] = 0; ret = __hosted (HOSTED_GETTIMEOFDAY, parameters); __hosted_from_gdb_timeval (>v, tv); errno = __hosted_from_gdb_errno (parameters[0]); diff --git a/libgloss/d30v/Makefile.in b/libgloss/d30v/Makefile.in deleted file mode 100644 index a27e720ff8..0000000000 --- a/libgloss/d30v/Makefile.in +++ /dev/null @@ -1,129 +0,0 @@ -# Copyright (c) 1997 Cygnus Support -# -# The authors hereby grant permission to use, copy, modify, distribute, -# and license this software and its documentation for any purpose, provided -# that existing copyright notices are retained in all copies and that this -# notice is included verbatim in any distributions. No written agreement, -# license, or royalty fee is required for any of the authorized uses. -# Modifications to this software may be copyrighted by their authors -# and need not follow the licensing terms described here, provided that -# the new terms are clearly indicated on the first page of each file where -# they apply. -# - -# -# This currently works with the D30V simulator. -# - -DESTDIR = -VPATH = @srcdir@ @srcdir@/.. -srcdir = @srcdir@ -objdir = . -srcroot = $(srcdir)/../.. -objroot = $(objdir)/../.. - -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -host_alias = @host_alias@ -target_alias = @target_alias@ - -bindir = @bindir@ -libdir = @libdir@ -tooldir = $(exec_prefix)/$(target_alias) - -# Multilib support variables. -# TOP is used instead of MULTI{BUILD,SRC}TOP. -MULTIDIRS = -MULTISUBDIR = -MULTIDO = true -MULTICLEAN = true - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -SHELL = /bin/sh - -mkinstalldirs = $(SHELL) $(srcroot)/mkinstalldirs - -CC = @CC@ - -AS = @AS@ -AR = @AR@ -LD = @LD@ -RANLIB = @RANLIB@ - -OBJDUMP = `if [ -f ${objroot}/../binutils/objdump ] ; \ - then echo ${objroot}/../binutils/objdump ; \ - else t='$(program_transform_name)'; echo objdump | sed -e $$t ; fi` -OBJCOPY = `if [ -f ${objroot}/../binutils/objcopy ] ; \ - then echo ${objroot}/../binutils/objcopy ; \ - else t='$(program_transform_name)'; echo objcopy | sed -e $$t ; fi` - -OBJS = isatty.o print.o putnum.o sbrk.o -CFLAGS = -g -SCRIPTS = ${SIM_SCRIPTS} - -# Here is all of the simulator stuff -SIM_SCRIPTS = -SIM_LDFLAGS = -SIM_BSP = libsim.a -SIM_CRT0 = crt0.o -SIM_OBJS = syscalls.o outbyte.o inbyte.o -SIM_TEST = -SIM_INSTALL = install-sim - -# Host specific makefile fragment comes in here. -@host_makefile_frag@ - -# -# build a test program for each target board. Just trying to get -# it to link is a good test, so we ignore all the errors for now. -# -all: ${SIM_CRT0} ${SIM_BSP} - -# -# here's where we build the board support packages for each target -# - -${SIM_BSP}: ${OBJS} ${SIM_OBJS} - ${AR} ${ARFLAGS} $@ ${SIM_OBJS} ${OBJS} - ${RANLIB} $@ - -# -# here's where we build the test programs for each target -# -.PHONY: test -test: ${SIM_TEST} - -crt0.o: crt0.S -syscalls.o: syscalls.c $(srcdir)/../syscall.h -outbyte.o: outbyte.c -inbyte.o: inbyte.c - -isatty.o: $(srcdir)/../isatty.c -print.o: $(srcdir)/../print.c -putnum.o: $(srcdir)/../putnum.c -sbrk.o: $(srcdir)/../sbrk.c - -clean mostlyclean: - rm -f a.out core *.[oais] *-test *.srec *.dis *.x syscall.h - -distclean maintainer-clean realclean: clean - rm -f Makefile *~ - -.PHONY: install info install-info clean-info -install: ${SIM_INSTALL} - -install-sim: - ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR} - set -e; for x in ${SIM_CRT0} ${SIM_BSP} ${SIM_SCRIPTS}; do ${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done - -doc: -info: -install-info: -clean-info: - -Makefile: Makefile.in ../config.status - cd .. && $(SHELL) config.status diff --git a/libgloss/d30v/Makefile.inc b/libgloss/d30v/Makefile.inc new file mode 100644 index 0000000000..2b12739d74 --- /dev/null +++ b/libgloss/d30v/Makefile.inc @@ -0,0 +1,12 @@ +multilibtool_LIBRARIES += %D%/libsim.a +%C%_libsim_a_SOURCES = \ + isatty.c \ + print.c \ + putnum.c \ + sbrk.c \ + %D%/inbyte.c \ + %D%/outbyte.c \ + %D%/syscalls.c + +multilibtool_DATA += \ + %D%/crt0.o diff --git a/libgloss/debug.c b/libgloss/debug.c index 3b1c8ff9b7..d6fb89a5e0 100644 --- a/libgloss/debug.c +++ b/libgloss/debug.c @@ -692,7 +692,7 @@ gdb_read_reg(int reg) /* * P - write one register. - * params are the register number, and it's new value. + * params are the register number, and its new value. * returns the register value or ENN. */ char * diff --git a/libgloss/doc/Makefile.inc b/libgloss/doc/Makefile.inc index fa5e30fbf2..6f9050fc87 100644 --- a/libgloss/doc/Makefile.inc +++ b/libgloss/doc/Makefile.inc @@ -1 +1,8 @@ +AM_MAKEINFOFLAGS = --no-split + info_TEXINFOS += %D%/porting.texi + +html-local: %D%/porting/index.html +%D%/porting/index.html: %D%/porting.texi %D%/$(am__dirstamp) + $(AM_V_GEN)$(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) \ + --split=node $< -o $(@D) diff --git a/libgloss/doc/porting.texi b/libgloss/doc/porting.texi index 496fae3521..1f68757be6 100644 --- a/libgloss/doc/porting.texi +++ b/libgloss/doc/porting.texi @@ -18,16 +18,8 @@ @set automake @ref{Top,,GNU Automake,automake} @set libtool @ref{Top,,GNU Libtool,libtool} -@titlepage -@title Embed With GNU -@subtitle Porting The GNU Tools To Embedded Systems -@sp 4 -@subtitle Spring 1995 -@subtitle Very *Rough* Draft -@author Rob Savoye - Cygnus Support -@page - -@vskip 0pt plus 1filll +@copying +@c man begin COPYRIGHT Copyright @copyright{} 1993, 1994, 1995 Cygnus Support Permission is granted to make and distribute verbatim copies of @@ -41,27 +33,30 @@ permission notice identical to this one. Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions. +@c man end +@end copying + +@titlepage +@title Embed With GNU +@subtitle Porting The GNU Tools To Embedded Systems +@sp 4 +@subtitle Spring 1995 +@subtitle Very *Rough* Draft +@author Rob Savoye - Cygnus Support +@c Then the copyright page. This must be a page by itself after the titlepage. +@page +@vskip 0pt plus 1filll +@insertcopying @end titlepage -@ifnottex -@format +@direntry START-INFO-DIR-ENTRY * Embed with GNU: (porting-). Embed with GNU END-INFO-DIR-ENTRY -@end format -Copyright (c) 1993, 1994, 1995 Cygnus Support - -Permission is granted to make and distribute verbatim copies of -this manual provided the copyright notice and this permission notice -are preserved on all copies. +@end direntry -Permission is granted to copy and distribute modified versions of this -manual under the conditions for verbatim copying, provided also that -the entire resulting derived work is distributed under the terms of a -permission notice identical to this one. - -Permission is granted to copy and distribute translations of this manual -into another language, under the above conditions for modified versions. +@ifnottex +@insertcopying @node Top @top Embed with GNU @@ -125,7 +120,7 @@ After a while it became apparent that this approach of isolating the hardware and systems files together made sense. Around this same time the stub dirs were made to run standalone, mostly so it could also be used to support GDB's remote debugging needs. At this time it was -decided to move the stub dirs out of newlib and into it's own separate +decided to move the stub dirs out of newlib and into its own separate library so it could be used standalone, and be included in various other GNU tools without having to bring in all of newlib, which is large. The new library is called Libgloss, for Gnu Low-level OS support. @@ -269,7 +264,7 @@ source tree, use: @end smallexample The configure script is in the source tree. When configure is invoked -it will determine it's own source tree, so the --srcdir is would be +it will determine its own source tree, so the --srcdir is would be redundant here. Once libgloss is configured, @code{make} is sufficient to build it. The @@ -398,9 +393,7 @@ any target that has migrated to @value{automake}. Libgloss automatically builds itself for all multilib configurations that the active toolchain supports. This logic is provided by common code from the -combined toolchain source tree. This should @strong{not} be confused with the -Libgloss-specific @file{multi-build.in} file. That is used by a few ports to -further produce multiple targets. +combined toolchain source tree. @node GCC, Libraries, Libgloss, Top @chapter Porting GCC @@ -447,7 +440,7 @@ compiler passes. It will format command line options for the other passes. The usual command line GCC uses for the final link phase will have LD link in the startup code and additional libraries by default. -GNU AS started it's life to only function as a compiler pass, but +GNU AS started its life to only function as a compiler pass, but these days it can also be used as a source level assembler. When used as a source level assembler, it has a companion assembler preprocessor called @code{gasp}. This has a syntax similar to most other assembler @@ -526,7 +519,7 @@ Pass the next option directly to the linker. To make a program that has been compiled with GCC to run, you need to write some startup code. The initial piece of startup code is called a crt0. (C RunTime 0) This is usually written in assembler, and -it's object gets linked in first, and bootstraps the rest of the +its object gets linked in first, and bootstraps the rest of the application when executed. This file needs to do the following things. @enumerate @@ -552,7 +545,7 @@ This is what basically starts things running. If your ROM monitor supports it, then first setup argc and argv for command line arguments and an environment pointer. Then branch to main(). For G++ the the main routine gets a branch to __main inserted by the code generator at the -very top. __main() is used by G++ to initialize it's internal tables. +very top. __main() is used by G++ to initialize its internal tables. __main() then returns back to your original main() and your code gets executed. @@ -762,7 +755,7 @@ the m68k-coff configuration defaults to not linking in the crt0.o by default. It assumes that the developer probably has their own crt0.o. This behavior is controlled in the config file for each architecture. It's a macro called @code{STARTFILE_SPEC}, and if it's set to -@code{null}, then when @code{gcc} formats it's command line, it doesn't +@code{null}, then when @code{gcc} formats its command line, it doesn't add @code{crto.o}. Any file name can be specified here, but the default is always @code{crt0.o}. @@ -881,7 +874,7 @@ are setup here for use by the @code{crt0.o} when it zero's the A few ROM monitors load binary images, typically @code{a.out}, but most all will load an @code{srecord}. An srecord is an ASCII representation of a binary -image. At it's simplest, an srecord is an address, followed by a byte +image. At its simplest, an srecord is an address, followed by a byte count, followed by the bytes, and a 2's compliment checksum. A whole srecord file has an optional @emph{start} record, and a required @emph{end} record. To make an srecord from a binary image, the GNU @code{objcopy} program @@ -903,7 +896,7 @@ typically they are stubbed out. Kill is also a stub, since you can't do process control on an embedded system. Sbrk() is only needed by applications that do dynamic memory -allocation. It's uses the symbol @code{_end} that is setup in the linker +allocation. It uses the symbol @code{_end} that is setup in the linker script. It also requires a compile time option to set the upper size limit on the heap space. This leaves us with read and write, which are required for serial I/O. Usually these two routines are written in C, diff --git a/libgloss/epiphany/Makefile.in b/libgloss/epiphany/Makefile.in deleted file mode 100644 index 6cf55e25e6..0000000000 --- a/libgloss/epiphany/Makefile.in +++ /dev/null @@ -1,194 +0,0 @@ -# Makefile for libgloss/epiphany - -# Copyright (c) 2011, 2012 Adapteva, Inc. -# All rights reserved. - -# Contributor Jeremy Bennett for Adapteva Inc - -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# * Redistributions of source code must retain the above copyright notice, -# this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# * Neither the name of Adapteva nor the names of its contributors may be -# used to endorse or promote products derived from this software without -# specific prior written permission. - -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE -# ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE -# LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR -# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF -# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS -# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) -# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE -# POSSIBILITY OF SUCH DAMAGE. - -# Standard proforma copied from libnosys -DESTDIR = -VPATH = @srcdir@ -srcdir = @srcdir@ -objdir = . -srcroot = $(srcdir)/../.. -objroot = $(objdir)/../.. - -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -host_alias = @host_alias@ -target_alias = @target_alias@ -program_transform_name = @program_transform_name@ - -bindir = @bindir@ -libdir = @libdir@ -tooldir = $(exec_prefix)/$(target_alias) - -# Multilib support variables. -# TOP is used instead of MULTI{BUILD,SRC}TOP. -MULTIDIRS = -MULTISUBDIR = -MULTIDO = true -MULTICLEAN = true - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -SHELL = /bin/sh - -CC = @CC@ - -#AS = @AS@ -AS = `if [ -f ${objroot}/../gas/as-new ] ; \ - then echo ${objroot}/../gas/as-new ; \ - else echo as ; fi` - -AR = @AR@ - -#LD = @LD@ -LD = `if [ -f ${objroot}/../ld/ld-new ] ; \ - then echo ${objroot}/../ld/ld-new ; \ - else echo ld ; fi` - -RANLIB = @RANLIB@ - -OBJDUMP = `if [ -f ${objroot}/../binutils/objdump ] ; \ - then echo ${objroot}/../binutils/objdump ; \ - else t='$(program_transform_name)'; echo objdump | sed -e $$t ; fi` -OBJCOPY = `if [ -f ${objroot}/../binutils/objcopy ] ; \ - then echo ${objroot}/../binutils/objcopy ; \ - else t='$(program_transform_name)'; echo objcopy | sed -e $$t ; fi` - -GCC_LDFLAGS = `if [ -d ${objroot}/../gcc ] ; \ - then echo -L${objroot}/../gcc ; fi` - -NEWLIB_CFLAGS = `if [ -d ${objroot}/newlib ]; then echo -I${objroot}/newlib/targ-include -I${srcroot}/newlib/libc/include; fi` -NEWLIB_LDFLAGS = `if [ -d ${objroot}/newlib ]; then echo -B${objroot}/newlib/ -L${objroot}/newlib/; fi` - -INCLUDES = -I. -I$(srcdir)/.. -I$(srcdir)/../../newlib/libc/machine/epiphany - -# Note that when building the library, ${MULTILIB} is not the way multilib -# options are passed; they're passed in $(CFLAGS). -CFLAGS_FOR_TARGET = ${MULTILIB} ${INCLUDES} ${NEWLIB_CFLAGS} -LDFLAGS_FOR_TARGET = ${MULTILIB} ${NEWLIB_LDFLAGS} -AR_FLAGS = qc - -.c.o: - $(CC) $(CFLAGS_FOR_TARGET) -O2 $(INCLUDES) -c $(CFLAGS) $< - -.C.o: - $(CC) $(CFLAGS_FOR_TARGET) -O2 $(INCLUDES) -c $(CFLAGS) $< -.S.o: - $(CC) $(CFLAGS_FOR_TARGET) $(INCLUDES) -c $(CFLAGS) $< -.s.o: - $(AS) $(ASFLAGS_FOR_TARGET) $(INCLUDES) $(ASFLAGS) -o $*.o $< - -# -# GCC knows to run the preprocessor on .S files before it assembles them. -# -.S.o: - $(CC) $(CFLAGS_FOR_TARGET) $(INCLUDES) $(CFLAGS) -c $< - -# -# this is a bogus target that'll produce an assembler from the -# C source with the right compiler options. this is so we can -# track down code generation or debug symbol bugs. -# -.c.s: - $(CC) $(CFLAGS_FOR_TARGET) -S $(INCLUDES) $(CFLAGS) $< - -# EPIPHANY specific stuff - -# Object files needed for all libraries -COMMON_OBJS = access.o \ - close.o \ - environ.o \ - execve.o \ - fork.o \ - fstat.o \ - getpid.o \ - gettimeofday.o \ - _isatty.o \ - kill.o \ - link.o \ - lseek.o \ - open.o \ - read.o \ - sbrk.o \ - stat.o \ - times.o \ - unlink.o \ - wait.o \ - write.o \ - _exit.o \ - epiphany-syscalls.o \ - epiphany-ivthandlers.o - -UNUSED_OBJS = chown.o \ - errno.o \ - gettod.o \ - readlink.o \ - symlink.o - -# Object files specific to particular targets. -SIMOBJS = $(COMMON_OBJS) - -OUTPUTS = libepiphany.a crt0.o - -all: $(OUTPUTS) - -# -# here's where we build the library for each target -# - -libepiphany.a: $(SIMOBJS) - ${AR} ${ARFLAGS} $@ $(SIMOBJS) - ${RANLIB} $@ - -_exit.o: _exit.S - $(CC) $(CFLAGS_FOR_TARGET) $(INCLUDES) $(CFLAGS) -c $< - -doc: - -clean mostlyclean: - rm -f $(OUTPUTS) *.i *~ *.o *-test *.srec *.dis *.map *.x - -distclean maintainer-clean realclean: clean - rm -f Makefile config.status $(OUTPUTS) - -.PHONY: install info install-info clean-info -install: - @for outputs in ${OUTPUTS}; do\ - mkdir -p $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}; \ - $(INSTALL_PROGRAM) $${outputs} $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}; \ - done -info: -install-info: -clean-info: - -Makefile: Makefile.in ../config.status - cd .. && $(SHELL) config.status diff --git a/libgloss/epiphany/Makefile.inc b/libgloss/epiphany/Makefile.inc new file mode 100644 index 0000000000..ad9fa30b41 --- /dev/null +++ b/libgloss/epiphany/Makefile.inc @@ -0,0 +1,56 @@ +## Copyright (c) 2011, 2012 Adapteva, Inc. +## All rights reserved. +## +## Contributor Jeremy Bennett for Adapteva Inc +## +## Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are met: +## * Redistributions of source code must retain the above copyright notice, +## this list of conditions and the following disclaimer. +## * Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in the +## documentation and/or other materials provided with the distribution. +## * Neither the name of Adapteva nor the names of its contributors may be +## used to endorse or promote products derived from this software without +## specific prior written permission. +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +## AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +## IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +## ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE +## LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +## CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +## SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +## INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN +## CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) +## ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE +## POSSIBILITY OF SUCH DAMAGE. + +multilibtool_DATA += %D%/crt0.o +libobjs_a_SOURCES += %D%/crt0.S + +multilibtool_LIBRARIES += %D%/libepiphany.a +%C%_libepiphany_a_SOURCES = \ + %D%/access.c \ + %D%/close.c \ + %D%/environ.c \ + %D%/execve.c \ + %D%/fork.c \ + %D%/fstat.c \ + %D%/getpid.c \ + %D%/gettimeofday.c \ + %D%/_isatty.c \ + %D%/kill.c \ + %D%/link.c \ + %D%/lseek.c \ + %D%/open.c \ + %D%/read.c \ + %D%/sbrk.c \ + %D%/stat.c \ + %D%/times.c \ + %D%/unlink.c \ + %D%/wait.c \ + %D%/write.c \ + %D%/_exit.S \ + %D%/epiphany-syscalls.c \ + %D%/epiphany-ivthandlers.S diff --git a/libgloss/epiphany/_isatty.c b/libgloss/epiphany/_isatty.c index cfb1bf6e42..f05aba3c32 100644 --- a/libgloss/epiphany/_isatty.c +++ b/libgloss/epiphany/_isatty.c @@ -18,6 +18,7 @@ #include #include +#include "epiphany-syscalls.h" int _isatty (int fd) diff --git a/libgloss/epiphany/crt0.S b/libgloss/epiphany/crt0.S index b0d9ecbabe..fcbba1e65b 100644 --- a/libgloss/epiphany/crt0.S +++ b/libgloss/epiphany/crt0.S @@ -121,7 +121,7 @@ _external_start: #error "not implemented" #else /* !__STRUCT_ALIGN_64__ */ str r1, [r2, 0] ; __atexit = &__atexit0 - movr r0, 1 + mov r0, 1 str r0, [r1, 4] ; __atexit0._ind = 1 mov r0,%low(fini) movt r0,%high(fini) diff --git a/libgloss/epiphany/epiphany-syscalls.c b/libgloss/epiphany/epiphany-syscalls.c index e6ebcee24a..4c03fe2917 100644 --- a/libgloss/epiphany/epiphany-syscalls.c +++ b/libgloss/epiphany/epiphany-syscalls.c @@ -253,7 +253,7 @@ int __attribute__ ((section ("libgloss_epiphany"))) e_raise(int signum) { __asm__ __volatile__ ("wand"); //ilatst = 1 << WAND_IVT_N; //break; - return; + return 0; case SIG_USR1: ilatst = 1 << USR_SOFT_IVT_N; diff --git a/libgloss/epiphany/epiphany-syscalls.h b/libgloss/epiphany/epiphany-syscalls.h index 3af1c6f7be..b465875735 100644 --- a/libgloss/epiphany/epiphany-syscalls.h +++ b/libgloss/epiphany/epiphany-syscalls.h @@ -35,5 +35,7 @@ int asm_open(const char* FILE, int FLAGS, int MODE); void asm_exit(int STATUS); int asm_close(int CHAN); int asm_syscall(void *P1, void *P2, void *P3, int SUBFUN); +int _fstat (int, struct stat *st); + #endif diff --git a/libgloss/epiphany/fstat.c b/libgloss/epiphany/fstat.c index 5a20b57f3f..d126c2de86 100644 --- a/libgloss/epiphany/fstat.c +++ b/libgloss/epiphany/fstat.c @@ -31,6 +31,7 @@ #include #include +#include "epiphany-syscalls.h" /* ------------------------------------------------------------------------- */ @@ -44,6 +45,6 @@ int __attribute__ ((section ("libgloss_epiphany"))) _fstat (int fildes, struct stat *st) { - return asm_syscall (fildes, st, NULL, SYS_fstat); + return asm_syscall ((void *)fildes, st, NULL, SYS_fstat); } /* _fstat () */ diff --git a/libgloss/epiphany/gettimeofday.c b/libgloss/epiphany/gettimeofday.c index e169385ea4..36f17b8b0f 100644 --- a/libgloss/epiphany/gettimeofday.c +++ b/libgloss/epiphany/gettimeofday.c @@ -31,6 +31,7 @@ #include #include #include "syscall.h" +#include "epiphany-syscalls.h" int _gettimeofday (struct timeval *tp, void *tzp) diff --git a/libgloss/epiphany/link.c b/libgloss/epiphany/link.c index d87637e39a..fd0d8b9cb5 100644 --- a/libgloss/epiphany/link.c +++ b/libgloss/epiphany/link.c @@ -31,6 +31,7 @@ #include #include +#include "epiphany-syscalls.h" /* ------------------------------------------------------------------------- */ diff --git a/libgloss/epiphany/lseek.c b/libgloss/epiphany/lseek.c index 64ffcdd288..65d7e52dad 100644 --- a/libgloss/epiphany/lseek.c +++ b/libgloss/epiphany/lseek.c @@ -30,6 +30,7 @@ #include #include +#include "epiphany-syscalls.h" /* ------------------------------------------------------------------------- */ /*!Set a position in a file @@ -43,5 +44,5 @@ off_t __attribute__ ((section ("libgloss_epiphany"))) _lseek (int fildes, off_t offset, int whence) { - return asm_syscall (fildes, offset, whence, SYS_lseek); + return asm_syscall ((void *)fildes, (void *)offset, (void *)whence, SYS_lseek); } /* _lseek () */ diff --git a/libgloss/epiphany/stat.c b/libgloss/epiphany/stat.c index 988f28dba7..f9a3872a80 100644 --- a/libgloss/epiphany/stat.c +++ b/libgloss/epiphany/stat.c @@ -31,6 +31,7 @@ #include #include +#include "epiphany-syscalls.h" /* ------------------------------------------------------------------------- */ diff --git a/libgloss/epiphany/unlink.c b/libgloss/epiphany/unlink.c index c78af284d2..653f24b951 100644 --- a/libgloss/epiphany/unlink.c +++ b/libgloss/epiphany/unlink.c @@ -31,6 +31,7 @@ #include #include +#include "epiphany-syscalls.h" /* ------------------------------------------------------------------------- */ diff --git a/libgloss/fr30/Makefile.in b/libgloss/fr30/Makefile.in deleted file mode 100644 index 4c988efb74..0000000000 --- a/libgloss/fr30/Makefile.in +++ /dev/null @@ -1,145 +0,0 @@ -# -# - -DESTDIR = -VPATH = @srcdir@ @srcdir@/.. -srcdir = @srcdir@ -objdir = . -srcroot = $(srcdir)/../.. -objroot = $(objdir)/../.. - -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -host_alias = @host_alias@ -target_alias = @target_alias@ - -bindir = @bindir@ -libdir = @libdir@ -tooldir = $(exec_prefix)/$(target_alias) - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -# Multilib support variables. -# TOP is used instead of MULTI{BUILD,SRC}TOP. -MULTIDIRS = -MULTISUBDIR = - -SHELL = /bin/sh - -mkinstalldirs = $(SHELL) $(srcroot)/mkinstalldirs - -CC = @CC@ - -AS = @AS@ -AR = @AR@ -LD = @LD@ -RANLIB = @RANLIB@ - -OBJDUMP = `if [ -f ${objroot}/../binutils/objdump ] ; \ - then echo ${objroot}/../binutils/objdump ; \ - else t='$(program_transform_name)'; echo objdump | sed -e $$t ; fi` -OBJCOPY = `if [ -f ${objroot}/../binutils/objcopy ] ; \ - then echo ${objroot}/../binutils/objcopy ; \ - else t='$(program_transform_name)'; echo objcopy | sed -e $$t ; fi` - -OBJS = putnum.o unlink.o -CFLAGS = -g -SCRIPTS = - -# Here is all of the simulator stuff -SIM_SCRIPTS = -SIM_LDFLAGS = -SIM_BSP = libsim.a -SIM_CRT0 = crt0.o -SIM_OBJS = syscalls.o -SIM_TEST = sim-test -SIM_INSTALL = install-sim - -# Here is all of the mon960 stuff -MON_LDFLAGS = -MON_BSP = libmon960.a -MON_CRT0 = crt0.o -MON_OBJS = -MON_SCRIPTS = mon960.ld -MON_TEST = -MON_INSTALL = install-mon - -# Host specific makefile fragment comes in here. -@host_makefile_frag@ - -# -# build a test program for each target board. Just trying to get -# it to link is a good test, so we ignore all the errors for now. -# -# all: ${MON_CRT0} ${MON_BSP} -all: ${SIM_CRT0} ${SIM_BSP} - -# -# here's where we build the board support packages for each target -# -${SIM_BSP}: ${OBJS} ${SIM_OBJS} - ${AR} ${ARFLAGS} ${SIM_BSP} ${SIM_OBJS} ${OBJS} - ${RANLIB} ${SIM_BSP} - -${MON_BSP}: ${OBJS} ${MON_OBJS} - ${AR} ${ARFLAGS} ${MON_BSP} ${MON_OBJS} ${OBJS} - ${RANLIB} ${MON_BSP} - -# -# here's where we build the test programs for each target -# -.PHONY: test -test: ${SIM_TEST} ${MVME_TEST} ${EVM_TEST} - -sim-test: sim-test.x sim-test.dis - -sim-test.x: test.o ${SIM_CRT0} ${SIM_BSP} - ${CC} ${LDFLAGS_FOR_TARGET} -L${objdir} \ - ${SIM_CRT0} test.o \ - -o sim-test.x ${LIBS_FOR_TARGET} -lc ${SIM_BSP} - -sim-test.dis: sim-test.x - ${OBJDUMP} -d sim-test.x > sim-test.dis - - -# -# -# -.c.S: - ${CC} ${CFLAGS_FOR_TARGET} -c $< - -simulator.o: simulator.S -sim-crt0.o: sim-crt0.S -mvme-crt0.o: mvme-crt0.S -mvme-exit.o: mvme-exit.S -mvme-inbyte.o: mvme-inbyte.S -mvme-outbyte.o: mvme-outbyte.S - -clean mostlyclean: - rm -f a.out core *.i *.o *-test *.srec *.dis *.x $(SIM_BSP) $(MON_BSP) - -distclean maintainer-clean realclean: clean - rm -f Makefile *~ - -.PHONY: install info install-info clean-info -install: ${SIM_INSTALL} - -install-mon: - ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR} - set -e; for x in ${MON_CRT0} ${MON_BSP}; do ${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done - set -e; for x in ${MON_SCRIPTS}; do ${INSTALL_DATA} ${srcdir}/$$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done - -install-sim: - ${mkinstalldirs} ${DESTDIR}${tooldir}/lib - set -e; for x in ${SIM_CRT0} ${SIM_BSP} ${SIM_SCRIPTS}; do ${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib/$$x; done - -doc: -info: -install-info: -clean-info: - -Makefile: Makefile.in ../config.status - cd .. && $(SHELL) config.status diff --git a/libgloss/fr30/Makefile.inc b/libgloss/fr30/Makefile.inc new file mode 100644 index 0000000000..0ba7476c3f --- /dev/null +++ b/libgloss/fr30/Makefile.inc @@ -0,0 +1,8 @@ +multilibtool_DATA += %D%/crt0.o +libobjs_a_SOURCES += %D%/crt0.s + +multilibtool_LIBRARIES += %D%/libsim.a +%C%_libsim_a_SOURCES = \ + %D%/syscalls.c \ + putnum.c \ + unlink.c diff --git a/libgloss/fr30/syscalls.c b/libgloss/fr30/syscalls.c index 2558556b65..36702b03d6 100644 --- a/libgloss/fr30/syscalls.c +++ b/libgloss/fr30/syscalls.c @@ -5,6 +5,8 @@ #include #include "../syscall.h" +#pragma GCC diagnostic ignored "-Wreturn-mismatch" + int _read (file, ptr, len) int file; diff --git a/libgloss/frv/Makefile.in b/libgloss/frv/Makefile.in deleted file mode 100644 index cf3b8b4377..0000000000 --- a/libgloss/frv/Makefile.in +++ /dev/null @@ -1,125 +0,0 @@ -# Copyright (c) 2002 Red Hat, Inc -# -# The authors hereby grant permission to use, copy, modify, distribute, -# and license this software and its documentation for any purpose, provided -# that existing copyright notices are retained in all copies and that this -# notice is included verbatim in any distributions. No written agreement, -# license, or royalty fee is required for any of the authorized uses. -# Modifications to this software may be copyrighted by their authors -# and need not follow the licensing terms described here, provided that -# the new terms are clearly indicated on the first page of each file where -# they apply. - -# Makefile for libgloss/frv. This is the board support -# code for the various frv targets. - -DESTDIR = -VPATH = @srcdir@ @srcdir@/.. -srcdir = @srcdir@ -objdir = . -srcroot = $(srcdir)/../.. -objroot = $(objdir)/../.. - -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -host_alias = @host_alias@ -target_alias = @target_alias@ - -bindir = @bindir@ -libdir = @libdir@ -tooldir = $(exec_prefix)/$(target_alias) - -# Multilib support variables. -# TOP is used instead of MULTI{BUILD,SRC}TOP. -MULTIDIRS = -MULTISUBDIR = -MULTIDO = true -MULTICLEAN = true - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -SHELL = /bin/sh - -mkinstalldirs = $(SHELL) $(srcroot)/mkinstalldirs - -CC = @CC@ - -AS = @AS@ -AR = @AR@ -LD = @LD@ -RANLIB = @RANLIB@ -AR_FLAGS = rc - -OBJDUMP = `if [ -f ${objroot}/../binutils/objdump ] ; \ - then echo ${objroot}/../binutils/objdump ; \ - else t='$(program_transform_name)'; echo objdump | sed -e $$t ; fi` -OBJCOPY = `if [ -f ${objroot}/../binutils/objcopy ] ; \ - then echo ${objroot}/../binutils/objcopy ; \ - else t='$(program_transform_name)'; echo objcopy | sed -e $$t ; fi` - -CRT0 = crt0.o -SIM_BSP = libsim.a -SIM_OBJS = fstat.o \ - getpid.o \ - isatty.o \ - kill.o \ - putnum.o \ - sbrk.o \ - sim-close.o \ - sim-exit.o \ - sim-inbyte.o \ - sim-lseek.o \ - sim-open.o \ - sim-read.o \ - sim-time.o \ - sim-unlink.o \ - sim-write.o \ - stat.o - -#### Host specific Makefile fragment comes in here. -@host_makefile_frag@ - -all: $(CRT0) $(SIM_BSP) - -$(SIM_BSP): $(SIM_OBJS) - $(AR) $(ARFLAGS) $@ $? - $(RANLIB) $@ - -fstat.o: $(srcdir)/fstat.c -getpid.o: $(srcdir)/getpid.c -isatty.o: $(srcdir)/isatty.c -kill.o: $(srcdir)/kill.c -putnum.o: $(srcdir)/putnum.c -sbrk.o: $(srcdir)/sbrk.c -sim-close.o: $(srcdir)/sim-close.S -sim-exit.o: $(srcdir)/sim-exit.S -sim-inbyte.o: $(srcdir)/sim-inbyte.c -sim-lseek.o: $(srcdir)/sim-lseek.S -sim-open.o: $(srcdir)/sim-open.S -sim-read.o: $(srcdir)/sim-read.S -sim-time.o: $(srcdir)/sim-time.c -sim-unlink.o: $(srcdir)/sim-unlink.S -sim-write.o: $(srcdir)/sim-write.S -stat.o: $(srcdir)/stat.c - -install: $($(CPU)_INSTALL) - ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR} - $(INSTALL_DATA) $(CRT0) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$(CRT0) - $(INSTALL_DATA) $(SIM_BSP) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$(SIM_BSP) - -clean mostlyclean: - rm -f *.o *.a - -distclean maintainer-clean realclean: clean - rm -f Makefile - -.PHONY: info dvi doc install-info clean-info -info doc dvi: -install-info: -clean-info: - -Makefile: Makefile.in ../config.status - cd .. && $(SHELL) config.status diff --git a/libgloss/frv/Makefile.inc b/libgloss/frv/Makefile.inc new file mode 100644 index 0000000000..44a44b5c3f --- /dev/null +++ b/libgloss/frv/Makefile.inc @@ -0,0 +1,33 @@ +## Copyright (c) 2002 Red Hat, Inc +## +## The authors hereby grant permission to use, copy, modify, distribute, +## and license this software and its documentation for any purpose, provided +## that existing copyright notices are retained in all copies and that this +## notice is included verbatim in any distributions. No written agreement, +## license, or royalty fee is required for any of the authorized uses. +## Modifications to this software may be copyrighted by their authors +## and need not follow the licensing terms described here, provided that +## the new terms are clearly indicated on the first page of each file where +## they apply. + +multilibtool_DATA += %D%/crt0.o +libobjs_a_SOURCES += %D%/crt0.S + +multilibtool_LIBRARIES += %D%/libsim.a +%C%_libsim_a_SOURCES = \ + %D%/fstat.c \ + %D%/getpid.c \ + %D%/isatty.c \ + %D%/kill.c \ + %D%/putnum.c \ + %D%/sbrk.c \ + %D%/sim-close.S \ + %D%/sim-exit.S \ + %D%/sim-inbyte.c \ + %D%/sim-lseek.S \ + %D%/sim-open.S \ + %D%/sim-read.S \ + %D%/sim-time.c \ + %D%/sim-unlink.S \ + %D%/sim-write.S \ + %D%/stat.c diff --git a/libgloss/frv/putnum.c b/libgloss/frv/putnum.c index a07315e138..b2b2c4435b 100644 --- a/libgloss/frv/putnum.c +++ b/libgloss/frv/putnum.c @@ -14,6 +14,8 @@ */ #include "glue.h" +extern void print (char *ptr); + /* * putnum -- print a 32 bit number in hex */ diff --git a/libgloss/frv/sim-inbyte.c b/libgloss/frv/sim-inbyte.c index 9d39751b37..f5f49b9b32 100644 --- a/libgloss/frv/sim-inbyte.c +++ b/libgloss/frv/sim-inbyte.c @@ -14,6 +14,8 @@ * they apply. */ +#include + int inbyte () { diff --git a/libgloss/ft32/Makefile.in b/libgloss/ft32/Makefile.in deleted file mode 100644 index 4fa84e3fb8..0000000000 --- a/libgloss/ft32/Makefile.in +++ /dev/null @@ -1,129 +0,0 @@ -# Copyright (C) 2015 FTDI (support@ftdichip.com) -# -# The authors hereby grant permission to use, copy, modify, distribute, -# and license this software and its documentation for any purpose, provided -# that existing copyright notices are retained in all copies and that this -# notice is included verbatim in any distributions. No written agreement, -# license, or royalty fee is required for any of the authorized uses. -# Modifications to this software may be copyrighted by their authors -# and need not follow the licensing terms described here, provided that -# the new terms are clearly indicated on the first page of each file where -# they apply. - -# Makefile for libgloss/spro. This is the board support code for the -# ft32 target. - -DESTDIR = -VPATH = @srcdir@ @srcdir@/.. -srcdir = @srcdir@ -objdir = . -srcroot = $(srcdir)/../.. -objroot = $(objdir)/../.. - -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -host_alias = @host_alias@ -target_alias = @target_alias@ - -bindir = @bindir@ -libdir = @libdir@ -tooldir = $(exec_prefix)/$(target_alias) - -# Multilib support variables. -# TOP is used instead of MULTI{BUILD,SRC}TOP. -MULTIDIRS = -MULTISUBDIR = -MULTIDO = true -MULTICLEAN = true - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -SHELL = /bin/sh - -mkinstalldirs = $(SHELL) $(srcroot)/mkinstalldirs - -CC = @CC@ - -AS = @AS@ -AR = @AR@ -LD = @LD@ -RANLIB = @RANLIB@ -AR_FLAGS = rc - -OBJDUMP = `if [ -f ${objroot}/../binutils/objdump ] ; \ - then echo ${objroot}/../binutils/objdump ; \ - else t='$(program_transform_name)'; echo objdump | sed -e $$t ; fi` -OBJCOPY = `if [ -f ${objroot}/../binutils/objcopy ] ; \ - then echo ${objroot}/../binutils/objcopy ; \ - else t='$(program_transform_name)'; echo objcopy | sed -e $$t ; fi` - -LD_SCRIPTS = ft32-elf-common.ld sim.ld - -CRT0 = crt0.o -SIM_BSP = libsim.a -SIM_OBJS = fstat.o \ - getpid.o \ - isatty.o \ - kill.o \ - sbrk.o \ - sim-close.o \ - sim-exit.o \ - sim-inbyte.o \ - sim-lseek.o \ - sim-open.o \ - sim-read.o \ - sim-time.o \ - sim-unlink.o \ - sim-write.o \ - stat.o - -#### Host specific Makefile fragment comes in here. -@host_makefile_frag@ - -all: $(CRT0) $(SIM_BSP) - -$(SIM_BSP): $(SIM_OBJS) - $(AR) $(ARFLAGS) $@ $? - $(RANLIB) $@ - -fstat.o: $(srcdir)/fstat.c -getpid.o: $(srcdir)/getpid.c -isatty.o: $(srcdir)/isatty.c -kill.o: $(srcdir)/kill.c -putnum.o: $(srcdir)/putnum.c -sbrk.o: $(srcdir)/sbrk.c -sim-close.o: $(srcdir)/sim-close.S -sim-exit.o: $(srcdir)/sim-exit.S -sim-inbyte.o: $(srcdir)/sim-inbyte.c -sim-lseek.o: $(srcdir)/sim-lseek.c -sim-open.o: $(srcdir)/sim-open.S -sim-read.o: $(srcdir)/sim-read.S -sim-time.o: $(srcdir)/sim-time.c -sim-unlink.o: $(srcdir)/sim-unlink.S -sim-write.o: $(srcdir)/sim-write.S -stat.o: $(srcdir)/stat.c - -install: $($(CPU)_INSTALL) - ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR} - $(INSTALL_DATA) $(CRT0) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$(CRT0) - $(INSTALL_DATA) $(SIM_BSP) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$(SIM_BSP) - for x in ${LD_SCRIPTS}; do \ - ${INSTALL_DATA} ${srcdir}/$$x $(DESTDIR)${tooldir}/lib/$$x; \ - done; - -clean mostlyclean: - rm -f *.o *.a - -distclean maintainer-clean realclean: clean - rm -f Makefile - -.PHONY: info dvi doc install-info clean-info -info doc dvi: -install-info: -clean-info: - -Makefile: Makefile.in ../config.status - cd .. && $(SHELL) config.status diff --git a/libgloss/ft32/Makefile.inc b/libgloss/ft32/Makefile.inc new file mode 100644 index 0000000000..344b109fa4 --- /dev/null +++ b/libgloss/ft32/Makefile.inc @@ -0,0 +1,37 @@ +## Copyright (C) 2015 FTDI (support@ftdichip.com) +## +## The authors hereby grant permission to use, copy, modify, distribute, +## and license this software and its documentation for any purpose, provided +## that existing copyright notices are retained in all copies and that this +## notice is included verbatim in any distributions. No written agreement, +## license, or royalty fee is required for any of the authorized uses. +## Modifications to this software may be copyrighted by their authors +## and need not follow the licensing terms described here, provided that +## the new terms are clearly indicated on the first page of each file where +## they apply. + +if !HAVE_MULTISUBDIR +multilibtool_DATA += \ + %D%/sim.ld +endif + +multilibtool_DATA += %D%/crt0.o +libobjs_a_SOURCES += %D%/crt0.S + +multilibtool_LIBRARIES += %D%/libsim.a +%C%_libsim_a_SOURCES = \ + %D%/fstat.c \ + %D%/getpid.c \ + %D%/isatty.c \ + %D%/kill.c \ + %D%/sbrk.c \ + %D%/sim-close.S \ + %D%/sim-exit.S \ + %D%/sim-inbyte.c \ + %D%/sim-lseek.c \ + %D%/sim-open.S \ + %D%/sim-read.S \ + %D%/sim-time.c \ + %D%/sim-unlink.S \ + %D%/sim-write.S \ + %D%/stat.c diff --git a/libgloss/ft32/sim-inbyte.c b/libgloss/ft32/sim-inbyte.c index 9df0e1fe47..f56890dcc8 100644 --- a/libgloss/ft32/sim-inbyte.c +++ b/libgloss/ft32/sim-inbyte.c @@ -13,6 +13,7 @@ * the new terms are clearly indicated on the first page of each file where * they apply. */ +#include int inbyte () diff --git a/libgloss/glue.h b/libgloss/glue.h index 0a7e36db21..98c0a6ad22 100644 --- a/libgloss/glue.h +++ b/libgloss/glue.h @@ -13,6 +13,7 @@ * they apply. */ #include <_ansi.h> +#include #ifndef NULL # define NULL 0 @@ -28,4 +29,5 @@ extern char _end[]; /* _end is set in the linker command file */ /* only one prcess support, as this is OS dependant */ #define __MYPID 1 +int outbyte (char); diff --git a/libgloss/hp74x/Makefile.in b/libgloss/hp74x/Makefile.in index 12c51bf3be..0167e1c62e 100644 --- a/libgloss/hp74x/Makefile.in +++ b/libgloss/hp74x/Makefile.in @@ -117,7 +117,7 @@ install: .s.o: $(CC) $(CFLAGS_FOR_TARGET) $(INCLUDES) -c $< -# $(AS) $(CFLAGS_FOR_TARGET) $(INCLUDES) -c $< +# $(AS) $(CFLAGS_FOR_TARGET) -c $< .SUFFIXES: .S .c .o .s .lif # diff --git a/libgloss/hp74x/debugger.h b/libgloss/hp74x/debugger.h index 2c735987c3..81e515b171 100644 --- a/libgloss/hp74x/debugger.h +++ b/libgloss/hp74x/debugger.h @@ -3,7 +3,7 @@ THIS SOFTWARE IS NOT COPYRIGHTED HP offers the following for use in the public domain. HP makes no - warranty with regard to the software or it's performance and the + warranty with regard to the software or its performance and the user accepts the software "AS IS" with all faults. HP DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, WITH REGARD diff --git a/libgloss/hp74x/debugger.s b/libgloss/hp74x/debugger.s index edf4e4b417..c3830acf62 100644 --- a/libgloss/hp74x/debugger.s +++ b/libgloss/hp74x/debugger.s @@ -3,7 +3,7 @@ THIS SOFTWARE IS NOT COPYRIGHTED HP offers the following for use in the public domain. HP makes no - warranty with regard to the software or it's performance and the + warranty with regard to the software or its performance and the user accepts the software "AS IS" with all faults. HP DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, WITH REGARD diff --git a/libgloss/hp74x/diagnose.h b/libgloss/hp74x/diagnose.h index 23eb84791e..1d536a6334 100644 --- a/libgloss/hp74x/diagnose.h +++ b/libgloss/hp74x/diagnose.h @@ -3,7 +3,7 @@ THIS SOFTWARE IS NOT COPYRIGHTED HP offers the following for use in the public domain. HP makes no - warranty with regard to the software or it's performance and the + warranty with regard to the software or its performance and the user accepts the software "AS IS" with all faults. HP DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, WITH REGARD diff --git a/libgloss/hp74x/iva_table.h b/libgloss/hp74x/iva_table.h index 68d6ba9776..afccce3134 100644 --- a/libgloss/hp74x/iva_table.h +++ b/libgloss/hp74x/iva_table.h @@ -3,7 +3,7 @@ THIS SOFTWARE IS NOT COPYRIGHTED HP offers the following for use in the public domain. HP makes no - warranty with regard to the software or it's performance and the + warranty with regard to the software or its performance and the user accepts the software "AS IS" with all faults. HP DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, WITH REGARD diff --git a/libgloss/hp74x/iva_table.s b/libgloss/hp74x/iva_table.s index 289ea3c94d..570df3fe79 100644 --- a/libgloss/hp74x/iva_table.s +++ b/libgloss/hp74x/iva_table.s @@ -3,7 +3,7 @@ THIS SOFTWARE IS NOT COPYRIGHTED HP offers the following for use in the public domain. HP makes no - warranty with regard to the software or it's performance and the + warranty with regard to the software or its performance and the user accepts the software "AS IS" with all faults. HP DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, WITH REGARD diff --git a/libgloss/hp74x/pa_stub.c b/libgloss/hp74x/pa_stub.c index 2964921756..42002cf889 100644 --- a/libgloss/hp74x/pa_stub.c +++ b/libgloss/hp74x/pa_stub.c @@ -19,7 +19,7 @@ THIS SOFTWARE IS NOT COPYRIGHTED HP offers the following for use in the public domain. HP makes no - warranty with regard to the software or it's performance and the + warranty with regard to the software or its performance and the user accepts the software "AS IS" with all faults. HP DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, WITH REGARD diff --git a/libgloss/i386/Makefile.in b/libgloss/i386/Makefile.in deleted file mode 100644 index 7ed0b075f7..0000000000 --- a/libgloss/i386/Makefile.in +++ /dev/null @@ -1,127 +0,0 @@ -# Copyright (c) 1997, 2000 Cygnus Support -# -# The authors hereby grant permission to use, copy, modify, distribute, -# and license this software and its documentation for any purpose, provided -# that existing copyright notices are retained in all copies and that this -# notice is included verbatim in any distributions. No written agreement, -# license, or royalty fee is required for any of the authorized uses. -# Modifications to this software may be copyrighted by their authors -# and need not follow the licensing terms described here, provided that -# the new terms are clearly indicated on the first page of each file where -# they apply. - -DESTDIR = -VPATH = @srcdir@ -srcdir = @srcdir@ -objdir = . -srcroot = $(srcdir)/../.. -objroot = $(objdir)/../.. - -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -host_alias = @host_alias@ -target_alias = @target_alias@ -program_transform_name = @program_transform_name@ - -bindir = @bindir@ -libdir = @libdir@ -tooldir = $(exec_prefix)/$(target_alias) - -# Multilib support variables. -# TOP is used instead of MULTI{BUILD,SRC}TOP. -MULTIDIRS = -MULTISUBDIR = -MULTIDO = true -MULTICLEAN = true - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -SHELL = /bin/sh - -mkinstalldirs = $(SHELL) $(srcroot)/mkinstalldirs - -CC = @CC@ - -#AS = @AS@ -AS = `if [ -f ${objroot}/../gas/as.new ] ; \ - then echo ${objroot}/../gas/as.new ; \ - else echo as ; fi` - -AR = @AR@ - -#LD = @LD@ -LD = `if [ -f ${objroot}/../ld/ld.new ] ; \ - then echo ${objroot}/../ld/ld.new ; \ - else echo ld ; fi` - -RANLIB = @RANLIB@ - -OBJDUMP = `if [ -f ${objroot}/../binutils/objdump ] ; \ - then echo ${objroot}/../binutils/objdump ; \ - else t='$(program_transform_name)'; echo objdump | sed -e $$t ; fi` -OBJCOPY = `if [ -f ${objroot}/../binutils/objcopy ] ; \ - then echo ${objroot}/../binutils/objcopy ; \ - else t='$(program_transform_name)'; echo objcopy | sed -e $$t ; fi` - -CRT0 = cygmon-crt0.o -CYGMON_OBJS = cygmon-salib.o cygmon-gmon.o - -CFLAGS = -g - -GCC_LDFLAGS = `if [ -d ${objroot}/../gcc ] ; \ - then echo -L${objroot}/../gcc ; fi` - -SCRIPTS = cygmon -BSP = libcygmon.a - -# Host specific makefile fragment comes in here. -@host_makefile_frag@ - -all: ${CRT0} ${BSP} - -# -# here's where we build the board support packages for each target -# -libcygmon.a: $(CYGMON_OBJS) - ${AR} ${ARFLAGS} $@ $(CYGMON_OBJS) - ${RANLIB} $@ - -cygmon-salib.o: ${srcdir}/cygmon-salib.c - $(CC) -c $(CFLAGS) $(I386_CPPFLAGS) $(<) -o $@ - -cygmon-crt0.o: ${srcdir}/cygmon-crt0.S - $(CC) -c $(CFLAGS) $(I386_CPPFLAGS) $(<) -o $@ - -doc: - -clean mostlyclean: - rm -f a.out core *.i *~ *.o *-test *.srec *.dis *.map *.x - -distclean maintainer-clean realclean: clean - rm -f Makefile a.out - -.PHONY: install info install-info clean-info -install: - ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR} - $(INSTALL_PROGRAM) $(CRT0) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$(CRT0) - @for bsp in ${BSP}; do\ - $(INSTALL_PROGRAM) $${bsp} $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}; \ - done - @for script in ${SCRIPTS}; do\ - $(INSTALL_DATA) ${srcdir}/$${script}.ld $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$${script}.ld; \ - done - -info: -install-info: -clean-info: - -test.o: ${srcdir}/test.c - -# these are for the BSPs -${CRT0}: cygmon-crt0.S - -Makefile: Makefile.in ../config.status - cd .. && $(SHELL) config.status diff --git a/libgloss/i386/Makefile.inc b/libgloss/i386/Makefile.inc new file mode 100644 index 0000000000..a0825611ad --- /dev/null +++ b/libgloss/i386/Makefile.inc @@ -0,0 +1,25 @@ +## Copyright (c) 1997, 2000 Cygnus Support +## +## The authors hereby grant permission to use, copy, modify, distribute, +## and license this software and its documentation for any purpose, provided +## that existing copyright notices are retained in all copies and that this +## notice is included verbatim in any distributions. No written agreement, +## license, or royalty fee is required for any of the authorized uses. +## Modifications to this software may be copyrighted by their authors +## and need not follow the licensing terms described here, provided that +## the new terms are clearly indicated on the first page of each file where +## they apply. + +multilibtool_DATA += \ + %D%/cygmon.ld + +multilibtool_DATA += %D%/cygmon-crt0.o +libobjs_a_SOURCES += %D%/cygmon-crt0.S + +multilibtool_LIBRARIES += %D%/libcygmon.a +%C%_libcygmon_a_SOURCES = \ + %D%/cygmon-salib.c \ + %D%/cygmon-gmon.c +%C%_libcygmon_a_CPPFLAGS = \ + $(AM_CPPFLAGS) \ + $(I386_CPPFLAGS) diff --git a/libgloss/i960/Makefile.in b/libgloss/i960/Makefile.in deleted file mode 100644 index bf1a49e581..0000000000 --- a/libgloss/i960/Makefile.in +++ /dev/null @@ -1,144 +0,0 @@ -# -# - -DESTDIR = -VPATH = @srcdir@ @srcdir@/.. -srcdir = @srcdir@ -objdir = . -srcroot = $(srcdir)/../.. -objroot = $(objdir)/../.. - -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -host_alias = @host_alias@ -target_alias = @target_alias@ - -bindir = @bindir@ -libdir = @libdir@ -tooldir = $(exec_prefix)/$(target_alias) - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -# Multilib support variables. -# TOP is used instead of MULTI{BUILD,SRC}TOP. -MULTIDIRS = -MULTISUBDIR = - -SHELL = /bin/sh - -mkinstalldirs = $(SHELL) $(srcroot)/mkinstalldirs - -CC = @CC@ - -AS = @AS@ -AR = @AR@ -LD = @LD@ -RANLIB = @RANLIB@ - -OBJDUMP = `if [ -f ${objroot}/../binutils/objdump ] ; \ - then echo ${objroot}/../binutils/objdump ; \ - else t='$(program_transform_name)'; echo objdump | sed -e $$t ; fi` -OBJCOPY = `if [ -f ${objroot}/../binutils/objcopy ] ; \ - then echo ${objroot}/../binutils/objcopy ; \ - else t='$(program_transform_name)'; echo objcopy | sed -e $$t ; fi` - -OBJS = putnum.o unlink.o -CFLAGS = -g -SCRIPTS = - -# Here is all of the simulator stuff -SIM_SCRIPTS = -SIM_LDFLAGS = -SIM_BSP = libsim.a -SIM_CRT0 = sim-crt0.o -SIM_OBJS = sim-print.o sim-inbyte.o sim-sbrk.o sim-abort.o sim-errno.o simulator.o -SIM_TEST = sim-test -SIM_INSTALL = install-sim - -# Here is all of the mon960 stuff -MON_LDFLAGS = -MON_BSP = libmon960.a -MON_CRT0 = crt0.o -MON_OBJS = mon-read.o mon-write.o mon-syscalls.o mon960.o -MON_SCRIPTS = mon960.ld -MON_TEST = -MON_INSTALL = install-mon - -# Host specific makefile fragment comes in here. -@host_makefile_frag@ - -# -# build a test program for each target board. Just trying to get -# it to link is a good test, so we ignore all the errors for now. -# -all: ${MON_CRT0} ${MON_BSP} - -# -# here's where we build the board support packages for each target -# -${SIM_BSP}: ${OBJS} ${SIM_OBJS} - ${AR} ${ARFLAGS} ${SIM_BSP} ${SIM_OBJS} ${OBJS} - ${RANLIB} ${SIM_BSP} - -${MON_BSP}: ${OBJS} ${MON_OBJS} - ${AR} ${ARFLAGS} ${MON_BSP} ${MON_OBJS} ${OBJS} - ${RANLIB} ${MON_BSP} - -# -# here's where we build the test programs for each target -# -.PHONY: test -test: ${SIM_TEST} ${MVME_TEST} ${EVM_TEST} - -sim-test: sim-test.x sim-test.dis - -sim-test.x: test.o ${SIM_CRT0} ${SIM_BSP} - ${CC} ${LDFLAGS_FOR_TARGET} -L${objdir} \ - ${SIM_CRT0} test.o \ - -o sim-test.x ${LIBS_FOR_TARGET} -lc ${SIM_BSP} - -sim-test.dis: sim-test.x - ${OBJDUMP} -d sim-test.x > sim-test.dis - - -# -# -# -.c.S: - ${CC} ${CFLAGS_FOR_TARGET} -c $< - -simulator.o: simulator.S -sim-crt0.o: sim-crt0.S -mvme-crt0.o: mvme-crt0.S -mvme-exit.o: mvme-exit.S -mvme-inbyte.o: mvme-inbyte.S -mvme-outbyte.o: mvme-outbyte.S - -clean mostlyclean: - rm -f a.out core *.i *.o *-test *.srec *.dis *.x - -distclean maintainer-clean realclean: clean - rm -f Makefile *~ - -.PHONY: install info install-info clean-info -install: ${MON_INSTALL} - -install-mon: - ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR} - set -e; for x in ${MON_CRT0} ${MON_BSP}; do ${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done - set -e; for x in ${MON_SCRIPTS}; do ${INSTALL_DATA} ${srcdir}/$$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done - -install-sim: - ${mkinstalldirs} ${DESTDIR}${tooldir}/lib - set -e; for x in ${SIM_CRT0} ${SIM_BSP} ${SIM_SCRIPTS}; do ${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib/$$x; done - -doc: -info: -install-info: -clean-info: - -Makefile: Makefile.in ../config.status - cd .. && $(SHELL) config.status diff --git a/libgloss/i960/Makefile.inc b/libgloss/i960/Makefile.inc new file mode 100644 index 0000000000..3d1f58bb10 --- /dev/null +++ b/libgloss/i960/Makefile.inc @@ -0,0 +1,16 @@ +multilibtool_DATA += \ + %D%/crt0.o +libobjs_a_SOURCES += \ + %D%/crt0.c + +multilibtool_DATA += \ + %D%/mon960.ld + +multilibtool_LIBRARIES += %D%/libmon960.a +%C%_libmon960_a_SOURCES = \ + putnum.c \ + unlink.c \ + %D%/mon-read.c \ + %D%/mon-write.c \ + %D%/mon-syscalls.S \ + %D%/mon960.c diff --git a/libgloss/iq2000/getpid.c b/libgloss/iq2000/getpid.c index 20ab1866eb..fea57daff1 100644 --- a/libgloss/iq2000/getpid.c +++ b/libgloss/iq2000/getpid.c @@ -4,7 +4,8 @@ #include "trap.h" -_getpid (n) +int +_getpid (int n) { return 1; } diff --git a/libgloss/iq2000/isatty.c b/libgloss/iq2000/isatty.c index 7e63a8c7c0..3d8eb19101 100644 --- a/libgloss/iq2000/isatty.c +++ b/libgloss/iq2000/isatty.c @@ -4,8 +4,8 @@ #include "trap.h" -_isatty (fd) - int fd; +int +_isatty (int fd) { return 1; } diff --git a/libgloss/iq2000/kill.c b/libgloss/iq2000/kill.c index 40afa6a2c2..d63a2f82cd 100644 --- a/libgloss/iq2000/kill.c +++ b/libgloss/iq2000/kill.c @@ -4,7 +4,8 @@ #include "trap.h" -_kill (n, m) +int +_kill (int n, int m) { return TRAP0 (SYS_exit, 0xdead, 0, 0); } diff --git a/libgloss/iq2000/read.c b/libgloss/iq2000/read.c index 31d24cce94..2f1878c062 100644 --- a/libgloss/iq2000/read.c +++ b/libgloss/iq2000/read.c @@ -4,6 +4,7 @@ #include "trap.h" +int _read (int file, char *ptr, size_t len) diff --git a/libgloss/iq2000/sbrk.c b/libgloss/iq2000/sbrk.c index 6dfd93b023..15bd8c8b9d 100644 --- a/libgloss/iq2000/sbrk.c +++ b/libgloss/iq2000/sbrk.c @@ -4,6 +4,7 @@ #include #include "trap.h" +int _write (int, char *, size_t); caddr_t _sbrk (size_t incr) diff --git a/libgloss/libnosys/Makefile.inc b/libgloss/libnosys/Makefile.inc index 5e69072e78..334f694af1 100644 --- a/libgloss/libnosys/Makefile.inc +++ b/libgloss/libnosys/Makefile.inc @@ -24,4 +24,5 @@ multilibtool_LIBRARIES += %D%/libnosys.a %D%/unlink.c \ %D%/wait.c \ %D%/write.c \ + %D%/getentropy.c \ %D%/_exit.c diff --git a/libgloss/libnosys/acinclude.m4 b/libgloss/libnosys/acinclude.m4 index 7b0d7b4d67..ba293f08a0 100644 --- a/libgloss/libnosys/acinclude.m4 +++ b/libgloss/libnosys/acinclude.m4 @@ -22,6 +22,7 @@ case "${target}" in v850*-*-*) ;; w65-*-*) ;; xstormy16-*-*) ;; + xtensa-*-*) ;; z8k-*-*) ;; *) AC_DEFINE(MISSING_SYSCALL_NAMES, 1, [Missing syscall names]) ;; esac diff --git a/libgloss/libnosys/getentropy.c b/libgloss/libnosys/getentropy.c new file mode 100644 index 0000000000..5c4d3a8347 --- /dev/null +++ b/libgloss/libnosys/getentropy.c @@ -0,0 +1,21 @@ +/* + * Stub version of getentropy. + */ + +#include "config.h" +#include <_ansi.h> +#include <_syslist.h> +#include +#undef errno +extern int errno; +#include "warning.h" + +int +_getentropy (void *buf, + size_t buflen) +{ + errno = ENOSYS; + return -1; +} + +stub_warning(_getentropy) diff --git a/libgloss/m32r/Makefile.in b/libgloss/m32r/Makefile.in deleted file mode 100644 index 786502eb8b..0000000000 --- a/libgloss/m32r/Makefile.in +++ /dev/null @@ -1,141 +0,0 @@ -# Makefile for libgloss/m32r -# Copyright (c) 1996, 1998 Cygnus Support. -# All rights reserved. -# -# Redistribution and use in source and binary forms are permitted -# provided that the above copyright notice and this paragraph are -# duplicated in all such forms and that any documentation, -# and/or other materials related to such -# distribution and use acknowledge that the software was developed -# at Cygnus Support, Inc. Cygnus Support, Inc. may not be used to -# endorse or promote products derived from this software without -# specific prior written permission. -# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED -# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - -DESTDIR = -VPATH = @srcdir@ @srcdir@/.. -srcdir = @srcdir@ -objdir = . -srcroot = $(srcdir)/../.. -objroot = $(objdir)/../.. - -host_alias = @host_alias@ -target_alias = @target_alias@ -prefix = @prefix@ -exec_prefix = @exec_prefix@ -bindir = @bindir@ -libdir = @libdir@ -tooldir = $(exec_prefix)/$(target_alias) - -TOP = ../.. -SRCTOP = ../.. - -# Multilib support variables. -# TOP is used instead of MULTI{BUILD,SRC}TOP. -MULTISRCTOP = -MULTIBUILDTOP = -MULTIDIRS = -MULTISUBDIR = -MULTIDO = true -MULTICLEAN = true - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -SHELL = /bin/sh - -CC = @CC@ - -AS = @AS@ -AR = @AR@ -LD = @LD@ -RANLIB = @RANLIB@ - -AR_FLAGS = qv -BISON = bison -MAKEINFO = makeinfo - -.NOEXPORT: -MAKEOVERRIDES= - -TARGETDOC = ../../targetdep.tex - -CRT0 = crt0.o -GDBLIB = m32r-lib.o -GDBSTUB = m32r-stub.o -EVASCRIPT = eva.ld -STUBSCRIPT = eva-stub.ld - -GENERIC_LIBOBJS = \ - chmod.o close.o exit.o fstat.o getpid.o isatty.o kill.o lseek.o \ - open.o raise.o read.o sbrk.o stat.o unlink.o utime.o write.o - -LIBOBJS = trap0.o $(GENERIC_LIBOBJS) -LIBGLOSS = libgloss.a - -MONLIBOBJS = trapmon0.o $(GENERIC_LIBOBJS) -MONLIBGLOSS = libmon.a -MONSPECS = mon.specs - -# Host specific makefile fragment comes in here. -@host_makefile_frag@ - -all: $(CRT0) $(LIBGLOSS) $(MONLIBGLOSS) $(GDBLIB) $(GDBSTUB) - -libgloss.a: $(LIBOBJS) - $(AR) $(ARFLAGS) $@ $(LIBOBJS) - $(RANLIB) $@ - -libmon.a: $(MONLIBOBJS) - $(AR) $(ARFLAGS) $@ $(MONLIBOBJS) - $(RANLIB) $@ - -install: - mkdir -p $(DESTDIR)$(tooldir)/lib${MULTISUBDIR} - $(INSTALL_DATA) $(CRT0) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$(CRT0) - $(INSTALL_DATA) $(LIBGLOSS) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$(LIBGLOSS) - $(INSTALL_DATA) $(MONLIBGLOSS) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$(MONLIBGLOSS) - $(INSTALL_DATA) $(GDBLIB) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$(GDBLIB) - $(INSTALL_DATA) $(GDBSTUB) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$(GDBSTUB) - $(INSTALL_DATA) $(srcdir)/$(EVASCRIPT) $(DESTDIR)$(tooldir)/lib/$(EVASCRIPT) - $(INSTALL_DATA) $(srcdir)/$(STUBSCRIPT) $(DESTDIR)$(tooldir)/lib/$(STUBSCRIPT) - $(INSTALL_DATA) $(srcdir)/$(MONSPECS) $(DESTDIR)$(tooldir)/lib/$(MONSPECS) - -clean mostlyclean: - rm -f *~ *.[oa] - -distclean maintainer-clean realclean: clean - rm -f Makefile - -info doc: -install-info: -clean-info: - -Makefile: Makefile.in ../config.status - cd .. && $(SHELL) config.status - -# to support SunOS VPATH -crt0.o: crt0.S -m32r-lib.o: m32r-lib.c -m32r-stub.o: m32r-stub.c -chmod.o: chmod.c -close.o: close.c -exit.o: exit.c -fstat.o: fstat.c -getpid.o: getpid.c -isatty.o: isatty.c -kill.o: kill.c -lseek.o: lseek.c -open.o: open.c -raise.o: raise.c -read.o: read.c -sbrk.o: sbrk.c -stat.o: stat.c -unlink.o: unlink.c -utime.o: utime.c -write.o: write.c -trap0.o: trap0.S -trapmon0.o: trapmon0.c diff --git a/libgloss/m32r/Makefile.inc b/libgloss/m32r/Makefile.inc new file mode 100644 index 0000000000..7870cf8899 --- /dev/null +++ b/libgloss/m32r/Makefile.inc @@ -0,0 +1,60 @@ +## Makefile for libgloss/m32r +## Copyright (c) 1996, 1998 Cygnus Support. +## All rights reserved. +## +## Redistribution and use in source and binary forms are permitted +## provided that the above copyright notice and this paragraph are +## duplicated in all such forms and that any documentation, +## and/or other materials related to such +## distribution and use acknowledge that the software was developed +## at Cygnus Support, Inc. Cygnus Support, Inc. may not be used to +## endorse or promote products derived from this software without +## specific prior written permission. +## THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +## IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +## WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + +if !HAVE_MULTISUBDIR +multilibtool_DATA += \ + %D%/eva.ld \ + %D%/eva-stub.ld \ + %D%/mon.specs +endif + +multilibtool_DATA += %D%/crt0.o +libobjs_a_SOURCES += %D%/crt0.S + +%C%_common_lib_sources = \ + %D%/chmod.c \ + %D%/close.c \ + %D%/exit.c \ + %D%/fstat.c \ + %D%/getpid.c \ + %D%/isatty.c \ + %D%/kill.c \ + %D%/lseek.c \ + %D%/open.c \ + %D%/raise.c \ + %D%/read.c \ + %D%/sbrk.c \ + %D%/stat.c \ + %D%/unlink.c \ + %D%/utime.c \ + %D%/write.c + +multilibtool_LIBRARIES += %D%/libgloss.a +%C%_libgloss_a_SOURCES = \ + %D%/trap0.S \ + $(%C%_common_lib_sources) + +multilibtool_LIBRARIES += %D%/libmon.a +%C%_libmon_a_SOURCES = \ + %D%/trapmon0.c \ + $(%C%_common_lib_sources) + +multilibtool_DATA += \ + %D%/m32r-lib.o \ + %D%/m32r-stub.o +libobjs_a_SOURCES += \ + %D%/m32r-lib.c \ + %D%/m32r-stub.c diff --git a/libgloss/m32r/exit.c b/libgloss/m32r/exit.c index 5251f0d625..63a64b718c 100644 --- a/libgloss/m32r/exit.c +++ b/libgloss/m32r/exit.c @@ -4,7 +4,7 @@ #include "eit.h" void -_exit (n) +_exit (int n) { TRAP0 (SYS_exit, n, 0, 0); } diff --git a/libgloss/m32r/kill.c b/libgloss/m32r/kill.c index d7aaee9ab2..48eb0fb18d 100644 --- a/libgloss/m32r/kill.c +++ b/libgloss/m32r/kill.c @@ -3,7 +3,8 @@ #include "syscall.h" #include "eit.h" -_kill (n, m) +int +_kill (int n, int m) { return TRAP0 (SYS_exit, 0xdead, 0, 0); } diff --git a/libgloss/m32r/m32r-stub.c b/libgloss/m32r/m32r-stub.c index 4d54f72d60..acc89ed6a2 100644 --- a/libgloss/m32r/m32r-stub.c +++ b/libgloss/m32r/m32r-stub.c @@ -3,7 +3,7 @@ THIS SOFTWARE IS NOT COPYRIGHTED HP offers the following for use in the public domain. HP makes no - warranty with regard to the software or it's performance and the + warranty with regard to the software or its performance and the user accepts the software "AS IS" with all faults. HP DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, WITH REGARD @@ -46,7 +46,7 @@ * * Because gdb will sometimes write to the stack area to execute function * calls, this program cannot rely on using the supervisor stack so it - * uses it's own stack area reserved in the int array remcomStack. + * uses its own stack area reserved in the int array remcomStack. * ************* * diff --git a/libgloss/m32r/raise.c b/libgloss/m32r/raise.c index b2dc2f65df..be79df21f9 100644 --- a/libgloss/m32r/raise.c +++ b/libgloss/m32r/raise.c @@ -1,5 +1,6 @@ /* ??? Needed? */ -_raise () +int +_raise (void) { } diff --git a/libgloss/m32r/sbrk.c b/libgloss/m32r/sbrk.c index bc82091041..92a9b60a1b 100644 --- a/libgloss/m32r/sbrk.c +++ b/libgloss/m32r/sbrk.c @@ -2,6 +2,10 @@ #include #include "syscall.h" #include "eit.h" +#include + + +extern int _write (int, char *, int); caddr_t _sbrk (int incr) diff --git a/libgloss/m68k/mvme-stub.c b/libgloss/m68k/mvme-stub.c index fcf7e7bf02..32b40dba49 100644 --- a/libgloss/m68k/mvme-stub.c +++ b/libgloss/m68k/mvme-stub.c @@ -14,7 +14,7 @@ int cnt; THIS SOFTWARE IS NOT COPYRIGHTED HP offers the following for use in the public domain. HP makes no - warranty with regard to the software or it's performance and the + warranty with regard to the software or its performance and the user accepts the software "AS IS" with all faults. HP DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, WITH REGARD @@ -50,7 +50,7 @@ int cnt; * Some explanation is probably necessary to explain how exceptions are * handled. When an exception is encountered the 68000 pushes the current * program counter and status register onto the supervisor stack and then - * transfers execution to a location specified in it's vector table. + * transfers execution to a location specified in its vector table. * The handlers for the exception vectors are hardwired to jmp to an address * given by the relation: (exception - 256) * 6. These are decending * addresses starting from -6, -12, -18, ... By allowing 6 bytes for @@ -69,7 +69,7 @@ int cnt; * * Because gdb will sometimes write to the stack area to execute function * calls, this program cannot rely on using the supervisor stack so it - * uses it's own stack area reserved in the int array remcomStack. + * uses its own stack area reserved in the int array remcomStack. * ************* * diff --git a/libgloss/m68k/mvme135-asm.S b/libgloss/m68k/mvme135-asm.S index 1722c1804a..ea0a298266 100644 --- a/libgloss/m68k/mvme135-asm.S +++ b/libgloss/m68k/mvme135-asm.S @@ -11,7 +11,7 @@ THIS SOFTWARE IS NOT COPYRIGHTED HP offers the following for use in the public domain. HP makes no - warranty with regard to the software or it's performance and the + warranty with regard to the software or its performance and the user accepts the software "AS IS" with all faults. HP DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, WITH REGARD diff --git a/libgloss/m68k/mvme162lx-asm.S b/libgloss/m68k/mvme162lx-asm.S index 8b83621d6d..2c29418a79 100644 --- a/libgloss/m68k/mvme162lx-asm.S +++ b/libgloss/m68k/mvme162lx-asm.S @@ -11,7 +11,7 @@ THIS SOFTWARE IS NOT COPYRIGHTED HP offers the following for use in the public domain. HP makes no - warranty with regard to the software or it's performance and the + warranty with regard to the software or its performance and the user accepts the software "AS IS" with all faults. HP DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, WITH REGARD diff --git a/libgloss/mcore/Makefile.in b/libgloss/mcore/Makefile.in deleted file mode 100644 index 883e5ed59f..0000000000 --- a/libgloss/mcore/Makefile.in +++ /dev/null @@ -1,144 +0,0 @@ -# -# - -DESTDIR = -VPATH = @srcdir@ @srcdir@/.. -srcdir = @srcdir@ -objdir = . -srcroot = $(srcdir)/../.. -objroot = $(objdir)/../.. - -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -host_alias = @host_alias@ -target_alias = @target_alias@ - -bindir = @bindir@ -libdir = @libdir@ -tooldir = $(exec_prefix)/$(target_alias) - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -# Multilib support variables. -# TOP is used instead of MULTI{BUILD,SRC}TOP. -MULTIDIRS = -MULTISUBDIR = - -SHELL = /bin/sh - -mkinstalldirs = $(SHELL) $(srcroot)/mkinstalldirs - -CC = @CC@ - -AS = @AS@ -AR = @AR@ -LD = @LD@ -RANLIB = @RANLIB@ - -OBJDUMP = `if [ -f ${objroot}/../binutils/objdump ] ; \ - then echo ${objroot}/../binutils/objdump ; \ - else t='$(program_transform_name)'; echo objdump | sed -e $$t ; fi` -OBJCOPY = `if [ -f ${objroot}/../binutils/objcopy ] ; \ - then echo ${objroot}/../binutils/objcopy ; \ - else t='$(program_transform_name)'; echo objcopy | sed -e $$t ; fi` - -OBJS = fstat.o getpid.o isatty.o kill.o raise.o putnum.o stat.o unlink.o -CFLAGS = -g -SCRIPTS = - -# Here is all of the simulator stuff -SIM_SCRIPTS = -SIM_LDFLAGS = -SIM_BSP = libsim.a -SIM_CRT0 = crt0.o -SIM_OBJS = syscalls.o -SIM_TEST = sim-test -SIM_INSTALL = install-sim - -# Here is all of the picobug on cmb stuff -MON_PREFIX = @MCORE_BSP_PREFIX@ -MON_LDFLAGS = -MON_BSP = libcmb.a -MON_CRT0 = crt0.o -MON_OBJS = open.o close.o lseek.o sbrk.o read.o write.o print.o cmb-exit.o cmb-inbyte.o cmb-outbyte.o -MON_SCRIPTS = cmb.ld cmb.specs -MON_TEST = -MON_INSTALL = install-mon - -# Host specific makefile fragment comes in here. -@host_makefile_frag@ - -# -# build a test program for each target board. Just trying to get -# it to link is a good test, so we ignore all the errors for now. -# -all: ${SIM_CRT0} ${SIM_BSP} ${MON_BSP} - -# -# here's where we build the board support packages for each target -# -${SIM_BSP}: ${OBJS} ${SIM_OBJS} - ${AR} ${ARFLAGS} ${SIM_BSP} ${SIM_OBJS} ${OBJS} - ${RANLIB} ${SIM_BSP} - -${MON_BSP}: ${OBJS} ${MON_OBJS} - ${AR} ${ARFLAGS} ${MON_BSP} ${MON_OBJS} ${OBJS} - ${RANLIB} ${MON_BSP} - -# -# here's where we build the test programs for each target -# -.PHONY: test -test: ${SIM_TEST} ${MON_TEST} - -sim-test: sim-test.x sim-test.dis - -sim-test.x: test.o ${SIM_CRT0} ${SIM_BSP} - ${CC} ${LDFLAGS_FOR_TARGET} -L${objdir} \ - ${SIM_CRT0} test.o \ - -o sim-test.x ${LIBS_FOR_TARGET} -lc ${SIM_BSP} - -sim-test.dis: sim-test.x - ${OBJDUMP} -d sim-test.x > sim-test.dis - - -# -# -# -.c.S: - ${CC} ${CFLAGS_FOR_TARGET} $(INCLUDES) $(CFLAGS) -c $< - -simulator.o: simulator.S -sim-crt0.o: sim-crt0.S -cmb-exit.o: cmb-exit.c -cmb-inbyte.o: cmb-inbyte.c -cmb-outbyte.o: cmb-outbyte.c - -clean mostlyclean: - rm -f a.out core *.i *.o *-test *.srec *.dis *.x $(SIM_BSP) $(MON_BSP) - -distclean maintainer-clean realclean: clean - rm -f Makefile *~ - -.PHONY: install info install-info clean-info -install: ${SIM_INSTALL} ${MON_INSTALL} - -install-mon: - ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR} - set -e; for x in ${MON_CRT0} ${MON_BSP}; do ${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done - set -e; for x in ${MON_SCRIPTS}; do ${INSTALL_DATA} ${srcdir}/${MON_PREFIX}$$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done - -install-sim: - ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR} - set -e; for x in ${SIM_CRT0} ${SIM_BSP} ${SIM_SCRIPTS}; do ${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done - -doc: -info: -install-info: -clean-info: - -Makefile: Makefile.in ../config.status - cd .. && $(SHELL) config.status diff --git a/libgloss/mcore/Makefile.inc b/libgloss/mcore/Makefile.inc new file mode 100644 index 0000000000..f0dec19902 --- /dev/null +++ b/libgloss/mcore/Makefile.inc @@ -0,0 +1,52 @@ +if MCORE_BUILD_ELF +multilibtool_DATA += \ + %D%/cmb.ld \ + %D%/cmb.specs +%D%/cmb.ld: %D%/elf-cmb.ld + $(AM_V_GEN)cp $< $@ +%D%/cmb.specs: %D%/elf-cmb.specs + $(AM_V_GEN)cp $< $@ +endif +if MCORE_BUILD_PE +multilibtool_DATA += \ + %D%/cmb.ld \ + %D%/cmb.specs +%D%/cmb.ld: %D%/pe-cmb.ld + $(AM_V_GEN)cp $< $@ +%D%/cmb.specs: %D%/pe-cmb.specs + $(AM_V_GEN)cp $< $@ +endif + +multilibtool_DATA += %D%/crt0.o +libobjs_a_SOURCES += %D%/crt0.S + +%C%_common_lib_sources = \ + %D%/fstat.c \ + %D%/getpid.c \ + isatty.c \ + %D%/kill.c \ + %D%/raise.c \ + %D%/putnum.c \ + %D%/stat.c \ + %D%/unlink.c + +## Here is all of the simulator stuff +multilibtool_LIBRARIES += %D%/libsim.a +%C%_libsim_a_SOURCES = \ + %D%/syscalls.S \ + $(%C%_common_lib_sources) + +## Here is all of the picobug on cmb stuff +multilibtool_LIBRARIES += %D%/libcmb.a +%C%_libcmb_a_SOURCES = \ + %D%/open.c \ + %D%/close.c \ + %D%/lseek.c \ + %D%/sbrk.c \ + %D%/read.c \ + %D%/write.c \ + %D%/print.c \ + %D%/cmb-exit.c \ + %D%/cmb-inbyte.c \ + %D%/cmb-outbyte.c \ + $(%C%_common_lib_sources) diff --git a/libgloss/mcore/acinclude.m4 b/libgloss/mcore/acinclude.m4 index 7115869f31..ed3fa2e412 100644 --- a/libgloss/mcore/acinclude.m4 +++ b/libgloss/mcore/acinclude.m4 @@ -1,10 +1,7 @@ -MCORE_BSP_PREFIX= -case "${target}" in - mcore-*-elf) - MCORE_BSP_PREFIX=elf- - ;; - mcore-*-pe) - MCORE_BSP_PREFIX=pe- - ;; -esac -AC_SUBST(MCORE_BSP_PREFIX) +MCORE_BUILD_ELF=false +MCORE_BUILD_PE=false +AS_CASE([${target}], + [mcore-*-elf], [MCORE_BUILD_ELF=true], + [mcore-*-pe], [MCORE_BUILD_PE=true]) +AM_CONDITIONAL([MCORE_BUILD_ELF], [$MCORE_BUILD_ELF]) +AM_CONDITIONAL([MCORE_BUILD_PE], [$MCORE_BUILD_PE]) diff --git a/libgloss/mcore/kill.c b/libgloss/mcore/kill.c index 833fe89d73..5cdd4d1fc5 100644 --- a/libgloss/mcore/kill.c +++ b/libgloss/mcore/kill.c @@ -14,6 +14,8 @@ */ #include "glue.h" +#include + /* * kill -- go out via exit... */ diff --git a/libgloss/mcore/putnum.c b/libgloss/mcore/putnum.c index 10e298b950..f7e508b87f 100644 --- a/libgloss/mcore/putnum.c +++ b/libgloss/mcore/putnum.c @@ -14,6 +14,8 @@ */ #include "glue.h" +extern void print (char *ptr); + /* * putnum -- print a 32 bit number in hex */ diff --git a/libgloss/mcore/raise.c b/libgloss/mcore/raise.c index e392077922..6286d0eecb 100644 --- a/libgloss/mcore/raise.c +++ b/libgloss/mcore/raise.c @@ -14,6 +14,9 @@ */ #include "glue.h" +extern int _kill (int, int); +extern int _getpid (void); + int _raise (int sig) { diff --git a/libgloss/mcore/sbrk.c b/libgloss/mcore/sbrk.c index 8449589843..c6860194ce 100644 --- a/libgloss/mcore/sbrk.c +++ b/libgloss/mcore/sbrk.c @@ -14,8 +14,11 @@ */ #include #include +#include #include "glue.h" +extern int _write (int, char *, int); + caddr_t _sbrk (size_t incr) { diff --git a/libgloss/microblaze/Makefile.in b/libgloss/microblaze/Makefile.in deleted file mode 100644 index f1fa286bbc..0000000000 --- a/libgloss/microblaze/Makefile.in +++ /dev/null @@ -1,149 +0,0 @@ -# Copyright 2007, 2009 Xilinx, Inc. All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are -# met: -# -# 1. Redistributions source code must retain the above copyright notice, -# this list of conditions and the following disclaimer. -# -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# 3. Neither the name of Xilinx nor the names of its contributors may be -# used to endorse or promote products derived from this software without -# specific prior written permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS -# IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED -# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A -# PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT -# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED -# TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR -# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF -# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING -# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -# Makefile for libgloss/microblaze. This is the board support -# code for the various microblaze targets. - -DESTDIR = -VPATH = @srcdir@ -srcdir = @srcdir@ -objdir = . -srcroot = $(srcdir)/../.. -objroot = $(objdir)/../.. - -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -host_alias = @host_alias@ -target_alias = @target_alias@ - -bindir = @bindir@ -libdir = @libdir@ -tooldir = $(exec_prefix)/$(target_alias) - -# Multilib support variables. -# TOP is used instead of MULTI{BUILD,SRC}TOP. -MULTIDIRS = -MULTISUBDIR = -MULTIDO = true -MULTICLEAN = true - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -SHELL = /bin/sh - -mkinstalldirs = $(SHELL) $(srcroot)/mkinstalldirs - -CC = @CC@ - -AS = @AS@ -AR = @AR@ -LD = @LD@ -RANLIB = @RANLIB@ -AR_FLAGS = qrv - -OBJDUMP = `if [ -f ${objroot}/../binutils/objdump ] ; \ - then echo ${objroot}/../binutils/objdump ; \ - else t='$(program_transform_name)'; echo objdump | sed -e $$t ; fi` -OBJCOPY = `if [ -f ${objroot}/../binutils/objcopy ] ; \ - then echo ${objroot}/../binutils/objcopy ; \ - else t='$(program_transform_name)'; echo objcopy | sed -e $$t ; fi` - -CRT = crt0.o crt1.o crt2.o crt3.o crt4.o crtinit.o pgcrtinit.o sim-crtinit.o sim-pgcrtinit.o -LIB = libgloss.a -GENOBJS = fstat.o getpid.o isatty.o kill.o lseek.o print.o putnum.o stat.o unlink.o \ - open.o close.o read.o write.o -OBJS = ${GENOBJS} sbrk.o timer.o _exception_handler.o _hw_exception_handler.o \ - _interrupt_handler.o _program_clean.o _program_init.o \ - xil_malloc.o xil_sbrk.o xil_printf.o -SCRIPTS = xilinx.ld - -# Tiny Linux BSP. -LINUX_BSP = libgloss-linux.a -CRT += linux-crt0.o -LINUX_OBJS = linux-syscalls.o linux-syscalls-wrap.o -LINUX_OBJS += linux-outbyte.o linux-inbyte.o -LINUX_SCRIPTS = elf-gloss-linux.specs - -CPU = @CPU@ - -#### Host specific Makefile fragment comes in here. -@host_makefile_frag@ - -all: ${CRT} ${LIB} ${LINUX_BSP} - -install: ${CRT} ${LIB} install-linux - ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR} - @for crt in ${CRT}; do \ - $(INSTALL_PROGRAM) $${crt} $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$${crt}; \ - done - $(INSTALL_PROGRAM) ${LIB} $(DESTDIR)$(tooldir)/lib${MULTISUBDIR} - $(INSTALL_PROGRAM) $(srcdir)/${SCRIPTS} $(DESTDIR)$(tooldir)/lib/ - -install-linux: ${LINUX_BSP} - ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR} - $(INSTALL_PROGRAM) ${LINUX_BSP} $(DESTDIR)$(tooldir)/lib${MULTISUBDIR} - set -e; for x in ${LINUX_SCRIPTS}; do ${INSTALL_DATA} ${srcdir}/${objtype}$$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done - -crt0.o: crt0.S -crt1.o: crt1.S -crt2.o: crt2.S -crt3.o: crt3.S -crt4.o: crt4.S -linux-crt0.o: linux-crt0.S -crtinit.o: crtinit.S -sim-crtinit.o: sim-crtinit.S -sim-pgcrtinit.o: sim-pgcrtinit.S - -# target specific makefile fragment comes in here. -@target_makefile_frag@ - -clean mostlyclean: - rm -f *.o *.a *.map *.x - -distclean maintainer-clean realclean: clean - rm -f Makefile config.cache config.log config.status - -${LIB}: ${OBJS} - ${AR} ${ARFLAGS} $@ ${OBJS} - ${RANLIB} $@ - -${LINUX_BSP}: ${LINUX_OBJS} - ${AR} ${ARFLAGS} $@ ${LINUX_OBJS} - ${RANLIB} $@ - -.PHONY: info dvi doc install-info clean-info -info doc dvi: -install-info: -clean-info: - -Makefile: Makefile.in ../config.status - cd .. && $(SHELL) config.status diff --git a/libgloss/microblaze/Makefile.inc b/libgloss/microblaze/Makefile.inc new file mode 100644 index 0000000000..ca1e8bf837 --- /dev/null +++ b/libgloss/microblaze/Makefile.inc @@ -0,0 +1,91 @@ +## Copyright 2007, 2009 Xilinx, Inc. All rights reserved. +## +## Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions are +## met: +## +## 1. Redistributions source code must retain the above copyright notice, +## this list of conditions and the following disclaimer. +## +## 2. Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in the +## documentation and/or other materials provided with the distribution. +## +## 3. Neither the name of Xilinx nor the names of its contributors may be +## used to endorse or promote products derived from this software without +## specific prior written permission. +## +## THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS +## IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED +## TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A +## PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +## HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +## SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +## TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +## PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +## LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +## NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +## SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +if !HAVE_MULTISUBDIR +multilibtool_DATA += \ + %D%/xilinx.ld +endif +multilibtool_DATA += \ + %D%/elf-gloss-linux.specs + +multilibtool_DATA += \ + %D%/crt0.o \ + %D%/crt1.o \ + %D%/crt2.o \ + %D%/crt3.o \ + %D%/crt4.o \ + %D%/crtinit.o \ + %D%/pgcrtinit.o \ + %D%/sim-crtinit.o \ + %D%/sim-pgcrtinit.o \ + %D%/linux-crt0.o +libobjs_a_SOURCES += \ + %D%/crt0.S \ + %D%/crt1.S \ + %D%/crt2.S \ + %D%/crt3.S \ + %D%/crt4.S \ + %D%/crtinit.S \ + %D%/pgcrtinit.S \ + %D%/sim-crtinit.S \ + %D%/sim-pgcrtinit.S \ + %D%/linux-crt0.S + +multilibtool_LIBRARIES += %D%/libgloss.a +%C%_libgloss_a_SOURCES = \ + fstat.c \ + getpid.c \ + isatty.c \ + kill.c \ + lseek.c \ + print.c \ + putnum.c \ + stat.c \ + unlink.c \ + open.c \ + close.c \ + read.c \ + write.c \ + %D%/sbrk.c \ + %D%/timer.c \ + %D%/_exception_handler.S \ + %D%/_hw_exception_handler.S \ + %D%/_interrupt_handler.S \ + %D%/_program_clean.S \ + %D%/_program_init.S \ + %D%/xil_malloc.c \ + %D%/xil_sbrk.c \ + %D%/xil_printf.c + +multilibtool_LIBRARIES += %D%/libgloss-linux.a +%C%_libgloss_linux_a_SOURCES = \ + %D%/linux-syscalls.S \ + %D%/linux-syscalls-wrap.c \ + %D%/linux-outbyte.c \ + %D%/linux-inbyte.c diff --git a/libgloss/mn10200/Makefile.in b/libgloss/mn10200/Makefile.in deleted file mode 100644 index 9db24f4447..0000000000 --- a/libgloss/mn10200/Makefile.in +++ /dev/null @@ -1,149 +0,0 @@ -# Copyright (c) 1998 Cygnus Support -# -# The authors hereby grant permission to use, copy, modify, distribute, -# and license this software and its documentation for any purpose, provided -# that existing copyright notices are retained in all copies and that this -# notice is included verbatim in any distributions. No written agreement, -# license, or royalty fee is required for any of the authorized uses. -# Modifications to this software may be copyrighted by their authors -# and need not follow the licensing terms described here, provided that -# the new terms are clearly indicated on the first page of each file where -# they apply. - -DESTDIR = -VPATH = @srcdir@ -srcdir = @srcdir@ -objdir = . -srcroot = $(srcdir)/../.. -objroot = $(objdir)/../.. - -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -host_alias = @host_alias@ -target_alias = @target_alias@ -program_transform_name = @program_transform_name@ - -bindir = @bindir@ -libdir = @libdir@ -tooldir = $(exec_prefix)/$(target_alias) - -# Multilib support variables. -# TOP is used instead of MULTI{BUILD,SRC}TOP. -MULTIDIRS = -MULTISUBDIR = -MULTIDO = true -MULTICLEAN = true - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -SHELL = /bin/sh - -mkinstalldirs = $(SHELL) $(srcroot)/mkinstalldirs - -CC = @CC@ - -#AS = @AS@ -AS = `if [ -f ${objroot}/../gas/as.new ] ; \ - then echo ${objroot}/../gas/as.new ; \ - else echo as ; fi` - -AR = @AR@ - -#LD = @LD@ -LD = `if [ -f ${objroot}/../ld/ld.new ] ; \ - then echo ${objroot}/../ld/ld.new ; \ - else echo ld ; fi` - -RANLIB = @RANLIB@ - -OBJDUMP = `if [ -f ${objroot}/../binutils/objdump ] ; \ - then echo ${objroot}/../binutils/objdump ; \ - else t='$(program_transform_name)'; echo objdump | sed -e $$t ; fi` -OBJCOPY = `if [ -f ${objroot}/../binutils/objcopy ] ; \ - then echo ${objroot}/../binutils/objcopy ; \ - else t='$(program_transform_name)'; echo objcopy | sed -e $$t ; fi` - -CRT0 = crt0.o - -# Generic object files common to all targets. -GENOBJS = _exit.o access.o chmod.o close.o crt1.o \ - fstat.o getpid.o isatty.o \ - kill.o lseek.o open.o read.o \ - sbrk.o stat.o time.o trap.o unlink.o utime.o write.o - -# Object files specific to particular targets. -EVALOBJS = ${GENOBJS} - -CFLAGS = -g - -GCC_LDFLAGS = `if [ -d ${objroot}/../gcc ] ; \ - then echo -L${objroot}/../gcc ; fi` - -SCRIPTS = eval sim -BSP = libeval.a - -# Host specific makefile fragment comes in here. -@host_makefile_frag@ - -# -# build a test program for each target board. Just trying to get -# it to link is a good test, so we ignore all the errors for now. -# - -all: ${CRT0} test.o ${BSP} - -# -# here's where we build the board support packages for each target -# - -libeval.a: $(EVALOBJS) - ${AR} ${ARFLAGS} $@ $(EVALOBJS) - ${RANLIB} $@ - - -# compile a fully linked binary. The -Wl,-T*.ld is for the linker -# script. By using -Wl, the linker script is put on the proper place -# in the comand line for ld, and all the symbols will get fully -# resolved. - -test: $(CRT0) test.o - ${CC} $(CFLAGS_FOR_TARGET) -L${srcdir} -L${objdir} \ - test.o -o $@ $(NEWLIB_LDFLAGS) -Wl,-Teval.ld - @echo Done... - -doc: - -clean mostlyclean: - rm -f a.out core *.i *~ *.o *-test *.srec *.dis *.map *.x - -distclean maintainer-clean realclean: clean - rm -f Makefile a.out - -.PHONY: install info install-info clean-info -install: - ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR} - $(INSTALL_PROGRAM) $(CRT0) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$(CRT0) - @for bsp in ${BSP}; do\ - $(INSTALL_PROGRAM) $${bsp} $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}; \ - done - @for script in ${SCRIPTS}; do\ - $(INSTALL_DATA) ${srcdir}/$${script}.ld $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$${script}.ld; \ - done - -info: -install-info: -clean-info: - -test.o: ${srcdir}/test.c - -# these are for the BSPs -${CRT0}: ${srcdir}/crt0.S - -# target specific makefile fragment comes in here. -@target_makefile_frag@ - -Makefile: Makefile.in ../config.status - cd .. && $(SHELL) config.status diff --git a/libgloss/mn10200/Makefile.inc b/libgloss/mn10200/Makefile.inc new file mode 100644 index 0000000000..81d3680215 --- /dev/null +++ b/libgloss/mn10200/Makefile.inc @@ -0,0 +1,43 @@ +## Copyright (c) 1998 Cygnus Support +## +## The authors hereby grant permission to use, copy, modify, distribute, +## and license this software and its documentation for any purpose, provided +## that existing copyright notices are retained in all copies and that this +## notice is included verbatim in any distributions. No written agreement, +## license, or royalty fee is required for any of the authorized uses. +## Modifications to this software may be copyrighted by their authors +## and need not follow the licensing terms described here, provided that +## the new terms are clearly indicated on the first page of each file where +## they apply. + +multilibtool_DATA += \ + %D%/eval.ld \ + %D%/sim.ld + +multilibtool_DATA += %D%/crt0.o +libobjs_a_SOURCES += %D%/crt0.S + +multilibtool_LIBRARIES += %D%/libeval.a +%C%_libeval_a_SOURCES = \ + %D%/_exit.c \ + %D%/access.c \ + %D%/chmod.c \ + %D%/close.c \ + %D%/crt1.c \ + %D%/fstat.c \ + %D%/getpid.c \ + %D%/isatty.c \ + %D%/kill.c \ + %D%/lseek.c \ + %D%/open.c \ + %D%/read.c \ + %D%/sbrk.c \ + %D%/stat.c \ + %D%/time.c \ + %D%/trap.S \ + %D%/unlink.c \ + %D%/utime.c \ + %D%/write.c + +check_PROGRAMS += %D%/test +%C%_test_LDFLAGS = $(AM_LDFLAGS) -Wl,-T$(srcdir)/%D%/eval.ld diff --git a/libgloss/mn10300/Makefile.in b/libgloss/mn10300/Makefile.in deleted file mode 100644 index 1669d5ce4f..0000000000 --- a/libgloss/mn10300/Makefile.in +++ /dev/null @@ -1,156 +0,0 @@ -# Copyright (c) 1998, 2000 Cygnus Support -# -# The authors hereby grant permission to use, copy, modify, distribute, -# and license this software and its documentation for any purpose, provided -# that existing copyright notices are retained in all copies and that this -# notice is included verbatim in any distributions. No written agreement, -# license, or royalty fee is required for any of the authorized uses. -# Modifications to this software may be copyrighted by their authors -# and need not follow the licensing terms described here, provided that -# the new terms are clearly indicated on the first page of each file where -# they apply. - -DESTDIR = -VPATH = @srcdir@ -srcdir = @srcdir@ -objdir = . -srcroot = $(srcdir)/../.. -objroot = $(objdir)/../.. - -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -host_alias = @host_alias@ -target_alias = @target_alias@ -program_transform_name = @program_transform_name@ - -bindir = @bindir@ -libdir = @libdir@ -tooldir = $(exec_prefix)/$(target_alias) - -# Multilib support variables. -# TOP is used instead of MULTI{BUILD,SRC}TOP. -MULTIDIRS = -MULTISUBDIR = -MULTIDO = true -MULTICLEAN = true - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -SHELL = /bin/sh - -CC = @CC@ - -#AS = @AS@ -AS = `if [ -f ${objroot}/../gas/as.new ] ; \ - then echo ${objroot}/../gas/as.new ; \ - else echo as ; fi` - -AR = @AR@ - -#LD = @LD@ -LD = `if [ -f ${objroot}/../ld/ld.new ] ; \ - then echo ${objroot}/../ld/ld.new ; \ - else echo ld ; fi` - -RANLIB = @RANLIB@ - -OBJDUMP = `if [ -f ${objroot}/../binutils/objdump ] ; \ - then echo ${objroot}/../binutils/objdump ; \ - else t='$(program_transform_name)'; echo objdump | sed -e $$t ; fi` -OBJCOPY = `if [ -f ${objroot}/../binutils/objcopy ] ; \ - then echo ${objroot}/../binutils/objcopy ; \ - else t='$(program_transform_name)'; echo objcopy | sed -e $$t ; fi` - -CRT0 = crt0.o crt0_cygmon.o crt0_redboot.o - -# Generic object files common to all targets. -GENOBJS_NO_TRAP = _exit.o access.o chmod.o close.o crt1.o \ - fstat.o getpid.o isatty.o \ - kill.o lseek.o open.o read.o \ - sbrk.o stat.o time.o times.o unlink.o utime.o write.o -GENOBJS = ${GENOBJS_NO_TRAP} trap.o - -# Object files specific to particular targets. -EVALOBJS = ${GENOBJS} -CYGMONOBJS = cygmon.o ${GENOBJS_NO_TRAP} - -CFLAGS = -g - -GCC_LDFLAGS = `if [ -d ${objroot}/../gcc ] ; \ - then echo -L${objroot}/../gcc ; fi` - -SCRIPTS = @MN10300_SCRIPT_LIST@ -BSP = @MN10300_BSP_LIST@ - -# Host specific makefile fragment comes in here. -@host_makefile_frag@ - -# -# build a test program for each target board. Just trying to get -# it to link is a good test, so we ignore all the errors for now. -# - -all: ${CRT0} test.o ${BSP} - -# -# here's where we build the board support packages for each target -# - -libeval.a: $(EVALOBJS) - ${AR} ${ARFLAGS} $@ $(EVALOBJS) - ${RANLIB} $@ - -libcygmon.a: $(CYGMONOBJS) - ${AR} ${ARFLAGS} $@ $(CYGMONOBJS) - ${RANLIB} $@ - - -# compile a fully linked binary. The -Wl,-T*.ld is for the linker -# script. By using -Wl, the linker script is put on the proper place -# in the comand line for ld, and all the symbols will get fully -# resolved. - -test: ${CRT0} test.o - ${CC} $(CFLAGS_FOR_TARGET) -L${srcdir} -L${objdir} \ - test.o -o $@ $(NEWLIB_LDFLAGS) -Wl,-Teval.ld - @echo Done... - -doc: - -clean mostlyclean: - rm -f a.out core *.i *~ *.o *-test *.srec *.dis *.map *.x - -distclean maintainer-clean realclean: clean - rm -f Makefile a.out - -.PHONY: install info install-info clean-info -install: - mkdir -p $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}; - @for crt in ${CRT0}; do \ - $(INSTALL_PROGRAM) $${crt} $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$${crt}; \ - done - @for bsp in ${BSP}; do \ - $(INSTALL_PROGRAM) $${bsp} $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}; \ - done - @for script in ${SCRIPTS}; do \ - $(INSTALL_DATA) ${srcdir}/$${script}.ld $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$${script}.ld; \ - done - -info: -install-info: -clean-info: - -test.o: ${srcdir}/test.c - -# these are for the BSPs -crt0.o: ${srcdir}/crt0.S -crt0_cygmon.o: ${srcdir}/crt0_cygmon.S - -# target specific makefile fragment comes in here. -@target_makefile_frag@ - -Makefile: Makefile.in ../config.status - cd .. && $(SHELL) config.status diff --git a/libgloss/mn10300/Makefile.inc b/libgloss/mn10300/Makefile.inc new file mode 100644 index 0000000000..cc91b8bf1c --- /dev/null +++ b/libgloss/mn10300/Makefile.inc @@ -0,0 +1,66 @@ +## Copyright (c) 1998, 2000 Cygnus Support +## +## The authors hereby grant permission to use, copy, modify, distribute, +## and license this software and its documentation for any purpose, provided +## that existing copyright notices are retained in all copies and that this +## notice is included verbatim in any distributions. No written agreement, +## license, or royalty fee is required for any of the authorized uses. +## Modifications to this software may be copyrighted by their authors +## and need not follow the licensing terms described here, provided that +## the new terms are clearly indicated on the first page of each file where +## they apply. + +multilibtool_DATA += \ + %D%/eval.ld \ + %D%/sim.ld +if MN10300_BUILD_LIBCYGMON +multilibtool_DATA += \ + %D%/asb2303.ld \ + %D%/asb2305.ld +endif + +multilibtool_DATA += \ + %D%/crt0.o \ + %D%/crt0_cygmon.o \ + %D%/crt0_redboot.o +libobjs_a_SOURCES += \ + %D%/crt0.S \ + %D%/crt0_cygmon.S \ + %D%/crt0_redboot.S + +# Generic object files common to all targets. +%C%_common_lib_sources = \ + %D%/_exit.c \ + %D%/access.c \ + %D%/chmod.c \ + %D%/close.c \ + %D%/crt1.c \ + %D%/fstat.c \ + %D%/getpid.c \ + %D%/isatty.c \ + %D%/kill.c \ + %D%/lseek.c \ + %D%/open.c \ + %D%/read.c \ + %D%/sbrk.c \ + %D%/stat.c \ + %D%/time.c \ + %D%/times.c \ + %D%/unlink.c \ + %D%/utime.c \ + %D%/write.c + +multilibtool_LIBRARIES += %D%/libeval.a +%C%_libeval_a_SOURCES = \ + $(%C%_common_lib_sources) \ + %D%/trap.S + +if MN10300_BUILD_LIBCYGMON +multilibtool_LIBRARIES += %D%/libcygmon.a +%C%_libcygmon_a_SOURCES = \ + $(%C%_common_lib_sources) \ + %D%/cygmon.c +endif + +check_PROGRAMS += %D%/test +%C%_test_LDFLAGS = $(AM_LDFLAGS) -Wl,-T$(srcdir)/%D%/eval.ld diff --git a/libgloss/mn10300/_exit.c b/libgloss/mn10300/_exit.c index ec51d40884..2b548e82e3 100644 --- a/libgloss/mn10300/_exit.c +++ b/libgloss/mn10300/_exit.c @@ -18,7 +18,7 @@ static void _do_dtors() } -void _exit (n) +void _exit (int n) { /* Destructors should be done earlier because they need to be done before the files are closed, but here is better than nowhere (and this balances the diff --git a/libgloss/mn10300/acinclude.m4 b/libgloss/mn10300/acinclude.m4 index 93fa5286e8..031b55f3f1 100644 --- a/libgloss/mn10300/acinclude.m4 +++ b/libgloss/mn10300/acinclude.m4 @@ -1,14 +1,4 @@ -MN10300_SCRIPT_LIST= -MN10300_BSP_LIST= -case "${target}" in - mn10300-*elf) - MN10300_SCRIPT_LIST="eval sim asb2303 asb2305" - MN10300_BSP_LIST="libeval.a libcygmon.a" - ;; - *) - MN10300_SCRIPT_LIST="eval sim" - MN10300_BSP_LIST="libeval.a" - ;; -esac -AC_SUBST(MN10300_SCRIPT_LIST) -AC_SUBST(MN10300_BSP_LIST) +AS_CASE([${target}], + [mn10300-*elf], [MN10300_BUILD_LIBCYGMON=true], + [MN10300_BUILD_LIBCYGMON=false]) +AM_CONDITIONAL([MN10300_BUILD_LIBCYGMON], [$MN10300_BUILD_LIBCYGMON]) diff --git a/libgloss/mn10300/getpid.c b/libgloss/mn10300/getpid.c index 20ab1866eb..fea57daff1 100644 --- a/libgloss/mn10300/getpid.c +++ b/libgloss/mn10300/getpid.c @@ -4,7 +4,8 @@ #include "trap.h" -_getpid (n) +int +_getpid (int n) { return 1; } diff --git a/libgloss/mn10300/isatty.c b/libgloss/mn10300/isatty.c index 7e63a8c7c0..3d8eb19101 100644 --- a/libgloss/mn10300/isatty.c +++ b/libgloss/mn10300/isatty.c @@ -4,8 +4,8 @@ #include "trap.h" -_isatty (fd) - int fd; +int +_isatty (int fd) { return 1; } diff --git a/libgloss/mn10300/kill.c b/libgloss/mn10300/kill.c index 40afa6a2c2..d63a2f82cd 100644 --- a/libgloss/mn10300/kill.c +++ b/libgloss/mn10300/kill.c @@ -4,7 +4,8 @@ #include "trap.h" -_kill (n, m) +int +_kill (int n, int m) { return TRAP0 (SYS_exit, 0xdead, 0, 0); } diff --git a/libgloss/mn10300/read.c b/libgloss/mn10300/read.c index 31d24cce94..2f1878c062 100644 --- a/libgloss/mn10300/read.c +++ b/libgloss/mn10300/read.c @@ -4,6 +4,7 @@ #include "trap.h" +int _read (int file, char *ptr, size_t len) diff --git a/libgloss/mn10300/sbrk.c b/libgloss/mn10300/sbrk.c index 376fd3285a..78945e77ae 100644 --- a/libgloss/mn10300/sbrk.c +++ b/libgloss/mn10300/sbrk.c @@ -1,8 +1,11 @@ #include <_ansi.h> #include #include +#include #include "trap.h" +extern int _write (int, char *, size_t); + caddr_t _sbrk (size_t incr) diff --git a/libgloss/mn10300/test.c b/libgloss/mn10300/test.c index 9ea873adff..a61dbb797a 100644 --- a/libgloss/mn10300/test.c +++ b/libgloss/mn10300/test.c @@ -1,4 +1,6 @@ #include +#include +#include static void send_msg1 (void) diff --git a/libgloss/moxie/Makefile.in b/libgloss/moxie/Makefile.in deleted file mode 100644 index e87510fe2e..0000000000 --- a/libgloss/moxie/Makefile.in +++ /dev/null @@ -1,157 +0,0 @@ -# Copyright (c) 2008, 2010 Anthony Green -# -# The authors hereby grant permission to use, copy, modify, distribute, -# and license this software and its documentation for any purpose, provided -# that existing copyright notices are retained in all copies and that this -# notice is included verbatim in any distributions. No written agreement, -# license, or royalty fee is required for any of the authorized uses. -# Modifications to this software may be copyrighted by their authors -# and need not follow the licensing terms described here, provided that -# the new terms are clearly indicated on the first page of each file where -# they apply. - -# Makefile for libgloss/spro. This is the board support code for the -# moxie target. - -DESTDIR = -VPATH = @srcdir@ @srcdir@/.. -srcdir = @srcdir@ -objdir = . -srcroot = $(srcdir)/../.. -objroot = $(objdir)/../.. - -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -host_alias = @host_alias@ -target_alias = @target_alias@ - -bindir = @bindir@ -libdir = @libdir@ -tooldir = $(exec_prefix)/$(target_alias) - -# Multilib support variables. -# TOP is used instead of MULTI{BUILD,SRC}TOP. -MULTIDIRS = -MULTISUBDIR = -MULTIDO = true -MULTICLEAN = true - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -SHELL = /bin/sh - -mkinstalldirs = $(SHELL) $(srcroot)/mkinstalldirs - -CC = @CC@ - -AS = @AS@ -AR = @AR@ -LD = @LD@ -RANLIB = @RANLIB@ -AR_FLAGS = rc - -OBJDUMP = `if [ -f ${objroot}/../binutils/objdump ] ; \ - then echo ${objroot}/../binutils/objdump ; \ - else t='$(program_transform_name)'; echo objdump | sed -e $$t ; fi` -OBJCOPY = `if [ -f ${objroot}/../binutils/objcopy ] ; \ - then echo ${objroot}/../binutils/objcopy ; \ - else t='$(program_transform_name)'; echo objcopy | sed -e $$t ; fi` - -LD_SCRIPTS = moxie-elf-common.ld qemu.ld sim.ld moxiebox.ld - -@MOXIE_BUILD_CRT0_TRUE@CRT0 = crt0.o -@MOXIE_BUILD_CRT0_TRUE@CRT0_INSTALL = install-crt0 -@MOXIE_BUILD_CRT0_FALSE@CRT0 = -@MOXIE_BUILD_CRT0_FALSE@CRT0_INSTALL = - -SIM_BSP = libsim.a -SIM_OBJS = fstat.o \ - getpid.o \ - isatty.o \ - kill.o \ - putnum.o \ - sbrk.o \ - sim-close.o \ - sim-exit.o \ - sim-inbyte.o \ - sim-lseek.o \ - sim-open.o \ - sim-read.o \ - sim-time.o \ - sim-unlink.o \ - sim-write.o \ - stat.o - -QEMU_BSP = libqemu.a -QEMU_OBJS = qemu-write.o \ - qemu-time.o \ - sim-exit.o \ - sbrk.o \ - sim-close.o \ - fstat.o \ - getpid.o \ - isatty.o \ - kill.o \ - putnum.o \ - sim-lseek.o \ - sim-read.o - -#### Host specific Makefile fragment comes in here. -@host_makefile_frag@ - -all: ${CRT0} $(SIM_BSP) $(QEMU_BSP) - -$(SIM_BSP): $(SIM_OBJS) - $(AR) $(ARFLAGS) $@ $? - $(RANLIB) $@ - -$(QEMU_BSP): $(QEMU_OBJS) - $(AR) $(ARFLAGS) $@ $? - $(RANLIB) $@ - -fstat.o: $(srcdir)/fstat.c -getpid.o: $(srcdir)/getpid.c -isatty.o: $(srcdir)/isatty.c -kill.o: $(srcdir)/kill.c -putnum.o: $(srcdir)/putnum.c -sbrk.o: $(srcdir)/sbrk.c -sim-close.o: $(srcdir)/sim-close.S -sim-exit.o: $(srcdir)/sim-exit.S -sim-inbyte.o: $(srcdir)/sim-inbyte.c -sim-lseek.o: $(srcdir)/sim-lseek.c -sim-open.o: $(srcdir)/sim-open.S -sim-read.o: $(srcdir)/sim-read.S -sim-time.o: $(srcdir)/sim-time.c -sim-unlink.o: $(srcdir)/sim-unlink.S -sim-write.o: $(srcdir)/sim-write.S -stat.o: $(srcdir)/stat.c -qemu-write.o: $(srcdir)/qemu-write.c - -install: ${CRT0_INSTALL} $($(CPU)_INSTALL) - ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR} - $(INSTALL_DATA) $(SIM_BSP) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$(SIM_BSP) - $(INSTALL_DATA) $(QEMU_BSP) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$(QEMU_BSP) - for x in ${LD_SCRIPTS}; do \ - ${INSTALL_DATA} ${srcdir}/$$x $(DESTDIR)${tooldir}/lib/$$x; \ - done; - -install-crt0: - ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR} - ${INSTALL_DATA} ${CRT0} $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x - -clean mostlyclean: - rm -f *.o *.a - -distclean maintainer-clean realclean: clean - rm -f Makefile - -.PHONY: info dvi doc install-info clean-info -info doc dvi: -install-info: -clean-info: - -Makefile: Makefile.in ../config.status - cd .. && $(SHELL) config.status diff --git a/libgloss/moxie/Makefile.inc b/libgloss/moxie/Makefile.inc new file mode 100644 index 0000000000..acc92d2e03 --- /dev/null +++ b/libgloss/moxie/Makefile.inc @@ -0,0 +1,62 @@ +## Copyright (c) 2008, 2010 Anthony Green +## +## The authors hereby grant permission to use, copy, modify, distribute, +## and license this software and its documentation for any purpose, provided +## that existing copyright notices are retained in all copies and that this +## notice is included verbatim in any distributions. No written agreement, +## license, or royalty fee is required for any of the authorized uses. +## Modifications to this software may be copyrighted by their authors +## and need not follow the licensing terms described here, provided that +## the new terms are clearly indicated on the first page of each file where +## they apply. + +## Makefile for libgloss/spro. This is the board support code for the +## moxie target. + +if !HAVE_MULTISUBDIR +multilibtool_DATA += \ + %D%/moxie-elf-common.ld \ + %D%/qemu.ld \ + %D%/sim.ld \ + %D%/moxiebox.ld +endif + +if MOXIE_BUILD_CRT0 +multilibtool_DATA += %D%/crt0.o +endif +libobjs_a_SOURCES += \ + %D%/crt0.S + +multilibtool_LIBRARIES += %D%/libsim.a +%C%_libsim_a_SOURCES = \ + %D%/fstat.c \ + %D%/getpid.c \ + %D%/isatty.c \ + %D%/kill.c \ + %D%/putnum.c \ + %D%/sbrk.c \ + %D%/sim-close.S \ + %D%/sim-exit.S \ + %D%/sim-inbyte.c \ + %D%/sim-lseek.c \ + %D%/sim-open.S \ + %D%/sim-read.S \ + %D%/sim-time.c \ + %D%/sim-unlink.S \ + %D%/sim-write.S \ + %D%/stat.c + +multilibtool_LIBRARIES += %D%/libqemu.a +%C%_libqemu_a_SOURCES = \ + %D%/qemu-write.c \ + %D%/qemu-time.c \ + %D%/sim-exit.S \ + %D%/sbrk.c \ + %D%/sim-close.S \ + %D%/fstat.c \ + %D%/getpid.c \ + %D%/isatty.c \ + %D%/kill.c \ + %D%/putnum.c \ + %D%/sim-lseek.c \ + %D%/sim-read.S diff --git a/libgloss/moxie/acinclude.m4 b/libgloss/moxie/acinclude.m4 index 77428ee37d..b7bc56b1ea 100644 --- a/libgloss/moxie/acinclude.m4 +++ b/libgloss/moxie/acinclude.m4 @@ -1,13 +1,5 @@ dnl Don't build crt0 for moxiebox, which provides crt0 for us. -case "${target}" in - moxie-*-moxiebox*) - MOXIE_BUILD_CRT0_TRUE='#' - MOXIE_BUILD_CRT0_FALSE= - ;; - *) - MOXIE_BUILD_CRT0_TRUE= - MOXIE_BUILD_CRT0_FALSE='#' - ;; -esac -AC_SUBST(MOXIE_BUILD_CRT0_TRUE) -AC_SUBST(MOXIE_BUILD_CRT0_FALSE) +AS_CASE([${target}], + [moxie-*-moxiebox*], [MOXIE_BUILD_CRT0=false], + [MOXIE_BUILD_CRT0=true]) +AM_CONDITIONAL([MOXIE_BUILD_CRT0], [$MOXIE_BUILD_CRT0]) diff --git a/libgloss/moxie/putnum.c b/libgloss/moxie/putnum.c index 0f7e894534..9af5b4d4c5 100644 --- a/libgloss/moxie/putnum.c +++ b/libgloss/moxie/putnum.c @@ -14,6 +14,8 @@ */ #include "glue.h" +void print (char *); + /* * putnum -- print a 32 bit number in hex */ diff --git a/libgloss/moxie/sim-inbyte.c b/libgloss/moxie/sim-inbyte.c index 1e7466a8d2..4cda6604a8 100644 --- a/libgloss/moxie/sim-inbyte.c +++ b/libgloss/moxie/sim-inbyte.c @@ -14,6 +14,10 @@ * they apply. */ +#include + +#include + int inbyte () { diff --git a/libgloss/msp430/Makefile.in b/libgloss/msp430/Makefile.in deleted file mode 100644 index 05d3f9cba9..0000000000 --- a/libgloss/msp430/Makefile.in +++ /dev/null @@ -1,176 +0,0 @@ -# Copyright (c) 2008-2014 Red Hat, Inc. All rights reserved. -# -# This copyrighted material is made available to anyone wishing to use, modify, -# copy, or redistribute it subject to the terms and conditions of the BSD -# License. This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY expressed or implied, including the implied warranties -# of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. A copy of this license -# is available at http://www.opensource.org/licenses. Any Red Hat trademarks that -# are incorporated in the source code or documentation are not subject to the BSD -# License and may only be used or replicated with the express permission of -# Red Hat, Inc. - -# Makefile for libgloss/msp430. - -DESTDIR = -VPATH = @srcdir@ -srcdir = @srcdir@ -objdir = . -srcroot = $(srcdir)/../.. -objroot = $(objdir)/../.. - -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -host_alias = @host_alias@ -target_alias = @target_alias@ - -bindir = @bindir@ -libdir = @libdir@ -tooldir = $(exec_prefix)/$(target_alias) - -# Multilib support variables. -# TOP is used instead of MULTI{BUILD,SRC}TOP. -MULTIDIRS = -MULTISUBDIR = -MULTIDO = true -MULTICLEAN = true - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -SHELL = /bin/sh - -CC = @CC@ - -AS = @AS@ -AR = @AR@ -LD = @LD@ -RANLIB = @RANLIB@ -AR_FLAGS = rc - -OBJDUMP = `if [ -f ${objroot}/../binutils/objdump ] ; \ - then echo ${objroot}/../binutils/objdump ; \ - else t='$(program_transform_name)'; echo objdump | sed -e $$t ; fi` -OBJCOPY = `if [ -f ${objroot}/../binutils/objcopy ] ; \ - then echo ${objroot}/../binutils/objcopy ; \ - else t='$(program_transform_name)'; echo objcopy | sed -e $$t ; fi` - -SCRIPTS = $(srcdir)/msp430-sim.ld -SCRIPTS += $(srcdir)/msp430xl-sim.ld -SCRIPTS += $(srcdir)/intr_vectors.ld - -CRT = gcrt0.o crt0.o -SIM_BSP = libsim.a -LIB_NOSYS = libnosys.a -LIB_CRT = libcrt.a - -SIM_OBJS = syscalls.o \ - cio.o \ - write.o \ - unlink.o \ - sbrk.o - -NOSYS_OBJS = ciosyscalls.o \ - cio.o \ - write.o \ - unlink.o \ - sbrk.o - -# Each crt_*.o is built from crt0.S using -DL*. crt0.o is built from -# crt0.s with -DL0 via the default rule below. -CRT_OBJS = \ - crt_bss.o \ - crt_high_bss.o \ - crt_movedata.o \ - crt_move_highdata.o \ - crt_main.o \ - crt_callexit.o \ - crt_run_init_array.o \ - crt_run_preinit_array.o \ - crt_run_fini_array.o \ - crt_run_array.o \ - crt_init.o - -#### Host specific Makefile fragment comes in here. -@host_makefile_frag@ - - -all: $(CRT) $(SIM_BSP) $(LIB_NOSYS) $(LIB_CRT) copy_scripts_to_objdir - -crt_%.o : crt0.S - $(CC) -DL$* -Wa,-gdwarf2 -Wa,-I$(srcdir) $(CFLAGS_FOR_TARGET) $(INCLUDES) $(CFLAGS) -c $< -o $@ - -# Override .S.o rule to pass assembler debugging flags -.S.o: - $(CC) -DL0 -Wa,-gdwarf2 -Wa,-I$(srcdir) $(CFLAGS_FOR_TARGET) $(INCLUDES) $(CFLAGS) -c $< - -$(SIM_BSP): $(SIM_OBJS) - $(AR) $(ARFLAGS) $@ $? - $(RANLIB) $@ - -$(LIB_NOSYS): $(NOSYS_OBJS) - $(AR) $(ARFLAGS) $@ $? - $(RANLIB) $@ - -$(LIB_CRT): $(CRT_OBJS) - $(AR) $(ARFLAGS) $@ $? - $(RANLIB) $@ - -copy_scripts_to_objdir: $(SCRIPTS) - cp $(SCRIPTS) $(objdir) - -# Dependencies - -SDEPS = $(srcdir)/cio.h - -abort.o : $(SDEPS) -argv.o : $(SDEPS) -argvlen.o : $(SDEPS) -chdir.o : $(SDEPS) -chmod.o : $(SDEPS) -close.o : $(SDEPS) -exit.o : $(SDEPS) -fstat.o : $(SDEPS) -getpid.o : $(SDEPS) -gettimeofday.o : $(SDEPS) -gcrt0.o: gcrt0.S crt0.S -kill.o : $(SDEPS) -link.o : $(SDEPS) -lseek.o : $(SDEPS) -mcount.o : $(SDEPS) -open.o : $(SDEPS) -read.o : $(SDEPS) -sigprocmask.o : $(SDEPS) -sleep.o : $(SDEPS) -stat.o : $(SDEPS) -time.o : $(SDEPS) -times.o : $(SDEPS) -unlink.o : $(SDEPS) -utime.o : $(SDEPS) -write.o : $(SDEPS) - -install: $(CRT) $(SIM_BSP) $(LIB_NOSYS) $(LIB_CRT) $(SCRIPTS) - mkdir -p $(DESTDIR)$(tooldir)/lib${MULTISUBDIR} - for c in $(CRT) $(SIM_BSP) $(LIB_NOSYS) $(LIB_CRT); do \ - $(INSTALL_DATA) $$c $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$$c ;\ - done - for c in $(SCRIPTS); do \ - b=`basename $$c`; \ - $(INSTALL_DATA) $$c $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$$b ;\ - done - -clean mostlyclean: - rm -f *.o *.a - -distclean maintainer-clean realclean: clean - rm -f Makefile - -.PHONY: info dvi doc install-info clean-info -info doc dvi: -install-info: -clean-info: - -Makefile: Makefile.in ../config.status - cd .. && $(SHELL) config.status diff --git a/libgloss/msp430/Makefile.inc b/libgloss/msp430/Makefile.inc new file mode 100644 index 0000000000..38355343ad --- /dev/null +++ b/libgloss/msp430/Makefile.inc @@ -0,0 +1,52 @@ +## Copyright (c) 2008-2014 Red Hat, Inc. All rights reserved. +## +## This copyrighted material is made available to anyone wishing to use, modify, +## copy, or redistribute it subject to the terms and conditions of the BSD +## License. This program is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY expressed or implied, including the implied warranties +## of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. A copy of this license +## is available at http://www.opensource.org/licenses. Any Red Hat trademarks that +## are incorporated in the source code or documentation are not subject to the BSD +## License and may only be used or replicated with the express permission of +## Red Hat, Inc. + +multilibtool_DATA += \ + %D%/msp430-sim.ld \ + %D%/msp430xl-sim.ld \ + %D%/intr_vectors.ld + +multilibtool_DATA += \ + %D%/gcrt0.o \ + %D%/crt0.o +libobjs_a_SOURCES += \ + %D%/gcrt0.S \ + %D%/crt0.S + +multilibtool_LIBRARIES += %D%/libsim.a +%C%_libsim_a_SOURCES = \ + %D%/syscalls.S \ + %D%/cio.S \ + %D%/write.c \ + %D%/unlink.c \ + %D%/sbrk.c + +multilibtool_LIBRARIES += %D%/libnosys.a +%C%_libnosys_a_SOURCES = \ + %D%/ciosyscalls.S \ + %D%/cio.S \ + %D%/write.c \ + %D%/unlink.c \ + %D%/sbrk.c + +multilibtool_LIBRARIES += %D%/libcrt.a +%C%_libcrt_a_SOURCES = \ + %D%/crt_bss.S \ + %D%/crt_high_bss.S \ + %D%/crt_movedata.S \ + %D%/crt_move_highdata.S \ + %D%/crt_main.S \ + %D%/crt_callexit.S \ + %D%/crt_run_init_array.S \ + %D%/crt_run_preinit_array.S \ + %D%/crt_run_fini_array.S \ + %D%/crt_run_array.S diff --git a/libgloss/msp430/crt0.S b/libgloss/msp430/crt0.S index 88876cd483..affc2c9a85 100644 --- a/libgloss/msp430/crt0.S +++ b/libgloss/msp430/crt0.S @@ -13,13 +13,6 @@ #include "memmodel.h" -;; The linker links all .crt_* sections in asciibetical order at the -;; same place. So, the four digits in .crt_NNNN_xxx name created by -;; the START_CRT_FUNC macro determine the link order, so, keep them -;; in sequential order here. The first two digits are set here, the -;; second two allow users to insert code between code fragments here. - -#if L0 .section ".resetvec", "a" __msp430_resetvec_hook: .word __crt0_start @@ -56,9 +49,8 @@ START_CRT_FUNC 0000 start mov_ #__stack, R1 END_CRT_FUNC start -#endif -;; The CRT functions below will only be present in the final linked +;; The CRT functions will only be present in the final linked ;; executable if the assembler decides they are needed. The assembler will ;; only define the symbol necessary to prevent them being garbage collected ;; by the linker if the file being assembled has a specific section, @@ -67,199 +59,3 @@ END_CRT_FUNC start ;; if it detects that main() has an epilogue. For example, if main() has a ;; while(1) loop at the end, GCC will not generate an epilogue (since it won't ;; return) and __crt0_call_exit won't be included. - -#if Lbss -;; This function is responsible for initializing the contents of the -;; .bss section. - -START_CRT_FUNC 0100 init_bss - - mov_ #__bssstart, R12 - clr.w R13 - mov_ #__bsssize, R14 -#ifdef __MSP430X_LARGE__ - clr.w R15 ; We assume that __bsssize is never > 64K -#endif - call_ #memset - -END_CRT_FUNC init_bss -#endif /* Lbss */ - - -#ifdef __MSP430X_LARGE__ -#if Lhigh_bss -;; This function is responsible for initializing the contents of the -;; .upper.bss section. - -START_CRT_FUNC 0200 init_highbss - - mov_ #__high_bssstart, R12 - mov.w #0, R13 - mov_ #__high_bsssize, R14 - ;; If __high_bsssize is zero then skip the call to memset. - ;; This can happen if all of the bss data was placed into .either.bss. - cmp.w #0, R14 - jeq 1f - call_ #memset -1: -END_CRT_FUNC init_highbss -#endif /* Lhigh_bss */ -#endif /* __MSP430X_LARGE__ */ - - -#if Lmovedata -;; This function is responsible for copying the -;; contents of the .data section from its load address (in ROM) to -;; its run-time address (in RAM). - -START_CRT_FUNC 0300 movedata - - mov_ #__datastart, R12 - mov_ #__romdatastart, R13 - - ;; memmove and memcpy do not currently work when src == dst - cmp_ R12, R13 - jeq 1f - - mov_ #__romdatacopysize, R14 - - call_ #memmove -1: -END_CRT_FUNC movedata -#endif /* Lmovedata */ - - -#ifdef __MSP430X_LARGE__ -#if Lmove_highdata -;; This function is responsible for making sure that the -;; contents of the .upper.data section have their correct startup values. -;; If a copy of the .upper.data section is stored in ROM then this means -;; copying the contents into HIFRAM. If a copy of .upper.data is stored in a -;; shadow section in HIFRAM then this means copying from the shadow section -;; into the real section. - -START_CRT_FUNC 0400 move_highdata - ;; __rom_highdatacopysize may be zero. Test this first because - ;; its value may come from the weak definitions above and we do - ;; not want to access the memory at address 0 pointed to by the - ;; weak definition of __upper_data_init. - mov.w #__rom_highdatacopysize, R14 - cmp.w #0, R14 - jeq 3f - - /* Test our status word. */ - cmpx.w #0, &__upper_data_init - jeq 1f - /* Status word is non-zero - copy from shadow into upper. */ - mov_ #__high_datastart, R12 - mov_ #__rom_highdatastart, R13 - jmp 2f - -1: /* Status word is zero. Copy from upper to shadow and change status word. */ - movx.w #1, &__upper_data_init - mov_ #__rom_highdatastart, R12 - mov_ #__high_datastart, R13 - -2: ;; __rom_highdatacopysize may be zero. memmove should cope. - mov.w #__rom_highdatacopysize, R14 - - call_ #memmove -3: -END_CRT_FUNC move_highdata -#endif /* Lmove_highdata */ -#endif /* __MSP430X_LARGE__ */ - -#if Lrun_preinit_array -;; This function is responsible for setting up the arguments -;; required for __crt0_run_array, to run the functions in .preinit_array. -START_CRT_FUNC 0500 run_preinit_array - - mov_ #__preinit_array_start, R4 - mov_ #__preinit_array_end, R5 - mov_ #PTRsz, R6 - call_ #__crt0_run_array - -END_CRT_FUNC run_preinit_array -#endif /* Lrun_preinit_array */ - -#if Lrun_init_array -;; This function is responsible for setting up the arguments -;; required for __crt0_run_array, to run the functions in .init_array. -START_CRT_FUNC 0600 run_init_array - - mov_ #__init_array_start, R4 - mov_ #__init_array_end, R5 - mov_ #PTRsz, R6 - call_ #__crt0_run_array - -END_CRT_FUNC run_init_array -#endif /* Lrun_init_array */ - -;; FIXME: There are currently no program termination routines executed for -;; msp430. -#if 0 -#if Lrun_fini_array -;; Ensure global C++ destructors in .fini_array are called on exit -;; by registering __crt0_run_fini_array with atexit. -START_CRT_FUNC 0700 register_fini_array - - mov_ #__crt0_run_fini_array, R12 - call_ #atexit - -END_CRT_FUNC register_fini_array -#endif /* Lrun_fini_array */ -#endif /* 0 */ - -#if Lmain -;; This function is always included and calls main(). - -START_CRT_FUNC 0800 call_main - - clr.w R12 ; Set argc == 0 - call_ #main - -END_CRT_FUNC call_main -#endif /* Lmain */ - -#if Lcallexit -;; This function is responsible for calling exit once main has finished. - -START_CRT_FUNC 0900 call_exit - - call_ #_exit - -END_CRT_FUNC call_exit -#endif /* Lcallexit */ - -;---------------------------------------- - -#if Lrun_fini_array -;; This function is responsible for setting up the arguments -;; required for __crt0_run_array, to run the functions in .fini_array. -START_CRT_FUNC 1000 run_fini_array - - mov_ #__fini_array_start, R4 - mov_ #__fini_array_end, R5 - mov_ #-PTRsz, R6 - call_ #__crt0_run_array - -END_CRT_FUNC run_fini_array -#endif /* Lrun_fini_array */ - -#if Lrun_array -;; Note - this section is only included in the startup code of the application -;; if it is needed by one of the above run_*_array functions. -START_CRT_FUNC 1100 run_array - - cmp_ R4, R5 - jeq _msp430_run_done - mov_ @R4, R7 - add_ R6, R4 - call_ R7 - br_ #__crt0_run_array - -END_CRT_FUNC run_array - -_msp430_run_done: - ret_ -#endif /* Lrun_array */ diff --git a/libgloss/msp430/crt_bss.S b/libgloss/msp430/crt_bss.S index 27ab2efebb..e83ea98458 100644 --- a/libgloss/msp430/crt_bss.S +++ b/libgloss/msp430/crt_bss.S @@ -1,19 +1,19 @@ -/* Copyright (c) 2012-2013 Red Hat Incorporated. +/* Copyright (c) 2012-2015 Red Hat Incorporated. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions - are met: + are met: - Redistributions of source code must retain the above copyright + Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - The name of Red Hat Incorporated may not be used to endorse - or promote products derived from this software without specific + The name of Red Hat Incorporated may not be used to endorse + or promote products derived from this software without specific prior written permission. This software is provided by the copyright holders and contributors @@ -30,15 +30,17 @@ #include "memmodel.h" - .section ".crt_bss", "ax", @progbits +;; This function is responsible for initializing the contents of the +;; .bss section. + +START_CRT_FUNC 0100 init_bss - .global __crt0_init_bss -__crt0_init_bss: - mov_ #__bssstart, R12 clr.w R13 - mov.w #__bsssize, R14 + mov_ #__bsssize, R14 #ifdef __MSP430X_LARGE__ - clr.w R15 ; We assume that __bsssize is never > 64M + clr.w R15 ; We assume that __bsssize is never > 64K #endif call_ #memset + +END_CRT_FUNC init_bss diff --git a/libgloss/msp430/crt_callexit.S b/libgloss/msp430/crt_callexit.S new file mode 100644 index 0000000000..86a8ca63f0 --- /dev/null +++ b/libgloss/msp430/crt_callexit.S @@ -0,0 +1,39 @@ +/* Copyright (c) 2012-2015 Red Hat Incorporated. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + The name of Red Hat Incorporated may not be used to endorse + or promote products derived from this software without specific + prior written permission. + + This software is provided by the copyright holders and contributors + "AS IS" and any express or implied warranties, including, but not + limited to, the implied warranties of merchantability and fitness for + a particular purpose are disclaimed. In no event shall Red Hat + incorporated be liable for any direct, indirect, incidental, special, + exemplary, or consequential damages (including, but not limited to, + procurement of substitute goods or services; loss of use, data, or + profits; or business interruption) however caused and on any theory of + liability, whether in contract, strict liability, or tort (including + negligence or otherwise) arising in any way out of the use of this + software, even if advised of the possibility of such damage. */ + +#include "memmodel.h" + +;; This function is responsible for calling exit once main has finished. + +START_CRT_FUNC 0900 call_exit + + call_ #_exit + +END_CRT_FUNC call_exit diff --git a/libgloss/msp430/crt_high_bss.S b/libgloss/msp430/crt_high_bss.S new file mode 100644 index 0000000000..462c7aecb2 --- /dev/null +++ b/libgloss/msp430/crt_high_bss.S @@ -0,0 +1,51 @@ +/* Copyright (c) 2012-2015 Red Hat Incorporated. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + The name of Red Hat Incorporated may not be used to endorse + or promote products derived from this software without specific + prior written permission. + + This software is provided by the copyright holders and contributors + "AS IS" and any express or implied warranties, including, but not + limited to, the implied warranties of merchantability and fitness for + a particular purpose are disclaimed. In no event shall Red Hat + incorporated be liable for any direct, indirect, incidental, special, + exemplary, or consequential damages (including, but not limited to, + procurement of substitute goods or services; loss of use, data, or + profits; or business interruption) however caused and on any theory of + liability, whether in contract, strict liability, or tort (including + negligence or otherwise) arising in any way out of the use of this + software, even if advised of the possibility of such damage. */ + +#ifdef __MSP430X_LARGE__ + +#include "memmodel.h" + +;; This function is responsible for initializing the contents of the +;; .upper.bss section. + +START_CRT_FUNC 0200 init_highbss + + mov_ #__high_bssstart, R12 + mov.w #0, R13 + mov_ #__high_bsssize, R14 + ;; If __high_bsssize is zero then skip the call to memset. + ;; This can happen if all of the bss data was placed into .either.bss. + cmp.w #0, R14 + jeq 1f + call_ #memset +1: +END_CRT_FUNC init_highbss + +#endif /* __MSP430X_LARGE__ */ diff --git a/libgloss/msp430/crt_init.S b/libgloss/msp430/crt_init.S new file mode 100644 index 0000000000..e83ea98458 --- /dev/null +++ b/libgloss/msp430/crt_init.S @@ -0,0 +1,46 @@ +/* Copyright (c) 2012-2015 Red Hat Incorporated. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + The name of Red Hat Incorporated may not be used to endorse + or promote products derived from this software without specific + prior written permission. + + This software is provided by the copyright holders and contributors + "AS IS" and any express or implied warranties, including, but not + limited to, the implied warranties of merchantability and fitness for + a particular purpose are disclaimed. In no event shall Red Hat + incorporated be liable for any direct, indirect, incidental, special, + exemplary, or consequential damages (including, but not limited to, + procurement of substitute goods or services; loss of use, data, or + profits; or business interruption) however caused and on any theory of + liability, whether in contract, strict liability, or tort (including + negligence or otherwise) arising in any way out of the use of this + software, even if advised of the possibility of such damage. */ + +#include "memmodel.h" + +;; This function is responsible for initializing the contents of the +;; .bss section. + +START_CRT_FUNC 0100 init_bss + + mov_ #__bssstart, R12 + clr.w R13 + mov_ #__bsssize, R14 +#ifdef __MSP430X_LARGE__ + clr.w R15 ; We assume that __bsssize is never > 64K +#endif + call_ #memset + +END_CRT_FUNC init_bss diff --git a/libgloss/msp430/crt_main.S b/libgloss/msp430/crt_main.S new file mode 100644 index 0000000000..ee2094cf32 --- /dev/null +++ b/libgloss/msp430/crt_main.S @@ -0,0 +1,40 @@ +/* Copyright (c) 2012-2015 Red Hat Incorporated. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + The name of Red Hat Incorporated may not be used to endorse + or promote products derived from this software without specific + prior written permission. + + This software is provided by the copyright holders and contributors + "AS IS" and any express or implied warranties, including, but not + limited to, the implied warranties of merchantability and fitness for + a particular purpose are disclaimed. In no event shall Red Hat + incorporated be liable for any direct, indirect, incidental, special, + exemplary, or consequential damages (including, but not limited to, + procurement of substitute goods or services; loss of use, data, or + profits; or business interruption) however caused and on any theory of + liability, whether in contract, strict liability, or tort (including + negligence or otherwise) arising in any way out of the use of this + software, even if advised of the possibility of such damage. */ + +#include "memmodel.h" + +;; This function is always included and calls main(). + +START_CRT_FUNC 0800 call_main + + clr.w R12 ; Set argc == 0 + call_ #main + +END_CRT_FUNC call_main diff --git a/libgloss/msp430/crt_move_highdata.S b/libgloss/msp430/crt_move_highdata.S new file mode 100644 index 0000000000..b96954962a --- /dev/null +++ b/libgloss/msp430/crt_move_highdata.S @@ -0,0 +1,71 @@ +/* Copyright (c) 2012-2015 Red Hat Incorporated. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + The name of Red Hat Incorporated may not be used to endorse + or promote products derived from this software without specific + prior written permission. + + This software is provided by the copyright holders and contributors + "AS IS" and any express or implied warranties, including, but not + limited to, the implied warranties of merchantability and fitness for + a particular purpose are disclaimed. In no event shall Red Hat + incorporated be liable for any direct, indirect, incidental, special, + exemplary, or consequential damages (including, but not limited to, + procurement of substitute goods or services; loss of use, data, or + profits; or business interruption) however caused and on any theory of + liability, whether in contract, strict liability, or tort (including + negligence or otherwise) arising in any way out of the use of this + software, even if advised of the possibility of such damage. */ + +#ifdef __MSP430X_LARGE__ + +#include "memmodel.h" + +;; This function is responsible for making sure that the +;; contents of the .upper.data section have their correct startup values. +;; If a copy of the .upper.data section is stored in ROM then this means +;; copying the contents into HIFRAM. If a copy of .upper.data is stored in a +;; shadow section in HIFRAM then this means copying from the shadow section +;; into the real section. + +START_CRT_FUNC 0400 move_highdata + ;; __rom_highdatacopysize may be zero. Test this first because + ;; its value may come from the weak definitions above and we do + ;; not want to access the memory at address 0 pointed to by the + ;; weak definition of __upper_data_init. + mov.w #__rom_highdatacopysize, R14 + cmp.w #0, R14 + jeq 3f + + /* Test our status word. */ + cmpx.w #0, &__upper_data_init + jeq 1f + /* Status word is non-zero - copy from shadow into upper. */ + mov_ #__high_datastart, R12 + mov_ #__rom_highdatastart, R13 + jmp 2f + +1: /* Status word is zero. Copy from upper to shadow and change status word. */ + movx.w #1, &__upper_data_init + mov_ #__rom_highdatastart, R12 + mov_ #__high_datastart, R13 + +2: ;; __rom_highdatacopysize may be zero. memmove should cope. + mov.w #__rom_highdatacopysize, R14 + + call_ #memmove +3: +END_CRT_FUNC move_highdata + +#endif /* __MSP430X_LARGE__ */ diff --git a/libgloss/msp430/crt_movedata.S b/libgloss/msp430/crt_movedata.S new file mode 100644 index 0000000000..de0f519907 --- /dev/null +++ b/libgloss/msp430/crt_movedata.S @@ -0,0 +1,50 @@ +/* Copyright (c) 2012-2015 Red Hat Incorporated. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + The name of Red Hat Incorporated may not be used to endorse + or promote products derived from this software without specific + prior written permission. + + This software is provided by the copyright holders and contributors + "AS IS" and any express or implied warranties, including, but not + limited to, the implied warranties of merchantability and fitness for + a particular purpose are disclaimed. In no event shall Red Hat + incorporated be liable for any direct, indirect, incidental, special, + exemplary, or consequential damages (including, but not limited to, + procurement of substitute goods or services; loss of use, data, or + profits; or business interruption) however caused and on any theory of + liability, whether in contract, strict liability, or tort (including + negligence or otherwise) arising in any way out of the use of this + software, even if advised of the possibility of such damage. */ + +#include "memmodel.h" + +;; This function is responsible for copying the +;; contents of the .data section from its load address (in ROM) to +;; its run-time address (in RAM). + +START_CRT_FUNC 0300 movedata + + mov_ #__datastart, R12 + mov_ #__romdatastart, R13 + + ;; memmove and memcpy do not currently work when src == dst + cmp_ R12, R13 + jeq 1f + + mov_ #__romdatacopysize, R14 + + call_ #memmove +1: +END_CRT_FUNC movedata diff --git a/libgloss/msp430/crt_run_array.S b/libgloss/msp430/crt_run_array.S new file mode 100644 index 0000000000..6f9bf07a5a --- /dev/null +++ b/libgloss/msp430/crt_run_array.S @@ -0,0 +1,48 @@ +/* Copyright (c) 2012-2015 Red Hat Incorporated. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + The name of Red Hat Incorporated may not be used to endorse + or promote products derived from this software without specific + prior written permission. + + This software is provided by the copyright holders and contributors + "AS IS" and any express or implied warranties, including, but not + limited to, the implied warranties of merchantability and fitness for + a particular purpose are disclaimed. In no event shall Red Hat + incorporated be liable for any direct, indirect, incidental, special, + exemplary, or consequential damages (including, but not limited to, + procurement of substitute goods or services; loss of use, data, or + profits; or business interruption) however caused and on any theory of + liability, whether in contract, strict liability, or tort (including + negligence or otherwise) arising in any way out of the use of this + software, even if advised of the possibility of such damage. */ + +#include "memmodel.h" + +;; Note - this section is only included in the startup code of the application +;; if it is needed by one of the above run_*_array functions. + +START_CRT_FUNC 1100 run_array + + cmp_ R4, R5 + jeq _msp430_run_done + mov_ @R4, R7 + add_ R6, R4 + call_ R7 + br_ #__crt0_run_array + +END_CRT_FUNC run_array + +_msp430_run_done: + ret_ diff --git a/libgloss/msp430/crt_run_fini_array.S b/libgloss/msp430/crt_run_fini_array.S new file mode 100644 index 0000000000..c68b1e3e02 --- /dev/null +++ b/libgloss/msp430/crt_run_fini_array.S @@ -0,0 +1,43 @@ +/* Copyright (c) 2012-2015 Red Hat Incorporated. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + The name of Red Hat Incorporated may not be used to endorse + or promote products derived from this software without specific + prior written permission. + + This software is provided by the copyright holders and contributors + "AS IS" and any express or implied warranties, including, but not + limited to, the implied warranties of merchantability and fitness for + a particular purpose are disclaimed. In no event shall Red Hat + incorporated be liable for any direct, indirect, incidental, special, + exemplary, or consequential damages (including, but not limited to, + procurement of substitute goods or services; loss of use, data, or + profits; or business interruption) however caused and on any theory of + liability, whether in contract, strict liability, or tort (including + negligence or otherwise) arising in any way out of the use of this + software, even if advised of the possibility of such damage. */ + +#include "memmodel.h" + +;; This function is responsible for setting up the arguments +;; required for __crt0_run_array, to run the functions in .fini_array. + +START_CRT_FUNC 1000 run_fini_array + + mov_ #__fini_array_start, R4 + mov_ #__fini_array_end, R5 + mov_ #-PTRsz, R6 + call_ #__crt0_run_array + +END_CRT_FUNC run_fini_array diff --git a/libgloss/msp430/crt_run_init_array.S b/libgloss/msp430/crt_run_init_array.S new file mode 100644 index 0000000000..002507532b --- /dev/null +++ b/libgloss/msp430/crt_run_init_array.S @@ -0,0 +1,43 @@ +/* Copyright (c) 2012-2015 Red Hat Incorporated. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + The name of Red Hat Incorporated may not be used to endorse + or promote products derived from this software without specific + prior written permission. + + This software is provided by the copyright holders and contributors + "AS IS" and any express or implied warranties, including, but not + limited to, the implied warranties of merchantability and fitness for + a particular purpose are disclaimed. In no event shall Red Hat + incorporated be liable for any direct, indirect, incidental, special, + exemplary, or consequential damages (including, but not limited to, + procurement of substitute goods or services; loss of use, data, or + profits; or business interruption) however caused and on any theory of + liability, whether in contract, strict liability, or tort (including + negligence or otherwise) arising in any way out of the use of this + software, even if advised of the possibility of such damage. */ + +#include "memmodel.h" + +;; This function is responsible for setting up the arguments +;; required for __crt0_run_array, to run the functions in .init_array. + +START_CRT_FUNC 0600 run_init_array + + mov_ #__init_array_start, R4 + mov_ #__init_array_end, R5 + mov_ #PTRsz, R6 + call_ #__crt0_run_array + +END_CRT_FUNC run_init_array diff --git a/libgloss/msp430/crt_run_preinit_array.S b/libgloss/msp430/crt_run_preinit_array.S new file mode 100644 index 0000000000..db2e09ef59 --- /dev/null +++ b/libgloss/msp430/crt_run_preinit_array.S @@ -0,0 +1,43 @@ +/* Copyright (c) 2012-2015 Red Hat Incorporated. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + The name of Red Hat Incorporated may not be used to endorse + or promote products derived from this software without specific + prior written permission. + + This software is provided by the copyright holders and contributors + "AS IS" and any express or implied warranties, including, but not + limited to, the implied warranties of merchantability and fitness for + a particular purpose are disclaimed. In no event shall Red Hat + incorporated be liable for any direct, indirect, incidental, special, + exemplary, or consequential damages (including, but not limited to, + procurement of substitute goods or services; loss of use, data, or + profits; or business interruption) however caused and on any theory of + liability, whether in contract, strict liability, or tort (including + negligence or otherwise) arising in any way out of the use of this + software, even if advised of the possibility of such damage. */ + +#include "memmodel.h" + +;; This function is responsible for setting up the arguments +;; required for __crt0_run_array, to run the functions in .preinit_array. + +START_CRT_FUNC 0500 run_preinit_array + + mov_ #__preinit_array_start, R4 + mov_ #__preinit_array_end, R5 + mov_ #PTRsz, R6 + call_ #__crt0_run_array + +END_CRT_FUNC run_preinit_array diff --git a/libgloss/msp430/memmodel.h b/libgloss/msp430/memmodel.h index a481460c6d..9fba60190d 100644 --- a/libgloss/msp430/memmodel.h +++ b/libgloss/msp430/memmodel.h @@ -40,10 +40,16 @@ #endif /* Start a function in its own named and numbered section, so that it - can be subject to linker garbage collection. The numbers are used - to enforce link-time ordering of the sections. Note - the construction - of the symbol names is critical - they need to match the unresolved - symbol references created by the compiler and assembler. */ + can be subject to linker garbage collection. + + The linker links all .crt_* sections in asciibetical order at the same place. + So, the four digits in .crt_NNNN_xxx name are used to enforce link-time + ordering of the sections. Make sure to keep them in sequential order. The + first two digits are set in the files, the second two allow users to insert + code between our standard code fragments. + + Note - the construction of the symbol names is critical - they need to match + the unresolved symbol references created by the compiler and assembler. */ .macro START_CRT_FUNC number name .section .crt_\number\name,"ax",@progbits .global __crt0_\name diff --git a/libgloss/multi-build.in b/libgloss/multi-build.in deleted file mode 100644 index 80919ed6f8..0000000000 --- a/libgloss/multi-build.in +++ /dev/null @@ -1,66 +0,0 @@ -# This is like ../multilib.am and ../config-ml.in and ../config/multi.m4 mashed -# into one file. It relies on some custom hardcoded MULTI* variables in the -# respective Makefile.in instead of dynamic compiler probing that ../multilib.am -# does. - -PWD_COMMAND=$${PWDCMD-pwd} - -# FIXME: There should be an @-sign in front of the `if'. -# Leave out until this is tested a bit more. -libgloss-multi-do: - if [ -z "$(MULTIDIRS)" ]; then \ - true; \ - else \ - rootpre=`${PWD_COMMAND}`/; export rootpre; \ - srcrootpre=`cd $(srcdir); ${PWD_COMMAND}`/; export srcrootpre; \ - lib=`echo "$${rootpre}" | sed -e 's,^.*/\([^/][^/]*\)/$$,\1,'`; export lib; \ - compiler="$(CC)"; \ - for dir in $(MULTIDIRS); do \ - if [ "$${dir}" = "." ]; then \ - true; \ - else \ - destpre=`echo $${rootpre}/$${dir}`/; export destpre; \ - if ! test -d $${destpre} ; then \ - mkdir -p $${destpre}; \ - cd $${destpre}; \ - config_cmd=`../config.status --config | sed -re "s:--srcdir=([^/]):--srcdir=../\1:"`; \ - $(SHELL) -c "$(SHELL) $${srcrootpre}/configure $${config_cmd}";\ - sed -e "s:^MULTIDIRS[[:space:]]*+=.*$$:MULTIDIRS = :" \ - -e "s:^MULTILIBNAME[[:space:]]*=.*$$:MULTILIBNAME = MULTIDIR_$${dir}_NAME:" \ - -e "s:^MULTI_FLAGS_FOR_TARGET[[:space:]]*=.*$$:MULTI_FLAGS_FOR_TARGET = MULTIDIR_$${dir}_FLAGS:" \ - -e "s:^objdir[[:space:]]*=.*$$:objdir = ..:" \ - Makefile > Makefile.tem; \ - rm -f Makefile; \ - mv Makefile.tem Makefile; \ - else \ - cd $${destpre}; \ - fi; \ - if ($(MAKE) $(FLAGS_TO_PASS) \ - CFLAGS="$(CFLAGS)" \ - CCASFLAGS="$(CCASFLAGS)" \ - FCFLAGS="$(FCFLAGS)" \ - FFLAGS="$(FFLAGS)" \ - ADAFLAGS="$(ADAFLAGS)" \ - prefix="$(prefix)" \ - exec_prefix="$(exec_prefix)" \ - GCJFLAGS="$(GCJFLAGS)" \ - GOCFLAGS="$(GOCFLAGS)" \ - CXXFLAGS="$(CXXFLAGS)" \ - LIBCFLAGS="$(LIBCFLAGS)" \ - LIBCXXFLAGS="$(LIBCXXFLAGS)" \ - LDFLAGS="$(LDFLAGS)" \ - MULTIFLAGS="" \ - DESTDIR="$(DESTDIR)" \ - SOURCE="${srcdir}/" \ - INSTALL="$(INSTALL)" \ - INSTALL_DATA="$(INSTALL_DATA)" \ - INSTALL_PROGRAM="$(INSTALL_PROGRAM)" \ - INSTALL_SCRIPT="$(INSTALL_SCRIPT)" \ - $(DO)); then \ - cd $${rootpre}; \ - else \ - exit 1; \ - fi; \ - fi; \ - done; \ - fi diff --git a/libgloss/nds32/Makefile.in b/libgloss/nds32/Makefile.in deleted file mode 100644 index 98311e045e..0000000000 --- a/libgloss/nds32/Makefile.in +++ /dev/null @@ -1,143 +0,0 @@ -# Makefile for libgloss/nds32 -# Copyright (c) 1996, 1998 Cygnus Support. 2012 Andes Porting. -# All rights reserved. -# -# Redistribution and use in source and binary forms are permitted -# provided that the above copyright notice and this paragraph are -# duplicated in all such forms and that any documentation, -# and/or other materials related to such -# distribution and use acknowledge that the software was developed -# at Cygnus Support, Inc. Cygnus Support, Inc. may not be used to -# endorse or promote products derived from this software without -# specific prior written permission. -# THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED -# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. - -DESTDIR = -VPATH = @srcdir@ @srcdir@/.. -srcdir = @srcdir@ -objdir = . -srcroot = $(srcdir)/../.. -objroot = $(objdir)/../.. - -host_alias = @host_alias@ -target_alias = @target_alias@ -prefix = @prefix@ -exec_prefix = @exec_prefix@ -bindir = @bindir@ -libdir = @libdir@ -tooldir = $(exec_prefix)/$(target_alias) - -TOP = ../.. -SRCTOP = ../.. - -# Multilib support variables. -# TOP is used instead of MULTI{BUILD,SRC}TOP. -MULTISRCTOP = -MULTIBUILDTOP = -MULTIDIRS = -MULTISUBDIR = -MULTIDO = true -MULTICLEAN = true - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -SHELL = /bin/sh - -CC = @CC@ - -AS = @AS@ -AR = @AR@ -LD = @LD@ -RANLIB = @RANLIB@ - -AR_FLAGS = qv -BISON = bison -MAKEINFO = makeinfo - -.NOEXPORT: -MAKEOVERRIDES = - -TARGETDOC = ../../targetdep.tex - -CRT0 = crt0.o -CRT1 = crt1.o - - - -SYSCALLS1 = _exit.o _open.o _close.o _read.o _write.o -SYSCALLS2 = _lseek.o _unlink.o _getpid.o _kill.o _fstat.o -SYSCALLS3 = _argvlen.o _argv.o _chdir.o _stat.o _chmod.o -SYSCALLS4 = _utime.o _time.o _gettimeofday.o _times.o _link.o -SYSCALLS5 = _rename.o _isatty.o _system.o _sbrk.o syscall_error_handler.o -SYSCALLS = $(SYSCALLS1) $(SYSCALLS2) $(SYSCALLS3) $(SYSCALLS4) $(SYSCALLS5) -GENERIC_LIBOBJS = - -LIBOBJS = $(SYSCALLS) $(GENERIC_LIBOBJS) -LIBGLOSS = libgloss.a - -# Host specific makefile fragment comes in here. -@host_makefile_frag@ - -all: $(CRT0) $(CRT1) $(LIBGLOSS) - -libgloss.a: $(LIBOBJS) - $(AR) $(ARFLAGS) $@ $(LIBOBJS) - $(RANLIB) $@ - -install: - mkdir -p $(DESTDIR)$(tooldir)/lib${MULTISUBDIR} - $(INSTALL_DATA) $(CRT0) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$(CRT0) - $(INSTALL_DATA) $(CRT1) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$(CRT1) - $(INSTALL_DATA) $(LIBGLOSS) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$(LIBGLOSS) - - - - - - - -clean mostlyclean: - rm -f *~ *.[oa] - -distclean maintainer-clean realclean: clean - rm -f Makefile - -info doc: -install-info: -clean-info: - -Makefile: Makefile.in ../config.status - cd .. && $(SHELL) config.status - -# to support SunOS VPATH -crt0.o: crt0.S -crt1.o: crt1.S -_exit.o: _exit.S -_open.o: _open.S -_close.o: _close.S -_read.o: _read.S -_write.o: _write.S -_lseek.o: _lseek.S -_unlink.o: _unlink.S -_getpid.o: _getpid.S -_kill.o: _kill.S -_fstat.o: _fstat.S -_argvlen.o: _argvlen.S -_argv.o: _argv.S -_chdir.o: _chdir.S -_stat.o: _stat.S -_chmod.o: _chmod.S -_utime.o: _utime.S -_time.o: _time.S -_gettimeofday.o: _gettimeofday.S -_times.o: _times.S -_link.o: _link.S -_rename.o: _rename.S -_isatty.o: _isatty.S -_system.o: _system.S -_sbrk.o: _sbrk.S -syscall_error_handler.o: syscall_error_handler.S diff --git a/libgloss/nds32/Makefile.inc b/libgloss/nds32/Makefile.inc new file mode 100644 index 0000000000..e14f954248 --- /dev/null +++ b/libgloss/nds32/Makefile.inc @@ -0,0 +1,50 @@ +## Makefile for libgloss/nds32 +## Copyright (c) 1996, 1998 Cygnus Support. 2012 Andes Porting. +## All rights reserved. +## +## Redistribution and use in source and binary forms are permitted +## provided that the above copyright notice and this paragraph are +## duplicated in all such forms and that any documentation, +## and/or other materials related to such +## distribution and use acknowledge that the software was developed +## at Cygnus Support, Inc. Cygnus Support, Inc. may not be used to +## endorse or promote products derived from this software without +## specific prior written permission. +## THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR +## IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED +## WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + +multilibtool_DATA += \ + %D%/crt0.o \ + %D%/crt1.o +libobjs_a_SOURCES += \ + %D%/crt0.S \ + %D%/crt1.S + +multilibtool_LIBRARIES += %D%/libgloss.a +%C%_libgloss_a_SOURCES = \ + %D%/_exit.S \ + %D%/_open.S \ + %D%/_close.S \ + %D%/_read.S \ + %D%/_write.S \ + %D%/_lseek.S \ + %D%/_unlink.S \ + %D%/_getpid.S \ + %D%/_kill.S \ + %D%/_fstat.S \ + %D%/_argvlen.S \ + %D%/_argv.S \ + %D%/_chdir.S \ + %D%/_stat.S \ + %D%/_chmod.S \ + %D%/_utime.S \ + %D%/_time.S \ + %D%/_gettimeofday.S \ + %D%/_times.S \ + %D%/_link.S \ + %D%/_rename.S \ + %D%/_isatty.S \ + %D%/_system.S \ + %D%/_sbrk.S \ + %D%/syscall_error_handler.S diff --git a/libgloss/nios2/Makefile.in b/libgloss/nios2/Makefile.in deleted file mode 100644 index cbe1c55522..0000000000 --- a/libgloss/nios2/Makefile.in +++ /dev/null @@ -1,118 +0,0 @@ -# Copyright (c) 1995, 1996, 2001 Cygnus Support -*- mode:makefile -*- -# Copyright (c) 2018, Mentor Graphics -# -# The authors hereby grant permission to use, copy, modify, distribute, -# and license this software and its documentation for any purpose, provided -# that existing copyright notices are retained in all copies and that this -# notice is included verbatim in any distributions. No written agreement, -# license, or royalty fee is required for any of the authorized uses. -# Modifications to this software may be copyrighted by their authors -# and need not follow the licensing terms described here, provided that -# the new terms are clearly indicated on the first page of each file where -# they apply. -# - -DESTDIR = -VPATH = @srcdir@ -srcdir = @srcdir@ -objdir = . -srcroot = $(srcdir)/../.. -objroot = $(objdir)/../.. - -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -host_alias = @host_alias@ -target_alias = @target_alias@ -program_transform_name = @program_transform_name@ - -bindir = @bindir@ -libdir = @libdir@ -tooldir = $(exec_prefix)/$(target_alias) - -# Multilib support variables. -# TOP is used instead of MULTI{BUILD,SRC}TOP. -MULTIDIRS = -MULTISUBDIR = -MULTIDO = true -MULTICLEAN = true - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -SHELL = /bin/sh - -mkinstalldirs = $(SHELL) $(srcroot)/mkinstalldirs - -CC = @CC@ - -AS = @AS@ -AR = @AR@ -LD = @LD@ -RANLIB = @RANLIB@ -AR_FLAGS = qv - -OBJDUMP = `if [ -f ${objroot}/../binutils/objdump ] ; \ - then echo ${objroot}/../binutils/objdump ; \ - else t='$(program_transform_name)'; echo objdump | sed -e $$t ; fi` -OBJCOPY = `if [ -f ${objroot}/../binutils/objcopy ] ; \ - then echo ${objroot}/../binutils/objcopy ; \ - else t='$(program_transform_name)'; echo objcopy | sed -e $$t ; fi` - -# Linker scripts. - -BSP_SCRIPTS= qemu-hosted.ld - -# Semihosting library. - -HOSTED_BSP= libnios2.a -HOSTED_OBJS= io-gdb.o io-exit.o \ - io-close.o io-fstat.o \ - io-gettimeofday.o io-isatty.o io-lseek.o \ - io-open.o io-read.o io-rename.o \ - io-stat.o io-system.o io-time.o \ - io-unlink.o io-write.o \ - sbrk.o kill.o getpid.o - -# Host specific makefile fragment comes in here. -@host_makefile_frag@ - -all :: ${HOSTED_BSP} - -# Build semihosting library. -crt0.o: crt0.S - $(CC) $(CFLAGS_FOR_TARGET) $(CFLAGS) -c $< -o $@ -io-nios2.o: io-nios2.S - $(CC) $(CFLAGS_FOR_TARGET) $(CFLAGS) -c $< -o $@ -$(HOSTED_OBJS): %.o: %.c io.h - $(CC) $(CFLAGS_FOR_TARGET) $(CFLAGS) -DHOSTED=1 $(INCLUDES) -c $< -o $@ -$(HOSTED_BSP): crt0.o io-nios2.o $(HOSTED_OBJS) $(OTHER_OBJS) - ${AR} ${ARFLAGS} $@ $^ - ${RANLIB} $@ - - -.PHONY: install info dvi doc install-info clean-info -install:: - ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR} - $(INSTALL_DATA) $(HOSTED_BSP) \ - $(DESTDIR)$(tooldir)/lib${MULTISUBDIR} - for x in ${BSP_SCRIPTS}; do\ - ${INSTALL_DATA} ${srcdir}/$${x} $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; \ - done - -# target specific makefile fragment comes in here. -@target_makefile_frag@ - -clean mostlyclean: - rm -f a.out core *.i *~ *.a *.o *-test *.srec *.dis *.x *.map - -distclean maintainer-clean realclean: clean - rm -f Makefile config.cache config.log config.status - -info dvi doc: -install-info: -clean-info: - -Makefile: Makefile.in ../config.status - cd .. && $(SHELL) config.status diff --git a/libgloss/nios2/Makefile.inc b/libgloss/nios2/Makefile.inc new file mode 100644 index 0000000000..da65b601ab --- /dev/null +++ b/libgloss/nios2/Makefile.inc @@ -0,0 +1,32 @@ +## Linker scripts. + +multilibtool_DATA += \ + %D%/qemu-hosted.ld + +## Semihosting library. + +multilibtool_LIBRARIES += %D%/libnios2.a +%C%_libnios2_a_SOURCES = \ + %D%/crt0.S \ + %D%/io-close.c \ + %D%/io-exit.c \ + %D%/io-fstat.c \ + %D%/io-gdb.c \ + %D%/io-gettimeofday.c \ + %D%/io-isatty.c \ + %D%/io-lseek.c \ + %D%/io-nios2.S \ + %D%/io-open.c \ + %D%/io-read.c \ + %D%/io-rename.c \ + %D%/io-stat.c \ + %D%/io-system.c \ + %D%/io-time.c \ + %D%/io-unlink.c \ + %D%/io-write.c \ + %D%/getpid.c \ + %D%/kill.c \ + %D%/sbrk.c +%C%_libnios2_a_CPPFLAGS = \ + $(AM_CPPFLAGS) \ + -DHOSTED=1 diff --git a/libgloss/or1k/Makefile.in b/libgloss/or1k/Makefile.in deleted file mode 100644 index c75d6e4546..0000000000 --- a/libgloss/or1k/Makefile.in +++ /dev/null @@ -1,145 +0,0 @@ -# Copyright (c) 1998 Cygnus Support -# -# The authors hereby grant permission to use, copy, modify, distribute, -# and license this software and its documentation for any purpose, provided -# that existing copyright notices are retained in all copies and that this -# notice is included verbatim in any distributions. No written agreement, -# license, or royalty fee is required for any of the authorized uses. -# Modifications to this software may be copyrighted by their authors -# and need not follow the licensing terms described here, provided that -# the new terms are clearly indicated on the first page of each file where -# they apply. - -DESTDIR = -VPATH = @srcdir@ -srcdir = @srcdir@ -objdir = . -srcroot = $(srcdir)/../.. -objroot = $(objdir)/../.. - -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -host_alias = @host_alias@ -target_alias = @target_alias@ -program_transform_name = @program_transform_name@ - -bindir = @bindir@ -libdir = @libdir@ -includedir = @includedir@ -tooldir = $(exec_prefix)/$(target_alias) - -# Multilib support variables. -# TOP is used instead of MULTI{BUILD,SRC}TOP. -MULTIDIRS = -MULTISUBDIR = -MULTIDO = true -MULTICLEAN = true - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -SHELL = /bin/sh - -mkinstalldirs = $(SHELL) $(srcroot)/mkinstalldirs - -CC = @CC@ -AS = @AS@ -AR = @AR@ -LD = @LD@ -RANLIB = @RANLIB@ - -OBJDUMP = `if [ -f ${objroot}/../binutils/objdump ] ; \ - then echo ${objroot}/../binutils/objdump ; \ - else t='$(program_transform_name)'; echo objdump | sed -e $$t ; fi` -OBJCOPY = `if [ -f ${objroot}/../binutils/objcopy ] ; \ - then echo ${objroot}/../binutils/objcopy ; \ - else t='$(program_transform_name)'; echo objcopy | sed -e $$t ; fi` - -# object files needed -COMMON_FILES = syscalls \ - or1k_uart \ - outbyte \ - caches-asm \ - exceptions \ - exceptions-asm \ - interrupts \ - interrupts-asm \ - mmu-asm \ - timer \ - sbrk \ - impure \ - util \ - sync-asm - -LIBOR1K_FILES = $(COMMON_FILES) -LIBOR1K_OBJS = $(addsuffix .o,$(LIBOR1K_FILES)) - -BOARDS = atlys \ - de0_nano \ - ml501 \ - optimsoc \ - or1ksim \ - or1ksim-uart \ - ordb1a3pe1500 \ - ordb2a \ - orpsocrefdesign - -BOARD_LIBS = $(addprefix libboard-,$(addsuffix .a,$(BOARDS))) -BOARD_OBJS = $(addprefix libboard-,$(addsuffix .o,$(BOARDS))) - -GCC_LDFLAGS = `if [ -d ${objroot}/../gcc ] ; \ - then echo -L${objroot}/../gcc ; fi` - -OUTPUTS = libor1k.a crt0.o ${BOARD_LIBS} - -# Host specific makefile fragment comes in here. -@host_makefile_frag@ - - -all: ${OUTPUTS} - -# -# here's where we build the library for each target -# - -libor1k.a: $(LIBOR1K_OBJS) - ${AR} ${ARFLAGS} $@ $(LIBOR1K_OBJS) - ${RANLIB} $@ - -libboard-%.o: boards/%.S - ${CC} ${CFLAGS} -o $@ -c $< - -libboard-%.o: boards/%.c - ${CC} ${CFLAGS} -o $@ -c $< - -libboard-%.a: libboard-%.o - ${AR} ${ARFLAGS} $@ $< - ${RANLIB} $@ - -doc: - -clean mostlyclean: - rm -f $(OUTPUTS) $(BOARD_LIBS) *.i *~ *.o *-test *.srec *.dis *.map *.x - -distclean maintainer-clean realclean: clean - rm -f Makefile config.status $(OUTPUTS) - -.PHONY: install info install-info clean-info -install: - ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR} $(DESTDIR)$(tooldir)/include - @for outputs in ${OUTPUTS}; do\ - $(INSTALL_DATA) $${outputs} $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}; \ - done - $(INSTALL_DATA) ${srcdir}/include/or1k-support.h $(DESTDIR)$(tooldir)/include/ - $(INSTALL_DATA) ${srcdir}/include/or1k-sprs.h $(DESTDIR)$(tooldir)/include/ - $(INSTALL_DATA) ${srcdir}/include/or1k-asm.h $(DESTDIR)$(tooldir)/include/ - $(INSTALL_DATA) ${srcdir}/include/or1k-nop.h $(DESTDIR)$(tooldir)/include/ - -info: -install-info: -clean-info: - -Makefile: Makefile.in ../config.status - cd .. && $(SHELL) config.status diff --git a/libgloss/or1k/Makefile.inc b/libgloss/or1k/Makefile.inc new file mode 100644 index 0000000000..ecb7a83df5 --- /dev/null +++ b/libgloss/or1k/Makefile.inc @@ -0,0 +1,66 @@ +## Copyright (c) 1998 Cygnus Support +## +## The authors hereby grant permission to use, copy, modify, distribute, +## and license this software and its documentation for any purpose, provided +## that existing copyright notices are retained in all copies and that this +## notice is included verbatim in any distributions. No written agreement, +## license, or royalty fee is required for any of the authorized uses. +## Modifications to this software may be copyrighted by their authors +## and need not follow the licensing terms described here, provided that +## the new terms are clearly indicated on the first page of each file where +## they apply. + +multilibtool_DATA += %D%/crt0.o +libobjs_a_SOURCES += %D%/crt0.S + +includetool_DATA += \ + %D%/include/or1k-asm.h \ + %D%/include/or1k-nop.h \ + %D%/include/or1k-sprs.h \ + %D%/include/or1k-support.h + +multilibtool_LIBRARIES += %D%/libor1k.a +%C%_libor1k_a_SOURCES = \ + %D%/syscalls.c \ + %D%/or1k_uart.c \ + %D%/outbyte.c \ + %D%/caches-asm.S \ + %D%/exceptions.c \ + %D%/exceptions-asm.S \ + %D%/interrupts.c \ + %D%/interrupts-asm.S \ + %D%/mmu-asm.S \ + %D%/timer.c \ + %D%/sbrk.c \ + %D%/impure.c \ + %D%/util.c \ + %D%/sync-asm.S + +## Now all the board definitions. + +multilibtool_LIBRARIES += %D%/libboard-atlys.a +%C%_libboard_atlys_a_SOURCES = %D%/boards/atlys.S + +multilibtool_LIBRARIES += %D%/libboard-de0_nano.a +%C%_libboard_de0_nano_a_SOURCES = %D%/boards/de0_nano.S + +multilibtool_LIBRARIES += %D%/libboard-ml501.a +%C%_libboard_ml501_a_SOURCES = %D%/boards/ml501.S + +multilibtool_LIBRARIES += %D%/libboard-optimsoc.a +%C%_libboard_optimsoc_a_SOURCES = %D%/boards/optimsoc.S + +multilibtool_LIBRARIES += %D%/libboard-or1ksim.a +%C%_libboard_or1ksim_a_SOURCES = %D%/boards/or1ksim.S + +multilibtool_LIBRARIES += %D%/libboard-or1ksim-uart.a +%C%_libboard_or1ksim_uart_a_SOURCES = %D%/boards/or1ksim-uart.S + +multilibtool_LIBRARIES += %D%/libboard-ordb1a3pe1500.a +%C%_libboard_ordb1a3pe1500_a_SOURCES = %D%/boards/ordb1a3pe1500.S + +multilibtool_LIBRARIES += %D%/libboard-ordb2a.a +%C%_libboard_ordb2a_a_SOURCES = %D%/boards/ordb2a.S + +multilibtool_LIBRARIES += %D%/libboard-orpsocrefdesign.a +%C%_libboard_orpsocrefdesign_a_SOURCES = %D%/boards/orpsocrefdesign.S diff --git a/libgloss/or1k/boards/README b/libgloss/or1k/boards/README index b6c5abf92c..290b798b55 100644 --- a/libgloss/or1k/boards/README +++ b/libgloss/or1k/boards/README @@ -60,6 +60,5 @@ steps: implementation. It is recommended to do so in assembler board files to keep the ability to overwrite the default implementation by the user. -When you are done with your board, add it to libgloss/or1k/Makefile.in to the -BOARDS variable and compile. - +When you are done with your board, add it to libgloss/or1k/Makefile.inc like the +other libboard-*.a definitions and compile. diff --git a/libgloss/pru/Makefile.in b/libgloss/pru/Makefile.in deleted file mode 100644 index 7a2f290a82..0000000000 --- a/libgloss/pru/Makefile.in +++ /dev/null @@ -1,145 +0,0 @@ -# SPDX-License-Identifier: BSD-2-Clause-FreeBSD -# -# Copyright 2018-2019 Dimitar Dimitrov -# All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions -# are met: -# 1. Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# 2. Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# -# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR -# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. -# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, -# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, -# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY -# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT -# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF -# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -VPATH = @srcdir@ @srcdir@/.. - -srcdir = @srcdir@ -objdir = . -srcroot = $(srcdir)/../.. -objroot = $(objdir)/../.. - -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -host_alias = @host_alias@ -target_alias = @target_alias@ - -bindir = @bindir@ -libdir = @libdir@ -includedir = @includedir@ -tooldir = $(exec_prefix)/$(target_alias) - -# Multilib support variables. -# TOP is used instead of MULTI{BUILD,SRC}TOP. -MULTIDIRS = -MULTISUBDIR = - -SHELL = /bin/sh - -mkinstalldirs = $(SHELL) $(srcroot)/mkinstalldirs - -CC = @CC@ - -AS = @AS@ - -AR = @AR@ - -LD = @LD@ - -RANLIB = @RANLIB@ - -OBJDUMP = `t='$(program_transform_name)'; echo objdump | sed -e $$t` -OBJCOPY = `t='$(program_transform_name)'; echo objcopy | sed -e $$t` - -# object files needed -OBJS = \ - do_global_dtors.o gettimeofday.o \ - isatty.o putnum.o raise.o \ - inbyte.o outbyte.o sbrk.o stat.o syscalls.o \ - do_global_dtors.o - -# Object files specific to particular targets. -EVALOBJS = ${OBJS} - -CRTOBJS = crt0.o crt0-minrt.o -OUTPUTS = libgloss.a $(CRTOBJS) - -INCLUDES = -I$(srcdir)/.. - -# Note that when building the library, ${MULTILIB} is not the way multilib -# options are passed; they're passed in $(CFLAGS). -CFLAGS_FOR_TARGET = ${MULTILIB} ${INCLUDES} -LDFLAGS_FOR_TARGET = ${MULTILIB} - -.c.o: - $(CC) $(CFLAGS_FOR_TARGET) -Os $(INCLUDES) -c $(CFLAGS) $< - -.C.o: - $(CC) $(CFLAGS_FOR_TARGET) -Os $(INCLUDES) -c $(CFLAGS) $< -.s.o: - $(AS) $(ASFLAGS_FOR_TARGET) $(INCLUDES) $(ASFLAGS) -o $*.o $< - -# -# GCC knows to run the preprocessor on .S files before it assembles them. -# -.S.o: - $(CC) $(CFLAGS_FOR_TARGET) $(INCLUDES) $(CFLAGS) -c $< - -all: ${OUTPUTS} - -# -# here's where we build the library for each target -# - -libgloss.a: $(EVALOBJS) - ${AR} ${ARFLAGS} $@ $(EVALOBJS) - ${RANLIB} $@ - -# C Runtime Library startup code. -crt0.o: $(srcdir)/crt0.S - $(CC) $(CFLAGS_FOR_TARGET) $(INCLUDES) $(CFLAGS) $< -c -o $@ - -crt0-minrt.o: $(srcdir)/crt0.S - $(CC) $(CFLAGS_FOR_TARGET) $(INCLUDES) $(CFLAGS) -DMINRT $< -c -o $@ - -doc: - -clean mostlyclean: - rm -f $(OUTPUTS) *.i *~ *.o *-test *.srec *.dis *.map *.x - -distclean maintainer-clean realclean: clean - rm -f Makefile $(OUTPUTS) - -.PHONY: install info install-info clean-info -install: $(OUTPUTS) - for outputs in ${OUTPUTS}; do\ - ${INSTALL_DATA} $${outputs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR}/$${outputs}; \ - done - for s in $(SCRIPTS); do \ - b=`basename $$s`; \ - ${INSTALL_DATA} $$s ${DESTDIR}${tooldir}/lib${MULTISUBDIR}/$$b ;\ - done - ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR}/device-specs; \ - for s in ${srcdir}/device-specs/*; do \ - b=`basename $$s`; \ - $(INSTALL_DATA) $$s $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/device-specs/$$b ;\ - done - -info: -install-info: -clean-info: - -Makefile: $(srcdir)/Makefile.in ../config.status - cd .. && $(SHELL) config.status diff --git a/libgloss/pru/Makefile.inc b/libgloss/pru/Makefile.inc new file mode 100644 index 0000000000..f8408b28fd --- /dev/null +++ b/libgloss/pru/Makefile.inc @@ -0,0 +1,48 @@ +## SPDX-License-Identifier: BSD-2-Clause-FreeBSD +## +## Copyright 2018-2024 Dimitar Dimitrov +## All rights reserved. +## +## Redistribution and use in source and binary forms, with or without +## modification, are permitted provided that the following conditions +## are met: +## 1. Redistributions of source code must retain the above copyright +## notice, this list of conditions and the following disclaimer. +## 2. Redistributions in binary form must reproduce the above copyright +## notice, this list of conditions and the following disclaimer in the +## documentation and/or other materials provided with the distribution. +## +## THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +## IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +## OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +## IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +## INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +## NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +## DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +## THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +## (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +## THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +multilibtool_DATA += \ + %D%/crt0.o \ + %D%/crt0-minrt.o + +libobjs_a_SOURCES += \ + %D%/crt0.S \ + %D%/crt0-minrt.S + +multilibtool_LIBRARIES += %D%/libgloss.a +%C%_libgloss_a_SOURCES = \ + %D%/do_global_dtors.c \ + %D%/gettimeofday.c \ + %D%/isatty.c \ + %D%/putnum.c \ + %D%/raise.c \ + %D%/inbyte.c \ + %D%/outbyte.c \ + %D%/sbrk.c \ + %D%/stat.c \ + %D%/syscalls.S + +pru_devicespecsdir = $(multilibtooldir)/device-specs +pru_devicespecs_DATA = %D%/device-specs/sim diff --git a/libgloss/pru/crt0-minrt.S b/libgloss/pru/crt0-minrt.S new file mode 100644 index 0000000000..fa5e80af48 --- /dev/null +++ b/libgloss/pru/crt0-minrt.S @@ -0,0 +1,46 @@ +/* SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * crt0-minrt.S -- Minimal PRU startup code + * + * Copyright (c) 2024 Dimitar Dimitrov + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include "newlib.h" + + .extern main + + .text + .section .init0, "x" + .global _start +_start: + /* Initialize stack pointer. */ + ldi32 sp, _stack_top + + /* DATA and BSS are handled by the loader, so nothing to do here. */ + + /* Call main. Assume argc and argv are not used with -minrt! */ + call main + + /* We should never reach here. */ +_crt_exit: + jmp _crt_exit diff --git a/libgloss/pru/crt0.S b/libgloss/pru/crt0.S index b3f0d53a93..ad31cc9cc0 100644 --- a/libgloss/pru/crt0.S +++ b/libgloss/pru/crt0.S @@ -39,7 +39,6 @@ _start: /* DATA and BSS are handled by the loader, so nothing to do here. */ -#if !defined(MINRT) .extern _do_global_dtors /* Ensure destructors get called. Call is per GNU ABI (i.e. 32-bit function pointers). But it is also compatible with the TI ABI @@ -60,27 +59,22 @@ ctors_loop: add r5, r5, 2 jmp ctors_loop ctors_done: -#endif /* Just in case main() tries to access argc, argv[] and envp. */ zero r14, 3 * 4 -#if !defined(MINRT) .weak __c_args__ ldi32 r5, __c_args__ qbeq __skip_c_args, r5, 0 lbbo r14, r5, 0, 4 /* argc */ add r15, r5, 4 /* argv */ __skip_c_args: -#endif /* Call main */ call main -#if !defined(MINRT) /* Call exit */ call exit -#endif /* We should never reach here. */ _crt_exit: diff --git a/libgloss/putnum.c b/libgloss/putnum.c index c368c4136c..6e1051e240 100644 --- a/libgloss/putnum.c +++ b/libgloss/putnum.c @@ -14,6 +14,8 @@ */ #include "glue.h" +extern void print (char *ptr); + /* * putnum -- print a 32 bit number in hex */ diff --git a/libgloss/read.c b/libgloss/read.c index 24108ce0d4..83a3b549b3 100644 --- a/libgloss/read.c +++ b/libgloss/read.c @@ -22,10 +22,11 @@ extern char inbyte (void); */ int read (int fd, - char *buf, - int nbytes) + void *buf_, + size_t nbytes) { int i = 0; + char *buf = buf_; for (i = 0; i < nbytes; i++) { *(buf + i) = inbyte(); diff --git a/libgloss/riscv/Makefile.inc b/libgloss/riscv/Makefile.inc index fafc743749..452b7da4de 100644 --- a/libgloss/riscv/Makefile.inc +++ b/libgloss/riscv/Makefile.inc @@ -40,6 +40,10 @@ multilibtool_LIBRARIES += %D%/libgloss.a %D%/sys_wait.c \ %D%/sys_write.c +multilibtool_LIBRARIES += %D%/libsim.a +%C%_libsim_a_CPPFLAGS = $(%C%_libgloss_a_CPPFLAGS) -DUSING_SIM_SPECS +%C%_libsim_a_SOURCES = $(%C%_libgloss_a_SOURCES) + multilibtool_LIBRARIES += %D%/libsemihost.a %C%_libsemihost_a_CPPFLAGS = -I$(srcdir)/%D% %C%_libsemihost_a_SOURCES = \ diff --git a/libgloss/riscv/crt0.S b/libgloss/riscv/crt0.S index 7a4e4e32c1..f1c5419a5e 100644 --- a/libgloss/riscv/crt0.S +++ b/libgloss/riscv/crt0.S @@ -26,6 +26,17 @@ _start: addi gp, gp, %pcrel_lo(1b) .option pop + /* Initialize jvt CSR (reg addr: 0x0017) */ + .weak __jvt_base$ + lla a0, __jvt_base$ + beqz a0, .Ljvt_init_end +.option push +.option norelax +.option arch, +zicsr + csrw 0x17, a0 +.option pop +.Ljvt_init_end: + # Clear the bss segment la a0, __bss_start la a2, _end diff --git a/libgloss/riscv/internal_syscall.h b/libgloss/riscv/internal_syscall.h index 1f1f42f5d6..080c8c847e 100644 --- a/libgloss/riscv/internal_syscall.h +++ b/libgloss/riscv/internal_syscall.h @@ -63,7 +63,7 @@ __internal_syscall(long n, int argc, long _a0, long _a1, long _a2, long _a3, lon } static inline long -syscall_errno(long n, int argc, long _a0, long _a1, long _a2, long _a3, long _a4, long _a5) +_syscall_errno(long n, int argc, long _a0, long _a1, long _a2, long _a3, long _a4, long _a5) { long a0 = __internal_syscall (n, argc, _a0, _a1, _a2, _a3, _a4, _a5); @@ -73,4 +73,8 @@ syscall_errno(long n, int argc, long _a0, long _a1, long _a2, long _a3, long _a4 return a0; } +#define syscall_errno(N, ARGC, A0, A1, A2, A3, A4, A5) \ + _syscall_errno(N, ARGC, (long)A0, (long)A1, (long)A2, \ + (long)A3, (long)A4, (long)A5) + #endif diff --git a/libgloss/riscv/semihost-sys_fdtable.c b/libgloss/riscv/semihost-sys_fdtable.c index 152c92d151..d62e3f9708 100644 --- a/libgloss/riscv/semihost-sys_fdtable.c +++ b/libgloss/riscv/semihost-sys_fdtable.c @@ -24,25 +24,26 @@ static struct fdentry fdtable[RISCV_MAX_OPEN_FILES]; void __attribute__ ((constructor)) init_semihosting () { - int handle; + int i; - for (int i=0; itv_sec = ts64.tv_sec; - tp->tv_usec = ts64.tv_nsec * 1000; + tp->tv_usec = ts64.tv_nsec / 1000; return rv; #else return syscall_errno (SYS_gettimeofday, 1, tp, 0, 0, 0, 0, 0); diff --git a/libgloss/rl78/Makefile.in b/libgloss/rl78/Makefile.in deleted file mode 100644 index eb220f61ae..0000000000 --- a/libgloss/rl78/Makefile.in +++ /dev/null @@ -1,161 +0,0 @@ -# Copyright (c) 2008, 2009, 2011 Red Hat Inc -# -# The authors hereby grant permission to use, copy, modify, distribute, -# and license this software and its documentation for any purpose, provided -# that existing copyright notices are retained in all copies and that this -# notice is included verbatim in any distributions. No written agreement, -# license, or royalty fee is required for any of the authorized uses. -# Modifications to this software may be copyrighted by their authors -# and need not follow the licensing terms described here, provided that -# the new terms are clearly indicated on the first page of each file where -# they apply. - -# Makefile for libgloss/rl78. - -VPATH = @srcdir@ -srcdir = @srcdir@ -objdir = . -srcroot = $(srcdir)/../.. -objroot = $(objdir)/../.. - -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -host_alias = @host_alias@ -target_alias = @target_alias@ - -bindir = @bindir@ -libdir = @libdir@ -tooldir = $(exec_prefix)/$(target_alias) - -# Multilib support variables. -# TOP is used instead of MULTI{BUILD,SRC}TOP. -MULTIDIRS = -MULTISUBDIR = -MULTIDO = true -MULTICLEAN = true - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -SHELL = /bin/sh - -mkinstalldirs = $(SHELL) $(srcroot)/mkinstalldirs - -CC = @CC@ - -AS = @AS@ -AR = @AR@ -LD = @LD@ -RANLIB = @RANLIB@ -AR_FLAGS = rc - -OBJDUMP = `if [ -f ${objroot}/../binutils/objdump ] ; \ - then echo ${objroot}/../binutils/objdump ; \ - else t='$(program_transform_name)'; echo objdump | sed -e $$t ; fi` -OBJCOPY = `if [ -f ${objroot}/../binutils/objcopy ] ; \ - then echo ${objroot}/../binutils/objcopy ; \ - else t='$(program_transform_name)'; echo objcopy | sed -e $$t ; fi` - -SCRIPTS = $(srcdir)/rl78.ld $(srcdir)/rl78-sim.ld -CRT = gcrt0.o crt0.o crtn.o -SIM_BSP = libsim.a -LIBNOSYS = ../libnosys/libnosys.a -SIM_OBJS = \ - sbrk.o \ - exit.o \ - open.o \ - close.o \ - read.o \ - write.o \ - swrite.o \ - lseek.o \ - unlink.o \ - getpid.o \ - kill.o \ - fstat.o \ - argvlen.o \ - argv.o \ - chdir.o \ - stat.o \ - chmod.o \ - utime.o \ - time.o \ - gettimeofday.o \ - times.o \ - link.o \ - isatty.o \ - abort.o \ - mcount.o - -#### Host specific Makefile fragment comes in here. -@host_makefile_frag@ - - -# Override .S.o rule to pass assembler debugging flags -.S.o: - $(CC) -Wa,-gdwarf2 -Wa,-I$(srcdir) $(CFLAGS_FOR_TARGET) $(INCLUDES) $(CFLAGS) -c $< - -all: $(CRT) $(SIM_BSP) copy_scripts_to_objdir - -$(SIM_BSP): $(SIM_OBJS) - $(AR) $(ARFLAGS) $@ $? - $(RANLIB) $@ - -copy_scripts_to_objdir: $(SCRIPTS) - cp $(SCRIPTS) $(objdir) - -# Dependencies - -SDEPS = $(srcdir)/rl78-sys.h $(srcdir)/../syscall.h - -abort.o : $(SDEPS) -argv.o : $(SDEPS) -argvlen.o : $(SDEPS) -chdir.o : $(SDEPS) -chmod.o : $(SDEPS) -close.o : $(SDEPS) -exit.o : $(SDEPS) -fstat.o : $(SDEPS) -getpid.o : $(SDEPS) -gettimeofday.o : $(SDEPS) -gcrt0.o: gcrt0.S crt0.S -kill.o : $(SDEPS) -link.o : $(SDEPS) -lseek.o : $(SDEPS) -mcount.o : $(SDEPS) -open.o : $(SDEPS) -read.o : $(SDEPS) -sigprocmask.o : $(SDEPS) -sleep.o : $(SDEPS) -stat.o : $(SDEPS) -time.o : $(SDEPS) -times.o : $(SDEPS) -unlink.o : $(SDEPS) -utime.o : $(SDEPS) -write.o : $(SDEPS) - -install: $(CRT) $(SIM_BSP) $(SCRIPTS) - ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR} - for c in $(CRT) $(SIM_BSP); do \ - $(INSTALL_DATA) $$c $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$$c ;\ - done - for c in $(SCRIPTS); do \ - b=`basename $$c`; \ - $(INSTALL_DATA) $$c $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$$b ;\ - done - -clean mostlyclean: - rm -f *.o *.a - -distclean maintainer-clean realclean: clean - rm -f Makefile - -.PHONY: info dvi doc install-info clean-info -info doc dvi: -install-info: -clean-info: - -Makefile: Makefile.in ../config.status - cd .. && $(SHELL) config.status diff --git a/libgloss/rl78/Makefile.inc b/libgloss/rl78/Makefile.inc new file mode 100644 index 0000000000..44210f12a0 --- /dev/null +++ b/libgloss/rl78/Makefile.inc @@ -0,0 +1,52 @@ +## Copyright (c) 2008, 2009, 2011 Red Hat Inc +## +## The authors hereby grant permission to use, copy, modify, distribute, +## and license this software and its documentation for any purpose, provided +## that existing copyright notices are retained in all copies and that this +## notice is included verbatim in any distributions. No written agreement, +## license, or royalty fee is required for any of the authorized uses. +## Modifications to this software may be copyrighted by their authors +## and need not follow the licensing terms described here, provided that +## the new terms are clearly indicated on the first page of each file where +## they apply. + +multilibtool_DATA += \ + %D%/rl78.ld \ + %D%/rl78-sim.ld + +multilibtool_DATA += \ + %D%/gcrt0.o \ + %D%/crt0.o \ + %D%/crtn.o +libobjs_a_SOURCES += \ + %D%/gcrt0.S \ + %D%/crt0.S \ + %D%/crtn.S + +multilibtool_LIBRARIES += %D%/libsim.a +%C%_libsim_a_SOURCES = \ + %D%/sbrk.c \ + %D%/exit.S \ + %D%/open.S \ + %D%/close.S \ + %D%/read.S \ + %D%/write.c \ + %D%/swrite.S \ + %D%/lseek.S \ + %D%/unlink.S \ + %D%/getpid.S \ + %D%/kill.S \ + %D%/fstat.S \ + %D%/argvlen.S \ + %D%/argv.S \ + %D%/chdir.S \ + %D%/stat.S \ + %D%/chmod.S \ + %D%/utime.S \ + %D%/time.S \ + %D%/gettimeofday.S \ + %D%/times.S \ + %D%/link.S \ + %D%/isatty.S \ + %D%/abort.S \ + %D%/mcount.c diff --git a/libgloss/rl78/write.c b/libgloss/rl78/write.c index 849470c947..4bc74ae3e9 100644 --- a/libgloss/rl78/write.c +++ b/libgloss/rl78/write.c @@ -57,6 +57,7 @@ typedef unsigned int UHI __attribute__((mode(HI))); static int initted = 0; +int _SYS_write (int, char *, int); static void init_uart0 () { @@ -108,4 +109,4 @@ _write(int fd, char *ptr, int len) return rv; } -char * write (int) __attribute__((weak, alias ("_write"))); +int write (int, char *, int) __attribute__((weak, alias ("_write"))); diff --git a/libgloss/rs6000/Makefile.in b/libgloss/rs6000/Makefile.in index 815cbd33ba..489903645a 100644 --- a/libgloss/rs6000/Makefile.in +++ b/libgloss/rs6000/Makefile.in @@ -389,8 +389,8 @@ install-mbx: install-xil: ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR} - set -e; for x in ${XIL_CRT0} ${XIL_BSP}; do ${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib/$$x; done - set -e; for x in ${XIL_SCRIPTS} ${XIL_SPECS}; do ${INSTALL_DATA} $(srcdir)/$$x $(DESTDIR)${tooldir}/lib/$$x; done + set -e; for x in ${XIL_CRT0} ${XIL_BSP}; do ${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done + set -e; for x in ${XIL_SCRIPTS} ${XIL_SPECS}; do ${INSTALL_DATA} $(srcdir)/$$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; done doc: info: diff --git a/libgloss/rx/Makefile.in b/libgloss/rx/Makefile.in deleted file mode 100644 index d730451bcd..0000000000 --- a/libgloss/rx/Makefile.in +++ /dev/null @@ -1,164 +0,0 @@ -# Copyright (c) 2008, 2009 Red Hat Inc -# -# The authors hereby grant permission to use, copy, modify, distribute, -# and license this software and its documentation for any purpose, provided -# that existing copyright notices are retained in all copies and that this -# notice is included verbatim in any distributions. No written agreement, -# license, or royalty fee is required for any of the authorized uses. -# Modifications to this software may be copyrighted by their authors -# and need not follow the licensing terms described here, provided that -# the new terms are clearly indicated on the first page of each file where -# they apply. - -# Makefile for libgloss/rx. - -VPATH = @srcdir@ -srcdir = @srcdir@ -objdir = . -srcroot = $(srcdir)/../.. -objroot = $(objdir)/../.. - -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -host_alias = @host_alias@ -target_alias = @target_alias@ - -bindir = @bindir@ -libdir = @libdir@ -tooldir = $(exec_prefix)/$(target_alias) - -# Multilib support variables. -# TOP is used instead of MULTI{BUILD,SRC}TOP. -MULTIDIRS = -MULTISUBDIR = -MULTIDO = true -MULTICLEAN = true - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -SHELL = /bin/sh - -mkinstalldirs = $(SHELL) $(srcroot)/mkinstalldirs - -CC = @CC@ - -AS = @AS@ -AR = @AR@ -LD = @LD@ -RANLIB = @RANLIB@ -AR_FLAGS = rc - -OBJDUMP = `if [ -f ${objroot}/../binutils/objdump ] ; \ - then echo ${objroot}/../binutils/objdump ; \ - else t='$(program_transform_name)'; echo objdump | sed -e $$t ; fi` -OBJCOPY = `if [ -f ${objroot}/../binutils/objcopy ] ; \ - then echo ${objroot}/../binutils/objcopy ; \ - else t='$(program_transform_name)'; echo objcopy | sed -e $$t ; fi` - -SCRIPTS = $(srcdir)/rx.ld $(srcdir)/rx-sim.ld -CRT = gcrt0.o crt0.o crtn.o -SIM_BSP = libsim.a -LIBNOSYS = ../libnosys/libnosys.a -SIM_OBJS = \ - sbrk.o \ - heaptop.o \ - exit.o \ - open.o \ - close.o \ - read.o \ - write.o \ - lseek.o \ - unlink.o \ - getpid.o \ - kill.o \ - fstat.o \ - argvlen.o \ - argv.o \ - chdir.o \ - stat.o \ - chmod.o \ - utime.o \ - time.o \ - gettimeofday.o \ - times.o \ - link.o \ - isatty.o \ - abort.o \ - mcount.o \ - sigprocmask.o \ - sleep.o - -#### Host specific Makefile fragment comes in here. -@host_makefile_frag@ - - -# Override .S.o rule to pass assembler debugging flags -.S.o: - $(CC) -Wa,-gdwarf2 -Wa,-I$(srcdir) $(CFLAGS_FOR_TARGET) $(INCLUDES) $(CFLAGS) -c $< - -all: $(CRT) $(SIM_BSP) copy_scripts_to_objdir - -$(SIM_BSP): $(SIM_OBJS) - $(AR) $(ARFLAGS) $@ $? - $(RANLIB) $@ - -copy_scripts_to_objdir: $(SCRIPTS) - cp $(SCRIPTS) $(objdir) - -# Dependencies - -SDEPS = $(srcdir)/rxsys.h $(srcdir)/../syscall.h - -abort.o : $(SDEPS) -argv.o : $(SDEPS) -argvlen.o : $(SDEPS) -chdir.o : $(SDEPS) -chmod.o : $(SDEPS) -close.o : $(SDEPS) -exit.o : $(SDEPS) -fstat.o : $(SDEPS) -getpid.o : $(SDEPS) -gettimeofday.o : $(SDEPS) -gcrt0.o: gcrt0.S crt0.S -heaptop.o : $(SDEPS) -kill.o : $(SDEPS) -link.o : $(SDEPS) -lseek.o : $(SDEPS) -mcount.o : $(SDEPS) -open.o : $(SDEPS) -read.o : $(SDEPS) -sigprocmask.o : $(SDEPS) -sleep.o : $(SDEPS) -stat.o : $(SDEPS) -time.o : $(SDEPS) -times.o : $(SDEPS) -unlink.o : $(SDEPS) -utime.o : $(SDEPS) -write.o : $(SDEPS) - -install: $(CRT) $(SIM_BSP) $(SCRIPTS) - ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR} - for c in $(CRT) $(SIM_BSP); do \ - $(INSTALL_DATA) $$c $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$$c ;\ - done - for c in $(SCRIPTS); do \ - b=`basename $$c`; \ - $(INSTALL_DATA) $$c $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$$b ;\ - done - -clean mostlyclean: - rm -f *.o *.a - -distclean maintainer-clean realclean: clean - rm -f Makefile - -.PHONY: info dvi doc install-info clean-info -info doc dvi: -install-info: -clean-info: - -Makefile: Makefile.in ../config.status - cd .. && $(SHELL) config.status diff --git a/libgloss/rx/Makefile.inc b/libgloss/rx/Makefile.inc new file mode 100644 index 0000000000..3ca121fd75 --- /dev/null +++ b/libgloss/rx/Makefile.inc @@ -0,0 +1,54 @@ +## Copyright (c) 2008, 2009 Red Hat Inc +## +## The authors hereby grant permission to use, copy, modify, distribute, +## and license this software and its documentation for any purpose, provided +## that existing copyright notices are retained in all copies and that this +## notice is included verbatim in any distributions. No written agreement, +## license, or royalty fee is required for any of the authorized uses. +## Modifications to this software may be copyrighted by their authors +## and need not follow the licensing terms described here, provided that +## the new terms are clearly indicated on the first page of each file where +## they apply. + +multilibtool_DATA += \ + %D%/rx.ld \ + %D%/rx-sim.ld + +multilibtool_DATA += \ + %D%/gcrt0.o \ + %D%/crt0.o \ + %D%/crtn.o +libobjs_a_SOURCES += \ + %D%/gcrt0.S \ + %D%/crt0.S \ + %D%/crtn.S + +multilibtool_LIBRARIES += %D%/libsim.a +%C%_libsim_a_SOURCES = \ + %D%/sbrk.c \ + %D%/heaptop.S \ + %D%/exit.S \ + %D%/open.S \ + %D%/close.S \ + %D%/read.S \ + %D%/write.S \ + %D%/lseek.S \ + %D%/unlink.S \ + %D%/getpid.S \ + %D%/kill.S \ + %D%/fstat.S \ + %D%/argvlen.S \ + %D%/argv.S \ + %D%/chdir.S \ + %D%/stat.S \ + %D%/chmod.S \ + %D%/utime.S \ + %D%/time.S \ + %D%/gettimeofday.S \ + %D%/times.S \ + %D%/link.S \ + %D%/isatty.S \ + %D%/abort.S \ + %D%/mcount.c \ + %D%/sigprocmask.S \ + %D%/sleep.S diff --git a/libgloss/sbrk.c b/libgloss/sbrk.c index c222b4bbf2..d567a4a602 100644 --- a/libgloss/sbrk.c +++ b/libgloss/sbrk.c @@ -27,9 +27,8 @@ char *heap_ptr; * RAM. We just increment a pointer in what's * left of memory on the board. */ -char * -sbrk (nbytes) - int nbytes; +void * +sbrk (ptrdiff_t nbytes) { char *base; diff --git a/libgloss/sparc/Makefile.in b/libgloss/sparc/Makefile.in deleted file mode 100644 index 4f22cf41c1..0000000000 --- a/libgloss/sparc/Makefile.in +++ /dev/null @@ -1,289 +0,0 @@ -# Copyright (c) 1995, 1996, 1997 Cygnus Support -# -# The authors hereby grant permission to use, copy, modify, distribute, -# and license this software and its documentation for any purpose, provided -# that existing copyright notices are retained in all copies and that this -# notice is included verbatim in any distributions. No written agreement, -# license, or royalty fee is required for any of the authorized uses. -# Modifications to this software may be copyrighted by their authors -# and need not follow the licensing terms described here, provided that -# the new terms are clearly indicated on the first page of each file where -# they apply. - -# Makefile for libgloss/sparc. This is the board support -# code for the various sparc targets. - -DESTDIR = -VPATH = @srcdir@ -srcdir = @srcdir@ -objdir = . -srcroot = $(srcdir)/../.. -objroot = $(objdir)/../.. - -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -host_alias = @host_alias@ -target_alias = @target_alias@ - -bindir = @bindir@ -libdir = @libdir@ -tooldir = $(exec_prefix)/$(target_alias) - -# Multilib support variables. -# TOP is used instead of MULTI{BUILD,SRC}TOP. -MULTIDIRS = -MULTISUBDIR = -MULTIDO = true -MULTICLEAN = true - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -SHELL = /bin/sh - -mkinstalldirs = $(SHELL) $(srcroot)/mkinstalldirs - -CC = @CC@ - -AS = @AS@ -AR = @AR@ -LD = @LD@ -RANLIB = @RANLIB@ -AR_FLAGS = qrv - -OBJDUMP = `if [ -f ${objroot}/../binutils/objdump ] ; \ - then echo ${objroot}/../binutils/objdump ; \ - else t='$(program_transform_name)'; echo objdump | sed -e $$t ; fi` -OBJCOPY = `if [ -f ${objroot}/../binutils/objcopy ] ; \ - then echo ${objroot}/../binutils/objcopy ; \ - else t='$(program_transform_name)'; echo objcopy | sed -e $$t ; fi` - -CYGMON_CRT0 = cygmon-crt0.o -CYGMON_BSP = libcygmon.a -CYGMON_OBJS = cygmon-salib.o - -701_CRT0 = crt0-701.o -701_BSP = libsplet701.a -701_OBJS = sysc-701.o salib-701.o sparclet-stub.o - -930_BSP = libslite930.a -931_BSP = libslite931.a -934_BSP = libslite934.a -86X_BSP = libslite86x.a - -# for the time being, built the stub without hardware breakpoint support -SLITE_OBJS = salib.o sparcl-stub.o cache.o - -# ERC32: SIS simulator, see sim/erc32. -ERC32_CRT0 = erc32-crt0.o -ERC32_BSP = liberc32.a -ERC32_OBJS = erc32-io.o traps.o erc32-stub.o debug.o fixctors.o -ERC32_ALL = $(ERC32_CRT0) $(ERC32_BSP) - -CRT0 = crt0.o -OBJS = close.o fstat.o getpid.o isatty.o kill.o \ - lseek.o open.o print.o putnum.o read.o sbrk.o stat.o \ - unlink.o write.o - -# This is set to one of SPARC, SLITE, or SPLET by configure. -# It's not clear what to do here. -# One could certainly build everything. The assembler supports all cpu -# variants (via runtime switches). However, the compiler [currently] doesn't. -# Of course, it may be the case that there isn't any cpu specific code in -# C source files, but there might be in the future. -CPU = @SPARC_CPU@ - -# sparc stuff (not sparclite or sparclet) -SPARC_ALL = $(CYGMON_BSP) $(CYGMON_CRT0) $(objdir)/cygmon.ld -SPARC_INSTALL = sparc-install -SPARC_OBJ_FORMAT = sparc -SPARC_RAM_START = 0x4000 - -# sparc 64 stuff -SPARC64_ALL = $(CYGMON_BSP) $(CYGMON_CRT0) $(objdir)/cygmon.ld -SPARC64_INSTALL = sparc-install -SPARC64_OBJ_FORMAT = sparc:v9 -SPARC64_RAM_START = 0x4000 - -# sparclite stuff -SLITE_ALL = $(930_BSP) $(931_BSP) $(CYGMON_BSP) $(CYGMON_CRT0) $(objdir)/cygmon.ld $(934_BSP) $(86X_BSP) -SLITE_INSTALL = slite-install -SLITE_OBJ_FORMAT = sparc -SLITE_RAM_START = 0x40050000 - -# sparclet stuff -SPLET_ALL = $(701_CRT0) $(701_BSP) -SPLET_INSTALL = splet-install - -#### Host specific Makefile fragment comes in here. -@host_makefile_frag@ - -all: ${CRT0} $($(CPU)_ALL) $(ERC32_ALL) - -$(CYGMON_CRT0): cygmon-crt0.S - $(CC) $(CFLAGS_FOR_TARGET) $(CFLAGS) -DTARGET_CPU_$(CPU) $(INCLUDES) -o $@ -c $(srcdir)/cygmon-crt0.S - -$(CYGMON_BSP): $(CYGMON_OBJS) - @rm -f $@ - ${AR} ${AR_FLAGS} $@ $(CYGMON_OBJS) - ${RANLIB} $@ - -#$(STUBLIBS): $(OBJS) $(SLITE_OBJS) $(CRT0) -# ${CC} -nostdlib -r $(SLITE_OBJS) $(SHARED_OBJS) -o $(930_BSP) -# ${CC} -DSL931 -nostdlib -r $(SLITE_OBJS) $(SHARED_OBJS) -o $(931_BSP) -# ${CC} -nostdlib -r $(SLITE_OBJS) $(SHARED_OBJS) -o $(934_BSP) - -$(CRT0): $(srcdir)/crt0.S $(srcdir)/asm.h $(srcdir)/slite.h - $(CC) $(CFLAGS_FOR_TARGET) $(CFLAGS) $(INCLUDES) -o $@ -c $(srcdir)/crt0.S - -$(930_BSP) $(931_BSP) $(934_BSP) $(86X_BSP): $(OBJS) $(SLITE_OBJS) - @rm -f $@ - ${AR} ${AR_FLAGS} $@ $(OBJS) $(SLITE_OBJS) - ${RANLIB} $@ - -$(701_BSP): $(701_OBJS) - @rm -f $@ - ${AR} ${AR_FLAGS} $@ $(701_OBJS) - ${RANLIB} $@ - -erc32-crt0.o: $(srcdir)/erc32-crt0.S $(srcdir)/asm.h $(srcdir)/slite.h - $(CC) $(CFLAGS_FOR_TARGET) $(CFLAGS) $(INCLUDES) -o $@ -c $(srcdir)/erc32-crt0.S - -liberc32.a: $(OBJS) $(ERC32_OBJS) - @rm -f $@ - ${AR} ${AR_FLAGS} $@ $(OBJS) $(ERC32_OBJS) - ${RANLIB} $@ - -crt0-701.o: crt0-701.S -sysc-701.o: sysc-701.c -salib-701.o: salib-701.c -sparclet-stub.o: sparclet-stub.c -cygmon-salib.o: cygmon-salib.c - $(CC) -DTARGET_CPU_$(CPU) $(CFLAGS_FOR_TARGET) $(CFLAGS) $(INCLUDES) -o $@ -c $(srcdir)/cygmon-salib.c -cache.o: $(srcdir)/cache.c -salib.o: $(srcdir)/salib.c -win.o: $(srcdir)/win.S -syscalls.o: $(srcdir)/syscalls.c -sparcl-stub.o: $(srcdir)/sparcl-stub.c $(srcdir)/../debug.h $(srcdir)/../debug.c -erc32-stub.o: $(srcdir)/erc32-stub.c $(srcdir)/../debug.h $(srcdir)/../debug.c -fixctors.o : $(srcdir)/fixctors.c - -$(objdir)/cygmon.ld: @SPARC_CYGMONLDSCRIPTTEMPL@ - sed 's/TARGET_OBJ_FORMAT/$($(CPU)_OBJ_FORMAT)/g;s/TARGET_RAM_START/$($(CPU)_RAM_START)/g;' < $(<) > $(objdir)/cygmon.ld - -install: $($(CPU)_INSTALL) - ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR} - $(INSTALL_DATA) $(CRT0) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$(CRT0) - -sparc-install: - ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR} - $(INSTALL_DATA) $(CYGMON_BSP) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR} - $(INSTALL_DATA) $(CYGMON_OBJS) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR} - $(INSTALL_DATA) $(objdir)/cygmon.ld $(DESTDIR)$(tooldir)/lib${MULTISUBDIR} - $(INSTALL_DATA) $(CYGMON_CRT0) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR} - -slite-install: - ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR} - $(INSTALL_DATA) $(930_BSP) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$(930_BSP) - $(INSTALL_DATA) $(931_BSP) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$(931_BSP) - $(INSTALL_DATA) $(934_BSP) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$(934_BSP) - $(INSTALL_DATA) $(86X_BSP) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$(86X_BSP) - $(INSTALL_DATA) $(srcdir)/ex930.ld $(DESTDIR)$(tooldir)/lib${MULTISUBDIR} - $(INSTALL_DATA) $(srcdir)/ex931.ld $(DESTDIR)$(tooldir)/lib${MULTISUBDIR} - $(INSTALL_DATA) $(srcdir)/ex934.ld $(DESTDIR)$(tooldir)/lib${MULTISUBDIR} - $(INSTALL_DATA) $(srcdir)/sparc86x.ld $(DESTDIR)$(tooldir)/lib${MULTISUBDIR} - $(INSTALL_DATA) $(srcdir)/elfsim.ld $(DESTDIR)$(tooldir)/lib${MULTISUBDIR} - $(INSTALL_DATA) $(ERC32_CRT0) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR} - $(INSTALL_DATA) $(ERC32_BSP) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR} - $(INSTALL_DATA) $(objdir)/traps.o $(DESTDIR)$(tooldir)/lib${MULTISUBDIR} - $(INSTALL_DATA) $(CYGMON_BSP) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR} - $(INSTALL_DATA) $(CYGMON_OBJS) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR} - $(INSTALL_DATA) $(objdir)/cygmon.ld $(DESTDIR)$(tooldir)/lib${MULTISUBDIR} - $(INSTALL_DATA) $(CYGMON_CRT0) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR} - -splet-install: - ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR} - $(INSTALL_DATA) $(701_CRT0) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$(701_CRT0) - $(INSTALL_DATA) $(701_BSP) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$(701_BSP) - $(INSTALL_DATA) $(srcdir)/tsc701.ld $(DESTDIR)$(tooldir)/lib${MULTISUBDIR} - -# Make a simple test case to test the linker script, startup code, and -# I/O code -# -test: ex930-test.x ex931-test.x erc32-test.x - @echo Done... - -# compile a fully linked binary. The -N option is for a.out, so the -# base address will be zero, rather than the default of 0x2020. The -# -Wl,-T*.ld is for the linker script. By using -Wl, the linker script -# is put on the proper place in the comand line for ld, and all the -# symbols will get fully resolved. - -erc32-test.x: test.o ${ERC32_CRT0} ${srcdir}/erc32.ld Makefile ${ERC32_BSP} - ${CC} -L${srcdir} -L${objdir} test.o -o $@ $(LDFLAGS_FOR_TARGET) \ - -N -Wl,-Terc32.ld -Wl,-Map -Wl,erc32.map -nostdlib -erc32-test.srec: erc32-test.x - $(OBJCOPY) -O srec erc32-test.x $@ -erc32-test.dis: erc32-test.x - @rm -fr erc32-test.dis - $(OBJDUMP) -d erc32-test.x > $@ -erc32-test: erc32-test.srec erc32-test.dis - -ex930-test.x: test.o ${CRT0} ${srcdir}/ex930.ld Makefile ${930_BSP} - ${CC} -L${srcdir} -L${objdir} test.o -o $@ $(LDFLAGS_FOR_TARGET) \ - -N -Wl,-Tex930.ld -nostdlib -ex930-test.srec: ex930-test.x - $(OBJCOPY) -O srec ex930-test.x $@ -ex930-test.dis: ex930-test.x - @rm -fr ex930-test.dis - $(OBJDUMP) -d ex930-test.x > $@ -ex930-test: ex930-test.srec ex930-test.dis - -ex931-test.x: test.o ${CRT0} ${srcdir}/ex931.ld Makefile ${931_BSP} - ${CC} -L${srcdir} -L${objdir} test.o -o $@ $(LDFLAGS_FOR_TARGET) \ - -N -Wl,-Tex931.ld -nostdlib -ex931-test.srec: ex931-test.x - $(OBJCOPY) -O srec ex931-test.x $@ -ex931-test.dis: ex931-test.x - @rm -fr ex931-test.dis - $(OBJDUMP) -d ex931-test.x > $@ -ex931-test: ex931-test.srec ex931-test.dis - -ex934-test.x: test.o ${CRT0} ${srcdir}/ex934.ld Makefile ${934_BSP} - ${CC} -L${srcdir} -L${objdir} test.o -o $@ $(LDFLAGS_FOR_TARGET) \ - -N -Wl,-Tex934.ld -nostdlib -ex934-test.srec: ex934-test.x - $(OBJCOPY) -O srec ex934-test.x $@ -ex934-test.dis: ex934-test.x - @rm -fr ex934-test.dis - $(OBJDUMP) -d ex934-test.x > $@ -ex934-test: ex934-test.srec ex934-test.dis - -# a C++ test case -dtor.o: $(srcdir)/dtor.C - $(CC) $(CFLAGS_FOR_TARGET) $(INCLUDES) -o $@ -c $? -dtor.dis: dtor.x - @rm -fr dtor.dis - $(OBJDUMP) -d dtor.x > $@ -dtor.x: dtor.o ${ERC32_CRT0} ${srcdir}/erc32.ld Makefile ${ERC32_BSP} - ${CC} -L${srcdir} -L${objdir} dtor.o -o $@ $(LIBS_FOR_TARGET) \ - -N -Wl,-Terc32.ld - -# target specific makefile fragment comes in here. -@target_makefile_frag@ - -clean mostlyclean: - rm -f *.o *.a *.map *.x - -distclean maintainer-clean realclean: clean - rm -f Makefile - -.PHONY: info dvi doc install-info clean-info -info doc dvi: -install-info: -clean-info: - -Makefile: Makefile.in ../config.status - cd .. && $(SHELL) config.status diff --git a/libgloss/sparc/Makefile.inc b/libgloss/sparc/Makefile.inc new file mode 100644 index 0000000000..707c064285 --- /dev/null +++ b/libgloss/sparc/Makefile.inc @@ -0,0 +1,141 @@ +## Copyright (c) 1995, 1996, 1997 Cygnus Support +## +## The authors hereby grant permission to use, copy, modify, distribute, +## and license this software and its documentation for any purpose, provided +## that existing copyright notices are retained in all copies and that this +## notice is included verbatim in any distributions. No written agreement, +## license, or royalty fee is required for any of the authorized uses. +## Modifications to this software may be copyrighted by their authors +## and need not follow the licensing terms described here, provided that +## the new terms are clearly indicated on the first page of each file where +## they apply. + +## This is set to one of SPARC, SLITE, or SPLET by configure. +## It's not clear what to do here. +## One could certainly build everything. The assembler supports all cpu +## variants (via runtime switches). However, the compiler [currently] doesn't. +## Of course, it may be the case that there isn't any cpu specific code in +## C source files, but there might be in the future. +AM_CPPFLAGS_%C% = -DTARGET_CPU_$(SPARC_CPU) + +multilibtool_DATA += %D%/crt0.o +libobjs_a_SOURCES += %D%/crt0.S + +## Used by some libs. +%C%_common_stub_sources = \ + close.c \ + fstat.c \ + getpid.c \ + isatty.c \ + kill.c \ + lseek.c \ + open.c \ + print.c \ + putnum.c \ + read.c \ + sbrk.c \ + stat.c \ + unlink.c \ + write.c + +## ERC32: SIS simulator, see sim/erc32. +multilibtool_DATA += %D%/erc32-crt0.o +libobjs_a_SOURCES += %D%/erc32-crt0.S +multilibtool_LIBRARIES += %D%/liberc32.a +%C%_liberc32_a_SOURCES = \ + $(%C%_common_stub_sources) \ + %D%/erc32-io.c \ + %D%/traps.S \ + %D%/erc32-stub.c \ + debug.c \ + %D%/fixctors.c + +if SPARC_BUILD_CYGMON +## sparc stuff (not sparclite or sparclet). +%C%_SPARC_OBJ_FORMAT = sparc +%C%_SPARC_RAM_START = 0x4000 + +## sparc 64 stuff. +%C%_SPARC64_OBJ_FORMAT = sparc:v9 +%C%_SPARC64_RAM_START = 0x4000 + +## sparclite stuff. +%C%_SLITE_OBJ_FORMAT = sparc +%C%_SLITE_RAM_START = 0x40050000 + +multilibtool_DATA += %D%/cygmon.ld +%D%/cygmon.ld: $(srcdir)/%D%/@SPARC_CYGMONLDSCRIPTTEMPL@ %D%/Makefile.inc + $(AM_V_GEN)sed 's/TARGET_OBJ_FORMAT/$(%C%_$(SPARC_CPU)_OBJ_FORMAT)/g;s/TARGET_RAM_START/$(%C%_$(SPARC_CPU)_RAM_START)/g;' < $< > $@ + +multilibtool_DATA += %D%/cygmon-crt0.o +libobjs_a_SOURCES += %D%/cygmon-crt0.S +multilibtool_LIBRARIES += %D%/libcygmon.a +%C%_libcygmon_a_SOURCES = \ + %D%/cygmon-salib.c +multilibtool_DATA += %D%/cygmon-salib.o +endif + +if SPARC_BUILD_SLITE +multilibtool_DATA += \ + %D%/ex930.ld \ + %D%/ex931.ld \ + %D%/ex934.ld \ + %D%/sparc86x.ld \ + %D%/elfsim.ld \ + %D%/traps.o + +## For the time being, built the stub without hardware breakpoint support. +multilibtool_LIBRARIES += \ + %D%/libslite930.a \ + %D%/libslite931.a \ + %D%/libslite934.a \ + %D%/libslite86x.a +%C%_libslite930_a_SOURCES = \ + $(%C%_common_stub_sources) \ + %D%/salib.c \ + %D%/sparcl-stub.c \ + %D%/cache.c +%C%_libslite931_a_SOURCES = $(%C%_libslite930_a_SOURCES) +%C%_libslite934_a_SOURCES = $(%C%_libslite930_a_SOURCES) +%C%_libslite86x_a_SOURCES = $(%C%_libslite930_a_SOURCES) +endif + +if SPARC_BUILD_SPLET +multilibtool_DATA += %D%/tsc701.ld + +multilibtool_DATA += %D%/crt0-701.S +libobjs_a_SOURCES += %D%/crt0-701.S + +multilibtool_LIBRARIES += %D%/libsplet701.a +%C%_libsplet701_a_SOURCES = \ + %D%/sysc-701.c \ + %D%/salib-701.c \ + %D%/sparclet-stub.c +endif + +## Compile a fully linked binary. The -N option is for a.out, so the +## base address will be zero, rather than the default of 0x2020. The +## -Wl,-T*.ld is for the linker script. By using -Wl, the linker script +## is put on the proper place in the comand line for ld, and all the +## symbols will get fully resolved. + +check_PROGRAMS += %D%/erc32-test +%C%_erc32_test_SOURCES = %D%/test.c +AM_LDFLAGS_%C%_erc32_test = -N -Wl,-T$(srcdir)/%D%/elfsim.ld -Wl,-Map,$@.map -nostdlib + +check_PROGRAMS += %D%/ex930-test +%C%_ex930_test_SOURCES = %D%/test.c +AM_LDFLAGS_%C%_ex930_test = -N -Wl,-T$(srcdir)/%D%/ex930.ld -nostdlib + +check_PROGRAMS += %D%/ex931-test +%C%_ex931_test_SOURCES = %D%/test.c +AM_LDFLAGS_%C%_ex931_test = -N -Wl,-T$(srcdir)/%D%/ex931.ld -nostdlib + +check_PROGRAMS += %D%/ex934-test +%C%_ex934_test_SOURCES = %D%/test.c +AM_LDFLAGS_%C%_ex934_test = -N -Wl,-T$(srcdir)/%D%/ex934.ld -nostdlib + +## A C++ test case. +# check_PROGRAMS += %D%/dtor +# %C%_ex934_test_SOURCES = %D%/dtor.C +# %C%_ex934_test_LDFLAGS = $(AM_LDFLAGS) -N -Wl,-T$(srcdir)/%D%/elfsim.ld -nostdlib diff --git a/libgloss/sparc/acinclude.m4 b/libgloss/sparc/acinclude.m4 index bba852b9a8..3a79701104 100644 --- a/libgloss/sparc/acinclude.m4 +++ b/libgloss/sparc/acinclude.m4 @@ -1,15 +1,19 @@ SPARC_CPU=SPARC +SPARC_BUILD_CYGMON=true case ${target_cpu} in sparclite*) SPARC_CPU=SLITE ;; -sparclet*) SPARC_CPU=SPLET ;; +sparclet*) SPARC_CPU=SPLET SPARC_BUILD_CYGMON=false ;; sparc64*) SPARC_CPU=SPARC64 ;; sparc86x*) SPARC_CPU=SLITE ;; esac AC_SUBST(SPARC_CPU) +AM_CONDITIONAL([SPARC_BUILD_CYGMON], [$SPARC_BUILD_CYGMON]) +AM_CONDITIONAL([SPARC_BUILD_SPLET], [test "$SPARC_CPU" = "SPLET"]) +AM_CONDITIONAL([SPARC_BUILD_SLITE], [test "$SPARC_CPU" = "SLITE"]) -SPARC_CYGMONLDSCRIPTTEMPL=${srcdir}/sparc/cygmon.ld.src +SPARC_CYGMONLDSCRIPTTEMPL=cygmon.ld.src case ${target_cpu} in -sparc64*) SPARC_CYGMONLDSCRIPTTEMPL=${srcdir}/sparc/cygmon-sparc64-ld.src ;; -sparclet-*-aout*) SPARC_CYGMONLDSCRIPTTEMPL=${srcdir}/sparc/cygmon.ld.src; AC_CONFIG_FILES([sparc/libsys/Makefile]) ;; +sparc64*) SPARC_CYGMONLDSCRIPTTEMPL=cygmon-sparc64-ld.src ;; +sparclet-*-aout*) SPARC_CYGMONLDSCRIPTTEMPL=cygmon.ld.src; AC_CONFIG_FILES([sparc/libsys/Makefile]) ;; esac AC_SUBST(SPARC_CYGMONLDSCRIPTTEMPL) diff --git a/libgloss/sparc/crt0.S b/libgloss/sparc/crt0.S index 501abf8ed9..4118086041 100644 --- a/libgloss/sparc/crt0.S +++ b/libgloss/sparc/crt0.S @@ -103,7 +103,7 @@ copyloop: /* - * Move the data segment from it's ROM address to RAM where it + * Move the data segment from its ROM address to RAM where it * belongs. */ diff --git a/libgloss/sparc/sparc-stub.c b/libgloss/sparc/sparc-stub.c index fa21d72cdb..675737341c 100644 --- a/libgloss/sparc/sparc-stub.c +++ b/libgloss/sparc/sparc-stub.c @@ -4,7 +4,7 @@ THIS SOFTWARE IS NOT COPYRIGHTED HP offers the following for use in the public domain. HP makes no - warranty with regard to the software or it's performance and the + warranty with regard to the software or its performance and the user accepts the software "AS IS" with all faults. HP DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, WITH REGARD diff --git a/libgloss/sparc/sparcl-stub.c b/libgloss/sparc/sparcl-stub.c index 634878bd7e..960e1a6660 100644 --- a/libgloss/sparc/sparcl-stub.c +++ b/libgloss/sparc/sparcl-stub.c @@ -3,7 +3,7 @@ THIS SOFTWARE IS NOT COPYRIGHTED HP offers the following for use in the public domain. HP makes no - warranty with regard to the software or it's performance and the + warranty with regard to the software or its performance and the user accepts the software "AS IS" with all faults. HP DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, WITH REGARD diff --git a/libgloss/sparc/sparclet-stub.c b/libgloss/sparc/sparclet-stub.c index a462128304..e7dfebadfb 100644 --- a/libgloss/sparc/sparclet-stub.c +++ b/libgloss/sparc/sparclet-stub.c @@ -3,7 +3,7 @@ THIS SOFTWARE IS NOT COPYRIGHTED HP offers the following for use in the public domain. HP makes no - warranty with regard to the software or it's performance and the + warranty with regard to the software or its performance and the user accepts the software "AS IS" with all faults. HP DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, WITH REGARD diff --git a/libgloss/sparc_leon/Makefile.in b/libgloss/sparc_leon/Makefile.in deleted file mode 100644 index d914009f13..0000000000 --- a/libgloss/sparc_leon/Makefile.in +++ /dev/null @@ -1,161 +0,0 @@ -# Makefile for libgloss/sparc_leon. This is the board support -# code for the various sparc leon targets. - -DESTDIR = -VPATH = @srcdir@ -srcdir = @srcdir@ -objdir = . -srcroot = $(srcdir)/../.. -objroot = $(objdir)/../.. - -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -host_alias = @host_alias@ -target_alias = @target_alias@ - -bindir = @bindir@ -libdir = @libdir@ -tooldir = $(exec_prefix)/$(target_alias) -mkinstalldirs = $(SHELL) $(srcroot)/mkinstalldirs - -# Multilib support variables. -# TOP is used instead of MULTI{BUILD,SRC}TOP. -MULTIDIRS = -MULTISUBDIR = -MULTIDO = true -MULTICLEAN = true - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -SHELL = /bin/sh - -mkinstalldirs = $(SHELL) $(srcroot)/mkinstalldirs - -CC = @CC@ - -AS = @AS@ -AR = @AR@ -LD = @LD@ -RANLIB = @RANLIB@ -AR_FLAGS = qrv - -OBJDUMP = `if [ -f ${objroot}/../binutils/objdump ] ; \ - then echo ${objroot}/../binutils/objdump ; \ - else t='$(program_transform_name)'; echo objdump | sed -e $$t ; fi` -OBJCOPY = `if [ -f ${objroot}/../binutils/objcopy ] ; \ - then echo ${objroot}/../binutils/objcopy ; \ - else t='$(program_transform_name)'; echo objcopy | sed -e $$t ; fi` - -LEON_BSP = libleonbare.a -LEON_OBJS = etrap.o rtrap.o etrap_fast.o rtrap_fast.o irqinstall.o regwin.o \ - regwinflush.o fpu.o bdinit.o contextswitch.o \ - busscan.o irqtrap_fast.o catch_interrupt.o catch_interrupt_svt.o \ - catch_interrupt_mvt.o catch_interrupt_pending.o gettimeofday.o \ - times.o rtc.o lcpuinit.o console_init.o console.o console_dbg.o \ - contextswitch.o contextswitch_asm.o _exit.o amba.o amba_dbg.o \ - amba_scan.o amba_driver.o timer.o mutex.o locore.o locore_clean.o \ - locore_var.o locore_var_svt.o jiffies.o \ - mmu_asm.o locore_svtdisp.o locore_mvt_reset.o locore_svt_reset.o stop.o initcalls.o \ - regwin_patch.o cacheA.o nocache.o - -LEONBARE_THREADS = liblbthread.a -LEONBARE_THREADS_OBJS = kernel.o kernel_debug.o kernel_debug_var.o kernel_context.o \ - kernel_mutex.o kernel_thread.o kernel_sched.o kernel_queue.o \ - kernel_mm.o - -LOCOREATEXIT = locore_atexit.o -LEON_SMALLC = libsmall.a - -PNP=pnpinit.o -PNP_S=pnpinit_simple.o -LEON_ALL = $(LEON_BSP) $(LEON_SMALLC) $(LEONBARE_THREADS) $(PNP) $(PNP_S) crti.o crtn.o - -LOCORESVT = locore_svt.o -LOCOREMVT = locore_mvt.o -CRT0 = crt0.o -OBJS = close.o fstat.o getpid.o isatty.o kill.o \ - lseek.o open.o print.o putnum.o read.o sbrk.o stat.o \ - unlink.o write.o io.o kernel.o kernel_debug.o kernel_debug_var.o kernel_context.o -#link.o - -#### Host specific Makefile fragment comes in here. -@host_makefile_frag@ - -all: stmp-targ-include $(CRT0) $(LOCOREMVT) $(LOCORESVT) $(LEON_ALL) - -$(CRT0): $(srcdir)/crt0.S - $(CC) $(CFLAGS_FOR_TARGET) $(CFLAGS) $(INCLUDES) -o $@ -c $(srcdir)/crt0.S - -$(LEON_BSP): $(OBJS) $(LEON_OBJS) - @rm -f $@ - ${AR} ${AR_FLAGS} $@ $(OBJS) $(LEON_OBJS) - ${RANLIB} $@ - -$(LEON_SMALLC): $(LOCOREATEXIT) - @rm -f $@ - ${AR} ${AR_FLAGS} $@ $(LOCOREATEXIT) - ${RANLIB} $@ - -$(LEONBARE_THREADS): $(LEONBARE_THREADS_OBJS) - @rm -f $@ - ${AR} ${AR_FLAGS} $@ $(LEONBARE_THREADS_OBJS) - ${RANLIB} $@ - -install: - ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR} - $(INSTALL_DATA) $(CRT0) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$(CRT0) - $(INSTALL_DATA) $(LOCORESVT) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$(LOCORESVT) - $(INSTALL_DATA) $(LOCOREMVT) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$(LOCOREMVT) - $(INSTALL_DATA) $(PNP) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$(PNP) - $(INSTALL_DATA) $(PNP_S) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$(PNP_S) - $(INSTALL_DATA) $(LEON_BSP) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$(LEON_BSP) - $(INSTALL_DATA) $(LEON_SMALLC) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$(LEON_SMALLC) - $(INSTALL_DATA) $(LEONBARE_THREADS) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$(LEONBARE_THREADS) - if [ -z "$(MULTISUBDIR)" ]; then \ - $(mkinstalldirs) $(DESTDIR)$(tooldir)/include/asm-leon; \ - for i in $(srcdir)/asm-leon/*.h; do \ - if [ -f $$i ]; then \ - $(INSTALL_DATA) $$i $(DESTDIR)$(tooldir)/include/asm-leon/`basename $$i` || exit $$?; \ - else true; fi ; \ - done; \ - else true; fi - -stmp-targ-include: $(srcdir)/asm-leon/* - if [ -d ${objroot}/newlib/targ-include/asm-leon ]; then \ - rm -rf ${objroot}/newlib/targ-include/asm-leon; \ - else true; fi ; \ - if [ -d ${objroot}/newlib/targ-include ]; then \ - cp -r $(srcdir)/asm-leon ${objroot}/newlib/targ-include/asm-leon; \ - else true; fi ; \ - touch $@ - -all-recursive: stmp-targ-include - -# Make a simple test case to test the linker script, startup code, and -# I/O code -# -test: - @echo Done... - -# target specific makefile fragment comes in here. -# @target_makefile_frag@ - -clean mostlyclean: - rm -f *.o *.a *.map *.x - -distclean maintainer-clean realclean: clean - rm -f Makefile config.cache config.log config.status - -.PHONY: info dvi doc install-info clean-info -info doc dvi: -install-info: -clean-info: - -# target specific makefile fragment comes in here. -@target_makefile_frag@ - -Makefile: Makefile.in ../config.status - cd .. && $(SHELL) config.status diff --git a/libgloss/sparc_leon/Makefile.inc b/libgloss/sparc_leon/Makefile.inc new file mode 100644 index 0000000000..0b102fc32f --- /dev/null +++ b/libgloss/sparc_leon/Makefile.inc @@ -0,0 +1,107 @@ +AM_CPPFLAGS_%C% = -I$(srcdir)/%D% + +multilibtool_LIBRARIES += %D%/libleonbare.a +%C%_libleonbare_a_SOURCES = \ + close.c \ + fstat.c \ + getpid.c \ + isatty.c \ + kill.c \ + lseek.c \ + open.c \ + print.c \ + putnum.c \ + read.c \ + sbrk.c \ + stat.c \ + unlink.c \ + write.c \ + %D%/io.c \ + %D%/kernel.c \ + %D%/kernel_debug.c \ + %D%/kernel_debug_var.c \ + %D%/kernel_context.S \ + %D%/etrap.S \ + %D%/rtrap.S \ + %D%/etrap_fast.S \ + %D%/rtrap_fast.S \ + %D%/irqinstall.S \ + %D%/regwin.S \ + %D%/regwinflush.S \ + %D%/fpu.S \ + %D%/bdinit.S \ + %D%/contextswitch.c \ + %D%/busscan.S \ + %D%/irqtrap_fast.S \ + %D%/catch_interrupt.c \ + %D%/catch_interrupt_svt.c \ + %D%/catch_interrupt_mvt.c \ + %D%/catch_interrupt_pending.c \ + %D%/gettimeofday.c \ + %D%/times.c \ + %D%/rtc.c \ + %D%/lcpuinit.S \ + %D%/console_init.c \ + %D%/console.c \ + %D%/console_dbg.c \ + %D%/contextswitch.c \ + %D%/contextswitch_asm.S \ + %D%/_exit.c \ + %D%/amba.c \ + %D%/amba_dbg.c \ + %D%/amba_scan.c \ + %D%/amba_driver.c \ + %D%/timer.c \ + %D%/mutex.c \ + %D%/locore.S \ + %D%/locore_clean.S \ + %D%/locore_var.S \ + %D%/locore_var_svt.S \ + %D%/jiffies.c \ + %D%/mmu_asm.S \ + %D%/locore_svtdisp.S \ + %D%/locore_mvt_reset.S \ + %D%/locore_svt_reset.S \ + %D%/stop.S \ + %D%/initcalls.c \ + %D%/regwin_patch.c \ + %D%/cacheA.S \ + %D%/nocache.S + +multilibtool_LIBRARIES += %D%/liblbthread.a +%C%_liblbthread_a_SOURCES = \ + %D%/kernel.c \ + %D%/kernel_debug.c \ + %D%/kernel_debug_var.c \ + %D%/kernel_context.S \ + %D%/kernel_mutex.c \ + %D%/kernel_thread.c \ + %D%/kernel_sched.c \ + %D%/kernel_queue.c \ + %D%/kernel_mm.c + +multilibtool_LIBRARIES += %D%/libsmall.a +%C%_libsmall_a_SOURCES = \ + %D%/locore_atexit.c + +multilibtool_DATA += \ + %D%/crt0.o \ + %D%/pnpinit.o \ + %D%/pnpinit_simple.o \ + %D%/locore_svt.o \ + %D%/locore_mvt.o +libobjs_a_SOURCES += \ + %D%/crt0.S \ + %D%/pnpinit.c \ + %D%/pnpinit_simple.c \ + %D%/locore_svt.S \ + %D%/locore_mvt.S + +## Isn't actually installed anywhere? +## multilibtool_DATA += %D%/crti.o %D%/crtn.o +## libobjs_a_SOURCES += %D%/crti.S %D%/crtn.S + +if !HAVE_MULTISUBDIR +includetoolasmleondir = $(includetooldir)/asm-leon +includetoolasmleon_DATA = $(wildcard $(srcdir)/%D%/asm-leon/*.h) +endif diff --git a/libgloss/sparc_leon/kernel_sched.c b/libgloss/sparc_leon/kernel_sched.c index 2b485c0fe3..9d625ce9eb 100644 --- a/libgloss/sparc_leon/kernel_sched.c +++ b/libgloss/sparc_leon/kernel_sched.c @@ -55,7 +55,7 @@ leonbare_sched () LEONBARE_KR_CURRENT = new; /* to be able to programm symetrically on kernel level each thread - saves it's spinlock on mutexes and kernel and irq flags in its + saves its spinlock on mutexes and kernel and irq flags in its own save region. On a kernel switch they are released until the thread is reawakened. Then the locks will be reaquired (and finally released when the codeblock exits). The locking can be recursive. */ diff --git a/libgloss/sparc_leon/mutex.c b/libgloss/sparc_leon/mutex.c index eb2c2996d4..3f51fead31 100644 --- a/libgloss/sparc_leon/mutex.c +++ b/libgloss/sparc_leon/mutex.c @@ -23,9 +23,13 @@ */ +#define pthread_mutex_t pthread_mutex_t_ +#define pthread_mutexattr_t pthread_mutexattr_t_ #include #include #include +#undef pthread_mutex_t +#undef pthread_mutexattr_t /*#include */ typedef int pthread_protocol_t; diff --git a/libgloss/spu/Makefile.in b/libgloss/spu/Makefile.in index bc8768baf1..4be0783b98 100644 --- a/libgloss/spu/Makefile.in +++ b/libgloss/spu/Makefile.in @@ -95,7 +95,7 @@ AR_FLAGS = qc .C.o: $(CC) $(CFLAGS_FOR_TARGET) -O2 $(INCLUDES) -c $(CFLAGS) $< .s.o: - $(AS) $(ASFLAGS_FOR_TARGET) $(INCLUDES) $(ASFLAGS) -o $*.o $< + $(AS) $(ASFLAGS_FOR_TARGET) $(ASFLAGS) -o $*.o $< # # GCC knows to run the preprocessor on .S files before it assembles them. diff --git a/libgloss/testsuite/libgloss.all/Makefile.in b/libgloss/testsuite/libgloss.all/Makefile.in index fcade79988..f33243d86d 100644 --- a/libgloss/testsuite/libgloss.all/Makefile.in +++ b/libgloss/testsuite/libgloss.all/Makefile.in @@ -10,7 +10,7 @@ SHELL = /bin/sh SUPPORT=support.o # -# to add a new test, put it's name here, and list the objects +# to add a new test, put its name here, and list the objects # required too. TESTS= misc.x float.x io.x memory.x double.x math.x func.x div.x \ printf.x varargs.x varargs2.x array.x struct.x misc.x diff --git a/libgloss/tic6x/Makefile.in b/libgloss/tic6x/Makefile.in deleted file mode 100644 index 976babab4f..0000000000 --- a/libgloss/tic6x/Makefile.in +++ /dev/null @@ -1,126 +0,0 @@ -# -# - -DESTDIR = -VPATH = @srcdir@ @srcdir@/.. -srcdir = @srcdir@ -objdir = . -srcroot = $(srcdir)/../.. -objroot = $(objdir)/../.. - -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -host_alias = @host_alias@ -target_alias = @target_alias@ - -bindir = @bindir@ -libdir = @libdir@ -tooldir = $(exec_prefix)/$(target_alias) - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -# Multilib support variables. -# TOP is used instead of MULTI{BUILD,SRC}TOP. -MULTIDIRS = -MULTISUBDIR = - -SHELL = /bin/sh - -mkinstalldirs = $(SHELL) $(srcroot)/mkinstalldirs - -CC = @CC@ - -AS = @AS@ -AR = @AR@ -LD = @LD@ -RANLIB = @RANLIB@ - -OBJDUMP = `if [ -f ${objroot}/../binutils/objdump ] ; \ - then echo ${objroot}/../binutils/objdump ; \ - else t='$(program_transform_name)'; echo objdump | sed -e $$t ; fi` -OBJCOPY = `if [ -f ${objroot}/../binutils/objcopy ] ; \ - then echo ${objroot}/../binutils/objcopy ; \ - else t='$(program_transform_name)'; echo objcopy | sed -e $$t ; fi` - -CFLAGS = -g -SCRIPTS = - -# Here is all of the simulator stuff -SIM_SCRIPTS = -SIM_LDFLAGS = -SIM_BSP = libsim.a -SIM_CRT0 = crt0.o -SIM_OBJS = sbrk.o putnum.o getpid.o kill.o syscalls.o -SIM_TEST = sim-test -SIM_INSTALL = install-sim - -# Host specific makefile fragment comes in here. -@host_makefile_frag@ - -# -# build a test program for each target board. Just trying to get -# it to link is a good test, so we ignore all the errors for now. -# -all: ${SIM_CRT0} ${SIM_BSP} - -# -# here's where we build the board support packages for each target -# -${SIM_BSP}: ${OBJS} ${SIM_OBJS} - ${AR} ${ARFLAGS} ${SIM_BSP} ${SIM_OBJS} ${OBJS} - ${RANLIB} ${SIM_BSP} - - -# -# here's where we build the test programs for each target -# -.PHONY: test -test: ${SIM_TEST} - -sim-test: sim-test.x sim-test.dis - -sim-test.x: test.o ${SIM_CRT0} ${SIM_BSP} - ${CC} ${LDFLAGS_FOR_TARGET} -L${objdir} \ - ${SIM_CRT0} test.o \ - -o sim-test.x ${LIBS_FOR_TARGET} -lc ${SIM_BSP} - -sim-test.dis: sim-test.x - ${OBJDUMP} -d sim-test.x > sim-test.dis - - -# -# -# -.c.S: - ${CC} ${CFLAGS_FOR_TARGET} -c $< - -clean mostlyclean: - rm -f a.out core *.i *.o *-test *.srec *.dis *.x $(SIM_BSP) - -distclean maintainer-clean realclean: clean - rm -f Makefile *~ - -.PHONY: install info install-info clean-info -install: ${SIM_INSTALL} - -install-sim: - ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR} - set -e;\ - for x in ${SIM_CRT0} ${SIM_BSP}; do\ - ${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x;\ - done - for x in ${SIM_SCRIPTS}; do\ - ${INSTALL_DATA} ${srcdir}/$${x} $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; \ - done - - -doc: -info: -install-info: -clean-info: - -Makefile: Makefile.in ../config.status - cd .. && $(SHELL) config.status diff --git a/libgloss/tic6x/Makefile.inc b/libgloss/tic6x/Makefile.inc new file mode 100644 index 0000000000..0516cab546 --- /dev/null +++ b/libgloss/tic6x/Makefile.inc @@ -0,0 +1,10 @@ +multilibtool_DATA += %D%/crt0.o +libobjs_a_SOURCES += %D%/crt0.S + +multilibtool_LIBRARIES += %D%/libsim.a +%C%_libsim_a_SOURCES = \ + %D%/sbrk.c \ + putnum.c \ + %D%/getpid.c \ + %D%/kill.c \ + %D%/syscalls.c diff --git a/libgloss/tic6x/kill.c b/libgloss/tic6x/kill.c index 98cd3c40ea..af0afa7610 100644 --- a/libgloss/tic6x/kill.c +++ b/libgloss/tic6x/kill.c @@ -15,6 +15,8 @@ #include <_ansi.h> #define __MYPID 1 +#include + /* * kill -- go out via exit... */ diff --git a/libgloss/unlink.c b/libgloss/unlink.c index 76c1a4feff..af06c51d72 100644 --- a/libgloss/unlink.c +++ b/libgloss/unlink.c @@ -20,7 +20,7 @@ * we just return an error. */ int -unlink (char * path) +unlink (const char * path) { errno = EIO; return (-1); diff --git a/libgloss/v850/Makefile.in b/libgloss/v850/Makefile.in deleted file mode 100644 index dd507be595..0000000000 --- a/libgloss/v850/Makefile.in +++ /dev/null @@ -1,151 +0,0 @@ -# Copyright (c) 2002 Red Hat, Inc -# -# The authors hereby grant permission to use, copy, modify, distribute, -# and license this software and its documentation for any purpose, provided -# that existing copyright notices are retained in all copies and that this -# notice is included verbatim in any distributions. No written agreement, -# license, or royalty fee is required for any of the authorized uses. -# Modifications to this software may be copyrighted by their authors -# and need not follow the licensing terms described here, provided that -# the new terms are clearly indicated on the first page of each file where -# they apply. - -# Makefile for libgloss/frv. This is the board support -# code for the various frv targets. - -DESTDIR = -VPATH = @srcdir@ @srcdir@/.. -srcdir = @srcdir@ -objdir = . -srcroot = $(srcdir)/../.. -objroot = $(objdir)/../.. - -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -host_alias = @host_alias@ -target_alias = @target_alias@ - -bindir = @bindir@ -libdir = @libdir@ -tooldir = $(exec_prefix)/$(target_alias) - -# Multilib support variables. -# TOP is used instead of MULTI{BUILD,SRC}TOP. -MULTIDIRS = -MULTISUBDIR = -MULTIDO = true -MULTICLEAN = true - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -SHELL = /bin/sh - -mkinstalldirs = $(SHELL) $(srcroot)/mkinstalldirs - -CC = @CC@ - -AS = @AS@ -AR = @AR@ -LD = @LD@ -RANLIB = @RANLIB@ -AR_FLAGS = rc - -OBJDUMP = `if [ -f ${objroot}/../binutils/objdump ] ; \ - then echo ${objroot}/../binutils/objdump ; \ - else t='$(program_transform_name)'; echo objdump | sed -e $$t ; fi` -OBJCOPY = `if [ -f ${objroot}/../binutils/objcopy ] ; \ - then echo ${objroot}/../binutils/objcopy ; \ - else t='$(program_transform_name)'; echo objcopy | sed -e $$t ; fi` - -CRT0 = crt0.o -SIM_BSP = libsim.a -SIM_OBJS = _exit.o \ - access.o \ - chmod.o \ - chown.o \ - close.o \ - creat.o \ - crt1.o \ - execv.o \ - execve.o \ - fork.o \ - fstat.o \ - getpid.o \ - gettime.o \ - isatty.o \ - kill.o \ - link.o \ - lseek.o \ - open.o \ - pipe.o \ - read.o \ - sbrk.o \ - stat.o \ - time.o \ - times.o \ - trap.o \ - unlink.o \ - utime.o \ - wait.o \ - write.o - -#### Host specific Makefile fragment comes in here. -@host_makefile_frag@ - -all: $(CRT0) $(SIM_BSP) - -$(SIM_BSP): $(SIM_OBJS) - $(AR) $(ARFLAGS) $@ $? - $(RANLIB) $@ - -_exit.o: $(srcdir)/_exit.c -access.o: $(srcdir)/access.c -chmod.o: $(srcdir)/chmod.c -chown.o: $(srcdir)/chown.c -close.o: $(srcdir)/close.c -creat.o: $(srcdir)/creat.c -crt1.o: $(srcdir)/crt1.c -execv.o: $(srcdir)/execv.c -execve.o: $(srcdir)/execve.c -fork.o: $(srcdir)/fork.c -fstat.o: $(srcdir)/fstat.c -getpid.o: $(srcdir)/getpid.c -gettime.o: $(srcdir)/gettime.c -isatty.o: $(srcdir)/isatty.c -kill.o: $(srcdir)/kill.c -link.o: $(srcdir)/link.c -lseek.o: $(srcdir)/lseek.c -open.o: $(srcdir)/open.c -pipe.o: $(srcdir)/pipe.c -read.o: $(srcdir)/read.c -sbrk.o: $(srcdir)/sbrk.c -stat.o: $(srcdir)/stat.c -time.o: $(srcdir)/time.c -times.o: $(srcdir)/times.c -trap.o: $(srcdir)/trap.S -unlink.o: $(srcdir)/unlink.c -utime.o: $(srcdir)/utime.c -wait.o: $(srcdir)/wait.c -write.o: $(srcdir)/write.c - -install: $($(CPU)_INSTALL) - ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR} - $(INSTALL_DATA) $(CRT0) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$(CRT0) - $(INSTALL_DATA) $(SIM_BSP) $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$(SIM_BSP) - -clean mostlyclean: - rm -f *.o *.a - -distclean maintainer-clean realclean: clean - rm -f Makefile - -.PHONY: info dvi doc install-info clean-info -info doc dvi: -install-info: -clean-info: - -Makefile: Makefile.in ../config.status - cd .. && $(SHELL) config.status diff --git a/libgloss/v850/Makefile.inc b/libgloss/v850/Makefile.inc new file mode 100644 index 0000000000..a491922f77 --- /dev/null +++ b/libgloss/v850/Makefile.inc @@ -0,0 +1,46 @@ +## Copyright (c) 2002 Red Hat, Inc +## +## The authors hereby grant permission to use, copy, modify, distribute, +## and license this software and its documentation for any purpose, provided +## that existing copyright notices are retained in all copies and that this +## notice is included verbatim in any distributions. No written agreement, +## license, or royalty fee is required for any of the authorized uses. +## Modifications to this software may be copyrighted by their authors +## and need not follow the licensing terms described here, provided that +## the new terms are clearly indicated on the first page of each file where +## they apply. + +multilibtool_DATA += %D%/crt0.o +libobjs_a_SOURCES += %D%/crt0.S + +multilibtool_LIBRARIES += %D%/libsim.a +%C%_libsim_a_SOURCES = \ + %D%/_exit.c \ + %D%/access.c \ + %D%/chmod.c \ + %D%/chown.c \ + %D%/close.c \ + %D%/creat.c \ + %D%/crt1.c \ + %D%/execv.c \ + %D%/execve.c \ + %D%/fork.c \ + %D%/fstat.c \ + %D%/getpid.c \ + %D%/gettime.c \ + %D%/isatty.c \ + %D%/kill.c \ + %D%/link.c \ + %D%/lseek.c \ + %D%/open.c \ + %D%/pipe.c \ + %D%/read.c \ + %D%/sbrk.c \ + %D%/stat.c \ + %D%/time.c \ + %D%/times.c \ + %D%/trap.S \ + %D%/unlink.c \ + %D%/utime.c \ + %D%/wait.c \ + %D%/write.c diff --git a/libgloss/v850/_exit.c b/libgloss/v850/_exit.c index 44d4132bd7..7e1b09262e 100644 --- a/libgloss/v850/_exit.c +++ b/libgloss/v850/_exit.c @@ -23,7 +23,7 @@ static void _do_dtors() } -void _exit (n) +void _exit (int n) { /* Destructors should be done earlier because they need to be done before the files are closed, but here is better than nowhere (and this balances the diff --git a/libgloss/v850/getpid.c b/libgloss/v850/getpid.c index 32ac7fbfb8..f0fc4d8951 100644 --- a/libgloss/v850/getpid.c +++ b/libgloss/v850/getpid.c @@ -9,7 +9,8 @@ int __trap0 (int function, int p1, int p2, int p3); #define TRAP0(f, p1, p2, p3) __trap0(f, (int)(p1), (int)(p2), (int)(p3)) -_getpid (n) +int +_getpid (int n) { return 1; } diff --git a/libgloss/v850/isatty.c b/libgloss/v850/isatty.c index 248ab5248f..6e4f205f0f 100644 --- a/libgloss/v850/isatty.c +++ b/libgloss/v850/isatty.c @@ -9,8 +9,8 @@ int __trap0 (int function, int p1, int p2, int p3); #define TRAP0(f, p1, p2, p3) __trap0(f, (int)(p1), (int)(p2), (int)(p3)) -_isatty (fd) - int fd; +int +_isatty (int fd) { return 1; } diff --git a/libgloss/v850/kill.c b/libgloss/v850/kill.c index 34e5db793c..704aa9acc5 100644 --- a/libgloss/v850/kill.c +++ b/libgloss/v850/kill.c @@ -10,6 +10,7 @@ int __trap0 (int function, int p1, int p2, int p3); #define TRAP0(f, p1, p2, p3) __trap0(f, (int)(p1), (int)(p2), (int)(p3)) +int _kill (pid, sig) pid_t pid; int sig; diff --git a/libgloss/v850/read.c b/libgloss/v850/read.c index b55d1cb9e7..5ae2c97998 100644 --- a/libgloss/v850/read.c +++ b/libgloss/v850/read.c @@ -9,6 +9,7 @@ int __trap0 (int function, int p1, int p2, int p3); #define TRAP0(f, p1, p2, p3) __trap0(f, (int)(p1), (int)(p2), (int)(p3)) +int _read (int file, char *ptr, int len) diff --git a/libgloss/v850/sbrk.c b/libgloss/v850/sbrk.c index 248a092b6d..65114b0b78 100644 --- a/libgloss/v850/sbrk.c +++ b/libgloss/v850/sbrk.c @@ -2,6 +2,9 @@ #include #include #include "sys/syscall.h" +#include + +extern int _write (int, char *, int); caddr_t _sbrk (int incr) diff --git a/libgloss/visium/Makefile.in b/libgloss/visium/Makefile.in deleted file mode 100644 index 0e1789a263..0000000000 --- a/libgloss/visium/Makefile.in +++ /dev/null @@ -1,129 +0,0 @@ -# Copyright (c) 1998 Cygnus Support -# -# The authors hereby grant permission to use, copy, modify, distribute, -# and license this software and its documentation for any purpose, provided -# that existing copyright notices are retained in all copies and that this -# notice is included verbatim in any distributions. No written agreement, -# license, or royalty fee is required for any of the authorized uses. -# Modifications to this software may be copyrighted by their authors -# and need not follow the licensing terms described here, provided that -# the new terms are clearly indicated on the first page of each file where -# they apply. - -DESTDIR = -VPATH = @srcdir@ -srcdir = @srcdir@ -objdir = . -srcroot = $(srcdir)/../.. -objroot = $(objdir)/../.. - -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -host_alias = @host_alias@ -target_alias = @target_alias@ -program_transform_name = @program_transform_name@ - -bindir = @bindir@ -libdir = @libdir@ -tooldir = $(exec_prefix)/$(target_alias) - -# Multilib support variables. -# TOP is used instead of MULTI{BUILD,SRC}TOP. -MULTIDIRS = -MULTISUBDIR = -MULTIDO = true -MULTICLEAN = true - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -SHELL = /bin/sh - -mkinstalldirs = $(SHELL) $(srcroot)/mkinstalldirs - -CC = @CC@ - -AS = @AS@ - -AR = @AR@ - -LD = @LD@ - -RANLIB = @RANLIB@ - -OBJDUMP = `t='$(program_transform_name)'; echo objdump | sed -e $$t` -OBJCOPY = `t='$(program_transform_name)'; echo objcopy | sed -e $$t` - -# Generic object files common to some targets. -# These are LIBGLOSS stubs and minimal functionality in SBRK, READ and WRITE. -OBJS = close.o fstat.o getpid.o isatty.o kill.o lseek.o open.o \ - print.o putnum.o read.o stat.o unlink.o write.o - -# Object files specific to particular targets. -SERIALOBJS = ${OBJS} _exit.o gettod.o sbrk.o serial-inbyte.o serial-outbyte.o - -# These go with the hosted file I/O libraries with a version of syscalls. -HOSTEDOBJS = getpid.o kill.o io-gdb.o io-stubs.o sbrk.o - -SCRIPTS = -BSP = crt0.o libserial.a libsim.a libdebug.a - -# Host specific makefile fragment comes in here. -@host_makefile_frag@ - -all: ${BSP} - -# -# here's where we build the board support packages for each target -# - -libserial.a: $(SERIALOBJS) - $(AR) $(ARFLAGS) $@ $^ - $(RANLIB) $@ - -libsim.a: ${HOSTEDOBJS} sim-syscalls.o - ${AR} ${ARFLAGS} $@ $^ - ${RANLIB} $@ - -libdebug.a: ${HOSTEDOBJS} debug-syscalls.o - ${AR} ${ARFLAGS} $@ $^ - ${RANLIB} $@ - -sim-syscalls.o: syscalls.c syscall.h io.h - ${CC} ${CFLAGS_FOR_TARGET} ${CFLAGS} -DTARGET_SIM -c -o $@ $< - -debug-syscalls.o: syscalls.c syscall.h io.h - ${CC} ${CFLAGS_FOR_TARGET} ${CFLAGS} -c -o $@ $< - -$(OBJS): %.o: ../%.c - ${CC} ${CFLAGS_FOR_TARGET} ${CFLAGS} -c -o $@ $< - -doc: - -clean mostlyclean: - rm -f a.out core *.i *~ *.o *-test *.srec *.dis *.map *.x - -distclean maintainer-clean realclean: clean - rm -f Makefile config.status a.out - -.PHONY: install info install-info clean-info -install: - ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR} - @for bsp in ${BSP}; do\ - $(INSTALL_DATA) $${bsp} $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}; \ - done - @for script in ${SCRIPTS}; do\ - $(INSTALL_DATA) $(srcdir)/$${script}.ld $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$${script}.ld; \ - done - -info: -install-info: -clean-info: - -# target specific makefile fragment comes in here. -@target_makefile_frag@ - -Makefile: Makefile.in ../config.status - cd .. && $(SHELL) config.status diff --git a/libgloss/visium/Makefile.inc b/libgloss/visium/Makefile.inc new file mode 100644 index 0000000000..cd268c95bf --- /dev/null +++ b/libgloss/visium/Makefile.inc @@ -0,0 +1,53 @@ +## Copyright (c) 1998 Cygnus Support +## +## The authors hereby grant permission to use, copy, modify, distribute, +## and license this software and its documentation for any purpose, provided +## that existing copyright notices are retained in all copies and that this +## notice is included verbatim in any distributions. No written agreement, +## license, or royalty fee is required for any of the authorized uses. +## Modifications to this software may be copyrighted by their authors +## and need not follow the licensing terms described here, provided that +## the new terms are clearly indicated on the first page of each file where +## they apply. + +multilibtool_DATA += %D%/crt0.o +libobjs_a_SOURCES += %D%/crt0.S + +## These go with the hosted file I/O libraries with a version of syscalls. +%C%_hosted_sources = \ + getpid.c \ + kill.c \ + %D%/io-gdb.c \ + %D%/io-stubs.c \ + %D%/sbrk.c + +multilibtool_LIBRARIES += %D%/libserial.a +%C%_libserial_a_SOURCES = \ + close.c \ + fstat.c \ + getpid.c \ + isatty.c \ + kill.c \ + lseek.c \ + open.c \ + print.c \ + putnum.c \ + read.c \ + stat.c \ + unlink.c \ + write.c \ + %D%/_exit.c \ + %D%/gettod.c \ + %D%/sbrk.c \ + %D%/serial-inbyte.c \ + %D%/serial-outbyte.c + +multilibtool_LIBRARIES += %D%/libsim.a +%C%_libsim_a_SOURCES = \ + $(%C%_hosted_sources) \ + %D%/sim-syscalls.c + +multilibtool_LIBRARIES += %D%/libdebug.a +%C%_libdebug_a_SOURCES = \ + $(%C%_hosted_sources) \ + %D%/syscalls.c diff --git a/libgloss/visium/sim-syscalls.c b/libgloss/visium/sim-syscalls.c new file mode 100644 index 0000000000..1a6bb32598 --- /dev/null +++ b/libgloss/visium/sim-syscalls.c @@ -0,0 +1,31 @@ +/* system calls for the Visium processor. + + Copyright (c) 2015 Rolls-Royce Controls and Data Services Limited. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the name of Rolls-Royce Controls and Data Services Limited nor + the names of its contributors may be used to endorse or promote products + derived from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF + THE POSSIBILITY OF SUCH DAMAGE. */ + +#define TARGET_SIM +#include "syscalls.c" diff --git a/libgloss/write.c b/libgloss/write.c index 28b7ea37a4..80bcd4a774 100644 --- a/libgloss/write.c +++ b/libgloss/write.c @@ -23,10 +23,11 @@ extern int outbyte (char x); */ int write (int fd, - char *buf, - int nbytes) + const void *buf_, + size_t nbytes) { int i; + const char *buf = buf_; for (i = 0; i < nbytes; i++) { if (*(buf + i) == '\n') { diff --git a/libgloss/xc16x/Makefile.in b/libgloss/xc16x/Makefile.in deleted file mode 100644 index 5e2584e004..0000000000 --- a/libgloss/xc16x/Makefile.in +++ /dev/null @@ -1,145 +0,0 @@ -# -# Copyright (C) 2006 KPIT Cummins -# Copyright (C) 2009 Conny Marco Menebröcker -# All rights reserved. -# -# Redistribution and use in source and binary forms is permitted -# provided that the above copyright notice and following paragraph are -# duplicated in all such forms. -# -# This file is distributed WITHOUT ANY WARRANTY; without even the implied -# warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -# - -DESTDIR = -VPATH = @srcdir@ -srcdir = @srcdir@ -objdir = . -srcroot = $(srcdir)/../.. -objroot = $(objdir)/../.. - -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -host_alias = @host_alias@ -target_alias = @target_alias@ -program_transform_name = @program_transform_name@ - -bindir = @bindir@ -libdir = @libdir@ -tooldir = $(exec_prefix)/$(target_alias) - -# Multilib support variables. -# TOP is used instead of MULTI{BUILD,SRC}TOP. -MULTIDIRS = -MULTISUBDIR = -MULTIDO = true -MULTICLEAN = true - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -SHELL = /bin/sh - -mkinstalldirs = $(SHELL) $(srcroot)/mkinstalldirs - -CC = @CC@ - -#AS = @AS@ -AS = `if [ -f ${objroot}/../gas/as.new ] ; \ - then echo ${objroot}/../gas/as.new ; \ - else echo as ; fi` - -AR = @AR@ - -#LD = @LD@ -LD = `if [ -f ${objroot}/../ld/ld.new ] ; \ - then echo ${objroot}/../ld/ld.new ; \ - else echo ld ; fi` - -RANLIB = @RANLIB@ - -OBJDUMP = `if [ -f ${objroot}/../binutils/objdump ] ; \ - then echo ${objroot}/../binutils/objdump ; \ - else t='$(program_transform_name)'; echo objdump | sed -e $$t ; fi` -OBJCOPY = `if [ -f ${objroot}/../binutils/objcopy ] ; \ - then echo ${objroot}/../binutils/objcopy ; \ - else t='$(program_transform_name)'; echo objcopy | sed -e $$t ; fi` - -CRT0 = crt0.o - -# Generic object files common to all targets. -GENOBJS_NO_TRAP = close.o create.o crt0.o fstat.o getchar1.o \ - isatty.o lseek.o mem-layout.o misc.o open.o \ - read.o sbrk.o syscalls.o write.o -GENOBJS = ${GENOBJS_NO_TRAP} trap_handle.o - -# Object files specific to particular targets. -EVALOBJS = ${GENOBJS} -CYGMONOBJS = ${GENOBJS_NO_TRAP} - -CFLAGS = -g - -GCC_LDFLAGS = `if [ -d ${objroot}/../gcc ] ; \ - then echo -L${objroot}/../gcc ; fi` - -SCRIPTS = @script_list@ -BSP = @bsp_list@ - -# Host specific makefile fragment comes in here. -@host_makefile_frag@ - -# -# build a test program for each target board. Just trying to get -# it to link is a good test, so we ignore all the errors for now. -# - -all: ${CRT0} ${BSP} - -# -# here's where we build the board support packages for each target -# - -libeval.a: $(EVALOBJS) - ${AR} ${ARFLAGS} $@ $(EVALOBJS) - ${RANLIB} $@ - -libcygmon.a: $(CYGMONOBJS) - ${AR} ${ARFLAGS} $@ $(CYGMONOBJS) - ${RANLIB} $@ - - -doc: - -clean mostlyclean: - rm -f a.out core *.i *~ *.o *-test *.srec *.dis *.map *.x - -distclean maintainer-clean realclean: clean - rm -f Makefile config.status a.out - -.PHONY: install info install-info clean-info -install: - ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR} - @for crt in ${CRT0}; do \ - $(INSTALL_PROGRAM) $${crt} $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$${crt}; \ - done - @for bsp in ${BSP}; do \ - $(INSTALL_PROGRAM) $${bsp} $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}; \ - done - @for script in ${SCRIPTS}; do \ - $(INSTALL_DATA) ${srcdir}/$${script}.ld $(DESTDIR)$(tooldir)/lib${MULTISUBDIR}/$${script}.ld; \ - done - -info: -install-info: -clean-info: - -# these are for the BSPs -crt0.o: ${srcdir}/crt0.S - -# target specific makefile fragment comes in here. -@target_makefile_frag@ - -Makefile: Makefile.in ../config.status - cd .. && $(SHELL) config.status diff --git a/libgloss/xc16x/close.S b/libgloss/xc16x/close.S deleted file mode 100644 index 9b2f76f8d5..0000000000 --- a/libgloss/xc16x/close.S +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright (C) 2006 KPIT Cummins - * Copyright (C) 2009 Conny Marco Menebröcker - * All rights reserved. - * - * Redistribution and use in source and binary forms is permitted - * provided that the above copyright notice and following paragraph are - * duplicated in all such forms. - * - * This file is distributed WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - */ -.section .text -.global __close -__close: -#ifdef __xc16xL__ -rets -#else -ret -#endif diff --git a/libgloss/xc16x/create.c b/libgloss/xc16x/create.c deleted file mode 100644 index 33f4e0b206..0000000000 --- a/libgloss/xc16x/create.c +++ /dev/null @@ -1,39 +0,0 @@ -/* - * Copyright (C) 2006 KPIT Cummins - * Copyright (C) 2009 Conny Marco Menebröcker - * All rights reserved. - * - * Redistribution and use in source and binary forms is permitted - * provided that the above copyright notice and following paragraph are - * duplicated in all such forms. - * - * This file is distributed WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - */ -#include -#include -/*volatile int creatsys(char *name,int perms) -{ - #ifndef __xc16xL__ - asm volatile("push r10\n" - " mov r10,r9 \n" - " mov r9,#0x300 \n" - ); - - #endif - -asm volatile("trap #7"); -#ifndef __xc16xL__ -asm volatile("pop r10"); -#endif -} -*/ -volatile int _creat(char *name,int perms) -{ - int temp; - - temp=creatsys(name,perms); -// putchar((char)temp); -//printf("%d\n",temp); -return temp; -} diff --git a/libgloss/xc16x/crt0.S b/libgloss/xc16x/crt0.S deleted file mode 100644 index 0186f47406..0000000000 --- a/libgloss/xc16x/crt0.S +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Copyright (C) 2006 KPIT Cummins - * Copyright (C) 2009 Conny Marco Menebröcker - * All rights reserved. - * - * Redistribution and use in source and binary forms is permitted - * provided that the above copyright notice and following paragraph are - * duplicated in all such forms. - * - * This file is distributed WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - */ - .section .text - .global _start - .align 2 -_start: - #if __xc16xL__ - mov dpp0,#0x2 - #else - mov dpp0,#0x300 - #endif - mov dpp1,#1 - mov dpp2,#2 - mov dpp3,#3 - mov sp,#0xfc00 - mov r0,#0xc000 - #if __xc16x__ - mov csp,#0x0 - mov dpp0,#0x0 - #else - mov csp,#0xc0 - #endif - -#if __xc16xL__ -calls #SEG:_main,#SOF:_main -#else -calla cc_UC,_main -#endif - mov r8,#0x0 - trap #0 -ret diff --git a/libgloss/xc16x/fstat.S b/libgloss/xc16x/fstat.S deleted file mode 100644 index 292303e3b5..0000000000 --- a/libgloss/xc16x/fstat.S +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Copyright (C) 2006 KPIT Cummins - * Copyright (C) 2009 Conny Marco Menebröcker - * All rights reserved. - * - * Redistribution and use in source and binary forms is permitted - * provided that the above copyright notice and following paragraph are - * duplicated in all such forms. - * - * This file is distributed WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - */ -.section .text -.global __fstat -__fstat: -#ifdef __xc16xL__ -rets -#else -ret -#endif diff --git a/libgloss/xc16x/getchar1.c b/libgloss/xc16x/getchar1.c deleted file mode 100644 index 4ba5959c4a..0000000000 --- a/libgloss/xc16x/getchar1.c +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright (C) 2006 KPIT Cummins - * Copyright (C) 2009 Conny Marco Menebröcker - * All rights reserved. - * - * Redistribution and use in source and binary forms is permitted - * provided that the above copyright notice and following paragraph are - * duplicated in all such forms. - * - * This file is distributed WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - */ -signed char getchar (void) -{ - - asm(" trap #2"); - -} - diff --git a/libgloss/xc16x/isatty.c b/libgloss/xc16x/isatty.c deleted file mode 100644 index 30e6a53270..0000000000 --- a/libgloss/xc16x/isatty.c +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright (C) 2006 KPIT Cummins - * Copyright (C) 2009 Conny Marco Menebröcker - * All rights reserved. - * - * Redistribution and use in source and binary forms is permitted - * provided that the above copyright notice and following paragraph are - * duplicated in all such forms. - * - * This file is distributed WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - */ -/* isatty.c */ - -/* Dumb implementation so programs will at least run. */ - -#include - -int -isatty (int fd) -{ - - - - return 1; -} diff --git a/libgloss/xc16x/lseek.c b/libgloss/xc16x/lseek.c deleted file mode 100644 index ff3057d257..0000000000 --- a/libgloss/xc16x/lseek.c +++ /dev/null @@ -1,21 +0,0 @@ -/* - * Copyright (C) 2006 KPIT Cummins - * Copyright (C) 2009 Conny Marco Menebröcker - * All rights reserved. - * - * Redistribution and use in source and binary forms is permitted - * provided that the above copyright notice and following paragraph are - * duplicated in all such forms. - * - * This file is distributed WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - */ -#include -#include - - -int -_lseek (int file, int ptr, int dir) -{ - return trap_lseek (file,(unsigned long)ptr, dir); -} diff --git a/libgloss/xc16x/mem-layout.c b/libgloss/xc16x/mem-layout.c deleted file mode 100644 index 4619ed2903..0000000000 --- a/libgloss/xc16x/mem-layout.c +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (C) 2006 KPIT Cummins - * Copyright (C) 2009 Conny Marco Menebröcker - * All rights reserved. - * - * Redistribution and use in source and binary forms is permitted - * provided that the above copyright notice and following paragraph are - * duplicated in all such forms. - * - * This file is distributed WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - */ -/* Ideally this kind of stuff is specified in a linker script. It's not clear - what the default linker script should do, so for now we have this. */ - -#ifndef STACK_SIZE -/* Cache lines recycle at 4096 I think, and 4096 is listed as the page size, - so we make the stack size a multiple of it. Not that it's relevant or - anything, but why not base it on *something*? */ -#define STACK_SIZE (4096 * 4) -#endif - -int stack_size asm ("stack_size") = STACK_SIZE; - -#ifndef SBRK_SIZE -#define SBRK_SIZE (4096 * 32) -#endif - -int sbrk_size asm ("sbrk_size") = SBRK_SIZE; diff --git a/libgloss/xc16x/misc.c b/libgloss/xc16x/misc.c deleted file mode 100644 index d96550129c..0000000000 --- a/libgloss/xc16x/misc.c +++ /dev/null @@ -1,37 +0,0 @@ -/* - * Copyright (C) 2006 KPIT Cummins - * Copyright (C) 2009 Conny Marco Menebröcker - * All rights reserved. - * - * Redistribution and use in source and binary forms is permitted - * provided that the above copyright notice and following paragraph are - * duplicated in all such forms. - * - * This file is distributed WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - */ -#include <_ansi.h> -#include -#include - -/* _raise(), getpid(), and kill() are required by abort(). - getpid/kill are prefixed with '_' because of MISSING_SYSCALL_NAMES. */ - -int _raise (int sig) -{ - errno = ENOSYS; - return -1; -} - -int _getpid (void) -{ - errno = ENOSYS; - return -1; -} - -int _kill (int pid, - int sig) -{ - errno = ENOSYS; - return -1; -} diff --git a/libgloss/xc16x/open.c b/libgloss/xc16x/open.c deleted file mode 100644 index 4dd0d070de..0000000000 --- a/libgloss/xc16x/open.c +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (C) 2006 KPIT Cummins - * Copyright (C) 2009 Conny Marco Menebröcker - * All rights reserved. - * - * Redistribution and use in source and binary forms is permitted - * provided that the above copyright notice and following paragraph are - * duplicated in all such forms. - * - * This file is distributed WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - */ -#include -#include -/*volatile int opensys(char *name,int flags,int perms) -{ - #ifndef __xc16xL__ - asm volatile("push r11\n" - "mov r11,r10 \n" - " mov r10,r9 \n" - " mov r9,#0x300 \n" - ); - - #endif - -asm volatile("trap #5"); -#ifndef __xc16xL__ -asm volatile("pop r11"); -#endif -}*/ - -int _open(char *name,int flags,int perms) -{ - int temp; - - temp=opensys(name,flags,perms); -return temp; -} diff --git a/libgloss/xc16x/read.c b/libgloss/xc16x/read.c deleted file mode 100644 index b117af9462..0000000000 --- a/libgloss/xc16x/read.c +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Copyright (C) 2006 KPIT Cummins - * Copyright (C) 2009 Conny Marco Menebröcker - * All rights reserved. - * - * Redistribution and use in source and binary forms is permitted - * provided that the above copyright notice and following paragraph are - * duplicated in all such forms. - * - * This file is distributed WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - */ -#include -#include - -/*int trap1(int file, unsigned long ptr,int len) -{ - asm volatile("TRAP #4"); - -}*/ - -int _read(int file, char *ptr,int len) -{ - - return trap1(file,(unsigned long)ptr,1); - -} - - diff --git a/libgloss/xc16x/sbrk.c b/libgloss/xc16x/sbrk.c deleted file mode 100644 index deb2df26cb..0000000000 --- a/libgloss/xc16x/sbrk.c +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright (C) 2006 KPIT Cummins - * Copyright (C) 2009 Conny Marco Menebröcker - * All rights reserved. - * - * Redistribution and use in source and binary forms is permitted - * provided that the above copyright notice and following paragraph are - * duplicated in all such forms. - * - * This file is distributed WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - */ - -#include <_ansi.h> -#include -#include - - char *stack_ptr ; - -caddr_t - _sbrk(incr) - int incr; -{ - extern char end; /* Defined by the linker */ - static char *heap_end=&end; - char *prev_heap_end; - - - - prev_heap_end = heap_end; - - - heap_end += incr; - return (caddr_t)prev_heap_end; -} - diff --git a/libgloss/xc16x/sys/syscall.h b/libgloss/xc16x/sys/syscall.h deleted file mode 100644 index 8b13789179..0000000000 --- a/libgloss/xc16x/sys/syscall.h +++ /dev/null @@ -1 +0,0 @@ - diff --git a/libgloss/xc16x/syscalls.c b/libgloss/xc16x/syscalls.c deleted file mode 100644 index 03b6368cb3..0000000000 --- a/libgloss/xc16x/syscalls.c +++ /dev/null @@ -1,33 +0,0 @@ -/* - * Copyright (C) 2006 KPIT Cummins - * Copyright (C) 2009 Conny Marco Menebröcker - * All rights reserved. - * - * Redistribution and use in source and binary forms is permitted - * provided that the above copyright notice and following paragraph are - * duplicated in all such forms. - * - * This file is distributed WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - */ -#include -#include -#include -#include <_ansi.h> -#include -#include -#include -#include - - - -void _exit(int n) -{ -asm volatile("trap #0"); -} - -int isatty(file) - int file; -{ - return 1; -} diff --git a/libgloss/xc16x/trap_handle.c b/libgloss/xc16x/trap_handle.c deleted file mode 100644 index 899cdc20da..0000000000 --- a/libgloss/xc16x/trap_handle.c +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (C) 2006 KPIT Cummins - * Copyright (C) 2009 Conny Marco Menebröcker - * All rights reserved. - * - * Redistribution and use in source and binary forms is permitted - * provided that the above copyright notice and following paragraph are - * duplicated in all such forms. - * - * This file is distributed WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - */ -int trap0(int file, unsigned long ptr,int len) -{ -asm volatile("TRAP #3"); -return len; -} - - -int trap1(int file, unsigned long ptr,int len) -{ - asm volatile("TRAP #4"); - -} - -int trap_lseek(int file, unsigned long ptr,int len) -{ - asm volatile("TRAP #8"); - -} - - - -volatile int opensys(char *name,int flags,int perms) -{ - #ifndef __xc16xL__ - asm volatile("push r11\n" - "mov r11,r10 \n" - " mov r10,r9 \n" - " mov r9,#0x300 \n" - ); - - #endif - -asm volatile("trap #5"); -#ifndef __xc16xL__ -asm volatile("pop r11"); -#endif -} - -volatile int creatsys(char *name,int perms) -{ - #ifndef __xc16xL__ - asm volatile("push r10\n" - " mov r10,r9 \n" - " mov r9,#0x300 \n" - ); - - #endif - -asm volatile("trap #7"); -#ifndef __xc16xL__ -asm volatile("pop r10"); -#endif -} - - diff --git a/libgloss/xc16x/write.c b/libgloss/xc16x/write.c deleted file mode 100644 index 10b1b556a3..0000000000 --- a/libgloss/xc16x/write.c +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (C) 2006 KPIT Cummins - * Copyright (C) 2009 Conny Marco Menebröcker - * All rights reserved. - * - * Redistribution and use in source and binary forms is permitted - * provided that the above copyright notice and following paragraph are - * duplicated in all such forms. - * - * This file is distributed WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - */ -#include -#include - -/*int trap0(int file, unsigned long ptr,int len) -{ -asm volatile("TRAP #3"); -return len; -} -*/ -int _write(int file, char *ptr,int len) -{ - return trap0(file,(unsigned long)ptr,len); -} diff --git a/libgloss/xstormy16/Makefile.in b/libgloss/xstormy16/Makefile.in deleted file mode 100644 index 49d8a8deac..0000000000 --- a/libgloss/xstormy16/Makefile.in +++ /dev/null @@ -1,131 +0,0 @@ -# -# - -DESTDIR = -VPATH = @srcdir@ @srcdir@/.. -srcdir = @srcdir@ -objdir = . -srcroot = $(srcdir)/../.. -objroot = $(objdir)/../.. - -prefix = @prefix@ -exec_prefix = @exec_prefix@ - -host_alias = @host_alias@ -target_alias = @target_alias@ - -bindir = @bindir@ -libdir = @libdir@ -tooldir = $(exec_prefix)/$(target_alias) - -INSTALL = @INSTALL@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_DATA = @INSTALL_DATA@ - -# Multilib support variables. -# TOP is used instead of MULTI{BUILD,SRC}TOP. -MULTIDIRS = -MULTISUBDIR = - -SHELL = /bin/sh - -mkinstalldirs = $(SHELL) $(srcroot)/mkinstalldirs - -CC = @CC@ - -AS = @AS@ -AR = @AR@ -LD = @LD@ -RANLIB = @RANLIB@ - -# Yuk. -OBJCOPY = $(subst ranlib,objcopy,$(RANLIB)) - -OBJS = isatty.o -CFLAGS = -g -O2 -ASFLAGS = --gdwarf2 -SCRIPTS = -CRT = crt0.o crti.o crtn.o - -# Here is all of the simulator stuff -SIM_SCRIPTS = sim_high.ld sim_rom.ld -SIM_LDFLAGS = -SIM_BSP = libsim.a -SIM_OBJS = syscalls.o sim_malloc_start.o - -# Here is stuff for building apps for GDB on the EVA board -EVA_APP_BSP = libeva_app.a -EVA_APP_OBJS = close.o fstat.o getpid.o kill.o lseek.o open.o \ - stat.o unlink.o eva_app.o -EVA_APP_SCRIPTS = eva_app.ld - -# Stub stuff -EVA_STUB_HEX = eva_stub.hex -EVA_STUB = eva_stub.elf -EVA_STUB_OBJS = xstormy16_stub.o crt0_stub.o - -# Host specific makefile fragment comes in here. -@host_makefile_frag@ - -# -# build a test program for each target board. Just trying to get -# it to link is a good test, so we ignore all the errors for now. -# -# all: ${MON_CRT0} ${MON_BSP} -all: ${CRT} ${SIM_BSP} ${EVA_APP_BSP} ${EVA_STUB_HEX} - -# -# here's where we build the board support packages for each target -# -${SIM_BSP}: ${OBJS} ${SIM_OBJS} - ${AR} ${ARFLAGS} ${SIM_BSP} ${SIM_OBJS} ${OBJS} - ${RANLIB} ${SIM_BSP} - -${EVA_APP_BSP}: ${OBJS} ${EVA_APP_OBJS} - ${AR} ${ARFLAGS} ${EVA_APP_BSP} ${EVA_APP_OBJS} ${OBJS} - ${RANLIB} ${EVA_APP_BSP} - -${EVA_STUB_HEX}: ${EVA_STUB} - ${OBJCOPY} -O ihex $< $@ - -${EVA_STUB}: ${EVA_STUB_OBJS} ${srcdir}/eva_stub.ld - ${CC} -g -Os -nostartfiles -T${srcdir}/eva_stub.ld ${EVA_STUB_OBJS} -o $@ - - -# -# here's where we build the test programs for each target -# -.PHONY: test -test: - true - -# -# -# -.c.S: - ${CC} ${CFLAGS_FOR_TARGET} -c $< - -clean mostlyclean: - rm -f a.out core *.i *.o *-test *.srec *.dis *.x *.hex $(SIM_BSP) $(EVA_APP_BSP) $(EVA_STUB) - -distclean maintainer-clean realclean: clean - rm -f Makefile *~ - -.PHONY: install info install-info clean-info -install: - ${mkinstalldirs} ${DESTDIR}${tooldir}/lib${MULTISUBDIR} - set -e; for x in ${SIM_BSP} ${CRT} ${EVA_APP_BSP} ${EVA_STUB_HEX} ${EVA_STUB} ; do\ - ${INSTALL_DATA} $$x $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$$x; \ - done - @for script in ${SCRIPTS} ${SIM_SCRIPTS} ${EVA_APP_SCRIPTS}; do\ - ${INSTALL_DATA} ${srcdir}/$${script} $(DESTDIR)${tooldir}/lib${MULTISUBDIR}/$${script}; \ - done - - -doc: -info: -install-info: -clean-info: - -Makefile: Makefile.in ../config.status - cd .. && $(SHELL) config.status diff --git a/libgloss/xstormy16/Makefile.inc b/libgloss/xstormy16/Makefile.inc new file mode 100644 index 0000000000..346fee3791 --- /dev/null +++ b/libgloss/xstormy16/Makefile.inc @@ -0,0 +1,48 @@ +multilibtool_DATA += \ + %D%/crt0.o \ + %D%/crti.o \ + %D%/crtn.o +libobjs_a_SOURCES += \ + %D%/crt0.s \ + %D%/crti.s \ + %D%/crtn.s + +## Here is all of the simulator stuff +multilibtool_DATA += \ + %D%/sim_high.ld \ + %D%/sim_rom.ld +multilibtool_LIBRARIES += %D%/libsim.a +%C%_libsim_a_SOURCES = \ + %D%/syscalls.S \ + %D%/sim_malloc_start.s \ + %D%/isatty.c + +## Here is stuff for building apps for GDB on the EVA board +multilibtool_DATA += %D%/eva_app.ld +multilibtool_LIBRARIES += %D%/libeva_app.a +%C%_libeva_app_a_SOURCES = \ + %D%/close.c \ + %D%/fstat.c \ + %D%/getpid.c \ + %D%/kill.c \ + %D%/lseek.c \ + %D%/open.c \ + %D%/stat.c \ + %D%/unlink.c \ + %D%/eva_app.c \ + %D%/isatty.c + +## Stub stuff +multilibtool_PROGRAMS += %D%/eva_stub.elf +%C%_eva_stub_elf_SOURCES = \ + %D%/xstormy16_stub.c \ + %D%/crt0_stub.s +%C%_eva_stub_elf_LDFLAGS = \ + $(AM_LDFLAGS) \ + -nostartfiles -T$(srcdir)/%D%/eva_stub.ld + +multilibtool_DATA += \ + %D%/eva_stub.hex +%D%/eva_stub.hex: %D%/eva_stub.elf + $(AM_V_GEN)$(OBJCOPY) -O ihex $< $@ +CLEANFILES += %D%/eva_stub.hex diff --git a/libgloss/xstormy16/xstormy16_stub.c b/libgloss/xstormy16/xstormy16_stub.c index 7706031e9c..7bd3bcef5f 100644 --- a/libgloss/xstormy16/xstormy16_stub.c +++ b/libgloss/xstormy16/xstormy16_stub.c @@ -3,7 +3,7 @@ THIS SOFTWARE IS NOT COPYRIGHTED HP offers the following for use in the public domain. HP makes no - warranty with regard to the software or it's performance and the + warranty with regard to the software or its performance and the user accepts the software "AS IS" with all faults. HP DISCLAIMS ANY WARRANTIES, EXPRESS OR IMPLIED, WITH REGARD @@ -41,7 +41,7 @@ * * Because gdb will sometimes write to the stack area to execute function * calls, this program cannot rely on using the inferior stack so it uses - * it's own stack area. + * its own stack area. * ************* * diff --git a/libgloss/xtensa/Makefile.inc b/libgloss/xtensa/Makefile.inc new file mode 100644 index 0000000000..b4c818732d --- /dev/null +++ b/libgloss/xtensa/Makefile.inc @@ -0,0 +1,61 @@ +AM_CPPFLAGS_%C% = -D_LIBGLOSS -I$(srcdir)/%D%/include + +multilibtool_DATA += \ + %D%/default.specs \ + %D%/nano.specs \ + %D%/sim.elf.specs \ + %D%/board.elf.specs \ + %D%/sys.qemu.specs \ + %D%/sys.openocd.specs \ + %D%/crt0.o +libobjs_a_SOURCES += \ + %D%/crt0.S \ + %D%/crt1-sim.S \ + %D%/crt1-boards.S + +multilibtool_LIBRARIES += %D%/libgloss.a + +if HAVE_XTENSA_BOARD_ESP +multilibtool_DATA += \ + %D%/app.elf.ld \ + %D%/crt1-sim.o \ + %D%/crt1-boards.o + +%C%_libgloss_a_SOURCES = \ + %D%/sleep.S \ + %D%/syscalls.c \ + %D%/window-vectors.S +%C%_libgloss_a_CPPFLAGS = $(AM_CPPFLAGS) + +multilibtool_LIBRARIES += %D%/libsys_qemu.a +%C%_libsys_qemu_a_CPPFLAGS = \ + $(AM_CPPFLAGS) \ + -DQEMU_SEMIHOSTING +%C%_libsys_qemu_a_SOURCES = \ + %D%/sim-vectors.S \ + %D%/sim-call.S \ + %D%/syscalls.c + +multilibtool_LIBRARIES += %D%/libsys_openocd.a +%C%_libsys_openocd_a_CPPFLAGS = \ + $(AM_CPPFLAGS) \ + -DOPENOCD_SEMIHOSTING +%C%_libsys_openocd_a_SOURCES = \ + %D%/syscalls.c + +if HAVE_XTENSA_BOARD_ESP32 +multilibtool_DATA += %D%/boards/esp32/memory.elf.ld +%C%_libgloss_a_SOURCES += %D%/boards/esp32/board.c +%C%_libgloss_a_CPPFLAGS += -I$(srcdir)/%D%/boards/esp32/include +%C%_libsys_qemu_a_CPPFLAGS += -I$(srcdir)/%D%/boards/esp32/include +%C%_libsys_openocd_a_CPPFLAGS += -I$(srcdir)/%D%/boards/esp32/include +endif + +if HAVE_XTENSA_BOARD_ESP32S3 +multilibtool_DATA += %D%/boards/esp32s3/memory.elf.ld +%C%_libgloss_a_SOURCES += %D%/boards/esp32s3/board.c +%C%_libgloss_a_CPPFLAGS += -I$(srcdir)/%D%/boards/esp32s3/include +%C%_libsys_qemu_a_CPPFLAGS += -I$(srcdir)/%D%/boards/esp32s3/include +%C%_libsys_openocd_a_CPPFLAGS += -I$(srcdir)/%D%/boards/esp32s3/include +endif +endif diff --git a/libgloss/xtensa/acinclude.m4 b/libgloss/xtensa/acinclude.m4 new file mode 100644 index 0000000000..fc98f8a3d8 --- /dev/null +++ b/libgloss/xtensa/acinclude.m4 @@ -0,0 +1,5 @@ +XTENSA_BOARD_ESP=`echo $CC | sed 's/.*-mdynconfig=xtensa_\(.*\)\.so.*/\1/;s/.*-mcpu=\(^ *\).*/\1/;s/.* .*/unknown/'` +AC_SUBST([XTENSA_BOARD_ESP]) +AM_CONDITIONAL([HAVE_XTENSA_BOARD_ESP32], [test x$XTENSA_BOARD_ESP = xesp32]) +AM_CONDITIONAL([HAVE_XTENSA_BOARD_ESP32S3], [test x$XTENSA_BOARD_ESP = xesp32s3]) +AM_CONDITIONAL([HAVE_XTENSA_BOARD_ESP], [echo $XTENSA_BOARD_ESP | grep -w -e esp32 -e esp32s3 >/dev/null 2>&1]) diff --git a/libgloss/xtensa/app.elf.ld b/libgloss/xtensa/app.elf.ld new file mode 100644 index 0000000000..12c7eb8abb --- /dev/null +++ b/libgloss/xtensa/app.elf.ld @@ -0,0 +1,190 @@ +__stack = ORIGIN(dram_seg) + LENGTH(dram_seg); +__MIN_STACK_SIZE = 0x1000; + +ENTRY(_start) +SECTIONS +{ + . = SEGMENT_START("iram_seg", 0); + .vectors : + { + _vector_table = ABSOLUTE(.); + . = 0x0; + KEEP(*(.WindowVectors.text)); + . = 0x180; + KEEP(*(.Level2InterruptVector.text)); + . = 0x1c0; + KEEP(*(.Level3InterruptVector.text)); + . = 0x200; + KEEP(*(.Level4InterruptVector.text)); + . = 0x240; + KEEP(*(.Level5InterruptVector.text)); + . = 0x280; + KEEP(*(.DebugExceptionVector.text)); + . = 0x2c0; + KEEP(*(.NMIExceptionVector.text)); + . = 0x300; + KEEP(*(.KernelExceptionVector.text)); + . = 0x340; + KEEP(*(.UserExceptionVector.text)); + . = 0x3C0; + KEEP(*(.DoubleExceptionVector.text)); + . = 0x400; + KEEP(*(.ResetVector.text)); + *(.*Vector.literal) + . = ALIGN (16); + } > iram_seg + + text : + { + KEEP (*(.init.literal)) + KEEP (*(SORT_NONE(.init))) + *(.literal .text .stub .literal.* .text.* .gnu.linkonce.literal.* .gnu.linkonce.t.*.literal .gnu.linkonce.t.*) + /* .gnu.warning sections are handled specially by elf32.em. */ + *(.gnu.warning) + KEEP (*(.fini.literal)) + KEEP (*(SORT_NONE(.fini))) + } > iram_seg + + PROVIDE (__etext = .); + PROVIDE (_etext = .); + PROVIDE (etext = .); + + /* Adjust the address for the data segment. We want to adjust up to + the same address within the page on the next page up. */ + . = ALIGN (CONSTANT (MAXPAGESIZE)) - ((CONSTANT (MAXPAGESIZE) - .) & (CONSTANT (MAXPAGESIZE) - 1)); . = DATA_SEGMENT_ALIGN (CONSTANT (MAXPAGESIZE), CONSTANT (COMMONPAGESIZE)); + + .rodata : + { + *(.rodata .rodata.* .gnu.linkonce.r.*) + *(.rodata1) + *(.sdata2 .sdata2.* .gnu.linkonce.s2.*) + *(.sbss2 .sbss2.* .gnu.linkonce.sb2.*) + } + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT_BY_INIT_PRIORITY(.init_array.*) SORT_BY_INIT_PRIORITY(.ctors.*))) + KEEP (*(.init_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .ctors)) + PROVIDE_HIDDEN (__init_array_end = .); + } + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT_BY_INIT_PRIORITY(.fini_array.*) SORT_BY_INIT_PRIORITY(.dtors.*))) + KEEP (*(.fini_array EXCLUDE_FILE (*crtbegin.o *crtbegin?.o *crtend.o *crtend?.o ) .dtors)) + PROVIDE_HIDDEN (__fini_array_end = .); + } + .ctors : + { + /* gcc uses crtbegin.o to find the start of + the constructors, so we make sure it is + first. Because this is a wildcard, it + doesn't matter if the user does not + actually link against crtbegin.o; the + linker won't look for a file to match a + wildcard. The wildcard also means that it + doesn't matter which directory crtbegin.o + is in. */ + KEEP (*crtbegin.o(.ctors)) + KEEP (*crtbegin?.o(.ctors)) + /* We don't want to include the .ctor section from + the crtend.o file until after the sorted ctors. + The .ctor section from the crtend file contains the + end of ctors marker and it must be last */ + KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .ctors)) + KEEP (*(SORT(.ctors.*))) + KEEP (*(.ctors)) + } + .dtors : + { + KEEP (*crtbegin.o(.dtors)) + KEEP (*crtbegin?.o(.dtors)) + KEEP (*(EXCLUDE_FILE (*crtend.o *crtend?.o ) .dtors)) + KEEP (*(SORT(.dtors.*))) + KEEP (*(.dtors)) + } + + _data_start = .; + .data : + { + *(.data .data.* .gnu.linkonce.d.*) + SORT(CONSTRUCTORS) + *(.data1) + } + _edata = .; PROVIDE (edata = .); + . = .; + __bss_start = .; + .bss : + { + *(.dynsbss) + *(.sbss .sbss.* .gnu.linkonce.sb.*) + *(.scommon) + *(.dynbss) + *(.bss .bss.* .gnu.linkonce.b.*) + *(COMMON) + /* Align here to ensure that the .bss section occupies space up to + _end. Align after .bss to ensure correct alignment even if the + .bss section disappears because there are no input sections. + FIXME: Why do we need it? When there is no .bss section, we do not + pad the .data section. */ + . = ALIGN(. != 0 ? 32 / 8 : 1); + } + . = ALIGN(32 / 8); + . = ALIGN(32 / 8); + _end = .; PROVIDE (end = .); + . = DATA_SEGMENT_END (.); + + /* Check if data + heap + stack exceeds RAM limit */ + ASSERT(. <= __stack - __MIN_STACK_SIZE, "region DRAM overflowed by .data and .bss sections") + + /* Stabs debugging sections. */ + .stab 0 : { *(.stab) } + .stabstr 0 : { *(.stabstr) } + .stab.excl 0 : { *(.stab.excl) } + .stab.exclstr 0 : { *(.stab.exclstr) } + .stab.index 0 : { *(.stab.index) } + .stab.indexstr 0 : { *(.stab.indexstr) } + .comment 0 : { *(.comment) } + .gnu.build.attributes : { *(.gnu.build.attributes .gnu.build.attributes.*) } + /* DWARF debug sections. + Symbols in the DWARF debugging sections are relative to the beginning + of the section so we begin them at 0. */ + /* DWARF 1 */ + .debug 0 : { *(.debug) } + .line 0 : { *(.line) } + /* GNU DWARF 1 extensions */ + .debug_srcinfo 0 : { *(.debug_srcinfo) } + .debug_sfnames 0 : { *(.debug_sfnames) } + /* DWARF 1.1 and DWARF 2 */ + .debug_aranges 0 : { *(.debug_aranges) } + .debug_pubnames 0 : { *(.debug_pubnames) } + /* DWARF 2 */ + .debug_info 0 : { *(.debug_info .gnu.linkonce.wi.*) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line .debug_line.* .debug_line_end) } + .debug_frame 0 : { *(.debug_frame) } + .debug_str 0 : { *(.debug_str) } + .debug_loc 0 : { *(.debug_loc) } + .debug_macinfo 0 : { *(.debug_macinfo) } + /* SGI/MIPS DWARF 2 extensions */ + .debug_weaknames 0 : { *(.debug_weaknames) } + .debug_funcnames 0 : { *(.debug_funcnames) } + .debug_typenames 0 : { *(.debug_typenames) } + .debug_varnames 0 : { *(.debug_varnames) } + /* DWARF 3 */ + .debug_pubtypes 0 : { *(.debug_pubtypes) } + .debug_ranges 0 : { *(.debug_ranges) } + /* DWARF Extension. */ + .debug_macro 0 : { *(.debug_macro) } + .debug_addr 0 : { *(.debug_addr) } + .gnu.attributes 0 : { KEEP (*(.gnu.attributes)) } + /DISCARD/ : { *(.note.GNU-stack) *(.gnu_debuglink) *(.gnu.lto_*) } +} + diff --git a/libgloss/xtensa/board.elf.specs b/libgloss/xtensa/board.elf.specs new file mode 100644 index 0000000000..87cff19e76 --- /dev/null +++ b/libgloss/xtensa/board.elf.specs @@ -0,0 +1,5 @@ +*startfile: +crt1-boards%O%s + +*lib: +-lc --whole-archive -lgloss --no-whole-archive -lpthread_stubs -lc %Tmemory.elf.ld %Tapp.elf.ld diff --git a/libgloss/xtensa/boards/esp32/board.c b/libgloss/xtensa/boards/esp32/board.c new file mode 100644 index 0000000000..f5c73e5337 --- /dev/null +++ b/libgloss/xtensa/boards/esp32/board.c @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2023 Espressif Systems (Shanghai) CO LTD + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include + +void board_init(void) +{ + WRITE_REGISTER(UART0_CLKDIV_REG, UART0_CLKDIV_VAL); +} + +void board_uart_write_char(char c) +{ + /* wait until txfifo_cnt == 0 */ + while (UART0_TXFIFO_CNT) { + ; + } + if (c == '\n') { + WRITE_REGISTER(UART0_TX_ADDR, '\r'); + } + WRITE_REGISTER(UART0_TX_ADDR, c); +} diff --git a/libgloss/xtensa/boards/esp32/include/soc/cpu.h b/libgloss/xtensa/boards/esp32/include/soc/cpu.h new file mode 100644 index 0000000000..4a16fb236f --- /dev/null +++ b/libgloss/xtensa/boards/esp32/include/soc/cpu.h @@ -0,0 +1,16 @@ +/* + * Copyright (C) 2023 Espressif Systems (Shanghai) CO LTD + * SPDX-License-Identifier: BSD-2-Clause + */ + +#ifndef SOC_CPU_H +#define SOC_CPU_H + +/* + * ESP32 starts with CPU frequency 40MHz + * Let's do not reconfigure it to simplify libgloss + */ +#define CPU_FREQUENCY_MHZ 40 +#define CPU_FREQUENCY_HZ (CPU_FREQUENCY_MHZ * 1000000) + +#endif // SOC_CPU_H diff --git a/libgloss/xtensa/boards/esp32/include/soc/uart.h b/libgloss/xtensa/boards/esp32/include/soc/uart.h new file mode 100644 index 0000000000..c7b7eb2816 --- /dev/null +++ b/libgloss/xtensa/boards/esp32/include/soc/uart.h @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2023 Espressif Systems (Shanghai) CO LTD + * SPDX-License-Identifier: BSD-2-Clause + */ + +#ifndef SOC_UART_H +#define SOC_UART_H + +#include +#include + +#define UART0_BAUDRATE 115200 + +#define UART0_TX_ADDR 0x60000000 +#define UART0_BASE 0x3ff40000 +#define UART0_CLKDIV_REG (UART0_BASE + 0x14) +#define UART0_STATUS (UART0_BASE + 0x1c) +#define UART0_CLKDIV_VAL (CPU_FREQUENCY_HZ / UART0_BAUDRATE ) +#define UART0_TXFIFO_CNT (((READ_REGISTER(UART0_STATUS)) >> 16) & 0xff) + + +void board_uart_write_char(char c); + +#endif // SOC_UART_H diff --git a/libgloss/xtensa/boards/esp32/memory.elf.ld b/libgloss/xtensa/boards/esp32/memory.elf.ld new file mode 100644 index 0000000000..fa0e423b5b --- /dev/null +++ b/libgloss/xtensa/boards/esp32/memory.elf.ld @@ -0,0 +1,26 @@ +/* + * IROM/DRAM definition in QEMU: + * [ESP32_MEMREGION_IROM] = { 0x40000000, 0x70000 }, + * [ESP32_MEMREGION_DRAM] = { 0x3ffae000, 0x52000 }, + * + * In theory we could use whole DRAM section, but I had some faults when using + * memory in range 0x3ffae000 - 0x3ffb0000 + * + * But used memory range for data such as esp-idf for ESP32 to satisfy user's + * expectation on chip emulation + * + * Pass '--defsym=entire_dram_seg=1' to linker script to use whole DRAM + * + */ + +MEMORY +{ + iram_seg (X) : org = 0x40078000, len = 0x28000 +/* 64k at the end of DRAM, after ROM bootloader stack + * or entire DRAM (for QEMU only) + */ + dram_seg (RW) : org = DEFINED(entire_dram_seg) ? 0x3FFB0000 : 0x3FFF0000, + len = DEFINED(entire_dram_seg) ? 0x50000 : 0x10000 +} + + diff --git a/libgloss/xtensa/boards/esp32s3/board.c b/libgloss/xtensa/boards/esp32s3/board.c new file mode 100644 index 0000000000..f5c73e5337 --- /dev/null +++ b/libgloss/xtensa/boards/esp32s3/board.c @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2023 Espressif Systems (Shanghai) CO LTD + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include + +void board_init(void) +{ + WRITE_REGISTER(UART0_CLKDIV_REG, UART0_CLKDIV_VAL); +} + +void board_uart_write_char(char c) +{ + /* wait until txfifo_cnt == 0 */ + while (UART0_TXFIFO_CNT) { + ; + } + if (c == '\n') { + WRITE_REGISTER(UART0_TX_ADDR, '\r'); + } + WRITE_REGISTER(UART0_TX_ADDR, c); +} diff --git a/libgloss/xtensa/boards/esp32s3/include/soc/cpu.h b/libgloss/xtensa/boards/esp32s3/include/soc/cpu.h new file mode 100644 index 0000000000..2210ba7b01 --- /dev/null +++ b/libgloss/xtensa/boards/esp32s3/include/soc/cpu.h @@ -0,0 +1,16 @@ +/* + * Copyright (C) 2023 Espressif Systems (Shanghai) CO LTD + * SPDX-License-Identifier: BSD-2-Clause + */ + +#ifndef SOC_CPU_H +#define SOC_CPU_H + +/* + * ESP32S3 starts with CPU frequency 40MHz + * Let's do not reconfigure it to simplify libgloss + */ +#define CPU_FREQUENCY_MHZ 40 +#define CPU_FREQUENCY_HZ (CPU_FREQUENCY_MHZ * 1000000) + +#endif // SOC_CPU_H diff --git a/libgloss/xtensa/boards/esp32s3/include/soc/uart.h b/libgloss/xtensa/boards/esp32s3/include/soc/uart.h new file mode 100644 index 0000000000..c6241fdec3 --- /dev/null +++ b/libgloss/xtensa/boards/esp32s3/include/soc/uart.h @@ -0,0 +1,24 @@ +/* + * Copyright (C) 2023 Espressif Systems (Shanghai) CO LTD + * SPDX-License-Identifier: BSD-2-Clause + */ + +#ifndef SOC_UART_H +#define SOC_UART_H + +#include +#include + +#define UART0_BAUDRATE 115200 + +#define UART0_TX_ADDR 0x60000000 +#define UART0_BASE 0x60000000 +#define UART0_CLKDIV_REG (UART0_BASE + 0x14) +#define UART0_STATUS (UART0_BASE + 0x1c) +#define UART0_CLKDIV_VAL (CPU_FREQUENCY_HZ / UART0_BAUDRATE ) +#define UART0_TXFIFO_CNT (((READ_REGISTER(UART0_STATUS)) >> 16) & 0x3ff) + + +void board_uart_write_char(char c); + +#endif // SOC_UART_H diff --git a/libgloss/xtensa/boards/esp32s3/memory.elf.ld b/libgloss/xtensa/boards/esp32s3/memory.elf.ld new file mode 100644 index 0000000000..6426b7fc60 --- /dev/null +++ b/libgloss/xtensa/boards/esp32s3/memory.elf.ld @@ -0,0 +1,21 @@ +/* + * IROM/DRAM definition in QEMU: + * [ESP32S3_MEMREGION_IROM] = { 0x40000000, 0x60000 }, + * [ESP32S3_MEMREGION_DRAM] = { 0x3FC80000, 0x70000 }, + * + * In theory we could use whole DRAM section, but I had some faults when using + * memory in range 0x3ffae000 - 0x3ffb0000 + * + * But used memory range for data such as esp-idf for ESP32S3 to satisfy user's + * expectation on chip emulation + * + * Pass '--defsym=entire_dram_seg=1' to linker script to use whole DRAM + * + */ + +MEMORY +{ + iram_seg (X) : org = 0x40378000, len = 0x70000 + dram_seg (RW) : org = DEFINED(entire_dram_seg) ? 0x3FC80000 : 0x3FCF0000, + len = DEFINED(entire_dram_seg) ? 0x70000 : 0x10000 +} diff --git a/libgloss/xtensa/crt0.S b/libgloss/xtensa/crt0.S new file mode 100644 index 0000000000..67c359c5b4 --- /dev/null +++ b/libgloss/xtensa/crt0.S @@ -0,0 +1,20 @@ +/* + * Copyright (C) 2023 Espressif Systems (Shanghai) CO LTD + * SPDX-License-Identifier: BSD-2-Clause + */ + +/* crt0.S + * Dummy startup file which calls main() function. + * It can be used for compilation tests only. + */ + + .text + + /* + * Simple jump to main(). + */ + + .global _start + _start: + movi a4, main + jx a4 /* jump to main */ diff --git a/libgloss/xtensa/crt1-boards.S b/libgloss/xtensa/crt1-boards.S new file mode 100644 index 0000000000..a703634af6 --- /dev/null +++ b/libgloss/xtensa/crt1-boards.S @@ -0,0 +1,223 @@ +// crt1-boards.S +// +// For most hardware / boards, this code sets up the C calling context +// (setting up stack, PS, and clearing BSS) and jumps to __clibrary_start +// which sets up the C library, calls constructors and registers destructors, +// and calls main(). +// +// Control arrives here at _start from the reset vector or from crt0-app.S. + +// Copyright (c) 1998-2013 Tensilica Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +#include + + +// Exports +.global _start + +// Imports +// __clibrary_init from C library (eg. newlib or uclibc) +// exit from C library +// main from user application +// board_init board-specific (uart/mingloss/tinygloss.c) +// xthal_dcache_all_writeback from HAL library +// __stack from linker script (see LSP Ref Manual) +// __bss_start from linker script (see LSP Ref Manual) +// _end from linker script (see LSP Ref Manual) + +.type main, @function + +# define CALL call4 +# define CALLX callx4 +# define ARG1 a6 /* 1st outgoing call argument */ +# define ARG2 a7 /* 2nd outgoing call argument */ +# define ARG3 a8 /* 3rd outgoing call argument */ +# define ARG4 a9 /* 4th outgoing call argument */ +# define ARG5 a10 /* 5th outgoing call argument */ + + +/**************************************************************************/ + + .text + .align 4 +_start: + // _start is typically NOT at the beginning of the text segment -- + // it is always called from either the reset vector or other code + // that does equivalent initialization (such as crt0-app.S). + // + // Assumptions on entry to _start: + // - low (level-one) and medium priority interrupts are disabled + // via PS.INTLEVEL and/or INTENABLE (PS.INTLEVEL is expected to + // be zeroed, to potentially enable them, before calling main) + // - C calling context not initialized: + // - PS not initialized + // - SP not initialized + // - the following are initialized: + // - LITBASE, cache attributes, WindowBase, WindowStart, + // CPENABLE, FP's FCR and FSR, EXCSAVE[n] + + // Keep a0 zero. It is used to initialize a few things. + // It is also the return address, where zero indicates + // that the frame used by _start is the bottommost frame. + // + + movi a0, 0 // keep this register zero. + + wsr a0, INTENABLE // INTENABLE value is not defined after reset. + //make sure that interrupts are shut off (*before* we lower PS.INTLEVEL and PS.EXCM!) + + // Windowed register init, so we can call windowed code (eg. C code). + movi a1, 1 + wsr a1, WINDOWSTART + // The processor always clears WINDOWBASE at reset, so no need to clear it here. + // It resets WINDOWSTART to 1 starting with LX2.0/X7.0 (RB-2006.0). + // However, assuming hard reset is not yet always practical, so do this anyway: + wsr a0, WINDOWBASE + rsync + + // Set VECBASE to use our vectors instead vectors in ROM + movi a1, _vector_table + wsr a1, VECBASE + + // Initialize the stack pointer. + // See the "ABI and Software Conventions" chapter in the + // Xtensa ISA Reference manual for details. + + // NOTE: Because the _start routine does not use any memory in its + // stack frame, and because all of its CALL instructions use a + // window size of 4 (or zero), the stack frame for _start can be empty. + + movi sp, __stack + + /* + * Now that sp (a1) is set, we can set PS as per the application + * (user vector mode, enable interrupts, enable window exceptions if applicable). + */ + movi a3, PS_UM|PS_WOE + wsr a3, PS + rsync + + + /* + * Do any initialization that affects the memory map, such as + * setting up TLB entries, that needs to be done before we can + * successfully clear BSS (e.g. if some BSS segments are in + * remapped areas). + * + * NOTE: This hook works where the reset vector does not unpack + * segments (see "ROM packing" in the LSP manual), or where + * unpacking of segments is not affected by memory remapping. + * If ROM unpacking is affected, TLB setup must be done in + * assembler from the reset vector. + * + * The __memmap_init() routine can be a C function, however it + * does not have BSS initialized! In particular, __memmap_init() + * cannot set BSS variables, i.e. uninitialized global variables + * (they'll be wiped out by the following BSS clear), nor can it + * assume they are yet initialized to zero. + * + * The __memmap_init() function is optional. It is marked as a + * weak symbol, so that it gets valued zero if not defined. + */ + .weak __memmap_init + movi a4, __memmap_init + beqz a4, 1f + CALLX a4 +1: + + /* + * Clear the BSS (uninitialized data) segments. + * This code supports multiple zeroed sections (*.bss). + * + */ + movi a6, __bss_start + movi a8, _end + sub a8, a8, a6 + movi a7, 0 + CALL memset + + /* init semihosting if has function */ + .weak __semihosting_init + movi a4, __semihosting_init + beqz a4, 2f + CALLX a4 +2: + + // We can now call C code, the C calling environment has been initialized. + // + // From this point on, we use ABI-specific macros to refer to registers a0 .. a15 + // (ARG#). + + + .type board_init, @function + .type __clibrary_init, @function + .type exit, @function + + + // Initialize the board (eg. UART, etc). + CALL board_init + + /* + * Call __clibrary_init to initialize the C library: + * + * void __clibrary_init(int argc, char ** argv, char ** environ, + * void(*init_func)(void), void(*fini_func)(void)); + */ + + // Pass an empty argv array, with an empty string as the program name. + + .weak _init + .weak _fini + movi ARG1, _start_argc // argc address + movi ARG2, _start_argv // argv = ["", 0] + movi ARG3, _start_envp // envp = [0] + movi ARG4, _init // function that calls constructors + movi ARG5, _fini // function that calls destructors + l32i ARG1, ARG1, 0 // argc = 1 + CALL __clibrary_init + + // Call: int main(int argc, char ** argv, char ** environ); + movi ARG1, _start_argc // argc address + movi ARG2, _start_argv // argv = ["", 0] + movi ARG3, _start_envp // envp = [0] + l32i ARG1, ARG1, 0 // argc = 1 + CALL main + // The return value is the same register as the first outgoing argument. + CALL exit // exit with main's return value + // Does not return here. + + .data + // Mark argc/argv/envp parameters as weak so that an external + // object file can override them. + .weak _start_argc, _start_argv, _start_envp + .align 4 +_start_argv: + .word _start_null // empty program name +_start_null: +_start_envp: + .word 0 // end of argv array, empty string, empty environ +_start_argc: + .word 1 // one argument (program name) + .text + + .size _start, . - _start + diff --git a/libgloss/xtensa/crt1-sim.S b/libgloss/xtensa/crt1-sim.S new file mode 100644 index 0000000000..4f9924c3b0 --- /dev/null +++ b/libgloss/xtensa/crt1-sim.S @@ -0,0 +1,201 @@ +// crt1-sim.S +// For the Xtensa simulator target, this code sets up the C calling context +// and calls main() (via __clibrary_start). +// Control arrives here at _start from the reset vector or from crt0-app.S. + +// Copyright (c) 1998-2012 Tensilica Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +#include +#include +#include + +// Exports +.global _start + +// Imports +// __clibrary_init from C library (eg. newlib or uclibc) +// exit from C library +// main from user application +// __stack from linker script (see LSP Ref Manual) + +.type __clibrary_init, @function +.type main, @function +.type exit, @function + +# define CALL call4 +# define CALLX callx4 +# define ARG1 a6 /* 1st outgoing call argument */ +# define ARG2 a7 /* 2nd outgoing call argument */ +# define ARG3 a8 /* 3rd outgoing call argument */ +# define ARG4 a9 /* 4th outgoing call argument */ +# define ARG5 a10 /* 5th outgoing call argument */ + + .data + .weak _start_envp // allow overriding + .align 4 +_start_envp: .word 0 // empty environ + + .text + .align 4 + +_start: + // _start is typically NOT at the beginning of the text segment -- + // it is always called from either the reset vector or other code + // that does equivalent initialization (such as crt0-app.S). + // + // Assumptions on entry to _start: + // - low (level-one) and medium priority interrupts are disabled + // via PS.INTLEVEL and/or INTENABLE (PS.INTLEVEL is expected to + // be zeroed, to potentially enable them, before calling main) + // - C calling context not initialized: + // - PS not initialized + // - SP not initialized + // - the following are initialized: + // - LITBASE, cache attributes, WindowBase, WindowStart, + // CPENABLE, FP's FCR and FSR, EXCSAVE[n] + + // Keep a0 zero. It is used to initialize a few things. + // It is also the return address, where zero indicates + // that the frame used by _start is the bottommost frame. + // + movi a0, 0 // keep this register zero. + + wsr a0, INTENABLE // INTENABLE value is not defined after reset. + //make sure that interrupts are shut off (*before* we lower PS.INTLEVEL and PS.EXCM!) + + // Windowed register init, so we can call windowed code (eg. C code). + movi a1, 1 + wsr a1, WINDOWSTART + // The processor always clears WINDOWBASE at reset, so no need to clear it here. + // It resets WINDOWSTART to 1 starting with LX2.0/X7.0 (RB-2006.0). + // However, assuming hard reset is not yet always practical, so do this anyway: + wsr a0, WINDOWBASE + rsync + + // Set VECBASE to use our vectors instead vectors in ROM + movi a1, _vector_table + wsr a1, VECBASE + + + // Run only one core + // Multi-threading could be supported in future + rsr.prid a1 // core and multiprocessor ID + extui a1, a1, 13, 1 // extract core ID + beqz a1, .Lcore0 // goto Lcore0 for core0 only +.Lsuspend: // other cores are suspended + waiti 0 + j .Lsuspend + +.Lcore0: + // Initialize the stack pointer. + // See the "ABI and Software Conventions" chapter in the + // Xtensa ISA Reference manual for details. + + // NOTE: Because the _start routine does not use any memory in its + // stack frame, and because all of its CALL instructions use a + // window size of 4, the stack frame for _start can be empty. + movi sp, __stack + + // reserve stack space for + // - argv array + // - argument strings + movi a2, SYS_argv_size + simcall // returns size of argv[] + its strings in a2 + + // The stack only needs 16-byte alignment. + // However, here we round up the argv size further to 128 byte multiples + // so that in most cases, variations in argv[0]'s path do not result in + // different stack allocation. Otherwise, such variations can impact + // execution timing (eg. due to cache effects etc) for the same code and data. + // If we have a PIF, it's more likely the extra required space is okay. + addi a2, a2, 127 + srli a2, a2, 7 + slli a2, a2, 7 + + // No need to use MOVSP because we have no caller (we're the + // base caller); in fact it's better not to use MOVSP in this + // context, to avoid unnecessary ALLOCA exceptions and copying + // from undefined memory: + // sub a3, sp, a2 + // movsp sp, a3 + sub sp, sp, a2 + + /* + * Now that sp (a1) is set, we can set PS as per the application + * (user vector mode, enable interrupts, enable window exceptions if applicable). + */ + movi a3, PS_UM|PS_WOE // PS.WOE = 1, PS.UM = 1, PS.EXCM = 0, PS.INTLEVEL = 0 + wsr a3, PS + rsync + + #if XCHAL_HAVE_FP || XCHAL_HAVE_DFP + movi a3, 1 + wsr a3, CPENABLE + #endif + +1: + + /* + * Clear the BSS (uninitialized data) segments. + * This code supports multiple zeroed sections (*.bss). + * For speed, we clear memory using an ISS simcall + * (see crt1-boards.S for more generic BSS clearing code). + */ + movi a6, __bss_start + movi a7, _end + bgeu a6, a7, .Lnobss +.Lbssloop: + movi a2, SYS_memset + l32i a3, a6, 0 // arg1 = fill start address + movi a4, 0 // arg2 = fill pattern + l32i a5, a6, 4 // get end address + addi a6, a6, 8 // next bss table entry + sub a5, a5, a3 // arg3 = fill size in bytes + simcall // memset(a3,a4,a5) + bltu a6, a7, .Lbssloop // loop until end of bss table +.Lnobss: + + mov a3, sp // tell simcall where to write argv[] + movi a2, SYS_argv + simcall // write argv[] array at a3 + + movi a2, SYS_argc + simcall // put argc in a2 + + .weak _init + .weak _fini + mov ARG2, sp // argv + movi ARG3, _start_envp // envp + movi ARG4, _init // _init + movi ARG5, _fini // _fini + CALL __clibrary_init + + mov ARG1, a2 // argc + mov ARG2, sp // argv + CALL main + + // The return value is the same register as the first outgoing argument. + CALL exit // exit with main's return value + // Does not return here. + + .size _start, . - _start + diff --git a/libgloss/xtensa/default.specs b/libgloss/xtensa/default.specs new file mode 100644 index 0000000000..6002fe450f --- /dev/null +++ b/libgloss/xtensa/default.specs @@ -0,0 +1,2 @@ +*lib: +-lc -lnosys -lc diff --git a/libgloss/xtensa/include/register_access.h b/libgloss/xtensa/include/register_access.h new file mode 100644 index 0000000000..517220481d --- /dev/null +++ b/libgloss/xtensa/include/register_access.h @@ -0,0 +1,12 @@ +/* + * Copyright (C) 2023 Espressif Systems (Shanghai) CO LTD + * SPDX-License-Identifier: BSD-2-Clause + */ + +#ifndef REGISTER_ACCESS_H +#define REGISTER_ACCESS_H + +#define WRITE_REGISTER(addr, val) (*((volatile uint32_t *)(addr))) = (uint32_t)(val) +#define READ_REGISTER(addr) (*((volatile uint32_t *)(addr))) + +#endif // REGISTER_ACCESS_H diff --git a/libgloss/xtensa/include/syscalls.h b/libgloss/xtensa/include/syscalls.h new file mode 100644 index 0000000000..323d6fa351 --- /dev/null +++ b/libgloss/xtensa/include/syscalls.h @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2023 Espressif Systems (Shanghai) CO LTD + * SPDX-License-Identifier: BSD-2-Clause + */ + +#ifndef XTENSA_SIMCALL_H +#define XTENSA_SIMCALL_H + +#ifdef OPENOCD_SEMIHOSTING +/* This data based on libgloss project (file aarch64/svc.h) */ + +#define ESP_SEMIHOSTING_SYS_DRV_INFO 0x100 +#define ADP_STOPPED_APPLICATION_EXIT 0x20026 + +#define SYS_close 0x02 +#define SYS_clock 0x10 +#define SYS_elapsed 0x30 +#define SYS_errno 0x13 +#define SYS_exit 0x18 +#define SYS_exit_extended 0x20 +#define SYS_flen 0x0C +#define SYS_get_cmdline 0x15 +#define SYS_heapinfo 0x16 +#define SYS_iserror 0x08 +#define SYS_istty 0x09 +#define SYS_open 0x01 +#define SYS_read 0x06 +#define SYS_readc 0x07 +#define SYS_remove 0x0E +#define SYS_rename 0x0F +#define SYS_lseek 0x0A +#define SYS_system 0x12 +#define SYS_tickfreq 0x31 +#define SYS_time 0x11 +#define SYS_tmpnam 0x0D +#define SYS_write 0x05 +#define SYS_writec 0x03 +#define SYS_write0 0x04 + +#else + +/* This data based on QEMU project (file target/xtensa/xtensa-semi.c) */ + +#define SYS_exit 1 +#define SYS_read 3 +#define SYS_write 4 +#define SYS_open 5 +#define SYS_close 6 +#define SYS_lseek 19 +#define SYS_select_one 29 +#define SYS_sendto 27 +#define SYS_recvfrom 28 +#define SYS_select_one 29 +#define SYS_bind 30 +#define SYS_ioctl 31 + +#define SYS_argc 1000 +#define SYS_argv_size 1001 +#define SYS_argv 1002 +#define SYS_memset 1004 + +#endif /* OPENOCD_SEMIHOSTING */ + +#endif /* !XTENSA_SIMCALL_H */ diff --git a/libgloss/xtensa/include/xtensa/corebits.h b/libgloss/xtensa/include/xtensa/corebits.h new file mode 100644 index 0000000000..445e33495e --- /dev/null +++ b/libgloss/xtensa/include/xtensa/corebits.h @@ -0,0 +1,186 @@ +/* + * xtensa/corebits.h - Xtensa Special Register field positions, masks, values. + * + * (In previous releases, these were defined in specreg.h, a generated file. + * This file is not generated, ie. it is processor configuration independent.) + */ + +/* $Id: //depot/rel/Eaglenest/Xtensa/OS/include/xtensa/corebits.h#2 $ */ + +/* + * Copyright (c) 2005-2011 Tensilica Inc. + * + * Permission is hereby granted, free of charge, to any person obtaining + * a copy of this software and associated documentation files (the + * "Software"), to deal in the Software without restriction, including + * without limitation the rights to use, copy, modify, merge, publish, + * distribute, sublicense, and/or sell copies of the Software, and to + * permit persons to whom the Software is furnished to do so, subject to + * the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef XTENSA_COREBITS_H +#define XTENSA_COREBITS_H + +/* EXCCAUSE register fields: */ +#define EXCCAUSE_EXCCAUSE_SHIFT 0 +#define EXCCAUSE_EXCCAUSE_MASK 0x3F +/* EXCCAUSE register values: */ +/* + * General Exception Causes + * (values of EXCCAUSE special register set by general exceptions, + * which vector to the user, kernel, or double-exception vectors). + */ +#define EXCCAUSE_ILLEGAL 0 /* Illegal Instruction */ +#define EXCCAUSE_SYSCALL 1 /* System Call (SYSCALL instruction) */ +#define EXCCAUSE_INSTR_ERROR 2 /* Instruction Fetch Error */ +# define EXCCAUSE_IFETCHERROR 2 /* (backward compatibility macro, deprecated, avoid) */ +#define EXCCAUSE_LOAD_STORE_ERROR 3 /* Load Store Error */ +# define EXCCAUSE_LOADSTOREERROR 3 /* (backward compatibility macro, deprecated, avoid) */ +#define EXCCAUSE_LEVEL1_INTERRUPT 4 /* Level 1 Interrupt */ +# define EXCCAUSE_LEVEL1INTERRUPT 4 /* (backward compatibility macro, deprecated, avoid) */ +#define EXCCAUSE_ALLOCA 5 /* Stack Extension Assist (MOVSP instruction) for alloca */ +#define EXCCAUSE_DIVIDE_BY_ZERO 6 /* Integer Divide by Zero */ +#define EXCCAUSE_SPECULATION 7 /* Use of Failed Speculative Access (not implemented) */ +#define EXCCAUSE_PRIVILEGED 8 /* Privileged Instruction */ +#define EXCCAUSE_UNALIGNED 9 /* Unaligned Load or Store */ +/* Reserved 10..11 */ +#define EXCCAUSE_INSTR_DATA_ERROR 12 /* PIF Data Error on Instruction Fetch (RB-200x and later) */ +#define EXCCAUSE_LOAD_STORE_DATA_ERROR 13 /* PIF Data Error on Load or Store (RB-200x and later) */ +#define EXCCAUSE_INSTR_ADDR_ERROR 14 /* PIF Address Error on Instruction Fetch (RB-200x and later) */ +#define EXCCAUSE_LOAD_STORE_ADDR_ERROR 15 /* PIF Address Error on Load or Store (RB-200x and later) */ +#define EXCCAUSE_ITLB_MISS 16 /* ITLB Miss (no ITLB entry matches, hw refill also missed) */ +#define EXCCAUSE_ITLB_MULTIHIT 17 /* ITLB Multihit (multiple ITLB entries match) */ +#define EXCCAUSE_INSTR_RING 18 /* Ring Privilege Violation on Instruction Fetch */ +/* Reserved 19 */ /* Size Restriction on IFetch (not implemented) */ +#define EXCCAUSE_INSTR_PROHIBITED 20 /* Cache Attribute does not allow Instruction Fetch */ +/* Reserved 21..23 */ +#define EXCCAUSE_DTLB_MISS 24 /* DTLB Miss (no DTLB entry matches, hw refill also missed) */ +#define EXCCAUSE_DTLB_MULTIHIT 25 /* DTLB Multihit (multiple DTLB entries match) */ +#define EXCCAUSE_LOAD_STORE_RING 26 /* Ring Privilege Violation on Load or Store */ +/* Reserved 27 */ /* Size Restriction on Load/Store (not implemented) */ +#define EXCCAUSE_LOAD_PROHIBITED 28 /* Cache Attribute does not allow Load */ +#define EXCCAUSE_STORE_PROHIBITED 29 /* Cache Attribute does not allow Store */ +/* Reserved 30..31 */ +#define EXCCAUSE_CP_DISABLED(n) (32+(n)) /* Access to Coprocessor 'n' when disabled */ +#define EXCCAUSE_CP0_DISABLED 32 /* Access to Coprocessor 0 when disabled */ +#define EXCCAUSE_CP1_DISABLED 33 /* Access to Coprocessor 1 when disabled */ +#define EXCCAUSE_CP2_DISABLED 34 /* Access to Coprocessor 2 when disabled */ +#define EXCCAUSE_CP3_DISABLED 35 /* Access to Coprocessor 3 when disabled */ +#define EXCCAUSE_CP4_DISABLED 36 /* Access to Coprocessor 4 when disabled */ +#define EXCCAUSE_CP5_DISABLED 37 /* Access to Coprocessor 5 when disabled */ +#define EXCCAUSE_CP6_DISABLED 38 /* Access to Coprocessor 6 when disabled */ +#define EXCCAUSE_CP7_DISABLED 39 /* Access to Coprocessor 7 when disabled */ +/* Reserved 40..63 */ + +/* PS register fields: */ +#define PS_WOE_SHIFT 18 +#define PS_WOE_MASK 0x00040000 +#define PS_WOE PS_WOE_MASK +#define PS_WOE_ABI PS_WOE_MASK +#define PS_CALLINC_SHIFT 16 +#define PS_CALLINC_MASK 0x00030000 +#define PS_CALLINC(n) (((n)&3)< +#include + +//#define PS_OWB_SHIFT 8 +//#define PS_OWB_BITS 4 +//#define EXCCAUSE_ALLOCA 5 /* Stack Extension Assist (MOVSP instruction) for alloca */ + +#if XCHAL_HAVE_L32R + .section .rodata +_sim_panic_msg: + .ascii "PANIC: Unhandled exception!\n" + _sim_panic_msg_len = . - _sim_panic_msg + + .section .text + .literal .Lpanic_msg, _sim_panic_msg + .literal .Lpanic_msg_len, _sim_panic_msg_len + .align 4 +_xt_unhandled_exc: + movi a2, SYS_write + movi a3, 2 + l32r a4, .Lpanic_msg + l32r a5, .Lpanic_msg_len + simcall +#else +_xt_unhandled_exc: +#endif + movi a2, SYS_exit + movi a3, 1 + simcall + +/* +-------------------------------------------------------------------------------- +Handle alloca exception generated by interruptee executing 'movsp'. +This uses space between the window vectors, so is essentially "free". +All interruptee's regs are intact except a0 which is saved in EXCSAVE_1, +and PS.EXCM has been set by the exception hardware (can't be interrupted). +The fact the alloca exception was taken means the registers associated with +the base-save area have been spilled and will be restored by the underflow +handler, so those 4 registers are available for scratch. +The code is optimized to avoid unaligned branches and minimize cache misses. +-------------------------------------------------------------------------------- +*/ + + #if XCHAL_HAVE_WINDOWED + .section .text + .global _xt_alloca_exc + .align 4 +_xt_alloca_exc: + + rsr a0, WINDOWBASE /* grab WINDOWBASE before rotw changes it */ + rotw -1 /* WINDOWBASE goes to a4, new a0-a3 are scratch */ + rsr a2, PS + extui a3, a2, 8/*PS_OWB_BITS*/, 4/*PS_OWB_BITS*/ + xor a3, a3, a4 /* bits changed from old to current windowbase */ + rsr a4, EXCSAVE1 /* restore original a0 (now in a4) */ + slli a3, a3, 8 + xor a2, a2, a3 /* flip changed bits in old window base */ + wsr a2, PS /* update PS.OWB to new window base */ + rsync + + bbci.l a4, 31, _WindowUnderflow4 + rotw -1 /* original a0 goes to a8 */ + bbci.l a8, 30, _WindowUnderflow8 + rotw -1 + j _WindowUnderflow12 + #endif + + +/* +-------------------------------------------------------------------------------- + User exception handler. +-------------------------------------------------------------------------------- +*/ + + #if XCHAL_HAVE_WINDOWED + .section .text + .align 4 +_xt_to_alloca_exc: + j _xt_alloca_exc /* in window vectors section */ + #endif + + .type _xt_user_exc,@function + .align 4 +_xt_user_exc: + + rsr a0, EXCCAUSE + /* Handle alloca and syscall exceptions */ + #if XCHAL_HAVE_WINDOWED + beqi a0, 5/*EXCCAUSE_ALLOCA*/, _xt_to_alloca_exc + #endif + j _xt_unhandled_exc + + +/* +-------------------------------------------------------------------------------- +NMI Exception +-------------------------------------------------------------------------------- +*/ + + .begin literal_prefix .NMIExceptionVector + .section .NMIExceptionVector.text, "ax" + .global NMIExceptionVector + .type NMIExceptionVector,@function + .align 4 + +NMIExceptionVector: + j _xt_unhandled_exc + + .end literal_prefix + +/* +-------------------------------------------------------------------------------- +Kernel Exception +-------------------------------------------------------------------------------- +*/ + + .begin literal_prefix .KernelExceptionVector + .section .KernelExceptionVector.text, "ax" + .global KernelExceptionVector + .type KernelExceptionVector,@function + .align 4 + +KernelExceptionVector: + j _xt_unhandled_exc + + .end literal_prefix + +/* +-------------------------------------------------------------------------------- +User Exception +-------------------------------------------------------------------------------- +*/ + + .begin literal_prefix .UserExceptionVector + .section .UserExceptionVector.text, "ax" + .global _UserExceptionVector + .type _UserExceptionVector,@function + .align 4 + +_UserExceptionVector: + + wsr a0, EXCSAVE1 /* preserve a0 */ + j _xt_user_exc /* user exception handler */ + /* never returns here - call0 is used as a jump (see note at top) */ + + .end literal_prefix + +/* +-------------------------------------------------------------------------------- +Double Exception +-------------------------------------------------------------------------------- +*/ + + .begin literal_prefix .DoubleExceptionVector + .section .DoubleExceptionVector.text, "ax" + .global DoubleExceptionVector + .type DoubleExceptionVector,@function + .align 4 + +DoubleExceptionVector: + j _xt_unhandled_exc + + .end literal_prefix diff --git a/libgloss/xtensa/sim.elf.specs b/libgloss/xtensa/sim.elf.specs new file mode 100644 index 0000000000..3024f6887a --- /dev/null +++ b/libgloss/xtensa/sim.elf.specs @@ -0,0 +1,5 @@ +*startfile: +crt1-sim%O%s + +*lib: +-lc --whole-archive -lgloss --no-whole-archive -lpthread_stubs -lc %Tmemory.elf.ld %Tapp.elf.ld diff --git a/libgloss/xtensa/sleep.S b/libgloss/xtensa/sleep.S new file mode 100644 index 0000000000..2f20a61b54 --- /dev/null +++ b/libgloss/xtensa/sleep.S @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2023 Espressif Systems (Shanghai) CO LTD + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include + +#define USECONDS_IN_SECOND 1000000 + + .type sleep, @function + .align 4 + .global sleep +sleep: + entry a1, 0x30 + mov.n a7, a1 + s32i.n a2, a7, 0 + + mov a3, a2 +.Lsleep_delay_second: + addi a3, a3, -1 + movi a10, USECONDS_IN_SECOND + call8 usleep + bnez a3, .Lsleep_delay_second + +.Lsleep_exit: + s32i.n a2, a7, 0 + retw + + + .type usleep, @function + .align 4 + .global usleep +usleep: + entry a1, 0x30 + mov.n a7, a1 + s32i.n a2, a7, 0 + + /* convert time to CLOCK ticks per 1us */ + movi a6, CPU_FREQUENCY_MHZ // CPU_FREQUENCY_MHZ == ticks per us + mull a2, a2, a6 + + /* + * Registers purpose: + * a3 - start CCOUNT value + * a4 - current CCOUNT value + * a5 - target CCOUNT value + */ + + rsr a3, CCOUNT + add a5, a3, a2 + bgeu a5, a3, .Lusleep_waitloop + +.Lusleep_waitoverflow: + /* you are here because a5 (target CCOUNT) was overflown + * it means that we need to wait CCOUNT register overflow + * before do main loop + */ + rsr a4, CCOUNT + bgeu a4, a3, .Lusleep_waitoverflow + +.Lusleep_waitloop: + /* wait until we reach target CCOUNT value */ + rsr a4, CCOUNT + bgeu a4, a5, .Lusleep_exit + j .Lusleep_waitloop +.Lusleep_exit: + s32i.n a2, a7, 0 + retw + diff --git a/libgloss/xtensa/sys.openocd.specs b/libgloss/xtensa/sys.openocd.specs new file mode 100644 index 0000000000..4573184245 --- /dev/null +++ b/libgloss/xtensa/sys.openocd.specs @@ -0,0 +1,8 @@ +%rename link_gcc_c_sequence openocd_link_gcc_c_sequence + +*libopenocd: +--whole-archive -lsys_openocd --no-whole-archive + +*link_gcc_c_sequence: +%(openocd_link_gcc_c_sequence) --start-group %G %(libopenocd) --end-group + diff --git a/libgloss/xtensa/sys.qemu.specs b/libgloss/xtensa/sys.qemu.specs new file mode 100644 index 0000000000..5185c04804 --- /dev/null +++ b/libgloss/xtensa/sys.qemu.specs @@ -0,0 +1,8 @@ +%rename link_gcc_c_sequence qemu_link_gcc_c_sequence + +*libqemu: +--whole-archive -lsys_qemu --no-whole-archive + +*link_gcc_c_sequence: +%(qemu_link_gcc_c_sequence) --start-group %G %(libqemu) --end-group + diff --git a/libgloss/xtensa/syscalls.c b/libgloss/xtensa/syscalls.c new file mode 100644 index 0000000000..11e972c3fd --- /dev/null +++ b/libgloss/xtensa/syscalls.c @@ -0,0 +1,205 @@ +/* + * Copyright (C) 2023 Espressif Systems (Shanghai) CO LTD + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include +#include +#include + +#if defined (OPENOCD_SEMIHOSTING) || (QEMU_SEMIHOSTING) +# define WITH_SEMIHOSTING +# define __WEAK_FUNCTION_ATTR__ +#else +# define __WEAK_FUNCTION_ATTR__ __attribute__((__weak__)) +#endif + + +/* __semihosting_call is a function in case semihosting usage, macro (-1) otherwise */ +#ifdef WITH_SEMIHOSTING + +static inline int +__attribute__ ((always_inline)) +__semihosting_call(int id, int arg1, int arg2, int arg3, int arg4) +{ +# ifdef OPENOCD_SEMIHOSTING + register long a2 asm("a2") = id; + long args[] = {arg1, arg2, arg3, arg4}; + register long a3 asm("a3") = (long)&args; + + /* OpenOCD has different semihosting api for sys_exit on 32-bit and 64-bit */ + if (id == SYS_exit && sizeof(void *) != 8) { + a3 = ADP_STOPPED_APPLICATION_EXIT; + } + __asm__ __volatile__ ( + "break 1, 14\n" + : "+r"(a2): "r"(a3) + : "memory"); + + // return code is placed in a2 register, so return it to the caller + return a2; +# else // OPENOCD_SEMIHOSTING + extern int __sim_call(int id, int arg1, int arg2, int arg3, int arg4); + return __sim_call(id, arg1, arg2, arg3, arg4); +# endif // OPENOCD_SEMIHOSTING +} + +# ifdef OPENOCD_SEMIHOSTING + +int +__semihosting_init (void) +{ + struct { + int version; + } ver_info = { 2 }; + __semihosting_call(ESP_SEMIHOSTING_SYS_DRV_INFO, (long) &ver_info, sizeof(ver_info), 0, 0); +} + +# endif // OPENOCD_SEMIHOSTING + +#else // !WITH_SEMIHOSTING +# define __semihosting_call(...) (-1) +#endif // WITH_SEMIHOSTING + + +void +__WEAK_FUNCTION_ATTR__ +__attribute__ ((noreturn)) +_exit (int status) +{ + __semihosting_call(SYS_exit, status, 0, 0, 0); + + for (;;) { + ; + } +} + + +int +__WEAK_FUNCTION_ATTR__ +_open (const char *file, int flags, int mode) +{ + return __semihosting_call(SYS_open, (int) file, flags, mode, 0); +} + + +int +__WEAK_FUNCTION_ATTR__ +_lseek (int fd, _off_t off, int whence) +{ + return __semihosting_call(SYS_lseek, fd, off, whence, 0); +} + + +int +__WEAK_FUNCTION_ATTR__ +_close (int fd) +{ + return __semihosting_call(SYS_close, fd, 0, 0, 0); +} + + +_ssize_t +__WEAK_FUNCTION_ATTR__ +_write (int fd, const char *buf, size_t cnt) +{ + int ret = 0; +#ifdef WITH_SEMIHOSTING + ret = __semihosting_call(SYS_write, fd, (int) buf, cnt, 0); +# ifdef OPENOCD_SEMIHOSTING + /* ret - number of bytes that are NOT written. Calculate written */ + ret = cnt - ret; +# endif // OPENOCD_SEMIHOSTING +#else // !WITH_SEMIHOSTING + if (fd != STDOUT_FILENO && fd != STDERR_FILENO) { + return -1; + } + + for (uint32_t i = 0; i < cnt; i++) { + board_uart_write_char(buf[i]); + } + ret = cnt; +#endif // WITH_SEMIHOSTING + return ret; +} + + +/* Do not compile functions with common implementation + * if building semihosting library + */ +#ifndef WITH_SEMIHOSTING + +struct _reent* +__WEAK_FUNCTION_ATTR__ +__getreent(void) +{ + return _GLOBAL_REENT; +} + + +int +__WEAK_FUNCTION_ATTR__ +_fstat (int fd, struct stat *pstat) +{ + + if (fd < STDERR_FILENO) + { + pstat->st_mode = S_IFCHR; + return 0; + } + return -1; +} + + +_ssize_t +__WEAK_FUNCTION_ATTR__ +_read (int fd, char *buf, size_t cnt) +{ + return -1; +} + + +int +__WEAK_FUNCTION_ATTR__ +_getpid (void) +{ + return -1; +} + + +int +__WEAK_FUNCTION_ATTR__ +_kill (int sig) +{ + return -1; +} + + +void * +__WEAK_FUNCTION_ATTR__ +_sbrk (int incr) +{ + extern char end; /* Set by linker. */ + static char * heap_end; + char * prev_heap_end; + + if (heap_end == 0) { + heap_end = & end; + } + + prev_heap_end = heap_end; + heap_end += incr; + + return (void *) prev_heap_end; +} + + +int +__WEAK_FUNCTION_ATTR__ +pthread_setcancelstate (int state, int *oldstate) +{ + return 0; +} + +#endif // WITH_SEMIHOSTING diff --git a/libgloss/xtensa/window-vectors.S b/libgloss/xtensa/window-vectors.S new file mode 100644 index 0000000000..acab8b355c --- /dev/null +++ b/libgloss/xtensa/window-vectors.S @@ -0,0 +1,252 @@ +// window-vectors-new.S - Register Window Overflow/Underflow Handlers for XEA2 +// $Id: //depot/rel/Eaglenest/Xtensa/OS/xtos/window-vectors-new.S#3 $ + +// Copyright (c) 1999-2013 Tensilica Inc. +// +// Permission is hereby granted, free of charge, to any person obtaining +// a copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to +// permit persons to whom the Software is furnished to do so, subject to +// the following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +// IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +// CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +// TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +// SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +// Exports +.global _WindowOverflow4 +.global _WindowUnderflow4 +.global _WindowOverflow8 +.global _WindowUnderflow8 +.global _WindowOverflow12 +.global _WindowUnderflow12 + + // Note: the current window exception vectors do not generate any + // literals. Hence the literal_prefix directive is not necessary. + // Specifying it "just in case" creates an empty section (named + // ".WindowVectors.literal") which can in some cases cause linking + // problems (the linker scripts don't place it anywhere). + // So leave it commented out: + // + //.begin literal_prefix .WindowVectors + + .section .WindowVectors.text, "ax" + +// +// GENERAL NOTES: +// +// These window exception handlers need not be modified. +// They are specific to the windowed call ABI only. +// +// Underflow Handlers: +// +// The underflow handler for returning from call[i+1] to call[i] +// must preserve all the registers from call[i+1]'s window. +// In particular, a0 and a1 must be preserved because the RETW instruction +// will be reexecuted (and may even underflow again if an intervening +// exception has flushed call[i]'s registers). +// Registers a2 and up may contain return values. +// +// The caller could also potentially assume that the callee's a0 and a1 +// (its own a4&a5 if call4, a8&a9 if call8, a12&a13 if call12) +// are correct for whatever reason (not a clean thing to do in general, +// but if it's possible, unless the ABI explicitly prohibits it, +// it will eventually be done :) -- whether the the ABI needs to +// prohibit this is a different question). +// +// Timing of Handlers: +// +// Here is an overview of the overhead of taking a window exception, +// ie. the number of additional cycles taken relative to case where +// an exception is not taken. +// NOTE: these numbers do not take into account any cache misses, +// write buffer stalls, or other external stalls, if they occur. +// The totals consist of 5 cycles to enter the handler (or 6 or 7 +// for optional longer pipelines in Xtensa LX), the number of instructions +// and interlocks (2nd and 3rd columns below), and 2 cycles jump delay +// on return (3 cycles for optional longer I-side pipeline in Xtensa LX): +// +// Instruction+bubbles Totals (5-stage) +// XEA1 XEA2 XEA1 XEA2 +// Overflow-4 7 5 14 12 +// Overflow-8 14 10 21 17 +// Overflow-12 18 14 25 21 +// Underflow-4 6 5 13 12 +// Underflow-8 14 10 21 17 +// Underflow-12 18 14 25 21 +// +// Underflow-8 15 12 25 22 (7-stage; could be made 1 less) +// Underflow-12 19 16 29 26 (7-stage; could be made 1 less) + + +// 4-Register Window Overflow Vector (Handler) +// +// Invoked if a call[i] referenced a register (a4-a15) +// that contains data from ancestor call[j]; +// call[j] had done a call4 to call[j+1]. +// On entry here: +// window rotated to call[j] start point; +// a0-a3 are registers to be saved; +// a4-a15 must be preserved; +// a5 is call[j+1]'s stack pointer. + + .org 0x0 +_WindowOverflow4: + s32e a0, a5, -16 // save a0 to call[j+1]'s stack frame + s32e a1, a5, -12 // save a1 to call[j+1]'s stack frame + s32e a2, a5, -8 // save a2 to call[j+1]'s stack frame + s32e a3, a5, -4 // save a3 to call[j+1]'s stack frame + rfwo // rotates back to call[i] position + + .size _WindowOverflow4, . - _WindowOverflow4 + + +// 4-Register Window Underflow Vector (Handler) +// +// Invoked by RETW returning from call[i+1] to call[i] +// where call[i]'s registers must be reloaded (not live in ARs); +// call[i] had done a call4 to call[i+1]. +// On entry here: +// window rotated to call[i] start point; +// a0-a3 are undefined, must be reloaded with call[i].reg[0..3]; +// a4-a15 must be preserved (they are call[i+1].reg[0..11]); +// a5 is call[i+1]'s stack pointer. + + .org 0x40 +_WindowUnderflow4: + l32e a0, a5, -16 // restore a0 from call[i+1]'s stack frame + l32e a1, a5, -12 // restore a1 from call[i+1]'s stack frame + l32e a2, a5, -8 // restore a2 from call[i+1]'s stack frame + l32e a3, a5, -4 // restore a3 from call[i+1]'s stack frame + rfwu + + .size _WindowUnderflow4, . - _WindowUnderflow4 + + +// 8-Register Window Overflow Vector (Handler) +// +// Invoked if a call[i] referenced a register (a4-a15) +// that contains data from ancestor call[j]; +// call[j] had done a call8 to call[j+1]. +// On entry here: +// window rotated to call[j] start point; +// a0-a7 are registers to be saved; +// a8-a15 must be preserved; +// a9 is call[j+1]'s stack pointer. + + .org 0x80 +_WindowOverflow8: + s32e a0, a9, -16 // save a0 to call[j+1]'s stack frame + l32e a0, a1, -12 // a0 <- call[j-1]'s sp (used to find end of call[j]'s frame) + s32e a1, a9, -12 // save a1 to call[j+1]'s stack frame + s32e a2, a9, -8 // save a2 to call[j+1]'s stack frame + s32e a3, a9, -4 // save a3 to call[j+1]'s stack frame + s32e a4, a0, -32 // save a4 to call[j]'s stack frame + s32e a5, a0, -28 // save a5 to call[j]'s stack frame + s32e a6, a0, -24 // save a6 to call[j]'s stack frame + s32e a7, a0, -20 // save a7 to call[j]'s stack frame + rfwo // rotates back to call[i] position + + .size _WindowOverflow8, . - _WindowOverflow8 + + +// 8-Register Window Underflow Vector (Handler) +// +// Invoked by RETW returning from call[i+1] to call[i] +// where call[i]'s registers must be reloaded (not live in ARs); +// call[i] had done a call8 to call[i+1]. +// On entry here: +// window rotated to call[i] start point; +// a0-a7 are undefined, must be reloaded with call[i].reg[0..7]; +// a8-a15 must be preserved (they are call[i+1].reg[0..7]); +// a9 is call[i+1]'s stack pointer. + + .org 0xC0 +_WindowUnderflow8: + l32e a0, a9, -16 // restore a0 from call[i+1]'s stack frame + l32e a1, a9, -12 // restore a1 from call[i+1]'s stack frame + l32e a2, a9, -8 // restore a2 from call[i+1]'s stack frame + l32e a7, a1, -12 // a7 <- call[i-1]'s sp (used to find end of call[i]'s frame) + l32e a3, a9, -4 // restore a3 from call[i+1]'s stack frame + l32e a4, a7, -32 // restore a4 from call[i]'s stack frame + l32e a5, a7, -28 // restore a5 from call[i]'s stack frame + l32e a6, a7, -24 // restore a6 from call[i]'s stack frame../../.././libgloss/xtensa/window-vectors.S + l32e a7, a7, -20 // restore a7 from call[i]'s stack frame + rfwu + + .size _WindowUnderflow8, . - _WindowUnderflow8 + + +// 12-Register Window Overflow Vector (Handler) +// +// Invoked if a call[i] referenced a register (a4-a15) +// that contains data from ancestor call[j]; +// call[j] had done a call12 to call[j+1]. +// On entry here: +// window rotated to call[j] start point; +// a0-a11 are registers to be saved; +// a12-a15 must be preserved; +// a13 is call[j+1]'s stack pointer. + + .org 0x100 +_WindowOverflow12: + s32e a0, a13, -16 // save a0 to call[j+1]'s stack frame + l32e a0, a1, -12 // a0 <- call[j-1]'s sp (used to find end of call[j]'s frame) + s32e a1, a13, -12 // save a1 to call[j+1]'s stack frame + s32e a2, a13, -8 // save a2 to call[j+1]'s stack frame + s32e a3, a13, -4 // save a3 to call[j+1]'s stack frame + s32e a4, a0, -48 // save a4 to end of call[j]'s stack frame + s32e a5, a0, -44 // save a5 to end of call[j]'s stack frame + s32e a6, a0, -40 // save a6 to end of call[j]'s stack frame + s32e a7, a0, -36 // save a7 to end of call[j]'s stack frame + s32e a8, a0, -32 // save a8 to end of call[j]'s stack frame + s32e a9, a0, -28 // save a9 to end of call[j]'s stack frame + s32e a10, a0, -24 // save a10 to end of call[j]'s stack frame + s32e a11, a0, -20 // save a11 to end of call[j]'s stack frame + rfwo // rotates back to call[i] position + + .size _WindowOverflow12, . - _WindowOverflow12 + + +// 12-Register Window Underflow Vector (Handler) +// +// Invoked by RETW returning from call[i+1] to call[i] +// where call[i]'s registers must be reloaded (not live in ARs); +// call[i] had done a call12 to call[i+1]. +// On entry here: +// window rotated to call[i] start point; +// a0-a11 are undefined, must be reloaded with call[i].reg[0..11]; +// a12-a15 must be preserved (they are call[i+1].reg[0..3]); +// a13 is call[i+1]'s stack pointer. + + .org 0x140 +_WindowUnderflow12: + l32e a0, a13, -16 // restore a0 from call[i+1]'s stack frame + l32e a1, a13, -12 // restore a1 from call[i+1]'s stack frame + l32e a2, a13, -8 // restore a2 from call[i+1]'s stack frame + l32e a11, a1, -12 // a11 <- call[i-1]'s sp (used to find end of call[i]'s frame) + l32e a3, a13, -4 // restore a3 from call[i+1]'s stack frame + l32e a4, a11, -48 // restore a4 from end of call[i]'s stack frame + l32e a5, a11, -44 // restore a5 from end of call[i]'s stack frame + l32e a6, a11, -40 // restore a6 from end of call[i]'s stack frame + l32e a7, a11, -36 // restore a7 from end of call[i]'s stack frame + l32e a8, a11, -32 // restore a8 from end of call[i]'s stack frame + l32e a9, a11, -28 // restore a9 from end of call[i]'s stack frame + l32e a10, a11, -24 // restore a10 from end of call[i]'s stack frame + l32e a11, a11, -20 // restore a11 from end of call[i]'s stack frame + rfwu + + .size _WindowUnderflow12, . - _WindowUnderflow12 + + + //.end literal_prefix + .text diff --git a/newlib/MAINTAINERS b/newlib/MAINTAINERS index bb1680494b..4dfef27311 100644 --- a/newlib/MAINTAINERS +++ b/newlib/MAINTAINERS @@ -43,6 +43,7 @@ risc-v Kito Cheng kito.cheng@gmail.com aarch64 Richard Earnshaw richard.earnshaw@arm.com Marcus Shawcroft marcus.shawcroft@arm.com msp430 Nick Clifton nickc@redhat.com +pru Dimitar Dimitrov dimitar@dinux.eu OS Port Maintainers (OS alphabetical order) diff --git a/newlib/Makefile.am b/newlib/Makefile.am index 0108d8576b..4ab36b8d84 100644 --- a/newlib/Makefile.am +++ b/newlib/Makefile.am @@ -63,13 +63,14 @@ AM_MAKEFLAGS = \ FLAGS_TO_PASS=$(AM_MAKEFLAGS) +srcroot = $(top_srcdir)/.. tooldir = $(exec_prefix)/$(host_alias) toollibdir = $(tooldir)/lib$(MULTISUBDIR) # These are useful for standalone object files like crt0.o. AM_CFLAGS = $(AM_CFLAGS_$(subst /,_,$(@D))) $(AM_CFLAGS_$(subst /,_,$(@D)_$( libc/sys/xtensa/$(am__dirstamp) +libc/sys/xtensa/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) libc/sys/xtensa/$(DEPDIR) + @: > libc/sys/xtensa/$(DEPDIR)/$(am__dirstamp) +libc/sys/xtensa/libc_a-creat.$(OBJEXT): \ + libc/sys/xtensa/$(am__dirstamp) \ + libc/sys/xtensa/$(DEPDIR)/$(am__dirstamp) +libc/sys/xtensa/libc_a-isatty.$(OBJEXT): \ + libc/sys/xtensa/$(am__dirstamp) \ + libc/sys/xtensa/$(DEPDIR)/$(am__dirstamp) +libc/sys/xtensa/libc_a-clibrary_init.$(OBJEXT): \ + libc/sys/xtensa/$(am__dirstamp) \ + libc/sys/xtensa/$(DEPDIR)/$(am__dirstamp) libc/sys/z8ksim/$(am__dirstamp): @$(MKDIR_P) libc/sys/z8ksim @: > libc/sys/z8ksim/$(am__dirstamp) @@ -7592,10 +8077,13 @@ libc/machine/aarch64/libc_a-memcpy-stub.$(OBJEXT): \ libc/machine/aarch64/libc_a-memcpy.$(OBJEXT): \ libc/machine/aarch64/$(am__dirstamp) \ libc/machine/aarch64/$(DEPDIR)/$(am__dirstamp) -libc/machine/aarch64/libc_a-memmove-stub.$(OBJEXT): \ +libc/machine/aarch64/libc_a-memmove.$(OBJEXT): \ libc/machine/aarch64/$(am__dirstamp) \ libc/machine/aarch64/$(DEPDIR)/$(am__dirstamp) -libc/machine/aarch64/libc_a-memmove.$(OBJEXT): \ +libc/machine/aarch64/libc_a-memrchr-stub.$(OBJEXT): \ + libc/machine/aarch64/$(am__dirstamp) \ + libc/machine/aarch64/$(DEPDIR)/$(am__dirstamp) +libc/machine/aarch64/libc_a-memrchr.$(OBJEXT): \ libc/machine/aarch64/$(am__dirstamp) \ libc/machine/aarch64/$(DEPDIR)/$(am__dirstamp) libc/machine/aarch64/libc_a-memset-stub.$(OBJEXT): \ @@ -7673,10 +8161,10 @@ libc/machine/amdgcn/$(am__dirstamp): libc/machine/amdgcn/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) libc/machine/amdgcn/$(DEPDIR) @: > libc/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) -libc/machine/amdgcn/libc_a-abort.$(OBJEXT): \ +libc/machine/amdgcn/libc_a-_exit.$(OBJEXT): \ libc/machine/amdgcn/$(am__dirstamp) \ libc/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) -libc/machine/amdgcn/libc_a-exit.$(OBJEXT): \ +libc/machine/amdgcn/libc_a-abort.$(OBJEXT): \ libc/machine/amdgcn/$(am__dirstamp) \ libc/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) libc/machine/amdgcn/libc_a-atexit.$(OBJEXT): \ @@ -8447,6 +8935,9 @@ libc/machine/nvptx/$(am__dirstamp): libc/machine/nvptx/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) libc/machine/nvptx/$(DEPDIR) @: > libc/machine/nvptx/$(DEPDIR)/$(am__dirstamp) +libc/machine/nvptx/libc_a-_exit.$(OBJEXT): \ + libc/machine/nvptx/$(am__dirstamp) \ + libc/machine/nvptx/$(DEPDIR)/$(am__dirstamp) libc/machine/nvptx/libc_a-calloc.$(OBJEXT): \ libc/machine/nvptx/$(am__dirstamp) \ libc/machine/nvptx/$(DEPDIR)/$(am__dirstamp) @@ -8486,9 +8977,6 @@ libc/machine/nvptx/libc_a-printf.$(OBJEXT): \ libc/machine/nvptx/libc_a-abort.$(OBJEXT): \ libc/machine/nvptx/$(am__dirstamp) \ libc/machine/nvptx/$(DEPDIR)/$(am__dirstamp) -libc/machine/nvptx/libc_a-exit.$(OBJEXT): \ - libc/machine/nvptx/$(am__dirstamp) \ - libc/machine/nvptx/$(DEPDIR)/$(am__dirstamp) libc/machine/nvptx/libc_a-misc.$(OBJEXT): \ libc/machine/nvptx/$(am__dirstamp) \ libc/machine/nvptx/$(DEPDIR)/$(am__dirstamp) @@ -9281,6 +9769,33 @@ libc/machine/xstormy16/libc_a-reallocr.$(OBJEXT): \ libc/machine/xstormy16/libc_a-valloc.$(OBJEXT): \ libc/machine/xstormy16/$(am__dirstamp) \ libc/machine/xstormy16/$(DEPDIR)/$(am__dirstamp) +libc/machine/xtensa/$(am__dirstamp): + @$(MKDIR_P) libc/machine/xtensa + @: > libc/machine/xtensa/$(am__dirstamp) +libc/machine/xtensa/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) libc/machine/xtensa/$(DEPDIR) + @: > libc/machine/xtensa/$(DEPDIR)/$(am__dirstamp) +libc/machine/xtensa/libc_a-memcpy.$(OBJEXT): \ + libc/machine/xtensa/$(am__dirstamp) \ + libc/machine/xtensa/$(DEPDIR)/$(am__dirstamp) +libc/machine/xtensa/libc_a-memset.$(OBJEXT): \ + libc/machine/xtensa/$(am__dirstamp) \ + libc/machine/xtensa/$(DEPDIR)/$(am__dirstamp) +libc/machine/xtensa/libc_a-setjmp.$(OBJEXT): \ + libc/machine/xtensa/$(am__dirstamp) \ + libc/machine/xtensa/$(DEPDIR)/$(am__dirstamp) +libc/machine/xtensa/libc_a-strcmp.$(OBJEXT): \ + libc/machine/xtensa/$(am__dirstamp) \ + libc/machine/xtensa/$(DEPDIR)/$(am__dirstamp) +libc/machine/xtensa/libc_a-strcpy.$(OBJEXT): \ + libc/machine/xtensa/$(am__dirstamp) \ + libc/machine/xtensa/$(DEPDIR)/$(am__dirstamp) +libc/machine/xtensa/libc_a-strlen.$(OBJEXT): \ + libc/machine/xtensa/$(am__dirstamp) \ + libc/machine/xtensa/$(DEPDIR)/$(am__dirstamp) +libc/machine/xtensa/libc_a-strncpy.$(OBJEXT): \ + libc/machine/xtensa/$(am__dirstamp) \ + libc/machine/xtensa/$(DEPDIR)/$(am__dirstamp) libc/machine/z8k/$(am__dirstamp): @$(MKDIR_P) libc/machine/z8k @: > libc/machine/z8k/$(am__dirstamp) @@ -9611,6 +10126,8 @@ libm/math/libm_a-w_sincos.$(OBJEXT): libm/math/$(am__dirstamp) \ libm/math/$(DEPDIR)/$(am__dirstamp) libm/math/libm_a-w_drem.$(OBJEXT): libm/math/$(am__dirstamp) \ libm/math/$(DEPDIR)/$(am__dirstamp) +libm/math/libm_a-signgam.$(OBJEXT): libm/math/$(am__dirstamp) \ + libm/math/$(DEPDIR)/$(am__dirstamp) libm/math/libm_a-s_asinh.$(OBJEXT): libm/math/$(am__dirstamp) \ libm/math/$(DEPDIR)/$(am__dirstamp) libm/math/libm_a-s_atan.$(OBJEXT): libm/math/$(am__dirstamp) \ @@ -10096,6 +10613,102 @@ libm/common/libm_a-log2l.$(OBJEXT): libm/common/$(am__dirstamp) \ libm/common/$(DEPDIR)/$(am__dirstamp) libm/common/libm_a-sl_finite.$(OBJEXT): libm/common/$(am__dirstamp) \ libm/common/$(DEPDIR)/$(am__dirstamp) +libm/ld/$(am__dirstamp): + @$(MKDIR_P) libm/ld + @: > libm/ld/$(am__dirstamp) +libm/ld/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) libm/ld/$(DEPDIR) + @: > libm/ld/$(DEPDIR)/$(am__dirstamp) +libm/ld/libm_a-e_acoshl.$(OBJEXT): libm/ld/$(am__dirstamp) \ + libm/ld/$(DEPDIR)/$(am__dirstamp) +libm/ld/libm_a-e_acosl.$(OBJEXT): libm/ld/$(am__dirstamp) \ + libm/ld/$(DEPDIR)/$(am__dirstamp) +libm/ld/libm_a-e_asinl.$(OBJEXT): libm/ld/$(am__dirstamp) \ + libm/ld/$(DEPDIR)/$(am__dirstamp) +libm/ld/libm_a-e_atan2l.$(OBJEXT): libm/ld/$(am__dirstamp) \ + libm/ld/$(DEPDIR)/$(am__dirstamp) +libm/ld/libm_a-e_atanhl.$(OBJEXT): libm/ld/$(am__dirstamp) \ + libm/ld/$(DEPDIR)/$(am__dirstamp) +libm/ld/libm_a-e_coshl.$(OBJEXT): libm/ld/$(am__dirstamp) \ + libm/ld/$(DEPDIR)/$(am__dirstamp) +libm/ld/libm_a-e_fmodl.$(OBJEXT): libm/ld/$(am__dirstamp) \ + libm/ld/$(DEPDIR)/$(am__dirstamp) +libm/ld/libm_a-e_lgammal.$(OBJEXT): libm/ld/$(am__dirstamp) \ + libm/ld/$(DEPDIR)/$(am__dirstamp) +libm/ld/libm_a-e_remainderl.$(OBJEXT): libm/ld/$(am__dirstamp) \ + libm/ld/$(DEPDIR)/$(am__dirstamp) +libm/ld/libm_a-e_sinhl.$(OBJEXT): libm/ld/$(am__dirstamp) \ + libm/ld/$(DEPDIR)/$(am__dirstamp) +libm/ld/libm_a-s_asinhl.$(OBJEXT): libm/ld/$(am__dirstamp) \ + libm/ld/$(DEPDIR)/$(am__dirstamp) +libm/ld/libm_a-s_atanl.$(OBJEXT): libm/ld/$(am__dirstamp) \ + libm/ld/$(DEPDIR)/$(am__dirstamp) +libm/ld/libm_a-s_cbrtl.$(OBJEXT): libm/ld/$(am__dirstamp) \ + libm/ld/$(DEPDIR)/$(am__dirstamp) +libm/ld/libm_a-s_ceill.$(OBJEXT): libm/ld/$(am__dirstamp) \ + libm/ld/$(DEPDIR)/$(am__dirstamp) +libm/ld/libm_a-s_copysignl.$(OBJEXT): libm/ld/$(am__dirstamp) \ + libm/ld/$(DEPDIR)/$(am__dirstamp) +libm/ld/libm_a-s_cosl.$(OBJEXT): libm/ld/$(am__dirstamp) \ + libm/ld/$(DEPDIR)/$(am__dirstamp) +libm/ld/libm_a-s_fabsl.$(OBJEXT): libm/ld/$(am__dirstamp) \ + libm/ld/$(DEPDIR)/$(am__dirstamp) +libm/ld/libm_a-fdiml.$(OBJEXT): libm/ld/$(am__dirstamp) \ + libm/ld/$(DEPDIR)/$(am__dirstamp) +libm/ld/libm_a-s_floorl.$(OBJEXT): libm/ld/$(am__dirstamp) \ + libm/ld/$(DEPDIR)/$(am__dirstamp) +libm/ld/libm_a-s_fmal.$(OBJEXT): libm/ld/$(am__dirstamp) \ + libm/ld/$(DEPDIR)/$(am__dirstamp) +libm/ld/libm_a-s_fmaxl.$(OBJEXT): libm/ld/$(am__dirstamp) \ + libm/ld/$(DEPDIR)/$(am__dirstamp) +libm/ld/libm_a-s_fminl.$(OBJEXT): libm/ld/$(am__dirstamp) \ + libm/ld/$(DEPDIR)/$(am__dirstamp) +libm/ld/libm_a-s_frexpl.$(OBJEXT): libm/ld/$(am__dirstamp) \ + libm/ld/$(DEPDIR)/$(am__dirstamp) +libm/ld/libm_a-s_ilogbl.$(OBJEXT): libm/ld/$(am__dirstamp) \ + libm/ld/$(DEPDIR)/$(am__dirstamp) +libm/ld/libm_a-s_llrintl.$(OBJEXT): libm/ld/$(am__dirstamp) \ + libm/ld/$(DEPDIR)/$(am__dirstamp) +libm/ld/libm_a-s_llroundl.$(OBJEXT): libm/ld/$(am__dirstamp) \ + libm/ld/$(DEPDIR)/$(am__dirstamp) +libm/ld/libm_a-s_logbl.$(OBJEXT): libm/ld/$(am__dirstamp) \ + libm/ld/$(DEPDIR)/$(am__dirstamp) +libm/ld/libm_a-s_lrint.$(OBJEXT): libm/ld/$(am__dirstamp) \ + libm/ld/$(DEPDIR)/$(am__dirstamp) +libm/ld/libm_a-s_lrintl.$(OBJEXT): libm/ld/$(am__dirstamp) \ + libm/ld/$(DEPDIR)/$(am__dirstamp) +libm/ld/libm_a-s_lround.$(OBJEXT): libm/ld/$(am__dirstamp) \ + libm/ld/$(DEPDIR)/$(am__dirstamp) +libm/ld/libm_a-s_lroundl.$(OBJEXT): libm/ld/$(am__dirstamp) \ + libm/ld/$(DEPDIR)/$(am__dirstamp) +libm/ld/libm_a-s_modfl.$(OBJEXT): libm/ld/$(am__dirstamp) \ + libm/ld/$(DEPDIR)/$(am__dirstamp) +libm/ld/libm_a-s_nearbyintl.$(OBJEXT): libm/ld/$(am__dirstamp) \ + libm/ld/$(DEPDIR)/$(am__dirstamp) +libm/ld/libm_a-s_nextafterl.$(OBJEXT): libm/ld/$(am__dirstamp) \ + libm/ld/$(DEPDIR)/$(am__dirstamp) +libm/ld/libm_a-s_nexttoward.$(OBJEXT): libm/ld/$(am__dirstamp) \ + libm/ld/$(DEPDIR)/$(am__dirstamp) +libm/ld/libm_a-s_nexttowardf.$(OBJEXT): libm/ld/$(am__dirstamp) \ + libm/ld/$(DEPDIR)/$(am__dirstamp) +libm/ld/libm_a-s_remquol.$(OBJEXT): libm/ld/$(am__dirstamp) \ + libm/ld/$(DEPDIR)/$(am__dirstamp) +libm/ld/libm_a-s_rintl.$(OBJEXT): libm/ld/$(am__dirstamp) \ + libm/ld/$(DEPDIR)/$(am__dirstamp) +libm/ld/libm_a-s_roundl.$(OBJEXT): libm/ld/$(am__dirstamp) \ + libm/ld/$(DEPDIR)/$(am__dirstamp) +libm/ld/libm_a-scalblnl.$(OBJEXT): libm/ld/$(am__dirstamp) \ + libm/ld/$(DEPDIR)/$(am__dirstamp) +libm/ld/libm_a-s_scalbnl.$(OBJEXT): libm/ld/$(am__dirstamp) \ + libm/ld/$(DEPDIR)/$(am__dirstamp) +libm/ld/libm_a-s_sinl.$(OBJEXT): libm/ld/$(am__dirstamp) \ + libm/ld/$(DEPDIR)/$(am__dirstamp) +libm/ld/libm_a-s_tanhl.$(OBJEXT): libm/ld/$(am__dirstamp) \ + libm/ld/$(DEPDIR)/$(am__dirstamp) +libm/ld/libm_a-s_tanl.$(OBJEXT): libm/ld/$(am__dirstamp) \ + libm/ld/$(DEPDIR)/$(am__dirstamp) +libm/ld/libm_a-s_truncl.$(OBJEXT): libm/ld/$(am__dirstamp) \ + libm/ld/$(DEPDIR)/$(am__dirstamp) libm/complex/$(am__dirstamp): @$(MKDIR_P) libm/complex @: > libm/complex/$(am__dirstamp) @@ -10409,6 +11022,302 @@ libm/machine/aarch64/libm_a-fetestexcept.$(OBJEXT): \ libm/machine/aarch64/libm_a-feupdateenv.$(OBJEXT): \ libm/machine/aarch64/$(am__dirstamp) \ libm/machine/aarch64/$(DEPDIR)/$(am__dirstamp) +libm/ld128/$(am__dirstamp): + @$(MKDIR_P) libm/ld128 + @: > libm/ld128/$(am__dirstamp) +libm/ld128/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) libm/ld128/$(DEPDIR) + @: > libm/ld128/$(DEPDIR)/$(am__dirstamp) +libm/ld128/libm_a-e_powl.$(OBJEXT): libm/ld128/$(am__dirstamp) \ + libm/ld128/$(DEPDIR)/$(am__dirstamp) +libm/ld128/libm_a-s_erfl.$(OBJEXT): libm/ld128/$(am__dirstamp) \ + libm/ld128/$(DEPDIR)/$(am__dirstamp) +libm/ld128/libm_a-s_exp2l.$(OBJEXT): libm/ld128/$(am__dirstamp) \ + libm/ld128/$(DEPDIR)/$(am__dirstamp) +libm/ld128/libm_a-s_expl.$(OBJEXT): libm/ld128/$(am__dirstamp) \ + libm/ld128/$(DEPDIR)/$(am__dirstamp) +libm/ld128/libm_a-s_logl.$(OBJEXT): libm/ld128/$(am__dirstamp) \ + libm/ld128/$(DEPDIR)/$(am__dirstamp) +libm/ld128/libm_a-b_tgammal.$(OBJEXT): libm/ld128/$(am__dirstamp) \ + libm/ld128/$(DEPDIR)/$(am__dirstamp) +libm/ld128/libm_a-invtrig.$(OBJEXT): libm/ld128/$(am__dirstamp) \ + libm/ld128/$(DEPDIR)/$(am__dirstamp) +libm/ld128/libm_a-e_lgammal_r.$(OBJEXT): libm/ld128/$(am__dirstamp) \ + libm/ld128/$(DEPDIR)/$(am__dirstamp) +libm/ld128/libm_a-k_cosl.$(OBJEXT): libm/ld128/$(am__dirstamp) \ + libm/ld128/$(DEPDIR)/$(am__dirstamp) +libm/ld128/libm_a-k_sinl.$(OBJEXT): libm/ld128/$(am__dirstamp) \ + libm/ld128/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/$(am__dirstamp): + @$(MKDIR_P) libm/machine/amdgcn + @: > libm/machine/amdgcn/$(am__dirstamp) +libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) libm/machine/amdgcn/$(DEPDIR) + @: > libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64_mathcnst.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64_reent.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64df_acos.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64df_acosh.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64df_asin.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64df_asine.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64df_asinh.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64df_atan.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64df_atan2.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64df_atangent.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64df_atanh.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64df_copysign.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64df_cos.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64df_cosh.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64df_erf.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64df_exp.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64df_exp2.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64df_finite.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64df_fmod.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64df_gamma.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64df_hypot.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64df_ilogb.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64df_isnan.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64df_ispos.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64df_lgamma.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64df_lgamma_r.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64df_log.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64df_log10.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64df_log2.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64df_modf.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64df_numtest.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64df_pow.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64df_remainder.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64df_rint.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64df_scalb.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64df_scalbn.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64df_signif.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64df_sin.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64df_sine.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64df_sineh.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64df_sinh.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64df_sqrt.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64df_tan.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64df_tanh.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64df_tgamma.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64sf_acos.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64sf_acosh.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64sf_asin.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64sf_asine.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64sf_asinh.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64sf_atan.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64sf_atan2.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64sf_atangent.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64sf_atanh.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64sf_copysign.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64sf_cos.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64sf_cosh.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64sf_erf.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64sf_exp.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64sf_exp2.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64sf_finite.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64sf_fmod.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64sf_gamma.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64sf_hypot.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64sf_ilogb.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64sf_isnan.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64sf_ispos.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64sf_lgamma.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64sf_lgamma_r.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64sf_log.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64sf_log10.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64sf_log2.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64sf_modf.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64sf_numtest.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64sf_pow.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64sf_remainder.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64sf_rint.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64sf_scalb.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64sf_scalbn.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64sf_signif.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64sf_sin.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64sf_sine.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64sf_sineh.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64sf_sinh.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64sf_sqrt.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64sf_tan.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64sf_tanh.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) +libm/machine/amdgcn/libm_a-v64sf_tgamma.$(OBJEXT): \ + libm/machine/amdgcn/$(am__dirstamp) \ + libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) libm/machine/arm/$(am__dirstamp): @$(MKDIR_P) libm/machine/arm @: > libm/machine/arm/$(am__dirstamp) @@ -10625,6 +11534,36 @@ libm/machine/i386/libm_a-fetestexcept.$(OBJEXT): \ libm/machine/i386/libm_a-feupdateenv.$(OBJEXT): \ libm/machine/i386/$(am__dirstamp) \ libm/machine/i386/$(DEPDIR)/$(am__dirstamp) +libm/ld80/$(am__dirstamp): + @$(MKDIR_P) libm/ld80 + @: > libm/ld80/$(am__dirstamp) +libm/ld80/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) libm/ld80/$(DEPDIR) + @: > libm/ld80/$(DEPDIR)/$(am__dirstamp) +libm/ld80/libm_a-b_tgammal.$(OBJEXT): libm/ld80/$(am__dirstamp) \ + libm/ld80/$(DEPDIR)/$(am__dirstamp) +libm/ld80/libm_a-e_powl.$(OBJEXT): libm/ld80/$(am__dirstamp) \ + libm/ld80/$(DEPDIR)/$(am__dirstamp) +libm/ld80/libm_a-s_erfl.$(OBJEXT): libm/ld80/$(am__dirstamp) \ + libm/ld80/$(DEPDIR)/$(am__dirstamp) +libm/ld80/libm_a-s_exp2l.$(OBJEXT): libm/ld80/$(am__dirstamp) \ + libm/ld80/$(DEPDIR)/$(am__dirstamp) +libm/ld80/libm_a-s_expl.$(OBJEXT): libm/ld80/$(am__dirstamp) \ + libm/ld80/$(DEPDIR)/$(am__dirstamp) +libm/ld80/libm_a-s_logl.$(OBJEXT): libm/ld80/$(am__dirstamp) \ + libm/ld80/$(DEPDIR)/$(am__dirstamp) +libm/ld80/libm_a-s_sinpil.$(OBJEXT): libm/ld80/$(am__dirstamp) \ + libm/ld80/$(DEPDIR)/$(am__dirstamp) +libm/ld80/libm_a-s_cospil.$(OBJEXT): libm/ld80/$(am__dirstamp) \ + libm/ld80/$(DEPDIR)/$(am__dirstamp) +libm/ld80/libm_a-invtrig.$(OBJEXT): libm/ld80/$(am__dirstamp) \ + libm/ld80/$(DEPDIR)/$(am__dirstamp) +libm/ld80/libm_a-e_lgammal_r.$(OBJEXT): libm/ld80/$(am__dirstamp) \ + libm/ld80/$(DEPDIR)/$(am__dirstamp) +libm/ld80/libm_a-k_cosl.$(OBJEXT): libm/ld80/$(am__dirstamp) \ + libm/ld80/$(DEPDIR)/$(am__dirstamp) +libm/ld80/libm_a-k_sinl.$(OBJEXT): libm/ld80/$(am__dirstamp) \ + libm/ld80/$(DEPDIR)/$(am__dirstamp) libm/machine/mips/$(am__dirstamp): @$(MKDIR_P) libm/machine/mips @: > libm/machine/mips/$(am__dirstamp) @@ -11348,6 +12287,42 @@ libm/machine/x86_64/libm_a-fetestexcept.$(OBJEXT): \ libm/machine/x86_64/libm_a-feupdateenv.$(OBJEXT): \ libm/machine/x86_64/$(am__dirstamp) \ libm/machine/x86_64/$(DEPDIR)/$(am__dirstamp) +libm/machine/xtensa/$(am__dirstamp): + @$(MKDIR_P) libm/machine/xtensa + @: > libm/machine/xtensa/$(am__dirstamp) +libm/machine/xtensa/$(DEPDIR)/$(am__dirstamp): + @$(MKDIR_P) libm/machine/xtensa/$(DEPDIR) + @: > libm/machine/xtensa/$(DEPDIR)/$(am__dirstamp) +libm/machine/xtensa/libm_a-feclearexcept.$(OBJEXT): \ + libm/machine/xtensa/$(am__dirstamp) \ + libm/machine/xtensa/$(DEPDIR)/$(am__dirstamp) +libm/machine/xtensa/libm_a-fegetenv.$(OBJEXT): \ + libm/machine/xtensa/$(am__dirstamp) \ + libm/machine/xtensa/$(DEPDIR)/$(am__dirstamp) +libm/machine/xtensa/libm_a-fegetexcept.$(OBJEXT): \ + libm/machine/xtensa/$(am__dirstamp) \ + libm/machine/xtensa/$(DEPDIR)/$(am__dirstamp) +libm/machine/xtensa/libm_a-fegetexceptflag.$(OBJEXT): \ + libm/machine/xtensa/$(am__dirstamp) \ + libm/machine/xtensa/$(DEPDIR)/$(am__dirstamp) +libm/machine/xtensa/libm_a-fegetround.$(OBJEXT): \ + libm/machine/xtensa/$(am__dirstamp) \ + libm/machine/xtensa/$(DEPDIR)/$(am__dirstamp) +libm/machine/xtensa/libm_a-feholdexcept.$(OBJEXT): \ + libm/machine/xtensa/$(am__dirstamp) \ + libm/machine/xtensa/$(DEPDIR)/$(am__dirstamp) +libm/machine/xtensa/libm_a-feraiseexcept.$(OBJEXT): \ + libm/machine/xtensa/$(am__dirstamp) \ + libm/machine/xtensa/$(DEPDIR)/$(am__dirstamp) +libm/machine/xtensa/libm_a-fetestexcept.$(OBJEXT): \ + libm/machine/xtensa/$(am__dirstamp) \ + libm/machine/xtensa/$(DEPDIR)/$(am__dirstamp) +libm/machine/xtensa/libm_a-feupdateenv.$(OBJEXT): \ + libm/machine/xtensa/$(am__dirstamp) \ + libm/machine/xtensa/$(DEPDIR)/$(am__dirstamp) +libm/machine/xtensa/libm_a-ef_sqrt.$(OBJEXT): \ + libm/machine/xtensa/$(am__dirstamp) \ + libm/machine/xtensa/$(DEPDIR)/$(am__dirstamp) clean-checkPROGRAMS: -test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS) @@ -11584,6 +12559,7 @@ mostlyclean-compile: -rm -f libc/machine/x86_64/*.$(OBJEXT) -rm -f libc/machine/xc16x/*.$(OBJEXT) -rm -f libc/machine/xstormy16/*.$(OBJEXT) + -rm -f libc/machine/xtensa/*.$(OBJEXT) -rm -f libc/machine/z8k/*.$(OBJEXT) -rm -f libc/misc/*.$(OBJEXT) -rm -f libc/posix/*.$(OBJEXT) @@ -11616,6 +12592,7 @@ mostlyclean-compile: -rm -f libc/sys/sysvnecv70/*.$(OBJEXT) -rm -f libc/sys/tirtos/*.$(OBJEXT) -rm -f libc/sys/w65/*.$(OBJEXT) + -rm -f libc/sys/xtensa/*.$(OBJEXT) -rm -f libc/sys/z8ksim/*.$(OBJEXT) -rm -f libc/syscalls/*.$(OBJEXT) -rm -f libc/time/*.$(OBJEXT) @@ -11624,7 +12601,11 @@ mostlyclean-compile: -rm -f libm/common/*.$(OBJEXT) -rm -f libm/complex/*.$(OBJEXT) -rm -f libm/fenv/*.$(OBJEXT) + -rm -f libm/ld/*.$(OBJEXT) + -rm -f libm/ld128/*.$(OBJEXT) + -rm -f libm/ld80/*.$(OBJEXT) -rm -f libm/machine/aarch64/*.$(OBJEXT) + -rm -f libm/machine/amdgcn/*.$(OBJEXT) -rm -f libm/machine/arm/*.$(OBJEXT) -rm -f libm/machine/i386/*.$(OBJEXT) -rm -f libm/machine/mips/*.$(OBJEXT) @@ -11635,6 +12616,7 @@ mostlyclean-compile: -rm -f libm/machine/sparc/*.$(OBJEXT) -rm -f libm/machine/spu/*.$(OBJEXT) -rm -f libm/machine/x86_64/*.$(OBJEXT) + -rm -f libm/machine/xtensa/*.$(OBJEXT) -rm -f libm/math/*.$(OBJEXT) -rm -f libm/mathfp/*.$(OBJEXT) -rm -f libm/test/*.$(OBJEXT) @@ -11808,8 +12790,9 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@libc/machine/aarch64/$(DEPDIR)/libc_a-memcmp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/machine/aarch64/$(DEPDIR)/libc_a-memcpy-stub.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/machine/aarch64/$(DEPDIR)/libc_a-memcpy.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@libc/machine/aarch64/$(DEPDIR)/libc_a-memmove-stub.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/machine/aarch64/$(DEPDIR)/libc_a-memmove.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libc/machine/aarch64/$(DEPDIR)/libc_a-memrchr-stub.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libc/machine/aarch64/$(DEPDIR)/libc_a-memrchr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/machine/aarch64/$(DEPDIR)/libc_a-memset-stub.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/machine/aarch64/$(DEPDIR)/libc_a-memset.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/machine/aarch64/$(DEPDIR)/libc_a-rawmemchr-stub.Po@am__quote@ @@ -11833,9 +12816,9 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@libc/machine/aarch64/$(DEPDIR)/libc_a-strnlen.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/machine/aarch64/$(DEPDIR)/libc_a-strrchr-stub.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/machine/aarch64/$(DEPDIR)/libc_a-strrchr.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libc/machine/amdgcn/$(DEPDIR)/libc_a-_exit.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/machine/amdgcn/$(DEPDIR)/libc_a-abort.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/machine/amdgcn/$(DEPDIR)/libc_a-atexit.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@libc/machine/amdgcn/$(DEPDIR)/libc_a-exit.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/machine/amdgcn/$(DEPDIR)/libc_a-getreent.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/machine/amdgcn/$(DEPDIR)/libc_a-mlock.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/machine/amdgcn/$(DEPDIR)/libc_a-signal.Po@am__quote@ @@ -12016,12 +12999,12 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@libc/machine/nds32/$(DEPDIR)/libc_a-strcpy.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/machine/necv70/$(DEPDIR)/libc_a-fastmath.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/machine/necv70/$(DEPDIR)/libc_a-setjmp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libc/machine/nvptx/$(DEPDIR)/libc_a-_exit.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/machine/nvptx/$(DEPDIR)/libc_a-abort.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/machine/nvptx/$(DEPDIR)/libc_a-assert.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/machine/nvptx/$(DEPDIR)/libc_a-calloc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/machine/nvptx/$(DEPDIR)/libc_a-callocr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/machine/nvptx/$(DEPDIR)/libc_a-clock.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@libc/machine/nvptx/$(DEPDIR)/libc_a-exit.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/machine/nvptx/$(DEPDIR)/libc_a-free.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/machine/nvptx/$(DEPDIR)/libc_a-malloc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/machine/nvptx/$(DEPDIR)/libc_a-mallocr.Po@am__quote@ @@ -12257,6 +13240,13 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@libc/machine/xstormy16/$(DEPDIR)/libc_a-reallocr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/machine/xstormy16/$(DEPDIR)/libc_a-setjmp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/machine/xstormy16/$(DEPDIR)/libc_a-valloc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libc/machine/xtensa/$(DEPDIR)/libc_a-memcpy.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libc/machine/xtensa/$(DEPDIR)/libc_a-memset.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libc/machine/xtensa/$(DEPDIR)/libc_a-setjmp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libc/machine/xtensa/$(DEPDIR)/libc_a-strcmp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libc/machine/xtensa/$(DEPDIR)/libc_a-strcpy.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libc/machine/xtensa/$(DEPDIR)/libc_a-strlen.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libc/machine/xtensa/$(DEPDIR)/libc_a-strncpy.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/machine/z8k/$(DEPDIR)/libc_a-memcmp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/machine/z8k/$(DEPDIR)/libc_a-memcpy.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/machine/z8k/$(DEPDIR)/libc_a-memmove.Po@am__quote@ @@ -12307,6 +13297,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@libc/reent/$(DEPDIR)/libc_a-fcntlr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/reent/$(DEPDIR)/libc_a-fstat64r.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/reent/$(DEPDIR)/libc_a-fstatr.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libc/reent/$(DEPDIR)/libc_a-getentropyr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/reent/$(DEPDIR)/libc_a-getreent.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/reent/$(DEPDIR)/libc_a-gettimeofdayr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/reent/$(DEPDIR)/libc_a-impure.Po@am__quote@ @@ -12322,7 +13313,6 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@libc/reent/$(DEPDIR)/libc_a-renamer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/reent/$(DEPDIR)/libc_a-sbrkr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/reent/$(DEPDIR)/libc_a-signalr.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@libc/reent/$(DEPDIR)/libc_a-signgam.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/reent/$(DEPDIR)/libc_a-stat64r.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/reent/$(DEPDIR)/libc_a-statr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/reent/$(DEPDIR)/libc_a-timesr.Po@am__quote@ @@ -12478,12 +13468,19 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@libc/stdio/$(DEPDIR)/libc_a-setbuffer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/stdio/$(DEPDIR)/libc_a-setlinebuf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/stdio/$(DEPDIR)/libc_a-setvbuf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libc/stdio/$(DEPDIR)/libc_a-sfputs_r.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libc/stdio/$(DEPDIR)/libc_a-sfputws_r.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/stdio/$(DEPDIR)/libc_a-siprintf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/stdio/$(DEPDIR)/libc_a-siscanf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/stdio/$(DEPDIR)/libc_a-sniprintf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/stdio/$(DEPDIR)/libc_a-snprintf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libc/stdio/$(DEPDIR)/libc_a-sprint_r.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/stdio/$(DEPDIR)/libc_a-sprintf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/stdio/$(DEPDIR)/libc_a-sscanf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libc/stdio/$(DEPDIR)/libc_a-ssprint_r.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libc/stdio/$(DEPDIR)/libc_a-ssputs_r.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libc/stdio/$(DEPDIR)/libc_a-ssputws_r.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libc/stdio/$(DEPDIR)/libc_a-sswprint_r.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/stdio/$(DEPDIR)/libc_a-stdio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/stdio/$(DEPDIR)/libc_a-stdio_ext.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/stdio/$(DEPDIR)/libc_a-svfiprintf.Po@am__quote@ @@ -12494,6 +13491,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@libc/stdio/$(DEPDIR)/libc_a-svfscanf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/stdio/$(DEPDIR)/libc_a-svfwprintf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/stdio/$(DEPDIR)/libc_a-svfwscanf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libc/stdio/$(DEPDIR)/libc_a-swprint_r.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/stdio/$(DEPDIR)/libc_a-swprintf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/stdio/$(DEPDIR)/libc_a-swscanf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/stdio/$(DEPDIR)/libc_a-tmpfile.Po@am__quote@ @@ -12529,6 +13527,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@libc/stdio/$(DEPDIR)/libc_a-vwprintf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/stdio/$(DEPDIR)/libc_a-vwscanf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/stdio/$(DEPDIR)/libc_a-wbuf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libc/stdio/$(DEPDIR)/libc_a-wbufw.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/stdio/$(DEPDIR)/libc_a-wprintf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/stdio/$(DEPDIR)/libc_a-wscanf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/stdio/$(DEPDIR)/libc_a-wsetup.Po@am__quote@ @@ -13062,12 +14061,16 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@libc/sys/tirtos/$(DEPDIR)/libc_a-lock.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/sys/w65/$(DEPDIR)/libc_a-syscalls.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/sys/w65/$(DEPDIR)/libc_a-trap.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libc/sys/xtensa/$(DEPDIR)/libc_a-clibrary_init.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libc/sys/xtensa/$(DEPDIR)/libc_a-creat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libc/sys/xtensa/$(DEPDIR)/libc_a-isatty.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/sys/z8ksim/$(DEPDIR)/libc_a-glue.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/syscalls/$(DEPDIR)/libc_a-sysclose.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/syscalls/$(DEPDIR)/libc_a-sysexecve.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/syscalls/$(DEPDIR)/libc_a-sysfcntl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/syscalls/$(DEPDIR)/libc_a-sysfork.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/syscalls/$(DEPDIR)/libc_a-sysfstat.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libc/syscalls/$(DEPDIR)/libc_a-sysgetentropy.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/syscalls/$(DEPDIR)/libc_a-sysgetpid.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/syscalls/$(DEPDIR)/libc_a-sysgettod.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libc/syscalls/$(DEPDIR)/libc_a-sysisatty.Po@am__quote@ @@ -13360,6 +14363,73 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@libm/fenv/$(DEPDIR)/libm_a-fesetround.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libm/fenv/$(DEPDIR)/libm_a-fetestexcept.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libm/fenv/$(DEPDIR)/libm_a-feupdateenv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld/$(DEPDIR)/libm_a-e_acoshl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld/$(DEPDIR)/libm_a-e_acosl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld/$(DEPDIR)/libm_a-e_asinl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld/$(DEPDIR)/libm_a-e_atan2l.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld/$(DEPDIR)/libm_a-e_atanhl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld/$(DEPDIR)/libm_a-e_coshl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld/$(DEPDIR)/libm_a-e_fmodl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld/$(DEPDIR)/libm_a-e_lgammal.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld/$(DEPDIR)/libm_a-e_remainderl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld/$(DEPDIR)/libm_a-e_sinhl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld/$(DEPDIR)/libm_a-fdiml.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld/$(DEPDIR)/libm_a-s_asinhl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld/$(DEPDIR)/libm_a-s_atanl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld/$(DEPDIR)/libm_a-s_cbrtl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld/$(DEPDIR)/libm_a-s_ceill.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld/$(DEPDIR)/libm_a-s_copysignl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld/$(DEPDIR)/libm_a-s_cosl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld/$(DEPDIR)/libm_a-s_fabsl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld/$(DEPDIR)/libm_a-s_floorl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld/$(DEPDIR)/libm_a-s_fmal.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld/$(DEPDIR)/libm_a-s_fmaxl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld/$(DEPDIR)/libm_a-s_fminl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld/$(DEPDIR)/libm_a-s_frexpl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld/$(DEPDIR)/libm_a-s_ilogbl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld/$(DEPDIR)/libm_a-s_llrintl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld/$(DEPDIR)/libm_a-s_llroundl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld/$(DEPDIR)/libm_a-s_logbl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld/$(DEPDIR)/libm_a-s_lrint.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld/$(DEPDIR)/libm_a-s_lrintl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld/$(DEPDIR)/libm_a-s_lround.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld/$(DEPDIR)/libm_a-s_lroundl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld/$(DEPDIR)/libm_a-s_modfl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld/$(DEPDIR)/libm_a-s_nearbyintl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld/$(DEPDIR)/libm_a-s_nextafterl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld/$(DEPDIR)/libm_a-s_nexttoward.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld/$(DEPDIR)/libm_a-s_nexttowardf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld/$(DEPDIR)/libm_a-s_remquol.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld/$(DEPDIR)/libm_a-s_rintl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld/$(DEPDIR)/libm_a-s_roundl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld/$(DEPDIR)/libm_a-s_scalbnl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld/$(DEPDIR)/libm_a-s_sinl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld/$(DEPDIR)/libm_a-s_tanhl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld/$(DEPDIR)/libm_a-s_tanl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld/$(DEPDIR)/libm_a-s_truncl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld/$(DEPDIR)/libm_a-scalblnl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld128/$(DEPDIR)/libm_a-b_tgammal.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld128/$(DEPDIR)/libm_a-e_lgammal_r.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld128/$(DEPDIR)/libm_a-e_powl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld128/$(DEPDIR)/libm_a-invtrig.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld128/$(DEPDIR)/libm_a-k_cosl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld128/$(DEPDIR)/libm_a-k_sinl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld128/$(DEPDIR)/libm_a-s_erfl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld128/$(DEPDIR)/libm_a-s_exp2l.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld128/$(DEPDIR)/libm_a-s_expl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld128/$(DEPDIR)/libm_a-s_logl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld80/$(DEPDIR)/libm_a-b_tgammal.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld80/$(DEPDIR)/libm_a-e_lgammal_r.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld80/$(DEPDIR)/libm_a-e_powl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld80/$(DEPDIR)/libm_a-invtrig.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld80/$(DEPDIR)/libm_a-k_cosl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld80/$(DEPDIR)/libm_a-k_sinl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld80/$(DEPDIR)/libm_a-s_cospil.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld80/$(DEPDIR)/libm_a-s_erfl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld80/$(DEPDIR)/libm_a-s_exp2l.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld80/$(DEPDIR)/libm_a-s_expl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld80/$(DEPDIR)/libm_a-s_logl.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/ld80/$(DEPDIR)/libm_a-s_sinpil.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libm/machine/aarch64/$(DEPDIR)/libm_a-e_sqrt.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libm/machine/aarch64/$(DEPDIR)/libm_a-ef_sqrt.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libm/machine/aarch64/$(DEPDIR)/libm_a-feclearexcept.Po@am__quote@ @@ -13402,6 +14472,94 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@libm/machine/aarch64/$(DEPDIR)/libm_a-sf_rint.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libm/machine/aarch64/$(DEPDIR)/libm_a-sf_round.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libm/machine/aarch64/$(DEPDIR)/libm_a-sf_trunc.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64_mathcnst.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64_reent.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_acos.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_acosh.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_asin.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_asine.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_asinh.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_atan.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_atan2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_atangent.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_atanh.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_copysign.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_cos.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_cosh.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_erf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_exp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_exp2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_finite.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_fmod.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_gamma.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_hypot.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_ilogb.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_isnan.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_ispos.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_lgamma.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_lgamma_r.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_log.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_log10.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_log2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_modf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_numtest.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_pow.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_remainder.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_rint.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_scalb.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_scalbn.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_signif.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_sin.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_sine.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_sineh.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_sinh.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_sqrt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_tan.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_tanh.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_tgamma.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_acos.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_acosh.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_asin.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_asine.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_asinh.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_atan.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_atan2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_atangent.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_atanh.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_copysign.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_cos.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_cosh.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_erf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_exp.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_exp2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_finite.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_fmod.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_gamma.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_hypot.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_ilogb.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_isnan.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_ispos.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_lgamma.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_lgamma_r.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_log.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_log10.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_log2.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_modf.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_numtest.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_pow.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_remainder.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_rint.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_scalb.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_scalbn.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_signif.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_sin.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_sine.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_sineh.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_sinh.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_sqrt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_tan.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_tanh.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_tgamma.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libm/machine/arm/$(DEPDIR)/libm_a-e_sqrt.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libm/machine/arm/$(DEPDIR)/libm_a-ef_sqrt.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libm/machine/arm/$(DEPDIR)/libm_a-fe_dfl_env.Po@am__quote@ @@ -13695,6 +14853,16 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@libm/machine/x86_64/$(DEPDIR)/libm_a-fesetround.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libm/machine/x86_64/$(DEPDIR)/libm_a-fetestexcept.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libm/machine/x86_64/$(DEPDIR)/libm_a-feupdateenv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/xtensa/$(DEPDIR)/libm_a-ef_sqrt.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/xtensa/$(DEPDIR)/libm_a-feclearexcept.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/xtensa/$(DEPDIR)/libm_a-fegetenv.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/xtensa/$(DEPDIR)/libm_a-fegetexcept.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/xtensa/$(DEPDIR)/libm_a-fegetexceptflag.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/xtensa/$(DEPDIR)/libm_a-fegetround.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/xtensa/$(DEPDIR)/libm_a-feholdexcept.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/xtensa/$(DEPDIR)/libm_a-feraiseexcept.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/xtensa/$(DEPDIR)/libm_a-fetestexcept.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/machine/xtensa/$(DEPDIR)/libm_a-feupdateenv.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libm/math/$(DEPDIR)/libm_a-e_acos.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libm/math/$(DEPDIR)/libm_a-e_acosh.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libm/math/$(DEPDIR)/libm_a-e_asin.Po@am__quote@ @@ -13775,6 +14943,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@libm/math/$(DEPDIR)/libm_a-sf_sin.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libm/math/$(DEPDIR)/libm_a-sf_tan.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libm/math/$(DEPDIR)/libm_a-sf_tanh.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@libm/math/$(DEPDIR)/libm_a-signgam.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libm/math/$(DEPDIR)/libm_a-w_acos.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libm/math/$(DEPDIR)/libm_a-w_acosh.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@libm/math/$(DEPDIR)/libm_a-w_asin.Po@am__quote@ @@ -15600,19 +16769,19 @@ libc/machine/aarch64/libc_a-memcpy.obj: libc/machine/aarch64/memcpy.S @AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAGS) -c -o libc/machine/aarch64/libc_a-memcpy.obj `if test -f 'libc/machine/aarch64/memcpy.S'; then $(CYGPATH_W) 'libc/machine/aarch64/memcpy.S'; else $(CYGPATH_W) '$(srcdir)/libc/machine/aarch64/memcpy.S'; fi` -libc/machine/aarch64/libc_a-memmove.o: libc/machine/aarch64/memmove.S -@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAGS) -MT libc/machine/aarch64/libc_a-memmove.o -MD -MP -MF libc/machine/aarch64/$(DEPDIR)/libc_a-memmove.Tpo -c -o libc/machine/aarch64/libc_a-memmove.o `test -f 'libc/machine/aarch64/memmove.S' || echo '$(srcdir)/'`libc/machine/aarch64/memmove.S -@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) libc/machine/aarch64/$(DEPDIR)/libc_a-memmove.Tpo libc/machine/aarch64/$(DEPDIR)/libc_a-memmove.Po -@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='libc/machine/aarch64/memmove.S' object='libc/machine/aarch64/libc_a-memmove.o' libtool=no @AMDEPBACKSLASH@ +libc/machine/aarch64/libc_a-memrchr.o: libc/machine/aarch64/memrchr.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAGS) -MT libc/machine/aarch64/libc_a-memrchr.o -MD -MP -MF libc/machine/aarch64/$(DEPDIR)/libc_a-memrchr.Tpo -c -o libc/machine/aarch64/libc_a-memrchr.o `test -f 'libc/machine/aarch64/memrchr.S' || echo '$(srcdir)/'`libc/machine/aarch64/memrchr.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) libc/machine/aarch64/$(DEPDIR)/libc_a-memrchr.Tpo libc/machine/aarch64/$(DEPDIR)/libc_a-memrchr.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='libc/machine/aarch64/memrchr.S' object='libc/machine/aarch64/libc_a-memrchr.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAGS) -c -o libc/machine/aarch64/libc_a-memmove.o `test -f 'libc/machine/aarch64/memmove.S' || echo '$(srcdir)/'`libc/machine/aarch64/memmove.S +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAGS) -c -o libc/machine/aarch64/libc_a-memrchr.o `test -f 'libc/machine/aarch64/memrchr.S' || echo '$(srcdir)/'`libc/machine/aarch64/memrchr.S -libc/machine/aarch64/libc_a-memmove.obj: libc/machine/aarch64/memmove.S -@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAGS) -MT libc/machine/aarch64/libc_a-memmove.obj -MD -MP -MF libc/machine/aarch64/$(DEPDIR)/libc_a-memmove.Tpo -c -o libc/machine/aarch64/libc_a-memmove.obj `if test -f 'libc/machine/aarch64/memmove.S'; then $(CYGPATH_W) 'libc/machine/aarch64/memmove.S'; else $(CYGPATH_W) '$(srcdir)/libc/machine/aarch64/memmove.S'; fi` -@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) libc/machine/aarch64/$(DEPDIR)/libc_a-memmove.Tpo libc/machine/aarch64/$(DEPDIR)/libc_a-memmove.Po -@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='libc/machine/aarch64/memmove.S' object='libc/machine/aarch64/libc_a-memmove.obj' libtool=no @AMDEPBACKSLASH@ +libc/machine/aarch64/libc_a-memrchr.obj: libc/machine/aarch64/memrchr.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAGS) -MT libc/machine/aarch64/libc_a-memrchr.obj -MD -MP -MF libc/machine/aarch64/$(DEPDIR)/libc_a-memrchr.Tpo -c -o libc/machine/aarch64/libc_a-memrchr.obj `if test -f 'libc/machine/aarch64/memrchr.S'; then $(CYGPATH_W) 'libc/machine/aarch64/memrchr.S'; else $(CYGPATH_W) '$(srcdir)/libc/machine/aarch64/memrchr.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) libc/machine/aarch64/$(DEPDIR)/libc_a-memrchr.Tpo libc/machine/aarch64/$(DEPDIR)/libc_a-memrchr.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='libc/machine/aarch64/memrchr.S' object='libc/machine/aarch64/libc_a-memrchr.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAGS) -c -o libc/machine/aarch64/libc_a-memmove.obj `if test -f 'libc/machine/aarch64/memmove.S'; then $(CYGPATH_W) 'libc/machine/aarch64/memmove.S'; else $(CYGPATH_W) '$(srcdir)/libc/machine/aarch64/memmove.S'; fi` +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAGS) -c -o libc/machine/aarch64/libc_a-memrchr.obj `if test -f 'libc/machine/aarch64/memrchr.S'; then $(CYGPATH_W) 'libc/machine/aarch64/memrchr.S'; else $(CYGPATH_W) '$(srcdir)/libc/machine/aarch64/memrchr.S'; fi` libc/machine/aarch64/libc_a-memset.o: libc/machine/aarch64/memset.S @am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAGS) -MT libc/machine/aarch64/libc_a-memset.o -MD -MP -MF libc/machine/aarch64/$(DEPDIR)/libc_a-memset.Tpo -c -o libc/machine/aarch64/libc_a-memset.o `test -f 'libc/machine/aarch64/memset.S' || echo '$(srcdir)/'`libc/machine/aarch64/memset.S @@ -18610,6 +19779,104 @@ libc/machine/xstormy16/libc_a-setjmp.obj: libc/machine/xstormy16/setjmp.S @AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAGS) -c -o libc/machine/xstormy16/libc_a-setjmp.obj `if test -f 'libc/machine/xstormy16/setjmp.S'; then $(CYGPATH_W) 'libc/machine/xstormy16/setjmp.S'; else $(CYGPATH_W) '$(srcdir)/libc/machine/xstormy16/setjmp.S'; fi` +libc/machine/xtensa/libc_a-memcpy.o: libc/machine/xtensa/memcpy.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAGS) -MT libc/machine/xtensa/libc_a-memcpy.o -MD -MP -MF libc/machine/xtensa/$(DEPDIR)/libc_a-memcpy.Tpo -c -o libc/machine/xtensa/libc_a-memcpy.o `test -f 'libc/machine/xtensa/memcpy.S' || echo '$(srcdir)/'`libc/machine/xtensa/memcpy.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) libc/machine/xtensa/$(DEPDIR)/libc_a-memcpy.Tpo libc/machine/xtensa/$(DEPDIR)/libc_a-memcpy.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='libc/machine/xtensa/memcpy.S' object='libc/machine/xtensa/libc_a-memcpy.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAGS) -c -o libc/machine/xtensa/libc_a-memcpy.o `test -f 'libc/machine/xtensa/memcpy.S' || echo '$(srcdir)/'`libc/machine/xtensa/memcpy.S + +libc/machine/xtensa/libc_a-memcpy.obj: libc/machine/xtensa/memcpy.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAGS) -MT libc/machine/xtensa/libc_a-memcpy.obj -MD -MP -MF libc/machine/xtensa/$(DEPDIR)/libc_a-memcpy.Tpo -c -o libc/machine/xtensa/libc_a-memcpy.obj `if test -f 'libc/machine/xtensa/memcpy.S'; then $(CYGPATH_W) 'libc/machine/xtensa/memcpy.S'; else $(CYGPATH_W) '$(srcdir)/libc/machine/xtensa/memcpy.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) libc/machine/xtensa/$(DEPDIR)/libc_a-memcpy.Tpo libc/machine/xtensa/$(DEPDIR)/libc_a-memcpy.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='libc/machine/xtensa/memcpy.S' object='libc/machine/xtensa/libc_a-memcpy.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAGS) -c -o libc/machine/xtensa/libc_a-memcpy.obj `if test -f 'libc/machine/xtensa/memcpy.S'; then $(CYGPATH_W) 'libc/machine/xtensa/memcpy.S'; else $(CYGPATH_W) '$(srcdir)/libc/machine/xtensa/memcpy.S'; fi` + +libc/machine/xtensa/libc_a-memset.o: libc/machine/xtensa/memset.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAGS) -MT libc/machine/xtensa/libc_a-memset.o -MD -MP -MF libc/machine/xtensa/$(DEPDIR)/libc_a-memset.Tpo -c -o libc/machine/xtensa/libc_a-memset.o `test -f 'libc/machine/xtensa/memset.S' || echo '$(srcdir)/'`libc/machine/xtensa/memset.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) libc/machine/xtensa/$(DEPDIR)/libc_a-memset.Tpo libc/machine/xtensa/$(DEPDIR)/libc_a-memset.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='libc/machine/xtensa/memset.S' object='libc/machine/xtensa/libc_a-memset.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAGS) -c -o libc/machine/xtensa/libc_a-memset.o `test -f 'libc/machine/xtensa/memset.S' || echo '$(srcdir)/'`libc/machine/xtensa/memset.S + +libc/machine/xtensa/libc_a-memset.obj: libc/machine/xtensa/memset.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAGS) -MT libc/machine/xtensa/libc_a-memset.obj -MD -MP -MF libc/machine/xtensa/$(DEPDIR)/libc_a-memset.Tpo -c -o libc/machine/xtensa/libc_a-memset.obj `if test -f 'libc/machine/xtensa/memset.S'; then $(CYGPATH_W) 'libc/machine/xtensa/memset.S'; else $(CYGPATH_W) '$(srcdir)/libc/machine/xtensa/memset.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) libc/machine/xtensa/$(DEPDIR)/libc_a-memset.Tpo libc/machine/xtensa/$(DEPDIR)/libc_a-memset.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='libc/machine/xtensa/memset.S' object='libc/machine/xtensa/libc_a-memset.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAGS) -c -o libc/machine/xtensa/libc_a-memset.obj `if test -f 'libc/machine/xtensa/memset.S'; then $(CYGPATH_W) 'libc/machine/xtensa/memset.S'; else $(CYGPATH_W) '$(srcdir)/libc/machine/xtensa/memset.S'; fi` + +libc/machine/xtensa/libc_a-setjmp.o: libc/machine/xtensa/setjmp.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAGS) -MT libc/machine/xtensa/libc_a-setjmp.o -MD -MP -MF libc/machine/xtensa/$(DEPDIR)/libc_a-setjmp.Tpo -c -o libc/machine/xtensa/libc_a-setjmp.o `test -f 'libc/machine/xtensa/setjmp.S' || echo '$(srcdir)/'`libc/machine/xtensa/setjmp.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) libc/machine/xtensa/$(DEPDIR)/libc_a-setjmp.Tpo libc/machine/xtensa/$(DEPDIR)/libc_a-setjmp.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='libc/machine/xtensa/setjmp.S' object='libc/machine/xtensa/libc_a-setjmp.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAGS) -c -o libc/machine/xtensa/libc_a-setjmp.o `test -f 'libc/machine/xtensa/setjmp.S' || echo '$(srcdir)/'`libc/machine/xtensa/setjmp.S + +libc/machine/xtensa/libc_a-setjmp.obj: libc/machine/xtensa/setjmp.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAGS) -MT libc/machine/xtensa/libc_a-setjmp.obj -MD -MP -MF libc/machine/xtensa/$(DEPDIR)/libc_a-setjmp.Tpo -c -o libc/machine/xtensa/libc_a-setjmp.obj `if test -f 'libc/machine/xtensa/setjmp.S'; then $(CYGPATH_W) 'libc/machine/xtensa/setjmp.S'; else $(CYGPATH_W) '$(srcdir)/libc/machine/xtensa/setjmp.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) libc/machine/xtensa/$(DEPDIR)/libc_a-setjmp.Tpo libc/machine/xtensa/$(DEPDIR)/libc_a-setjmp.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='libc/machine/xtensa/setjmp.S' object='libc/machine/xtensa/libc_a-setjmp.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAGS) -c -o libc/machine/xtensa/libc_a-setjmp.obj `if test -f 'libc/machine/xtensa/setjmp.S'; then $(CYGPATH_W) 'libc/machine/xtensa/setjmp.S'; else $(CYGPATH_W) '$(srcdir)/libc/machine/xtensa/setjmp.S'; fi` + +libc/machine/xtensa/libc_a-strcmp.o: libc/machine/xtensa/strcmp.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAGS) -MT libc/machine/xtensa/libc_a-strcmp.o -MD -MP -MF libc/machine/xtensa/$(DEPDIR)/libc_a-strcmp.Tpo -c -o libc/machine/xtensa/libc_a-strcmp.o `test -f 'libc/machine/xtensa/strcmp.S' || echo '$(srcdir)/'`libc/machine/xtensa/strcmp.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) libc/machine/xtensa/$(DEPDIR)/libc_a-strcmp.Tpo libc/machine/xtensa/$(DEPDIR)/libc_a-strcmp.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='libc/machine/xtensa/strcmp.S' object='libc/machine/xtensa/libc_a-strcmp.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAGS) -c -o libc/machine/xtensa/libc_a-strcmp.o `test -f 'libc/machine/xtensa/strcmp.S' || echo '$(srcdir)/'`libc/machine/xtensa/strcmp.S + +libc/machine/xtensa/libc_a-strcmp.obj: libc/machine/xtensa/strcmp.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAGS) -MT libc/machine/xtensa/libc_a-strcmp.obj -MD -MP -MF libc/machine/xtensa/$(DEPDIR)/libc_a-strcmp.Tpo -c -o libc/machine/xtensa/libc_a-strcmp.obj `if test -f 'libc/machine/xtensa/strcmp.S'; then $(CYGPATH_W) 'libc/machine/xtensa/strcmp.S'; else $(CYGPATH_W) '$(srcdir)/libc/machine/xtensa/strcmp.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) libc/machine/xtensa/$(DEPDIR)/libc_a-strcmp.Tpo libc/machine/xtensa/$(DEPDIR)/libc_a-strcmp.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='libc/machine/xtensa/strcmp.S' object='libc/machine/xtensa/libc_a-strcmp.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAGS) -c -o libc/machine/xtensa/libc_a-strcmp.obj `if test -f 'libc/machine/xtensa/strcmp.S'; then $(CYGPATH_W) 'libc/machine/xtensa/strcmp.S'; else $(CYGPATH_W) '$(srcdir)/libc/machine/xtensa/strcmp.S'; fi` + +libc/machine/xtensa/libc_a-strcpy.o: libc/machine/xtensa/strcpy.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAGS) -MT libc/machine/xtensa/libc_a-strcpy.o -MD -MP -MF libc/machine/xtensa/$(DEPDIR)/libc_a-strcpy.Tpo -c -o libc/machine/xtensa/libc_a-strcpy.o `test -f 'libc/machine/xtensa/strcpy.S' || echo '$(srcdir)/'`libc/machine/xtensa/strcpy.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) libc/machine/xtensa/$(DEPDIR)/libc_a-strcpy.Tpo libc/machine/xtensa/$(DEPDIR)/libc_a-strcpy.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='libc/machine/xtensa/strcpy.S' object='libc/machine/xtensa/libc_a-strcpy.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAGS) -c -o libc/machine/xtensa/libc_a-strcpy.o `test -f 'libc/machine/xtensa/strcpy.S' || echo '$(srcdir)/'`libc/machine/xtensa/strcpy.S + +libc/machine/xtensa/libc_a-strcpy.obj: libc/machine/xtensa/strcpy.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAGS) -MT libc/machine/xtensa/libc_a-strcpy.obj -MD -MP -MF libc/machine/xtensa/$(DEPDIR)/libc_a-strcpy.Tpo -c -o libc/machine/xtensa/libc_a-strcpy.obj `if test -f 'libc/machine/xtensa/strcpy.S'; then $(CYGPATH_W) 'libc/machine/xtensa/strcpy.S'; else $(CYGPATH_W) '$(srcdir)/libc/machine/xtensa/strcpy.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) libc/machine/xtensa/$(DEPDIR)/libc_a-strcpy.Tpo libc/machine/xtensa/$(DEPDIR)/libc_a-strcpy.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='libc/machine/xtensa/strcpy.S' object='libc/machine/xtensa/libc_a-strcpy.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAGS) -c -o libc/machine/xtensa/libc_a-strcpy.obj `if test -f 'libc/machine/xtensa/strcpy.S'; then $(CYGPATH_W) 'libc/machine/xtensa/strcpy.S'; else $(CYGPATH_W) '$(srcdir)/libc/machine/xtensa/strcpy.S'; fi` + +libc/machine/xtensa/libc_a-strlen.o: libc/machine/xtensa/strlen.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAGS) -MT libc/machine/xtensa/libc_a-strlen.o -MD -MP -MF libc/machine/xtensa/$(DEPDIR)/libc_a-strlen.Tpo -c -o libc/machine/xtensa/libc_a-strlen.o `test -f 'libc/machine/xtensa/strlen.S' || echo '$(srcdir)/'`libc/machine/xtensa/strlen.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) libc/machine/xtensa/$(DEPDIR)/libc_a-strlen.Tpo libc/machine/xtensa/$(DEPDIR)/libc_a-strlen.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='libc/machine/xtensa/strlen.S' object='libc/machine/xtensa/libc_a-strlen.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAGS) -c -o libc/machine/xtensa/libc_a-strlen.o `test -f 'libc/machine/xtensa/strlen.S' || echo '$(srcdir)/'`libc/machine/xtensa/strlen.S + +libc/machine/xtensa/libc_a-strlen.obj: libc/machine/xtensa/strlen.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAGS) -MT libc/machine/xtensa/libc_a-strlen.obj -MD -MP -MF libc/machine/xtensa/$(DEPDIR)/libc_a-strlen.Tpo -c -o libc/machine/xtensa/libc_a-strlen.obj `if test -f 'libc/machine/xtensa/strlen.S'; then $(CYGPATH_W) 'libc/machine/xtensa/strlen.S'; else $(CYGPATH_W) '$(srcdir)/libc/machine/xtensa/strlen.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) libc/machine/xtensa/$(DEPDIR)/libc_a-strlen.Tpo libc/machine/xtensa/$(DEPDIR)/libc_a-strlen.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='libc/machine/xtensa/strlen.S' object='libc/machine/xtensa/libc_a-strlen.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAGS) -c -o libc/machine/xtensa/libc_a-strlen.obj `if test -f 'libc/machine/xtensa/strlen.S'; then $(CYGPATH_W) 'libc/machine/xtensa/strlen.S'; else $(CYGPATH_W) '$(srcdir)/libc/machine/xtensa/strlen.S'; fi` + +libc/machine/xtensa/libc_a-strncpy.o: libc/machine/xtensa/strncpy.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAGS) -MT libc/machine/xtensa/libc_a-strncpy.o -MD -MP -MF libc/machine/xtensa/$(DEPDIR)/libc_a-strncpy.Tpo -c -o libc/machine/xtensa/libc_a-strncpy.o `test -f 'libc/machine/xtensa/strncpy.S' || echo '$(srcdir)/'`libc/machine/xtensa/strncpy.S +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) libc/machine/xtensa/$(DEPDIR)/libc_a-strncpy.Tpo libc/machine/xtensa/$(DEPDIR)/libc_a-strncpy.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='libc/machine/xtensa/strncpy.S' object='libc/machine/xtensa/libc_a-strncpy.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAGS) -c -o libc/machine/xtensa/libc_a-strncpy.o `test -f 'libc/machine/xtensa/strncpy.S' || echo '$(srcdir)/'`libc/machine/xtensa/strncpy.S + +libc/machine/xtensa/libc_a-strncpy.obj: libc/machine/xtensa/strncpy.S +@am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAGS) -MT libc/machine/xtensa/libc_a-strncpy.obj -MD -MP -MF libc/machine/xtensa/$(DEPDIR)/libc_a-strncpy.Tpo -c -o libc/machine/xtensa/libc_a-strncpy.obj `if test -f 'libc/machine/xtensa/strncpy.S'; then $(CYGPATH_W) 'libc/machine/xtensa/strncpy.S'; else $(CYGPATH_W) '$(srcdir)/libc/machine/xtensa/strncpy.S'; fi` +@am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) libc/machine/xtensa/$(DEPDIR)/libc_a-strncpy.Tpo libc/machine/xtensa/$(DEPDIR)/libc_a-strncpy.Po +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS)source='libc/machine/xtensa/strncpy.S' object='libc/machine/xtensa/libc_a-strncpy.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCCAS_FALSE@ DEPDIR=$(DEPDIR) $(CCASDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCCAS_FALSE@ $(AM_V_CPPAS@am__nodep@)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAGS) -c -o libc/machine/xtensa/libc_a-strncpy.obj `if test -f 'libc/machine/xtensa/strncpy.S'; then $(CYGPATH_W) 'libc/machine/xtensa/strncpy.S'; else $(CYGPATH_W) '$(srcdir)/libc/machine/xtensa/strncpy.S'; fi` + libc/machine/z8k/libc_a-setjmp.o: libc/machine/z8k/setjmp.S @am__fastdepCCAS_TRUE@ $(AM_V_CPPAS)$(CCAS) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CCASFLAGS) $(CCASFLAGS) -MT libc/machine/z8k/libc_a-setjmp.o -MD -MP -MF libc/machine/z8k/$(DEPDIR)/libc_a-setjmp.Tpo -c -o libc/machine/z8k/libc_a-setjmp.o `test -f 'libc/machine/z8k/setjmp.S' || echo '$(srcdir)/'`libc/machine/z8k/setjmp.S @am__fastdepCCAS_TRUE@ $(AM_V_at)$(am__mv) libc/machine/z8k/$(DEPDIR)/libc_a-setjmp.Tpo libc/machine/z8k/$(DEPDIR)/libc_a-setjmp.Po @@ -22742,6 +24009,118 @@ libc/stdio/libc_a-vsniprintf.obj: libc/stdio/vsniprintf.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/stdio/libc_a-vsniprintf.obj `if test -f 'libc/stdio/vsniprintf.c'; then $(CYGPATH_W) 'libc/stdio/vsniprintf.c'; else $(CYGPATH_W) '$(srcdir)/libc/stdio/vsniprintf.c'; fi` +libc/stdio/libc_a-sfputs_r.o: libc/stdio/sfputs_r.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/stdio/libc_a-sfputs_r.o -MD -MP -MF libc/stdio/$(DEPDIR)/libc_a-sfputs_r.Tpo -c -o libc/stdio/libc_a-sfputs_r.o `test -f 'libc/stdio/sfputs_r.c' || echo '$(srcdir)/'`libc/stdio/sfputs_r.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/stdio/$(DEPDIR)/libc_a-sfputs_r.Tpo libc/stdio/$(DEPDIR)/libc_a-sfputs_r.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/stdio/sfputs_r.c' object='libc/stdio/libc_a-sfputs_r.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/stdio/libc_a-sfputs_r.o `test -f 'libc/stdio/sfputs_r.c' || echo '$(srcdir)/'`libc/stdio/sfputs_r.c + +libc/stdio/libc_a-sfputs_r.obj: libc/stdio/sfputs_r.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/stdio/libc_a-sfputs_r.obj -MD -MP -MF libc/stdio/$(DEPDIR)/libc_a-sfputs_r.Tpo -c -o libc/stdio/libc_a-sfputs_r.obj `if test -f 'libc/stdio/sfputs_r.c'; then $(CYGPATH_W) 'libc/stdio/sfputs_r.c'; else $(CYGPATH_W) '$(srcdir)/libc/stdio/sfputs_r.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/stdio/$(DEPDIR)/libc_a-sfputs_r.Tpo libc/stdio/$(DEPDIR)/libc_a-sfputs_r.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/stdio/sfputs_r.c' object='libc/stdio/libc_a-sfputs_r.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/stdio/libc_a-sfputs_r.obj `if test -f 'libc/stdio/sfputs_r.c'; then $(CYGPATH_W) 'libc/stdio/sfputs_r.c'; else $(CYGPATH_W) '$(srcdir)/libc/stdio/sfputs_r.c'; fi` + +libc/stdio/libc_a-sfputws_r.o: libc/stdio/sfputws_r.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/stdio/libc_a-sfputws_r.o -MD -MP -MF libc/stdio/$(DEPDIR)/libc_a-sfputws_r.Tpo -c -o libc/stdio/libc_a-sfputws_r.o `test -f 'libc/stdio/sfputws_r.c' || echo '$(srcdir)/'`libc/stdio/sfputws_r.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/stdio/$(DEPDIR)/libc_a-sfputws_r.Tpo libc/stdio/$(DEPDIR)/libc_a-sfputws_r.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/stdio/sfputws_r.c' object='libc/stdio/libc_a-sfputws_r.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/stdio/libc_a-sfputws_r.o `test -f 'libc/stdio/sfputws_r.c' || echo '$(srcdir)/'`libc/stdio/sfputws_r.c + +libc/stdio/libc_a-sfputws_r.obj: libc/stdio/sfputws_r.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/stdio/libc_a-sfputws_r.obj -MD -MP -MF libc/stdio/$(DEPDIR)/libc_a-sfputws_r.Tpo -c -o libc/stdio/libc_a-sfputws_r.obj `if test -f 'libc/stdio/sfputws_r.c'; then $(CYGPATH_W) 'libc/stdio/sfputws_r.c'; else $(CYGPATH_W) '$(srcdir)/libc/stdio/sfputws_r.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/stdio/$(DEPDIR)/libc_a-sfputws_r.Tpo libc/stdio/$(DEPDIR)/libc_a-sfputws_r.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/stdio/sfputws_r.c' object='libc/stdio/libc_a-sfputws_r.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/stdio/libc_a-sfputws_r.obj `if test -f 'libc/stdio/sfputws_r.c'; then $(CYGPATH_W) 'libc/stdio/sfputws_r.c'; else $(CYGPATH_W) '$(srcdir)/libc/stdio/sfputws_r.c'; fi` + +libc/stdio/libc_a-sprint_r.o: libc/stdio/sprint_r.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/stdio/libc_a-sprint_r.o -MD -MP -MF libc/stdio/$(DEPDIR)/libc_a-sprint_r.Tpo -c -o libc/stdio/libc_a-sprint_r.o `test -f 'libc/stdio/sprint_r.c' || echo '$(srcdir)/'`libc/stdio/sprint_r.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/stdio/$(DEPDIR)/libc_a-sprint_r.Tpo libc/stdio/$(DEPDIR)/libc_a-sprint_r.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/stdio/sprint_r.c' object='libc/stdio/libc_a-sprint_r.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/stdio/libc_a-sprint_r.o `test -f 'libc/stdio/sprint_r.c' || echo '$(srcdir)/'`libc/stdio/sprint_r.c + +libc/stdio/libc_a-sprint_r.obj: libc/stdio/sprint_r.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/stdio/libc_a-sprint_r.obj -MD -MP -MF libc/stdio/$(DEPDIR)/libc_a-sprint_r.Tpo -c -o libc/stdio/libc_a-sprint_r.obj `if test -f 'libc/stdio/sprint_r.c'; then $(CYGPATH_W) 'libc/stdio/sprint_r.c'; else $(CYGPATH_W) '$(srcdir)/libc/stdio/sprint_r.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/stdio/$(DEPDIR)/libc_a-sprint_r.Tpo libc/stdio/$(DEPDIR)/libc_a-sprint_r.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/stdio/sprint_r.c' object='libc/stdio/libc_a-sprint_r.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/stdio/libc_a-sprint_r.obj `if test -f 'libc/stdio/sprint_r.c'; then $(CYGPATH_W) 'libc/stdio/sprint_r.c'; else $(CYGPATH_W) '$(srcdir)/libc/stdio/sprint_r.c'; fi` + +libc/stdio/libc_a-swprint_r.o: libc/stdio/swprint_r.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/stdio/libc_a-swprint_r.o -MD -MP -MF libc/stdio/$(DEPDIR)/libc_a-swprint_r.Tpo -c -o libc/stdio/libc_a-swprint_r.o `test -f 'libc/stdio/swprint_r.c' || echo '$(srcdir)/'`libc/stdio/swprint_r.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/stdio/$(DEPDIR)/libc_a-swprint_r.Tpo libc/stdio/$(DEPDIR)/libc_a-swprint_r.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/stdio/swprint_r.c' object='libc/stdio/libc_a-swprint_r.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/stdio/libc_a-swprint_r.o `test -f 'libc/stdio/swprint_r.c' || echo '$(srcdir)/'`libc/stdio/swprint_r.c + +libc/stdio/libc_a-swprint_r.obj: libc/stdio/swprint_r.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/stdio/libc_a-swprint_r.obj -MD -MP -MF libc/stdio/$(DEPDIR)/libc_a-swprint_r.Tpo -c -o libc/stdio/libc_a-swprint_r.obj `if test -f 'libc/stdio/swprint_r.c'; then $(CYGPATH_W) 'libc/stdio/swprint_r.c'; else $(CYGPATH_W) '$(srcdir)/libc/stdio/swprint_r.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/stdio/$(DEPDIR)/libc_a-swprint_r.Tpo libc/stdio/$(DEPDIR)/libc_a-swprint_r.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/stdio/swprint_r.c' object='libc/stdio/libc_a-swprint_r.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/stdio/libc_a-swprint_r.obj `if test -f 'libc/stdio/swprint_r.c'; then $(CYGPATH_W) 'libc/stdio/swprint_r.c'; else $(CYGPATH_W) '$(srcdir)/libc/stdio/swprint_r.c'; fi` + +libc/stdio/libc_a-ssputs_r.o: libc/stdio/ssputs_r.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/stdio/libc_a-ssputs_r.o -MD -MP -MF libc/stdio/$(DEPDIR)/libc_a-ssputs_r.Tpo -c -o libc/stdio/libc_a-ssputs_r.o `test -f 'libc/stdio/ssputs_r.c' || echo '$(srcdir)/'`libc/stdio/ssputs_r.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/stdio/$(DEPDIR)/libc_a-ssputs_r.Tpo libc/stdio/$(DEPDIR)/libc_a-ssputs_r.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/stdio/ssputs_r.c' object='libc/stdio/libc_a-ssputs_r.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/stdio/libc_a-ssputs_r.o `test -f 'libc/stdio/ssputs_r.c' || echo '$(srcdir)/'`libc/stdio/ssputs_r.c + +libc/stdio/libc_a-ssputs_r.obj: libc/stdio/ssputs_r.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/stdio/libc_a-ssputs_r.obj -MD -MP -MF libc/stdio/$(DEPDIR)/libc_a-ssputs_r.Tpo -c -o libc/stdio/libc_a-ssputs_r.obj `if test -f 'libc/stdio/ssputs_r.c'; then $(CYGPATH_W) 'libc/stdio/ssputs_r.c'; else $(CYGPATH_W) '$(srcdir)/libc/stdio/ssputs_r.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/stdio/$(DEPDIR)/libc_a-ssputs_r.Tpo libc/stdio/$(DEPDIR)/libc_a-ssputs_r.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/stdio/ssputs_r.c' object='libc/stdio/libc_a-ssputs_r.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/stdio/libc_a-ssputs_r.obj `if test -f 'libc/stdio/ssputs_r.c'; then $(CYGPATH_W) 'libc/stdio/ssputs_r.c'; else $(CYGPATH_W) '$(srcdir)/libc/stdio/ssputs_r.c'; fi` + +libc/stdio/libc_a-ssputws_r.o: libc/stdio/ssputws_r.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/stdio/libc_a-ssputws_r.o -MD -MP -MF libc/stdio/$(DEPDIR)/libc_a-ssputws_r.Tpo -c -o libc/stdio/libc_a-ssputws_r.o `test -f 'libc/stdio/ssputws_r.c' || echo '$(srcdir)/'`libc/stdio/ssputws_r.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/stdio/$(DEPDIR)/libc_a-ssputws_r.Tpo libc/stdio/$(DEPDIR)/libc_a-ssputws_r.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/stdio/ssputws_r.c' object='libc/stdio/libc_a-ssputws_r.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/stdio/libc_a-ssputws_r.o `test -f 'libc/stdio/ssputws_r.c' || echo '$(srcdir)/'`libc/stdio/ssputws_r.c + +libc/stdio/libc_a-ssputws_r.obj: libc/stdio/ssputws_r.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/stdio/libc_a-ssputws_r.obj -MD -MP -MF libc/stdio/$(DEPDIR)/libc_a-ssputws_r.Tpo -c -o libc/stdio/libc_a-ssputws_r.obj `if test -f 'libc/stdio/ssputws_r.c'; then $(CYGPATH_W) 'libc/stdio/ssputws_r.c'; else $(CYGPATH_W) '$(srcdir)/libc/stdio/ssputws_r.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/stdio/$(DEPDIR)/libc_a-ssputws_r.Tpo libc/stdio/$(DEPDIR)/libc_a-ssputws_r.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/stdio/ssputws_r.c' object='libc/stdio/libc_a-ssputws_r.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/stdio/libc_a-ssputws_r.obj `if test -f 'libc/stdio/ssputws_r.c'; then $(CYGPATH_W) 'libc/stdio/ssputws_r.c'; else $(CYGPATH_W) '$(srcdir)/libc/stdio/ssputws_r.c'; fi` + +libc/stdio/libc_a-ssprint_r.o: libc/stdio/ssprint_r.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/stdio/libc_a-ssprint_r.o -MD -MP -MF libc/stdio/$(DEPDIR)/libc_a-ssprint_r.Tpo -c -o libc/stdio/libc_a-ssprint_r.o `test -f 'libc/stdio/ssprint_r.c' || echo '$(srcdir)/'`libc/stdio/ssprint_r.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/stdio/$(DEPDIR)/libc_a-ssprint_r.Tpo libc/stdio/$(DEPDIR)/libc_a-ssprint_r.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/stdio/ssprint_r.c' object='libc/stdio/libc_a-ssprint_r.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/stdio/libc_a-ssprint_r.o `test -f 'libc/stdio/ssprint_r.c' || echo '$(srcdir)/'`libc/stdio/ssprint_r.c + +libc/stdio/libc_a-ssprint_r.obj: libc/stdio/ssprint_r.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/stdio/libc_a-ssprint_r.obj -MD -MP -MF libc/stdio/$(DEPDIR)/libc_a-ssprint_r.Tpo -c -o libc/stdio/libc_a-ssprint_r.obj `if test -f 'libc/stdio/ssprint_r.c'; then $(CYGPATH_W) 'libc/stdio/ssprint_r.c'; else $(CYGPATH_W) '$(srcdir)/libc/stdio/ssprint_r.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/stdio/$(DEPDIR)/libc_a-ssprint_r.Tpo libc/stdio/$(DEPDIR)/libc_a-ssprint_r.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/stdio/ssprint_r.c' object='libc/stdio/libc_a-ssprint_r.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/stdio/libc_a-ssprint_r.obj `if test -f 'libc/stdio/ssprint_r.c'; then $(CYGPATH_W) 'libc/stdio/ssprint_r.c'; else $(CYGPATH_W) '$(srcdir)/libc/stdio/ssprint_r.c'; fi` + +libc/stdio/libc_a-sswprint_r.o: libc/stdio/sswprint_r.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/stdio/libc_a-sswprint_r.o -MD -MP -MF libc/stdio/$(DEPDIR)/libc_a-sswprint_r.Tpo -c -o libc/stdio/libc_a-sswprint_r.o `test -f 'libc/stdio/sswprint_r.c' || echo '$(srcdir)/'`libc/stdio/sswprint_r.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/stdio/$(DEPDIR)/libc_a-sswprint_r.Tpo libc/stdio/$(DEPDIR)/libc_a-sswprint_r.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/stdio/sswprint_r.c' object='libc/stdio/libc_a-sswprint_r.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/stdio/libc_a-sswprint_r.o `test -f 'libc/stdio/sswprint_r.c' || echo '$(srcdir)/'`libc/stdio/sswprint_r.c + +libc/stdio/libc_a-sswprint_r.obj: libc/stdio/sswprint_r.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/stdio/libc_a-sswprint_r.obj -MD -MP -MF libc/stdio/$(DEPDIR)/libc_a-sswprint_r.Tpo -c -o libc/stdio/libc_a-sswprint_r.obj `if test -f 'libc/stdio/sswprint_r.c'; then $(CYGPATH_W) 'libc/stdio/sswprint_r.c'; else $(CYGPATH_W) '$(srcdir)/libc/stdio/sswprint_r.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/stdio/$(DEPDIR)/libc_a-sswprint_r.Tpo libc/stdio/$(DEPDIR)/libc_a-sswprint_r.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/stdio/sswprint_r.c' object='libc/stdio/libc_a-sswprint_r.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/stdio/libc_a-sswprint_r.obj `if test -f 'libc/stdio/sswprint_r.c'; then $(CYGPATH_W) 'libc/stdio/sswprint_r.c'; else $(CYGPATH_W) '$(srcdir)/libc/stdio/sswprint_r.c'; fi` + libc/stdio/libc_a-clearerr.o: libc/stdio/clearerr.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/stdio/libc_a-clearerr.o -MD -MP -MF libc/stdio/$(DEPDIR)/libc_a-clearerr.Tpo -c -o libc/stdio/libc_a-clearerr.o `test -f 'libc/stdio/clearerr.c' || echo '$(srcdir)/'`libc/stdio/clearerr.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/stdio/$(DEPDIR)/libc_a-clearerr.Tpo libc/stdio/$(DEPDIR)/libc_a-clearerr.Po @@ -23750,6 +25129,20 @@ libc/stdio/libc_a-wbuf.obj: libc/stdio/wbuf.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/stdio/libc_a-wbuf.obj `if test -f 'libc/stdio/wbuf.c'; then $(CYGPATH_W) 'libc/stdio/wbuf.c'; else $(CYGPATH_W) '$(srcdir)/libc/stdio/wbuf.c'; fi` +libc/stdio/libc_a-wbufw.o: libc/stdio/wbufw.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/stdio/libc_a-wbufw.o -MD -MP -MF libc/stdio/$(DEPDIR)/libc_a-wbufw.Tpo -c -o libc/stdio/libc_a-wbufw.o `test -f 'libc/stdio/wbufw.c' || echo '$(srcdir)/'`libc/stdio/wbufw.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/stdio/$(DEPDIR)/libc_a-wbufw.Tpo libc/stdio/$(DEPDIR)/libc_a-wbufw.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/stdio/wbufw.c' object='libc/stdio/libc_a-wbufw.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/stdio/libc_a-wbufw.o `test -f 'libc/stdio/wbufw.c' || echo '$(srcdir)/'`libc/stdio/wbufw.c + +libc/stdio/libc_a-wbufw.obj: libc/stdio/wbufw.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/stdio/libc_a-wbufw.obj -MD -MP -MF libc/stdio/$(DEPDIR)/libc_a-wbufw.Tpo -c -o libc/stdio/libc_a-wbufw.obj `if test -f 'libc/stdio/wbufw.c'; then $(CYGPATH_W) 'libc/stdio/wbufw.c'; else $(CYGPATH_W) '$(srcdir)/libc/stdio/wbufw.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/stdio/$(DEPDIR)/libc_a-wbufw.Tpo libc/stdio/$(DEPDIR)/libc_a-wbufw.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/stdio/wbufw.c' object='libc/stdio/libc_a-wbufw.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/stdio/libc_a-wbufw.obj `if test -f 'libc/stdio/wbufw.c'; then $(CYGPATH_W) 'libc/stdio/wbufw.c'; else $(CYGPATH_W) '$(srcdir)/libc/stdio/wbufw.c'; fi` + libc/stdio/libc_a-wsetup.o: libc/stdio/wsetup.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/stdio/libc_a-wsetup.o -MD -MP -MF libc/stdio/$(DEPDIR)/libc_a-wsetup.Tpo -c -o libc/stdio/libc_a-wsetup.o `test -f 'libc/stdio/wsetup.c' || echo '$(srcdir)/'`libc/stdio/wsetup.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/stdio/$(DEPDIR)/libc_a-wsetup.Tpo libc/stdio/$(DEPDIR)/libc_a-wsetup.Po @@ -26830,6 +28223,20 @@ libc/reent/libc_a-fstatr.obj: libc/reent/fstatr.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/reent/libc_a-fstatr.obj `if test -f 'libc/reent/fstatr.c'; then $(CYGPATH_W) 'libc/reent/fstatr.c'; else $(CYGPATH_W) '$(srcdir)/libc/reent/fstatr.c'; fi` +libc/reent/libc_a-getentropyr.o: libc/reent/getentropyr.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/reent/libc_a-getentropyr.o -MD -MP -MF libc/reent/$(DEPDIR)/libc_a-getentropyr.Tpo -c -o libc/reent/libc_a-getentropyr.o `test -f 'libc/reent/getentropyr.c' || echo '$(srcdir)/'`libc/reent/getentropyr.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/reent/$(DEPDIR)/libc_a-getentropyr.Tpo libc/reent/$(DEPDIR)/libc_a-getentropyr.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/reent/getentropyr.c' object='libc/reent/libc_a-getentropyr.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/reent/libc_a-getentropyr.o `test -f 'libc/reent/getentropyr.c' || echo '$(srcdir)/'`libc/reent/getentropyr.c + +libc/reent/libc_a-getentropyr.obj: libc/reent/getentropyr.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/reent/libc_a-getentropyr.obj -MD -MP -MF libc/reent/$(DEPDIR)/libc_a-getentropyr.Tpo -c -o libc/reent/libc_a-getentropyr.obj `if test -f 'libc/reent/getentropyr.c'; then $(CYGPATH_W) 'libc/reent/getentropyr.c'; else $(CYGPATH_W) '$(srcdir)/libc/reent/getentropyr.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/reent/$(DEPDIR)/libc_a-getentropyr.Tpo libc/reent/$(DEPDIR)/libc_a-getentropyr.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/reent/getentropyr.c' object='libc/reent/libc_a-getentropyr.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/reent/libc_a-getentropyr.obj `if test -f 'libc/reent/getentropyr.c'; then $(CYGPATH_W) 'libc/reent/getentropyr.c'; else $(CYGPATH_W) '$(srcdir)/libc/reent/getentropyr.c'; fi` + libc/reent/libc_a-getreent.o: libc/reent/getreent.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/reent/libc_a-getreent.o -MD -MP -MF libc/reent/$(DEPDIR)/libc_a-getreent.Tpo -c -o libc/reent/libc_a-getreent.o `test -f 'libc/reent/getreent.c' || echo '$(srcdir)/'`libc/reent/getreent.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/reent/$(DEPDIR)/libc_a-getreent.Tpo libc/reent/$(DEPDIR)/libc_a-getreent.Po @@ -26970,20 +28377,6 @@ libc/reent/libc_a-signalr.obj: libc/reent/signalr.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/reent/libc_a-signalr.obj `if test -f 'libc/reent/signalr.c'; then $(CYGPATH_W) 'libc/reent/signalr.c'; else $(CYGPATH_W) '$(srcdir)/libc/reent/signalr.c'; fi` -libc/reent/libc_a-signgam.o: libc/reent/signgam.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/reent/libc_a-signgam.o -MD -MP -MF libc/reent/$(DEPDIR)/libc_a-signgam.Tpo -c -o libc/reent/libc_a-signgam.o `test -f 'libc/reent/signgam.c' || echo '$(srcdir)/'`libc/reent/signgam.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/reent/$(DEPDIR)/libc_a-signgam.Tpo libc/reent/$(DEPDIR)/libc_a-signgam.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/reent/signgam.c' object='libc/reent/libc_a-signgam.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/reent/libc_a-signgam.o `test -f 'libc/reent/signgam.c' || echo '$(srcdir)/'`libc/reent/signgam.c - -libc/reent/libc_a-signgam.obj: libc/reent/signgam.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/reent/libc_a-signgam.obj -MD -MP -MF libc/reent/$(DEPDIR)/libc_a-signgam.Tpo -c -o libc/reent/libc_a-signgam.obj `if test -f 'libc/reent/signgam.c'; then $(CYGPATH_W) 'libc/reent/signgam.c'; else $(CYGPATH_W) '$(srcdir)/libc/reent/signgam.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/reent/$(DEPDIR)/libc_a-signgam.Tpo libc/reent/$(DEPDIR)/libc_a-signgam.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/reent/signgam.c' object='libc/reent/libc_a-signgam.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/reent/libc_a-signgam.obj `if test -f 'libc/reent/signgam.c'; then $(CYGPATH_W) 'libc/reent/signgam.c'; else $(CYGPATH_W) '$(srcdir)/libc/reent/signgam.c'; fi` - libc/reent/libc_a-sbrkr.o: libc/reent/sbrkr.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/reent/libc_a-sbrkr.o -MD -MP -MF libc/reent/$(DEPDIR)/libc_a-sbrkr.Tpo -c -o libc/reent/libc_a-sbrkr.o `test -f 'libc/reent/sbrkr.c' || echo '$(srcdir)/'`libc/reent/sbrkr.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/reent/$(DEPDIR)/libc_a-sbrkr.Tpo libc/reent/$(DEPDIR)/libc_a-sbrkr.Po @@ -27908,6 +29301,20 @@ libc/syscalls/libc_a-sysfstat.obj: libc/syscalls/sysfstat.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/syscalls/libc_a-sysfstat.obj `if test -f 'libc/syscalls/sysfstat.c'; then $(CYGPATH_W) 'libc/syscalls/sysfstat.c'; else $(CYGPATH_W) '$(srcdir)/libc/syscalls/sysfstat.c'; fi` +libc/syscalls/libc_a-sysgetentropy.o: libc/syscalls/sysgetentropy.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/syscalls/libc_a-sysgetentropy.o -MD -MP -MF libc/syscalls/$(DEPDIR)/libc_a-sysgetentropy.Tpo -c -o libc/syscalls/libc_a-sysgetentropy.o `test -f 'libc/syscalls/sysgetentropy.c' || echo '$(srcdir)/'`libc/syscalls/sysgetentropy.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/syscalls/$(DEPDIR)/libc_a-sysgetentropy.Tpo libc/syscalls/$(DEPDIR)/libc_a-sysgetentropy.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/syscalls/sysgetentropy.c' object='libc/syscalls/libc_a-sysgetentropy.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/syscalls/libc_a-sysgetentropy.o `test -f 'libc/syscalls/sysgetentropy.c' || echo '$(srcdir)/'`libc/syscalls/sysgetentropy.c + +libc/syscalls/libc_a-sysgetentropy.obj: libc/syscalls/sysgetentropy.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/syscalls/libc_a-sysgetentropy.obj -MD -MP -MF libc/syscalls/$(DEPDIR)/libc_a-sysgetentropy.Tpo -c -o libc/syscalls/libc_a-sysgetentropy.obj `if test -f 'libc/syscalls/sysgetentropy.c'; then $(CYGPATH_W) 'libc/syscalls/sysgetentropy.c'; else $(CYGPATH_W) '$(srcdir)/libc/syscalls/sysgetentropy.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/syscalls/$(DEPDIR)/libc_a-sysgetentropy.Tpo libc/syscalls/$(DEPDIR)/libc_a-sysgetentropy.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/syscalls/sysgetentropy.c' object='libc/syscalls/libc_a-sysgetentropy.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/syscalls/libc_a-sysgetentropy.obj `if test -f 'libc/syscalls/sysgetentropy.c'; then $(CYGPATH_W) 'libc/syscalls/sysgetentropy.c'; else $(CYGPATH_W) '$(srcdir)/libc/syscalls/sysgetentropy.c'; fi` + libc/syscalls/libc_a-sysgetpid.o: libc/syscalls/sysgetpid.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/syscalls/libc_a-sysgetpid.o -MD -MP -MF libc/syscalls/$(DEPDIR)/libc_a-sysgetpid.Tpo -c -o libc/syscalls/libc_a-sysgetpid.o `test -f 'libc/syscalls/sysgetpid.c' || echo '$(srcdir)/'`libc/syscalls/sysgetpid.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/syscalls/$(DEPDIR)/libc_a-sysgetpid.Tpo libc/syscalls/$(DEPDIR)/libc_a-sysgetpid.Po @@ -31660,6 +33067,48 @@ libc/sys/w65/libc_a-trap.obj: libc/sys/w65/trap.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/sys/w65/libc_a-trap.obj `if test -f 'libc/sys/w65/trap.c'; then $(CYGPATH_W) 'libc/sys/w65/trap.c'; else $(CYGPATH_W) '$(srcdir)/libc/sys/w65/trap.c'; fi` +libc/sys/xtensa/libc_a-creat.o: libc/sys/xtensa/creat.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/sys/xtensa/libc_a-creat.o -MD -MP -MF libc/sys/xtensa/$(DEPDIR)/libc_a-creat.Tpo -c -o libc/sys/xtensa/libc_a-creat.o `test -f 'libc/sys/xtensa/creat.c' || echo '$(srcdir)/'`libc/sys/xtensa/creat.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/sys/xtensa/$(DEPDIR)/libc_a-creat.Tpo libc/sys/xtensa/$(DEPDIR)/libc_a-creat.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/sys/xtensa/creat.c' object='libc/sys/xtensa/libc_a-creat.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/sys/xtensa/libc_a-creat.o `test -f 'libc/sys/xtensa/creat.c' || echo '$(srcdir)/'`libc/sys/xtensa/creat.c + +libc/sys/xtensa/libc_a-creat.obj: libc/sys/xtensa/creat.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/sys/xtensa/libc_a-creat.obj -MD -MP -MF libc/sys/xtensa/$(DEPDIR)/libc_a-creat.Tpo -c -o libc/sys/xtensa/libc_a-creat.obj `if test -f 'libc/sys/xtensa/creat.c'; then $(CYGPATH_W) 'libc/sys/xtensa/creat.c'; else $(CYGPATH_W) '$(srcdir)/libc/sys/xtensa/creat.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/sys/xtensa/$(DEPDIR)/libc_a-creat.Tpo libc/sys/xtensa/$(DEPDIR)/libc_a-creat.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/sys/xtensa/creat.c' object='libc/sys/xtensa/libc_a-creat.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/sys/xtensa/libc_a-creat.obj `if test -f 'libc/sys/xtensa/creat.c'; then $(CYGPATH_W) 'libc/sys/xtensa/creat.c'; else $(CYGPATH_W) '$(srcdir)/libc/sys/xtensa/creat.c'; fi` + +libc/sys/xtensa/libc_a-isatty.o: libc/sys/xtensa/isatty.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/sys/xtensa/libc_a-isatty.o -MD -MP -MF libc/sys/xtensa/$(DEPDIR)/libc_a-isatty.Tpo -c -o libc/sys/xtensa/libc_a-isatty.o `test -f 'libc/sys/xtensa/isatty.c' || echo '$(srcdir)/'`libc/sys/xtensa/isatty.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/sys/xtensa/$(DEPDIR)/libc_a-isatty.Tpo libc/sys/xtensa/$(DEPDIR)/libc_a-isatty.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/sys/xtensa/isatty.c' object='libc/sys/xtensa/libc_a-isatty.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/sys/xtensa/libc_a-isatty.o `test -f 'libc/sys/xtensa/isatty.c' || echo '$(srcdir)/'`libc/sys/xtensa/isatty.c + +libc/sys/xtensa/libc_a-isatty.obj: libc/sys/xtensa/isatty.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/sys/xtensa/libc_a-isatty.obj -MD -MP -MF libc/sys/xtensa/$(DEPDIR)/libc_a-isatty.Tpo -c -o libc/sys/xtensa/libc_a-isatty.obj `if test -f 'libc/sys/xtensa/isatty.c'; then $(CYGPATH_W) 'libc/sys/xtensa/isatty.c'; else $(CYGPATH_W) '$(srcdir)/libc/sys/xtensa/isatty.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/sys/xtensa/$(DEPDIR)/libc_a-isatty.Tpo libc/sys/xtensa/$(DEPDIR)/libc_a-isatty.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/sys/xtensa/isatty.c' object='libc/sys/xtensa/libc_a-isatty.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/sys/xtensa/libc_a-isatty.obj `if test -f 'libc/sys/xtensa/isatty.c'; then $(CYGPATH_W) 'libc/sys/xtensa/isatty.c'; else $(CYGPATH_W) '$(srcdir)/libc/sys/xtensa/isatty.c'; fi` + +libc/sys/xtensa/libc_a-clibrary_init.o: libc/sys/xtensa/clibrary_init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/sys/xtensa/libc_a-clibrary_init.o -MD -MP -MF libc/sys/xtensa/$(DEPDIR)/libc_a-clibrary_init.Tpo -c -o libc/sys/xtensa/libc_a-clibrary_init.o `test -f 'libc/sys/xtensa/clibrary_init.c' || echo '$(srcdir)/'`libc/sys/xtensa/clibrary_init.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/sys/xtensa/$(DEPDIR)/libc_a-clibrary_init.Tpo libc/sys/xtensa/$(DEPDIR)/libc_a-clibrary_init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/sys/xtensa/clibrary_init.c' object='libc/sys/xtensa/libc_a-clibrary_init.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/sys/xtensa/libc_a-clibrary_init.o `test -f 'libc/sys/xtensa/clibrary_init.c' || echo '$(srcdir)/'`libc/sys/xtensa/clibrary_init.c + +libc/sys/xtensa/libc_a-clibrary_init.obj: libc/sys/xtensa/clibrary_init.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/sys/xtensa/libc_a-clibrary_init.obj -MD -MP -MF libc/sys/xtensa/$(DEPDIR)/libc_a-clibrary_init.Tpo -c -o libc/sys/xtensa/libc_a-clibrary_init.obj `if test -f 'libc/sys/xtensa/clibrary_init.c'; then $(CYGPATH_W) 'libc/sys/xtensa/clibrary_init.c'; else $(CYGPATH_W) '$(srcdir)/libc/sys/xtensa/clibrary_init.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/sys/xtensa/$(DEPDIR)/libc_a-clibrary_init.Tpo libc/sys/xtensa/$(DEPDIR)/libc_a-clibrary_init.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/sys/xtensa/clibrary_init.c' object='libc/sys/xtensa/libc_a-clibrary_init.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/sys/xtensa/libc_a-clibrary_init.obj `if test -f 'libc/sys/xtensa/clibrary_init.c'; then $(CYGPATH_W) 'libc/sys/xtensa/clibrary_init.c'; else $(CYGPATH_W) '$(srcdir)/libc/sys/xtensa/clibrary_init.c'; fi` + libc/sys/z8ksim/libc_a-glue.o: libc/sys/z8ksim/glue.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/sys/z8ksim/libc_a-glue.o -MD -MP -MF libc/sys/z8ksim/$(DEPDIR)/libc_a-glue.Tpo -c -o libc/sys/z8ksim/libc_a-glue.o `test -f 'libc/sys/z8ksim/glue.c' || echo '$(srcdir)/'`libc/sys/z8ksim/glue.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/sys/z8ksim/$(DEPDIR)/libc_a-glue.Tpo libc/sys/z8ksim/$(DEPDIR)/libc_a-glue.Po @@ -31716,19 +33165,33 @@ libc/machine/aarch64/libc_a-memcpy-stub.obj: libc/machine/aarch64/memcpy-stub.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/machine/aarch64/libc_a-memcpy-stub.obj `if test -f 'libc/machine/aarch64/memcpy-stub.c'; then $(CYGPATH_W) 'libc/machine/aarch64/memcpy-stub.c'; else $(CYGPATH_W) '$(srcdir)/libc/machine/aarch64/memcpy-stub.c'; fi` -libc/machine/aarch64/libc_a-memmove-stub.o: libc/machine/aarch64/memmove-stub.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/machine/aarch64/libc_a-memmove-stub.o -MD -MP -MF libc/machine/aarch64/$(DEPDIR)/libc_a-memmove-stub.Tpo -c -o libc/machine/aarch64/libc_a-memmove-stub.o `test -f 'libc/machine/aarch64/memmove-stub.c' || echo '$(srcdir)/'`libc/machine/aarch64/memmove-stub.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/machine/aarch64/$(DEPDIR)/libc_a-memmove-stub.Tpo libc/machine/aarch64/$(DEPDIR)/libc_a-memmove-stub.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/machine/aarch64/memmove-stub.c' object='libc/machine/aarch64/libc_a-memmove-stub.o' libtool=no @AMDEPBACKSLASH@ +libc/machine/aarch64/libc_a-memmove.o: libc/machine/aarch64/memmove.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/machine/aarch64/libc_a-memmove.o -MD -MP -MF libc/machine/aarch64/$(DEPDIR)/libc_a-memmove.Tpo -c -o libc/machine/aarch64/libc_a-memmove.o `test -f 'libc/machine/aarch64/memmove.c' || echo '$(srcdir)/'`libc/machine/aarch64/memmove.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/machine/aarch64/$(DEPDIR)/libc_a-memmove.Tpo libc/machine/aarch64/$(DEPDIR)/libc_a-memmove.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/machine/aarch64/memmove.c' object='libc/machine/aarch64/libc_a-memmove.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/machine/aarch64/libc_a-memmove.o `test -f 'libc/machine/aarch64/memmove.c' || echo '$(srcdir)/'`libc/machine/aarch64/memmove.c + +libc/machine/aarch64/libc_a-memmove.obj: libc/machine/aarch64/memmove.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/machine/aarch64/libc_a-memmove.obj -MD -MP -MF libc/machine/aarch64/$(DEPDIR)/libc_a-memmove.Tpo -c -o libc/machine/aarch64/libc_a-memmove.obj `if test -f 'libc/machine/aarch64/memmove.c'; then $(CYGPATH_W) 'libc/machine/aarch64/memmove.c'; else $(CYGPATH_W) '$(srcdir)/libc/machine/aarch64/memmove.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/machine/aarch64/$(DEPDIR)/libc_a-memmove.Tpo libc/machine/aarch64/$(DEPDIR)/libc_a-memmove.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/machine/aarch64/memmove.c' object='libc/machine/aarch64/libc_a-memmove.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/machine/aarch64/libc_a-memmove-stub.o `test -f 'libc/machine/aarch64/memmove-stub.c' || echo '$(srcdir)/'`libc/machine/aarch64/memmove-stub.c +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/machine/aarch64/libc_a-memmove.obj `if test -f 'libc/machine/aarch64/memmove.c'; then $(CYGPATH_W) 'libc/machine/aarch64/memmove.c'; else $(CYGPATH_W) '$(srcdir)/libc/machine/aarch64/memmove.c'; fi` -libc/machine/aarch64/libc_a-memmove-stub.obj: libc/machine/aarch64/memmove-stub.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/machine/aarch64/libc_a-memmove-stub.obj -MD -MP -MF libc/machine/aarch64/$(DEPDIR)/libc_a-memmove-stub.Tpo -c -o libc/machine/aarch64/libc_a-memmove-stub.obj `if test -f 'libc/machine/aarch64/memmove-stub.c'; then $(CYGPATH_W) 'libc/machine/aarch64/memmove-stub.c'; else $(CYGPATH_W) '$(srcdir)/libc/machine/aarch64/memmove-stub.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/machine/aarch64/$(DEPDIR)/libc_a-memmove-stub.Tpo libc/machine/aarch64/$(DEPDIR)/libc_a-memmove-stub.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/machine/aarch64/memmove-stub.c' object='libc/machine/aarch64/libc_a-memmove-stub.obj' libtool=no @AMDEPBACKSLASH@ +libc/machine/aarch64/libc_a-memrchr-stub.o: libc/machine/aarch64/memrchr-stub.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/machine/aarch64/libc_a-memrchr-stub.o -MD -MP -MF libc/machine/aarch64/$(DEPDIR)/libc_a-memrchr-stub.Tpo -c -o libc/machine/aarch64/libc_a-memrchr-stub.o `test -f 'libc/machine/aarch64/memrchr-stub.c' || echo '$(srcdir)/'`libc/machine/aarch64/memrchr-stub.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/machine/aarch64/$(DEPDIR)/libc_a-memrchr-stub.Tpo libc/machine/aarch64/$(DEPDIR)/libc_a-memrchr-stub.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/machine/aarch64/memrchr-stub.c' object='libc/machine/aarch64/libc_a-memrchr-stub.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/machine/aarch64/libc_a-memmove-stub.obj `if test -f 'libc/machine/aarch64/memmove-stub.c'; then $(CYGPATH_W) 'libc/machine/aarch64/memmove-stub.c'; else $(CYGPATH_W) '$(srcdir)/libc/machine/aarch64/memmove-stub.c'; fi` +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/machine/aarch64/libc_a-memrchr-stub.o `test -f 'libc/machine/aarch64/memrchr-stub.c' || echo '$(srcdir)/'`libc/machine/aarch64/memrchr-stub.c + +libc/machine/aarch64/libc_a-memrchr-stub.obj: libc/machine/aarch64/memrchr-stub.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/machine/aarch64/libc_a-memrchr-stub.obj -MD -MP -MF libc/machine/aarch64/$(DEPDIR)/libc_a-memrchr-stub.Tpo -c -o libc/machine/aarch64/libc_a-memrchr-stub.obj `if test -f 'libc/machine/aarch64/memrchr-stub.c'; then $(CYGPATH_W) 'libc/machine/aarch64/memrchr-stub.c'; else $(CYGPATH_W) '$(srcdir)/libc/machine/aarch64/memrchr-stub.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/machine/aarch64/$(DEPDIR)/libc_a-memrchr-stub.Tpo libc/machine/aarch64/$(DEPDIR)/libc_a-memrchr-stub.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/machine/aarch64/memrchr-stub.c' object='libc/machine/aarch64/libc_a-memrchr-stub.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/machine/aarch64/libc_a-memrchr-stub.obj `if test -f 'libc/machine/aarch64/memrchr-stub.c'; then $(CYGPATH_W) 'libc/machine/aarch64/memrchr-stub.c'; else $(CYGPATH_W) '$(srcdir)/libc/machine/aarch64/memrchr-stub.c'; fi` libc/machine/aarch64/libc_a-memset-stub.o: libc/machine/aarch64/memset-stub.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/machine/aarch64/libc_a-memset-stub.o -MD -MP -MF libc/machine/aarch64/$(DEPDIR)/libc_a-memset-stub.Tpo -c -o libc/machine/aarch64/libc_a-memset-stub.o `test -f 'libc/machine/aarch64/memset-stub.c' || echo '$(srcdir)/'`libc/machine/aarch64/memset-stub.c @@ -31884,6 +33347,20 @@ libc/machine/aarch64/libc_a-strrchr-stub.obj: libc/machine/aarch64/strrchr-stub. @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/machine/aarch64/libc_a-strrchr-stub.obj `if test -f 'libc/machine/aarch64/strrchr-stub.c'; then $(CYGPATH_W) 'libc/machine/aarch64/strrchr-stub.c'; else $(CYGPATH_W) '$(srcdir)/libc/machine/aarch64/strrchr-stub.c'; fi` +libc/machine/amdgcn/libc_a-_exit.o: libc/machine/amdgcn/_exit.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/machine/amdgcn/libc_a-_exit.o -MD -MP -MF libc/machine/amdgcn/$(DEPDIR)/libc_a-_exit.Tpo -c -o libc/machine/amdgcn/libc_a-_exit.o `test -f 'libc/machine/amdgcn/_exit.c' || echo '$(srcdir)/'`libc/machine/amdgcn/_exit.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/machine/amdgcn/$(DEPDIR)/libc_a-_exit.Tpo libc/machine/amdgcn/$(DEPDIR)/libc_a-_exit.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/machine/amdgcn/_exit.c' object='libc/machine/amdgcn/libc_a-_exit.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/machine/amdgcn/libc_a-_exit.o `test -f 'libc/machine/amdgcn/_exit.c' || echo '$(srcdir)/'`libc/machine/amdgcn/_exit.c + +libc/machine/amdgcn/libc_a-_exit.obj: libc/machine/amdgcn/_exit.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/machine/amdgcn/libc_a-_exit.obj -MD -MP -MF libc/machine/amdgcn/$(DEPDIR)/libc_a-_exit.Tpo -c -o libc/machine/amdgcn/libc_a-_exit.obj `if test -f 'libc/machine/amdgcn/_exit.c'; then $(CYGPATH_W) 'libc/machine/amdgcn/_exit.c'; else $(CYGPATH_W) '$(srcdir)/libc/machine/amdgcn/_exit.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/machine/amdgcn/$(DEPDIR)/libc_a-_exit.Tpo libc/machine/amdgcn/$(DEPDIR)/libc_a-_exit.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/machine/amdgcn/_exit.c' object='libc/machine/amdgcn/libc_a-_exit.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/machine/amdgcn/libc_a-_exit.obj `if test -f 'libc/machine/amdgcn/_exit.c'; then $(CYGPATH_W) 'libc/machine/amdgcn/_exit.c'; else $(CYGPATH_W) '$(srcdir)/libc/machine/amdgcn/_exit.c'; fi` + libc/machine/amdgcn/libc_a-abort.o: libc/machine/amdgcn/abort.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/machine/amdgcn/libc_a-abort.o -MD -MP -MF libc/machine/amdgcn/$(DEPDIR)/libc_a-abort.Tpo -c -o libc/machine/amdgcn/libc_a-abort.o `test -f 'libc/machine/amdgcn/abort.c' || echo '$(srcdir)/'`libc/machine/amdgcn/abort.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/machine/amdgcn/$(DEPDIR)/libc_a-abort.Tpo libc/machine/amdgcn/$(DEPDIR)/libc_a-abort.Po @@ -31898,20 +33375,6 @@ libc/machine/amdgcn/libc_a-abort.obj: libc/machine/amdgcn/abort.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/machine/amdgcn/libc_a-abort.obj `if test -f 'libc/machine/amdgcn/abort.c'; then $(CYGPATH_W) 'libc/machine/amdgcn/abort.c'; else $(CYGPATH_W) '$(srcdir)/libc/machine/amdgcn/abort.c'; fi` -libc/machine/amdgcn/libc_a-exit.o: libc/machine/amdgcn/exit.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/machine/amdgcn/libc_a-exit.o -MD -MP -MF libc/machine/amdgcn/$(DEPDIR)/libc_a-exit.Tpo -c -o libc/machine/amdgcn/libc_a-exit.o `test -f 'libc/machine/amdgcn/exit.c' || echo '$(srcdir)/'`libc/machine/amdgcn/exit.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/machine/amdgcn/$(DEPDIR)/libc_a-exit.Tpo libc/machine/amdgcn/$(DEPDIR)/libc_a-exit.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/machine/amdgcn/exit.c' object='libc/machine/amdgcn/libc_a-exit.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/machine/amdgcn/libc_a-exit.o `test -f 'libc/machine/amdgcn/exit.c' || echo '$(srcdir)/'`libc/machine/amdgcn/exit.c - -libc/machine/amdgcn/libc_a-exit.obj: libc/machine/amdgcn/exit.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/machine/amdgcn/libc_a-exit.obj -MD -MP -MF libc/machine/amdgcn/$(DEPDIR)/libc_a-exit.Tpo -c -o libc/machine/amdgcn/libc_a-exit.obj `if test -f 'libc/machine/amdgcn/exit.c'; then $(CYGPATH_W) 'libc/machine/amdgcn/exit.c'; else $(CYGPATH_W) '$(srcdir)/libc/machine/amdgcn/exit.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/machine/amdgcn/$(DEPDIR)/libc_a-exit.Tpo libc/machine/amdgcn/$(DEPDIR)/libc_a-exit.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/machine/amdgcn/exit.c' object='libc/machine/amdgcn/libc_a-exit.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/machine/amdgcn/libc_a-exit.obj `if test -f 'libc/machine/amdgcn/exit.c'; then $(CYGPATH_W) 'libc/machine/amdgcn/exit.c'; else $(CYGPATH_W) '$(srcdir)/libc/machine/amdgcn/exit.c'; fi` - libc/machine/amdgcn/libc_a-atexit.o: libc/machine/amdgcn/atexit.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/machine/amdgcn/libc_a-atexit.o -MD -MP -MF libc/machine/amdgcn/$(DEPDIR)/libc_a-atexit.Tpo -c -o libc/machine/amdgcn/libc_a-atexit.o `test -f 'libc/machine/amdgcn/atexit.c' || echo '$(srcdir)/'`libc/machine/amdgcn/atexit.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/machine/amdgcn/$(DEPDIR)/libc_a-atexit.Tpo libc/machine/amdgcn/$(DEPDIR)/libc_a-atexit.Po @@ -32486,6 +33949,20 @@ libc/machine/nds32/libc_a-abort.obj: libc/machine/nds32/abort.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/machine/nds32/libc_a-abort.obj `if test -f 'libc/machine/nds32/abort.c'; then $(CYGPATH_W) 'libc/machine/nds32/abort.c'; else $(CYGPATH_W) '$(srcdir)/libc/machine/nds32/abort.c'; fi` +libc/machine/nvptx/libc_a-_exit.o: libc/machine/nvptx/_exit.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/machine/nvptx/libc_a-_exit.o -MD -MP -MF libc/machine/nvptx/$(DEPDIR)/libc_a-_exit.Tpo -c -o libc/machine/nvptx/libc_a-_exit.o `test -f 'libc/machine/nvptx/_exit.c' || echo '$(srcdir)/'`libc/machine/nvptx/_exit.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/machine/nvptx/$(DEPDIR)/libc_a-_exit.Tpo libc/machine/nvptx/$(DEPDIR)/libc_a-_exit.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/machine/nvptx/_exit.c' object='libc/machine/nvptx/libc_a-_exit.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/machine/nvptx/libc_a-_exit.o `test -f 'libc/machine/nvptx/_exit.c' || echo '$(srcdir)/'`libc/machine/nvptx/_exit.c + +libc/machine/nvptx/libc_a-_exit.obj: libc/machine/nvptx/_exit.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/machine/nvptx/libc_a-_exit.obj -MD -MP -MF libc/machine/nvptx/$(DEPDIR)/libc_a-_exit.Tpo -c -o libc/machine/nvptx/libc_a-_exit.obj `if test -f 'libc/machine/nvptx/_exit.c'; then $(CYGPATH_W) 'libc/machine/nvptx/_exit.c'; else $(CYGPATH_W) '$(srcdir)/libc/machine/nvptx/_exit.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/machine/nvptx/$(DEPDIR)/libc_a-_exit.Tpo libc/machine/nvptx/$(DEPDIR)/libc_a-_exit.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/machine/nvptx/_exit.c' object='libc/machine/nvptx/libc_a-_exit.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/machine/nvptx/libc_a-_exit.obj `if test -f 'libc/machine/nvptx/_exit.c'; then $(CYGPATH_W) 'libc/machine/nvptx/_exit.c'; else $(CYGPATH_W) '$(srcdir)/libc/machine/nvptx/_exit.c'; fi` + libc/machine/nvptx/libc_a-calloc.o: libc/machine/nvptx/calloc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/machine/nvptx/libc_a-calloc.o -MD -MP -MF libc/machine/nvptx/$(DEPDIR)/libc_a-calloc.Tpo -c -o libc/machine/nvptx/libc_a-calloc.o `test -f 'libc/machine/nvptx/calloc.c' || echo '$(srcdir)/'`libc/machine/nvptx/calloc.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/machine/nvptx/$(DEPDIR)/libc_a-calloc.Tpo libc/machine/nvptx/$(DEPDIR)/libc_a-calloc.Po @@ -32668,20 +34145,6 @@ libc/machine/nvptx/libc_a-abort.obj: libc/machine/nvptx/abort.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/machine/nvptx/libc_a-abort.obj `if test -f 'libc/machine/nvptx/abort.c'; then $(CYGPATH_W) 'libc/machine/nvptx/abort.c'; else $(CYGPATH_W) '$(srcdir)/libc/machine/nvptx/abort.c'; fi` -libc/machine/nvptx/libc_a-exit.o: libc/machine/nvptx/exit.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/machine/nvptx/libc_a-exit.o -MD -MP -MF libc/machine/nvptx/$(DEPDIR)/libc_a-exit.Tpo -c -o libc/machine/nvptx/libc_a-exit.o `test -f 'libc/machine/nvptx/exit.c' || echo '$(srcdir)/'`libc/machine/nvptx/exit.c -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/machine/nvptx/$(DEPDIR)/libc_a-exit.Tpo libc/machine/nvptx/$(DEPDIR)/libc_a-exit.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/machine/nvptx/exit.c' object='libc/machine/nvptx/libc_a-exit.o' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/machine/nvptx/libc_a-exit.o `test -f 'libc/machine/nvptx/exit.c' || echo '$(srcdir)/'`libc/machine/nvptx/exit.c - -libc/machine/nvptx/libc_a-exit.obj: libc/machine/nvptx/exit.c -@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/machine/nvptx/libc_a-exit.obj -MD -MP -MF libc/machine/nvptx/$(DEPDIR)/libc_a-exit.Tpo -c -o libc/machine/nvptx/libc_a-exit.obj `if test -f 'libc/machine/nvptx/exit.c'; then $(CYGPATH_W) 'libc/machine/nvptx/exit.c'; else $(CYGPATH_W) '$(srcdir)/libc/machine/nvptx/exit.c'; fi` -@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/machine/nvptx/$(DEPDIR)/libc_a-exit.Tpo libc/machine/nvptx/$(DEPDIR)/libc_a-exit.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libc/machine/nvptx/exit.c' object='libc/machine/nvptx/libc_a-exit.obj' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -c -o libc/machine/nvptx/libc_a-exit.obj `if test -f 'libc/machine/nvptx/exit.c'; then $(CYGPATH_W) 'libc/machine/nvptx/exit.c'; else $(CYGPATH_W) '$(srcdir)/libc/machine/nvptx/exit.c'; fi` - libc/machine/nvptx/libc_a-misc.o: libc/machine/nvptx/misc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libc_a_CPPFLAGS) $(CPPFLAGS) $(libc_a_CFLAGS) $(CFLAGS) -MT libc/machine/nvptx/libc_a-misc.o -MD -MP -MF libc/machine/nvptx/$(DEPDIR)/libc_a-misc.Tpo -c -o libc/machine/nvptx/libc_a-misc.o `test -f 'libc/machine/nvptx/misc.c' || echo '$(srcdir)/'`libc/machine/nvptx/misc.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libc/machine/nvptx/$(DEPDIR)/libc_a-misc.Tpo libc/machine/nvptx/$(DEPDIR)/libc_a-misc.Po @@ -37022,6 +38485,20 @@ libm/math/libm_a-w_drem.obj: libm/math/w_drem.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/math/libm_a-w_drem.obj `if test -f 'libm/math/w_drem.c'; then $(CYGPATH_W) 'libm/math/w_drem.c'; else $(CYGPATH_W) '$(srcdir)/libm/math/w_drem.c'; fi` +libm/math/libm_a-signgam.o: libm/math/signgam.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/math/libm_a-signgam.o -MD -MP -MF libm/math/$(DEPDIR)/libm_a-signgam.Tpo -c -o libm/math/libm_a-signgam.o `test -f 'libm/math/signgam.c' || echo '$(srcdir)/'`libm/math/signgam.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/math/$(DEPDIR)/libm_a-signgam.Tpo libm/math/$(DEPDIR)/libm_a-signgam.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/math/signgam.c' object='libm/math/libm_a-signgam.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/math/libm_a-signgam.o `test -f 'libm/math/signgam.c' || echo '$(srcdir)/'`libm/math/signgam.c + +libm/math/libm_a-signgam.obj: libm/math/signgam.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/math/libm_a-signgam.obj -MD -MP -MF libm/math/$(DEPDIR)/libm_a-signgam.Tpo -c -o libm/math/libm_a-signgam.obj `if test -f 'libm/math/signgam.c'; then $(CYGPATH_W) 'libm/math/signgam.c'; else $(CYGPATH_W) '$(srcdir)/libm/math/signgam.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/math/$(DEPDIR)/libm_a-signgam.Tpo libm/math/$(DEPDIR)/libm_a-signgam.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/math/signgam.c' object='libm/math/libm_a-signgam.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/math/libm_a-signgam.obj `if test -f 'libm/math/signgam.c'; then $(CYGPATH_W) 'libm/math/signgam.c'; else $(CYGPATH_W) '$(srcdir)/libm/math/signgam.c'; fi` + libm/math/libm_a-s_asinh.o: libm/math/s_asinh.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/math/libm_a-s_asinh.o -MD -MP -MF libm/math/$(DEPDIR)/libm_a-s_asinh.Tpo -c -o libm/math/libm_a-s_asinh.o `test -f 'libm/math/s_asinh.c' || echo '$(srcdir)/'`libm/math/s_asinh.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/math/$(DEPDIR)/libm_a-s_asinh.Tpo libm/math/$(DEPDIR)/libm_a-s_asinh.Po @@ -40312,6 +41789,636 @@ libm/common/libm_a-sl_finite.obj: libm/common/sl_finite.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/common/libm_a-sl_finite.obj `if test -f 'libm/common/sl_finite.c'; then $(CYGPATH_W) 'libm/common/sl_finite.c'; else $(CYGPATH_W) '$(srcdir)/libm/common/sl_finite.c'; fi` +libm/ld/libm_a-e_acoshl.o: libm/ld/e_acoshl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-e_acoshl.o -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-e_acoshl.Tpo -c -o libm/ld/libm_a-e_acoshl.o `test -f 'libm/ld/e_acoshl.c' || echo '$(srcdir)/'`libm/ld/e_acoshl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-e_acoshl.Tpo libm/ld/$(DEPDIR)/libm_a-e_acoshl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/e_acoshl.c' object='libm/ld/libm_a-e_acoshl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-e_acoshl.o `test -f 'libm/ld/e_acoshl.c' || echo '$(srcdir)/'`libm/ld/e_acoshl.c + +libm/ld/libm_a-e_acoshl.obj: libm/ld/e_acoshl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-e_acoshl.obj -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-e_acoshl.Tpo -c -o libm/ld/libm_a-e_acoshl.obj `if test -f 'libm/ld/e_acoshl.c'; then $(CYGPATH_W) 'libm/ld/e_acoshl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/e_acoshl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-e_acoshl.Tpo libm/ld/$(DEPDIR)/libm_a-e_acoshl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/e_acoshl.c' object='libm/ld/libm_a-e_acoshl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-e_acoshl.obj `if test -f 'libm/ld/e_acoshl.c'; then $(CYGPATH_W) 'libm/ld/e_acoshl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/e_acoshl.c'; fi` + +libm/ld/libm_a-e_acosl.o: libm/ld/e_acosl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-e_acosl.o -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-e_acosl.Tpo -c -o libm/ld/libm_a-e_acosl.o `test -f 'libm/ld/e_acosl.c' || echo '$(srcdir)/'`libm/ld/e_acosl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-e_acosl.Tpo libm/ld/$(DEPDIR)/libm_a-e_acosl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/e_acosl.c' object='libm/ld/libm_a-e_acosl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-e_acosl.o `test -f 'libm/ld/e_acosl.c' || echo '$(srcdir)/'`libm/ld/e_acosl.c + +libm/ld/libm_a-e_acosl.obj: libm/ld/e_acosl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-e_acosl.obj -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-e_acosl.Tpo -c -o libm/ld/libm_a-e_acosl.obj `if test -f 'libm/ld/e_acosl.c'; then $(CYGPATH_W) 'libm/ld/e_acosl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/e_acosl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-e_acosl.Tpo libm/ld/$(DEPDIR)/libm_a-e_acosl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/e_acosl.c' object='libm/ld/libm_a-e_acosl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-e_acosl.obj `if test -f 'libm/ld/e_acosl.c'; then $(CYGPATH_W) 'libm/ld/e_acosl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/e_acosl.c'; fi` + +libm/ld/libm_a-e_asinl.o: libm/ld/e_asinl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-e_asinl.o -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-e_asinl.Tpo -c -o libm/ld/libm_a-e_asinl.o `test -f 'libm/ld/e_asinl.c' || echo '$(srcdir)/'`libm/ld/e_asinl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-e_asinl.Tpo libm/ld/$(DEPDIR)/libm_a-e_asinl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/e_asinl.c' object='libm/ld/libm_a-e_asinl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-e_asinl.o `test -f 'libm/ld/e_asinl.c' || echo '$(srcdir)/'`libm/ld/e_asinl.c + +libm/ld/libm_a-e_asinl.obj: libm/ld/e_asinl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-e_asinl.obj -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-e_asinl.Tpo -c -o libm/ld/libm_a-e_asinl.obj `if test -f 'libm/ld/e_asinl.c'; then $(CYGPATH_W) 'libm/ld/e_asinl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/e_asinl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-e_asinl.Tpo libm/ld/$(DEPDIR)/libm_a-e_asinl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/e_asinl.c' object='libm/ld/libm_a-e_asinl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-e_asinl.obj `if test -f 'libm/ld/e_asinl.c'; then $(CYGPATH_W) 'libm/ld/e_asinl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/e_asinl.c'; fi` + +libm/ld/libm_a-e_atan2l.o: libm/ld/e_atan2l.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-e_atan2l.o -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-e_atan2l.Tpo -c -o libm/ld/libm_a-e_atan2l.o `test -f 'libm/ld/e_atan2l.c' || echo '$(srcdir)/'`libm/ld/e_atan2l.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-e_atan2l.Tpo libm/ld/$(DEPDIR)/libm_a-e_atan2l.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/e_atan2l.c' object='libm/ld/libm_a-e_atan2l.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-e_atan2l.o `test -f 'libm/ld/e_atan2l.c' || echo '$(srcdir)/'`libm/ld/e_atan2l.c + +libm/ld/libm_a-e_atan2l.obj: libm/ld/e_atan2l.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-e_atan2l.obj -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-e_atan2l.Tpo -c -o libm/ld/libm_a-e_atan2l.obj `if test -f 'libm/ld/e_atan2l.c'; then $(CYGPATH_W) 'libm/ld/e_atan2l.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/e_atan2l.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-e_atan2l.Tpo libm/ld/$(DEPDIR)/libm_a-e_atan2l.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/e_atan2l.c' object='libm/ld/libm_a-e_atan2l.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-e_atan2l.obj `if test -f 'libm/ld/e_atan2l.c'; then $(CYGPATH_W) 'libm/ld/e_atan2l.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/e_atan2l.c'; fi` + +libm/ld/libm_a-e_atanhl.o: libm/ld/e_atanhl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-e_atanhl.o -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-e_atanhl.Tpo -c -o libm/ld/libm_a-e_atanhl.o `test -f 'libm/ld/e_atanhl.c' || echo '$(srcdir)/'`libm/ld/e_atanhl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-e_atanhl.Tpo libm/ld/$(DEPDIR)/libm_a-e_atanhl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/e_atanhl.c' object='libm/ld/libm_a-e_atanhl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-e_atanhl.o `test -f 'libm/ld/e_atanhl.c' || echo '$(srcdir)/'`libm/ld/e_atanhl.c + +libm/ld/libm_a-e_atanhl.obj: libm/ld/e_atanhl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-e_atanhl.obj -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-e_atanhl.Tpo -c -o libm/ld/libm_a-e_atanhl.obj `if test -f 'libm/ld/e_atanhl.c'; then $(CYGPATH_W) 'libm/ld/e_atanhl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/e_atanhl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-e_atanhl.Tpo libm/ld/$(DEPDIR)/libm_a-e_atanhl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/e_atanhl.c' object='libm/ld/libm_a-e_atanhl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-e_atanhl.obj `if test -f 'libm/ld/e_atanhl.c'; then $(CYGPATH_W) 'libm/ld/e_atanhl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/e_atanhl.c'; fi` + +libm/ld/libm_a-e_coshl.o: libm/ld/e_coshl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-e_coshl.o -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-e_coshl.Tpo -c -o libm/ld/libm_a-e_coshl.o `test -f 'libm/ld/e_coshl.c' || echo '$(srcdir)/'`libm/ld/e_coshl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-e_coshl.Tpo libm/ld/$(DEPDIR)/libm_a-e_coshl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/e_coshl.c' object='libm/ld/libm_a-e_coshl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-e_coshl.o `test -f 'libm/ld/e_coshl.c' || echo '$(srcdir)/'`libm/ld/e_coshl.c + +libm/ld/libm_a-e_coshl.obj: libm/ld/e_coshl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-e_coshl.obj -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-e_coshl.Tpo -c -o libm/ld/libm_a-e_coshl.obj `if test -f 'libm/ld/e_coshl.c'; then $(CYGPATH_W) 'libm/ld/e_coshl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/e_coshl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-e_coshl.Tpo libm/ld/$(DEPDIR)/libm_a-e_coshl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/e_coshl.c' object='libm/ld/libm_a-e_coshl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-e_coshl.obj `if test -f 'libm/ld/e_coshl.c'; then $(CYGPATH_W) 'libm/ld/e_coshl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/e_coshl.c'; fi` + +libm/ld/libm_a-e_fmodl.o: libm/ld/e_fmodl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-e_fmodl.o -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-e_fmodl.Tpo -c -o libm/ld/libm_a-e_fmodl.o `test -f 'libm/ld/e_fmodl.c' || echo '$(srcdir)/'`libm/ld/e_fmodl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-e_fmodl.Tpo libm/ld/$(DEPDIR)/libm_a-e_fmodl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/e_fmodl.c' object='libm/ld/libm_a-e_fmodl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-e_fmodl.o `test -f 'libm/ld/e_fmodl.c' || echo '$(srcdir)/'`libm/ld/e_fmodl.c + +libm/ld/libm_a-e_fmodl.obj: libm/ld/e_fmodl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-e_fmodl.obj -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-e_fmodl.Tpo -c -o libm/ld/libm_a-e_fmodl.obj `if test -f 'libm/ld/e_fmodl.c'; then $(CYGPATH_W) 'libm/ld/e_fmodl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/e_fmodl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-e_fmodl.Tpo libm/ld/$(DEPDIR)/libm_a-e_fmodl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/e_fmodl.c' object='libm/ld/libm_a-e_fmodl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-e_fmodl.obj `if test -f 'libm/ld/e_fmodl.c'; then $(CYGPATH_W) 'libm/ld/e_fmodl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/e_fmodl.c'; fi` + +libm/ld/libm_a-e_lgammal.o: libm/ld/e_lgammal.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-e_lgammal.o -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-e_lgammal.Tpo -c -o libm/ld/libm_a-e_lgammal.o `test -f 'libm/ld/e_lgammal.c' || echo '$(srcdir)/'`libm/ld/e_lgammal.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-e_lgammal.Tpo libm/ld/$(DEPDIR)/libm_a-e_lgammal.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/e_lgammal.c' object='libm/ld/libm_a-e_lgammal.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-e_lgammal.o `test -f 'libm/ld/e_lgammal.c' || echo '$(srcdir)/'`libm/ld/e_lgammal.c + +libm/ld/libm_a-e_lgammal.obj: libm/ld/e_lgammal.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-e_lgammal.obj -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-e_lgammal.Tpo -c -o libm/ld/libm_a-e_lgammal.obj `if test -f 'libm/ld/e_lgammal.c'; then $(CYGPATH_W) 'libm/ld/e_lgammal.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/e_lgammal.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-e_lgammal.Tpo libm/ld/$(DEPDIR)/libm_a-e_lgammal.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/e_lgammal.c' object='libm/ld/libm_a-e_lgammal.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-e_lgammal.obj `if test -f 'libm/ld/e_lgammal.c'; then $(CYGPATH_W) 'libm/ld/e_lgammal.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/e_lgammal.c'; fi` + +libm/ld/libm_a-e_remainderl.o: libm/ld/e_remainderl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-e_remainderl.o -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-e_remainderl.Tpo -c -o libm/ld/libm_a-e_remainderl.o `test -f 'libm/ld/e_remainderl.c' || echo '$(srcdir)/'`libm/ld/e_remainderl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-e_remainderl.Tpo libm/ld/$(DEPDIR)/libm_a-e_remainderl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/e_remainderl.c' object='libm/ld/libm_a-e_remainderl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-e_remainderl.o `test -f 'libm/ld/e_remainderl.c' || echo '$(srcdir)/'`libm/ld/e_remainderl.c + +libm/ld/libm_a-e_remainderl.obj: libm/ld/e_remainderl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-e_remainderl.obj -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-e_remainderl.Tpo -c -o libm/ld/libm_a-e_remainderl.obj `if test -f 'libm/ld/e_remainderl.c'; then $(CYGPATH_W) 'libm/ld/e_remainderl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/e_remainderl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-e_remainderl.Tpo libm/ld/$(DEPDIR)/libm_a-e_remainderl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/e_remainderl.c' object='libm/ld/libm_a-e_remainderl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-e_remainderl.obj `if test -f 'libm/ld/e_remainderl.c'; then $(CYGPATH_W) 'libm/ld/e_remainderl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/e_remainderl.c'; fi` + +libm/ld/libm_a-e_sinhl.o: libm/ld/e_sinhl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-e_sinhl.o -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-e_sinhl.Tpo -c -o libm/ld/libm_a-e_sinhl.o `test -f 'libm/ld/e_sinhl.c' || echo '$(srcdir)/'`libm/ld/e_sinhl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-e_sinhl.Tpo libm/ld/$(DEPDIR)/libm_a-e_sinhl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/e_sinhl.c' object='libm/ld/libm_a-e_sinhl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-e_sinhl.o `test -f 'libm/ld/e_sinhl.c' || echo '$(srcdir)/'`libm/ld/e_sinhl.c + +libm/ld/libm_a-e_sinhl.obj: libm/ld/e_sinhl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-e_sinhl.obj -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-e_sinhl.Tpo -c -o libm/ld/libm_a-e_sinhl.obj `if test -f 'libm/ld/e_sinhl.c'; then $(CYGPATH_W) 'libm/ld/e_sinhl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/e_sinhl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-e_sinhl.Tpo libm/ld/$(DEPDIR)/libm_a-e_sinhl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/e_sinhl.c' object='libm/ld/libm_a-e_sinhl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-e_sinhl.obj `if test -f 'libm/ld/e_sinhl.c'; then $(CYGPATH_W) 'libm/ld/e_sinhl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/e_sinhl.c'; fi` + +libm/ld/libm_a-s_asinhl.o: libm/ld/s_asinhl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_asinhl.o -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_asinhl.Tpo -c -o libm/ld/libm_a-s_asinhl.o `test -f 'libm/ld/s_asinhl.c' || echo '$(srcdir)/'`libm/ld/s_asinhl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_asinhl.Tpo libm/ld/$(DEPDIR)/libm_a-s_asinhl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_asinhl.c' object='libm/ld/libm_a-s_asinhl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_asinhl.o `test -f 'libm/ld/s_asinhl.c' || echo '$(srcdir)/'`libm/ld/s_asinhl.c + +libm/ld/libm_a-s_asinhl.obj: libm/ld/s_asinhl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_asinhl.obj -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_asinhl.Tpo -c -o libm/ld/libm_a-s_asinhl.obj `if test -f 'libm/ld/s_asinhl.c'; then $(CYGPATH_W) 'libm/ld/s_asinhl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_asinhl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_asinhl.Tpo libm/ld/$(DEPDIR)/libm_a-s_asinhl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_asinhl.c' object='libm/ld/libm_a-s_asinhl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_asinhl.obj `if test -f 'libm/ld/s_asinhl.c'; then $(CYGPATH_W) 'libm/ld/s_asinhl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_asinhl.c'; fi` + +libm/ld/libm_a-s_atanl.o: libm/ld/s_atanl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_atanl.o -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_atanl.Tpo -c -o libm/ld/libm_a-s_atanl.o `test -f 'libm/ld/s_atanl.c' || echo '$(srcdir)/'`libm/ld/s_atanl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_atanl.Tpo libm/ld/$(DEPDIR)/libm_a-s_atanl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_atanl.c' object='libm/ld/libm_a-s_atanl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_atanl.o `test -f 'libm/ld/s_atanl.c' || echo '$(srcdir)/'`libm/ld/s_atanl.c + +libm/ld/libm_a-s_atanl.obj: libm/ld/s_atanl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_atanl.obj -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_atanl.Tpo -c -o libm/ld/libm_a-s_atanl.obj `if test -f 'libm/ld/s_atanl.c'; then $(CYGPATH_W) 'libm/ld/s_atanl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_atanl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_atanl.Tpo libm/ld/$(DEPDIR)/libm_a-s_atanl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_atanl.c' object='libm/ld/libm_a-s_atanl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_atanl.obj `if test -f 'libm/ld/s_atanl.c'; then $(CYGPATH_W) 'libm/ld/s_atanl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_atanl.c'; fi` + +libm/ld/libm_a-s_cbrtl.o: libm/ld/s_cbrtl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_cbrtl.o -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_cbrtl.Tpo -c -o libm/ld/libm_a-s_cbrtl.o `test -f 'libm/ld/s_cbrtl.c' || echo '$(srcdir)/'`libm/ld/s_cbrtl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_cbrtl.Tpo libm/ld/$(DEPDIR)/libm_a-s_cbrtl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_cbrtl.c' object='libm/ld/libm_a-s_cbrtl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_cbrtl.o `test -f 'libm/ld/s_cbrtl.c' || echo '$(srcdir)/'`libm/ld/s_cbrtl.c + +libm/ld/libm_a-s_cbrtl.obj: libm/ld/s_cbrtl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_cbrtl.obj -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_cbrtl.Tpo -c -o libm/ld/libm_a-s_cbrtl.obj `if test -f 'libm/ld/s_cbrtl.c'; then $(CYGPATH_W) 'libm/ld/s_cbrtl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_cbrtl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_cbrtl.Tpo libm/ld/$(DEPDIR)/libm_a-s_cbrtl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_cbrtl.c' object='libm/ld/libm_a-s_cbrtl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_cbrtl.obj `if test -f 'libm/ld/s_cbrtl.c'; then $(CYGPATH_W) 'libm/ld/s_cbrtl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_cbrtl.c'; fi` + +libm/ld/libm_a-s_ceill.o: libm/ld/s_ceill.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_ceill.o -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_ceill.Tpo -c -o libm/ld/libm_a-s_ceill.o `test -f 'libm/ld/s_ceill.c' || echo '$(srcdir)/'`libm/ld/s_ceill.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_ceill.Tpo libm/ld/$(DEPDIR)/libm_a-s_ceill.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_ceill.c' object='libm/ld/libm_a-s_ceill.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_ceill.o `test -f 'libm/ld/s_ceill.c' || echo '$(srcdir)/'`libm/ld/s_ceill.c + +libm/ld/libm_a-s_ceill.obj: libm/ld/s_ceill.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_ceill.obj -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_ceill.Tpo -c -o libm/ld/libm_a-s_ceill.obj `if test -f 'libm/ld/s_ceill.c'; then $(CYGPATH_W) 'libm/ld/s_ceill.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_ceill.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_ceill.Tpo libm/ld/$(DEPDIR)/libm_a-s_ceill.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_ceill.c' object='libm/ld/libm_a-s_ceill.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_ceill.obj `if test -f 'libm/ld/s_ceill.c'; then $(CYGPATH_W) 'libm/ld/s_ceill.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_ceill.c'; fi` + +libm/ld/libm_a-s_copysignl.o: libm/ld/s_copysignl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_copysignl.o -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_copysignl.Tpo -c -o libm/ld/libm_a-s_copysignl.o `test -f 'libm/ld/s_copysignl.c' || echo '$(srcdir)/'`libm/ld/s_copysignl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_copysignl.Tpo libm/ld/$(DEPDIR)/libm_a-s_copysignl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_copysignl.c' object='libm/ld/libm_a-s_copysignl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_copysignl.o `test -f 'libm/ld/s_copysignl.c' || echo '$(srcdir)/'`libm/ld/s_copysignl.c + +libm/ld/libm_a-s_copysignl.obj: libm/ld/s_copysignl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_copysignl.obj -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_copysignl.Tpo -c -o libm/ld/libm_a-s_copysignl.obj `if test -f 'libm/ld/s_copysignl.c'; then $(CYGPATH_W) 'libm/ld/s_copysignl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_copysignl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_copysignl.Tpo libm/ld/$(DEPDIR)/libm_a-s_copysignl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_copysignl.c' object='libm/ld/libm_a-s_copysignl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_copysignl.obj `if test -f 'libm/ld/s_copysignl.c'; then $(CYGPATH_W) 'libm/ld/s_copysignl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_copysignl.c'; fi` + +libm/ld/libm_a-s_cosl.o: libm/ld/s_cosl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_cosl.o -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_cosl.Tpo -c -o libm/ld/libm_a-s_cosl.o `test -f 'libm/ld/s_cosl.c' || echo '$(srcdir)/'`libm/ld/s_cosl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_cosl.Tpo libm/ld/$(DEPDIR)/libm_a-s_cosl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_cosl.c' object='libm/ld/libm_a-s_cosl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_cosl.o `test -f 'libm/ld/s_cosl.c' || echo '$(srcdir)/'`libm/ld/s_cosl.c + +libm/ld/libm_a-s_cosl.obj: libm/ld/s_cosl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_cosl.obj -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_cosl.Tpo -c -o libm/ld/libm_a-s_cosl.obj `if test -f 'libm/ld/s_cosl.c'; then $(CYGPATH_W) 'libm/ld/s_cosl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_cosl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_cosl.Tpo libm/ld/$(DEPDIR)/libm_a-s_cosl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_cosl.c' object='libm/ld/libm_a-s_cosl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_cosl.obj `if test -f 'libm/ld/s_cosl.c'; then $(CYGPATH_W) 'libm/ld/s_cosl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_cosl.c'; fi` + +libm/ld/libm_a-s_fabsl.o: libm/ld/s_fabsl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_fabsl.o -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_fabsl.Tpo -c -o libm/ld/libm_a-s_fabsl.o `test -f 'libm/ld/s_fabsl.c' || echo '$(srcdir)/'`libm/ld/s_fabsl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_fabsl.Tpo libm/ld/$(DEPDIR)/libm_a-s_fabsl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_fabsl.c' object='libm/ld/libm_a-s_fabsl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_fabsl.o `test -f 'libm/ld/s_fabsl.c' || echo '$(srcdir)/'`libm/ld/s_fabsl.c + +libm/ld/libm_a-s_fabsl.obj: libm/ld/s_fabsl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_fabsl.obj -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_fabsl.Tpo -c -o libm/ld/libm_a-s_fabsl.obj `if test -f 'libm/ld/s_fabsl.c'; then $(CYGPATH_W) 'libm/ld/s_fabsl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_fabsl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_fabsl.Tpo libm/ld/$(DEPDIR)/libm_a-s_fabsl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_fabsl.c' object='libm/ld/libm_a-s_fabsl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_fabsl.obj `if test -f 'libm/ld/s_fabsl.c'; then $(CYGPATH_W) 'libm/ld/s_fabsl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_fabsl.c'; fi` + +libm/ld/libm_a-fdiml.o: libm/ld/fdiml.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-fdiml.o -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-fdiml.Tpo -c -o libm/ld/libm_a-fdiml.o `test -f 'libm/ld/fdiml.c' || echo '$(srcdir)/'`libm/ld/fdiml.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-fdiml.Tpo libm/ld/$(DEPDIR)/libm_a-fdiml.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/fdiml.c' object='libm/ld/libm_a-fdiml.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-fdiml.o `test -f 'libm/ld/fdiml.c' || echo '$(srcdir)/'`libm/ld/fdiml.c + +libm/ld/libm_a-fdiml.obj: libm/ld/fdiml.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-fdiml.obj -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-fdiml.Tpo -c -o libm/ld/libm_a-fdiml.obj `if test -f 'libm/ld/fdiml.c'; then $(CYGPATH_W) 'libm/ld/fdiml.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/fdiml.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-fdiml.Tpo libm/ld/$(DEPDIR)/libm_a-fdiml.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/fdiml.c' object='libm/ld/libm_a-fdiml.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-fdiml.obj `if test -f 'libm/ld/fdiml.c'; then $(CYGPATH_W) 'libm/ld/fdiml.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/fdiml.c'; fi` + +libm/ld/libm_a-s_floorl.o: libm/ld/s_floorl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_floorl.o -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_floorl.Tpo -c -o libm/ld/libm_a-s_floorl.o `test -f 'libm/ld/s_floorl.c' || echo '$(srcdir)/'`libm/ld/s_floorl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_floorl.Tpo libm/ld/$(DEPDIR)/libm_a-s_floorl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_floorl.c' object='libm/ld/libm_a-s_floorl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_floorl.o `test -f 'libm/ld/s_floorl.c' || echo '$(srcdir)/'`libm/ld/s_floorl.c + +libm/ld/libm_a-s_floorl.obj: libm/ld/s_floorl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_floorl.obj -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_floorl.Tpo -c -o libm/ld/libm_a-s_floorl.obj `if test -f 'libm/ld/s_floorl.c'; then $(CYGPATH_W) 'libm/ld/s_floorl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_floorl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_floorl.Tpo libm/ld/$(DEPDIR)/libm_a-s_floorl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_floorl.c' object='libm/ld/libm_a-s_floorl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_floorl.obj `if test -f 'libm/ld/s_floorl.c'; then $(CYGPATH_W) 'libm/ld/s_floorl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_floorl.c'; fi` + +libm/ld/libm_a-s_fmal.o: libm/ld/s_fmal.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_fmal.o -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_fmal.Tpo -c -o libm/ld/libm_a-s_fmal.o `test -f 'libm/ld/s_fmal.c' || echo '$(srcdir)/'`libm/ld/s_fmal.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_fmal.Tpo libm/ld/$(DEPDIR)/libm_a-s_fmal.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_fmal.c' object='libm/ld/libm_a-s_fmal.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_fmal.o `test -f 'libm/ld/s_fmal.c' || echo '$(srcdir)/'`libm/ld/s_fmal.c + +libm/ld/libm_a-s_fmal.obj: libm/ld/s_fmal.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_fmal.obj -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_fmal.Tpo -c -o libm/ld/libm_a-s_fmal.obj `if test -f 'libm/ld/s_fmal.c'; then $(CYGPATH_W) 'libm/ld/s_fmal.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_fmal.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_fmal.Tpo libm/ld/$(DEPDIR)/libm_a-s_fmal.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_fmal.c' object='libm/ld/libm_a-s_fmal.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_fmal.obj `if test -f 'libm/ld/s_fmal.c'; then $(CYGPATH_W) 'libm/ld/s_fmal.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_fmal.c'; fi` + +libm/ld/libm_a-s_fmaxl.o: libm/ld/s_fmaxl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_fmaxl.o -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_fmaxl.Tpo -c -o libm/ld/libm_a-s_fmaxl.o `test -f 'libm/ld/s_fmaxl.c' || echo '$(srcdir)/'`libm/ld/s_fmaxl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_fmaxl.Tpo libm/ld/$(DEPDIR)/libm_a-s_fmaxl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_fmaxl.c' object='libm/ld/libm_a-s_fmaxl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_fmaxl.o `test -f 'libm/ld/s_fmaxl.c' || echo '$(srcdir)/'`libm/ld/s_fmaxl.c + +libm/ld/libm_a-s_fmaxl.obj: libm/ld/s_fmaxl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_fmaxl.obj -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_fmaxl.Tpo -c -o libm/ld/libm_a-s_fmaxl.obj `if test -f 'libm/ld/s_fmaxl.c'; then $(CYGPATH_W) 'libm/ld/s_fmaxl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_fmaxl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_fmaxl.Tpo libm/ld/$(DEPDIR)/libm_a-s_fmaxl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_fmaxl.c' object='libm/ld/libm_a-s_fmaxl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_fmaxl.obj `if test -f 'libm/ld/s_fmaxl.c'; then $(CYGPATH_W) 'libm/ld/s_fmaxl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_fmaxl.c'; fi` + +libm/ld/libm_a-s_fminl.o: libm/ld/s_fminl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_fminl.o -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_fminl.Tpo -c -o libm/ld/libm_a-s_fminl.o `test -f 'libm/ld/s_fminl.c' || echo '$(srcdir)/'`libm/ld/s_fminl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_fminl.Tpo libm/ld/$(DEPDIR)/libm_a-s_fminl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_fminl.c' object='libm/ld/libm_a-s_fminl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_fminl.o `test -f 'libm/ld/s_fminl.c' || echo '$(srcdir)/'`libm/ld/s_fminl.c + +libm/ld/libm_a-s_fminl.obj: libm/ld/s_fminl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_fminl.obj -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_fminl.Tpo -c -o libm/ld/libm_a-s_fminl.obj `if test -f 'libm/ld/s_fminl.c'; then $(CYGPATH_W) 'libm/ld/s_fminl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_fminl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_fminl.Tpo libm/ld/$(DEPDIR)/libm_a-s_fminl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_fminl.c' object='libm/ld/libm_a-s_fminl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_fminl.obj `if test -f 'libm/ld/s_fminl.c'; then $(CYGPATH_W) 'libm/ld/s_fminl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_fminl.c'; fi` + +libm/ld/libm_a-s_frexpl.o: libm/ld/s_frexpl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_frexpl.o -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_frexpl.Tpo -c -o libm/ld/libm_a-s_frexpl.o `test -f 'libm/ld/s_frexpl.c' || echo '$(srcdir)/'`libm/ld/s_frexpl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_frexpl.Tpo libm/ld/$(DEPDIR)/libm_a-s_frexpl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_frexpl.c' object='libm/ld/libm_a-s_frexpl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_frexpl.o `test -f 'libm/ld/s_frexpl.c' || echo '$(srcdir)/'`libm/ld/s_frexpl.c + +libm/ld/libm_a-s_frexpl.obj: libm/ld/s_frexpl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_frexpl.obj -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_frexpl.Tpo -c -o libm/ld/libm_a-s_frexpl.obj `if test -f 'libm/ld/s_frexpl.c'; then $(CYGPATH_W) 'libm/ld/s_frexpl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_frexpl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_frexpl.Tpo libm/ld/$(DEPDIR)/libm_a-s_frexpl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_frexpl.c' object='libm/ld/libm_a-s_frexpl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_frexpl.obj `if test -f 'libm/ld/s_frexpl.c'; then $(CYGPATH_W) 'libm/ld/s_frexpl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_frexpl.c'; fi` + +libm/ld/libm_a-s_ilogbl.o: libm/ld/s_ilogbl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_ilogbl.o -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_ilogbl.Tpo -c -o libm/ld/libm_a-s_ilogbl.o `test -f 'libm/ld/s_ilogbl.c' || echo '$(srcdir)/'`libm/ld/s_ilogbl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_ilogbl.Tpo libm/ld/$(DEPDIR)/libm_a-s_ilogbl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_ilogbl.c' object='libm/ld/libm_a-s_ilogbl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_ilogbl.o `test -f 'libm/ld/s_ilogbl.c' || echo '$(srcdir)/'`libm/ld/s_ilogbl.c + +libm/ld/libm_a-s_ilogbl.obj: libm/ld/s_ilogbl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_ilogbl.obj -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_ilogbl.Tpo -c -o libm/ld/libm_a-s_ilogbl.obj `if test -f 'libm/ld/s_ilogbl.c'; then $(CYGPATH_W) 'libm/ld/s_ilogbl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_ilogbl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_ilogbl.Tpo libm/ld/$(DEPDIR)/libm_a-s_ilogbl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_ilogbl.c' object='libm/ld/libm_a-s_ilogbl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_ilogbl.obj `if test -f 'libm/ld/s_ilogbl.c'; then $(CYGPATH_W) 'libm/ld/s_ilogbl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_ilogbl.c'; fi` + +libm/ld/libm_a-s_llrintl.o: libm/ld/s_llrintl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_llrintl.o -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_llrintl.Tpo -c -o libm/ld/libm_a-s_llrintl.o `test -f 'libm/ld/s_llrintl.c' || echo '$(srcdir)/'`libm/ld/s_llrintl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_llrintl.Tpo libm/ld/$(DEPDIR)/libm_a-s_llrintl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_llrintl.c' object='libm/ld/libm_a-s_llrintl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_llrintl.o `test -f 'libm/ld/s_llrintl.c' || echo '$(srcdir)/'`libm/ld/s_llrintl.c + +libm/ld/libm_a-s_llrintl.obj: libm/ld/s_llrintl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_llrintl.obj -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_llrintl.Tpo -c -o libm/ld/libm_a-s_llrintl.obj `if test -f 'libm/ld/s_llrintl.c'; then $(CYGPATH_W) 'libm/ld/s_llrintl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_llrintl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_llrintl.Tpo libm/ld/$(DEPDIR)/libm_a-s_llrintl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_llrintl.c' object='libm/ld/libm_a-s_llrintl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_llrintl.obj `if test -f 'libm/ld/s_llrintl.c'; then $(CYGPATH_W) 'libm/ld/s_llrintl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_llrintl.c'; fi` + +libm/ld/libm_a-s_llroundl.o: libm/ld/s_llroundl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_llroundl.o -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_llroundl.Tpo -c -o libm/ld/libm_a-s_llroundl.o `test -f 'libm/ld/s_llroundl.c' || echo '$(srcdir)/'`libm/ld/s_llroundl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_llroundl.Tpo libm/ld/$(DEPDIR)/libm_a-s_llroundl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_llroundl.c' object='libm/ld/libm_a-s_llroundl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_llroundl.o `test -f 'libm/ld/s_llroundl.c' || echo '$(srcdir)/'`libm/ld/s_llroundl.c + +libm/ld/libm_a-s_llroundl.obj: libm/ld/s_llroundl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_llroundl.obj -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_llroundl.Tpo -c -o libm/ld/libm_a-s_llroundl.obj `if test -f 'libm/ld/s_llroundl.c'; then $(CYGPATH_W) 'libm/ld/s_llroundl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_llroundl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_llroundl.Tpo libm/ld/$(DEPDIR)/libm_a-s_llroundl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_llroundl.c' object='libm/ld/libm_a-s_llroundl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_llroundl.obj `if test -f 'libm/ld/s_llroundl.c'; then $(CYGPATH_W) 'libm/ld/s_llroundl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_llroundl.c'; fi` + +libm/ld/libm_a-s_logbl.o: libm/ld/s_logbl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_logbl.o -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_logbl.Tpo -c -o libm/ld/libm_a-s_logbl.o `test -f 'libm/ld/s_logbl.c' || echo '$(srcdir)/'`libm/ld/s_logbl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_logbl.Tpo libm/ld/$(DEPDIR)/libm_a-s_logbl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_logbl.c' object='libm/ld/libm_a-s_logbl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_logbl.o `test -f 'libm/ld/s_logbl.c' || echo '$(srcdir)/'`libm/ld/s_logbl.c + +libm/ld/libm_a-s_logbl.obj: libm/ld/s_logbl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_logbl.obj -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_logbl.Tpo -c -o libm/ld/libm_a-s_logbl.obj `if test -f 'libm/ld/s_logbl.c'; then $(CYGPATH_W) 'libm/ld/s_logbl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_logbl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_logbl.Tpo libm/ld/$(DEPDIR)/libm_a-s_logbl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_logbl.c' object='libm/ld/libm_a-s_logbl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_logbl.obj `if test -f 'libm/ld/s_logbl.c'; then $(CYGPATH_W) 'libm/ld/s_logbl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_logbl.c'; fi` + +libm/ld/libm_a-s_lrint.o: libm/ld/s_lrint.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_lrint.o -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_lrint.Tpo -c -o libm/ld/libm_a-s_lrint.o `test -f 'libm/ld/s_lrint.c' || echo '$(srcdir)/'`libm/ld/s_lrint.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_lrint.Tpo libm/ld/$(DEPDIR)/libm_a-s_lrint.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_lrint.c' object='libm/ld/libm_a-s_lrint.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_lrint.o `test -f 'libm/ld/s_lrint.c' || echo '$(srcdir)/'`libm/ld/s_lrint.c + +libm/ld/libm_a-s_lrint.obj: libm/ld/s_lrint.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_lrint.obj -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_lrint.Tpo -c -o libm/ld/libm_a-s_lrint.obj `if test -f 'libm/ld/s_lrint.c'; then $(CYGPATH_W) 'libm/ld/s_lrint.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_lrint.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_lrint.Tpo libm/ld/$(DEPDIR)/libm_a-s_lrint.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_lrint.c' object='libm/ld/libm_a-s_lrint.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_lrint.obj `if test -f 'libm/ld/s_lrint.c'; then $(CYGPATH_W) 'libm/ld/s_lrint.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_lrint.c'; fi` + +libm/ld/libm_a-s_lrintl.o: libm/ld/s_lrintl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_lrintl.o -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_lrintl.Tpo -c -o libm/ld/libm_a-s_lrintl.o `test -f 'libm/ld/s_lrintl.c' || echo '$(srcdir)/'`libm/ld/s_lrintl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_lrintl.Tpo libm/ld/$(DEPDIR)/libm_a-s_lrintl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_lrintl.c' object='libm/ld/libm_a-s_lrintl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_lrintl.o `test -f 'libm/ld/s_lrintl.c' || echo '$(srcdir)/'`libm/ld/s_lrintl.c + +libm/ld/libm_a-s_lrintl.obj: libm/ld/s_lrintl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_lrintl.obj -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_lrintl.Tpo -c -o libm/ld/libm_a-s_lrintl.obj `if test -f 'libm/ld/s_lrintl.c'; then $(CYGPATH_W) 'libm/ld/s_lrintl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_lrintl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_lrintl.Tpo libm/ld/$(DEPDIR)/libm_a-s_lrintl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_lrintl.c' object='libm/ld/libm_a-s_lrintl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_lrintl.obj `if test -f 'libm/ld/s_lrintl.c'; then $(CYGPATH_W) 'libm/ld/s_lrintl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_lrintl.c'; fi` + +libm/ld/libm_a-s_lround.o: libm/ld/s_lround.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_lround.o -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_lround.Tpo -c -o libm/ld/libm_a-s_lround.o `test -f 'libm/ld/s_lround.c' || echo '$(srcdir)/'`libm/ld/s_lround.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_lround.Tpo libm/ld/$(DEPDIR)/libm_a-s_lround.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_lround.c' object='libm/ld/libm_a-s_lround.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_lround.o `test -f 'libm/ld/s_lround.c' || echo '$(srcdir)/'`libm/ld/s_lround.c + +libm/ld/libm_a-s_lround.obj: libm/ld/s_lround.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_lround.obj -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_lround.Tpo -c -o libm/ld/libm_a-s_lround.obj `if test -f 'libm/ld/s_lround.c'; then $(CYGPATH_W) 'libm/ld/s_lround.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_lround.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_lround.Tpo libm/ld/$(DEPDIR)/libm_a-s_lround.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_lround.c' object='libm/ld/libm_a-s_lround.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_lround.obj `if test -f 'libm/ld/s_lround.c'; then $(CYGPATH_W) 'libm/ld/s_lround.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_lround.c'; fi` + +libm/ld/libm_a-s_lroundl.o: libm/ld/s_lroundl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_lroundl.o -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_lroundl.Tpo -c -o libm/ld/libm_a-s_lroundl.o `test -f 'libm/ld/s_lroundl.c' || echo '$(srcdir)/'`libm/ld/s_lroundl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_lroundl.Tpo libm/ld/$(DEPDIR)/libm_a-s_lroundl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_lroundl.c' object='libm/ld/libm_a-s_lroundl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_lroundl.o `test -f 'libm/ld/s_lroundl.c' || echo '$(srcdir)/'`libm/ld/s_lroundl.c + +libm/ld/libm_a-s_lroundl.obj: libm/ld/s_lroundl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_lroundl.obj -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_lroundl.Tpo -c -o libm/ld/libm_a-s_lroundl.obj `if test -f 'libm/ld/s_lroundl.c'; then $(CYGPATH_W) 'libm/ld/s_lroundl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_lroundl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_lroundl.Tpo libm/ld/$(DEPDIR)/libm_a-s_lroundl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_lroundl.c' object='libm/ld/libm_a-s_lroundl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_lroundl.obj `if test -f 'libm/ld/s_lroundl.c'; then $(CYGPATH_W) 'libm/ld/s_lroundl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_lroundl.c'; fi` + +libm/ld/libm_a-s_modfl.o: libm/ld/s_modfl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_modfl.o -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_modfl.Tpo -c -o libm/ld/libm_a-s_modfl.o `test -f 'libm/ld/s_modfl.c' || echo '$(srcdir)/'`libm/ld/s_modfl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_modfl.Tpo libm/ld/$(DEPDIR)/libm_a-s_modfl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_modfl.c' object='libm/ld/libm_a-s_modfl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_modfl.o `test -f 'libm/ld/s_modfl.c' || echo '$(srcdir)/'`libm/ld/s_modfl.c + +libm/ld/libm_a-s_modfl.obj: libm/ld/s_modfl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_modfl.obj -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_modfl.Tpo -c -o libm/ld/libm_a-s_modfl.obj `if test -f 'libm/ld/s_modfl.c'; then $(CYGPATH_W) 'libm/ld/s_modfl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_modfl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_modfl.Tpo libm/ld/$(DEPDIR)/libm_a-s_modfl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_modfl.c' object='libm/ld/libm_a-s_modfl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_modfl.obj `if test -f 'libm/ld/s_modfl.c'; then $(CYGPATH_W) 'libm/ld/s_modfl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_modfl.c'; fi` + +libm/ld/libm_a-s_nearbyintl.o: libm/ld/s_nearbyintl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_nearbyintl.o -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_nearbyintl.Tpo -c -o libm/ld/libm_a-s_nearbyintl.o `test -f 'libm/ld/s_nearbyintl.c' || echo '$(srcdir)/'`libm/ld/s_nearbyintl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_nearbyintl.Tpo libm/ld/$(DEPDIR)/libm_a-s_nearbyintl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_nearbyintl.c' object='libm/ld/libm_a-s_nearbyintl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_nearbyintl.o `test -f 'libm/ld/s_nearbyintl.c' || echo '$(srcdir)/'`libm/ld/s_nearbyintl.c + +libm/ld/libm_a-s_nearbyintl.obj: libm/ld/s_nearbyintl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_nearbyintl.obj -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_nearbyintl.Tpo -c -o libm/ld/libm_a-s_nearbyintl.obj `if test -f 'libm/ld/s_nearbyintl.c'; then $(CYGPATH_W) 'libm/ld/s_nearbyintl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_nearbyintl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_nearbyintl.Tpo libm/ld/$(DEPDIR)/libm_a-s_nearbyintl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_nearbyintl.c' object='libm/ld/libm_a-s_nearbyintl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_nearbyintl.obj `if test -f 'libm/ld/s_nearbyintl.c'; then $(CYGPATH_W) 'libm/ld/s_nearbyintl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_nearbyintl.c'; fi` + +libm/ld/libm_a-s_nextafterl.o: libm/ld/s_nextafterl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_nextafterl.o -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_nextafterl.Tpo -c -o libm/ld/libm_a-s_nextafterl.o `test -f 'libm/ld/s_nextafterl.c' || echo '$(srcdir)/'`libm/ld/s_nextafterl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_nextafterl.Tpo libm/ld/$(DEPDIR)/libm_a-s_nextafterl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_nextafterl.c' object='libm/ld/libm_a-s_nextafterl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_nextafterl.o `test -f 'libm/ld/s_nextafterl.c' || echo '$(srcdir)/'`libm/ld/s_nextafterl.c + +libm/ld/libm_a-s_nextafterl.obj: libm/ld/s_nextafterl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_nextafterl.obj -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_nextafterl.Tpo -c -o libm/ld/libm_a-s_nextafterl.obj `if test -f 'libm/ld/s_nextafterl.c'; then $(CYGPATH_W) 'libm/ld/s_nextafterl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_nextafterl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_nextafterl.Tpo libm/ld/$(DEPDIR)/libm_a-s_nextafterl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_nextafterl.c' object='libm/ld/libm_a-s_nextafterl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_nextafterl.obj `if test -f 'libm/ld/s_nextafterl.c'; then $(CYGPATH_W) 'libm/ld/s_nextafterl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_nextafterl.c'; fi` + +libm/ld/libm_a-s_nexttoward.o: libm/ld/s_nexttoward.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_nexttoward.o -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_nexttoward.Tpo -c -o libm/ld/libm_a-s_nexttoward.o `test -f 'libm/ld/s_nexttoward.c' || echo '$(srcdir)/'`libm/ld/s_nexttoward.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_nexttoward.Tpo libm/ld/$(DEPDIR)/libm_a-s_nexttoward.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_nexttoward.c' object='libm/ld/libm_a-s_nexttoward.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_nexttoward.o `test -f 'libm/ld/s_nexttoward.c' || echo '$(srcdir)/'`libm/ld/s_nexttoward.c + +libm/ld/libm_a-s_nexttoward.obj: libm/ld/s_nexttoward.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_nexttoward.obj -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_nexttoward.Tpo -c -o libm/ld/libm_a-s_nexttoward.obj `if test -f 'libm/ld/s_nexttoward.c'; then $(CYGPATH_W) 'libm/ld/s_nexttoward.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_nexttoward.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_nexttoward.Tpo libm/ld/$(DEPDIR)/libm_a-s_nexttoward.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_nexttoward.c' object='libm/ld/libm_a-s_nexttoward.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_nexttoward.obj `if test -f 'libm/ld/s_nexttoward.c'; then $(CYGPATH_W) 'libm/ld/s_nexttoward.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_nexttoward.c'; fi` + +libm/ld/libm_a-s_nexttowardf.o: libm/ld/s_nexttowardf.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_nexttowardf.o -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_nexttowardf.Tpo -c -o libm/ld/libm_a-s_nexttowardf.o `test -f 'libm/ld/s_nexttowardf.c' || echo '$(srcdir)/'`libm/ld/s_nexttowardf.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_nexttowardf.Tpo libm/ld/$(DEPDIR)/libm_a-s_nexttowardf.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_nexttowardf.c' object='libm/ld/libm_a-s_nexttowardf.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_nexttowardf.o `test -f 'libm/ld/s_nexttowardf.c' || echo '$(srcdir)/'`libm/ld/s_nexttowardf.c + +libm/ld/libm_a-s_nexttowardf.obj: libm/ld/s_nexttowardf.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_nexttowardf.obj -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_nexttowardf.Tpo -c -o libm/ld/libm_a-s_nexttowardf.obj `if test -f 'libm/ld/s_nexttowardf.c'; then $(CYGPATH_W) 'libm/ld/s_nexttowardf.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_nexttowardf.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_nexttowardf.Tpo libm/ld/$(DEPDIR)/libm_a-s_nexttowardf.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_nexttowardf.c' object='libm/ld/libm_a-s_nexttowardf.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_nexttowardf.obj `if test -f 'libm/ld/s_nexttowardf.c'; then $(CYGPATH_W) 'libm/ld/s_nexttowardf.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_nexttowardf.c'; fi` + +libm/ld/libm_a-s_remquol.o: libm/ld/s_remquol.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_remquol.o -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_remquol.Tpo -c -o libm/ld/libm_a-s_remquol.o `test -f 'libm/ld/s_remquol.c' || echo '$(srcdir)/'`libm/ld/s_remquol.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_remquol.Tpo libm/ld/$(DEPDIR)/libm_a-s_remquol.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_remquol.c' object='libm/ld/libm_a-s_remquol.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_remquol.o `test -f 'libm/ld/s_remquol.c' || echo '$(srcdir)/'`libm/ld/s_remquol.c + +libm/ld/libm_a-s_remquol.obj: libm/ld/s_remquol.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_remquol.obj -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_remquol.Tpo -c -o libm/ld/libm_a-s_remquol.obj `if test -f 'libm/ld/s_remquol.c'; then $(CYGPATH_W) 'libm/ld/s_remquol.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_remquol.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_remquol.Tpo libm/ld/$(DEPDIR)/libm_a-s_remquol.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_remquol.c' object='libm/ld/libm_a-s_remquol.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_remquol.obj `if test -f 'libm/ld/s_remquol.c'; then $(CYGPATH_W) 'libm/ld/s_remquol.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_remquol.c'; fi` + +libm/ld/libm_a-s_rintl.o: libm/ld/s_rintl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_rintl.o -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_rintl.Tpo -c -o libm/ld/libm_a-s_rintl.o `test -f 'libm/ld/s_rintl.c' || echo '$(srcdir)/'`libm/ld/s_rintl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_rintl.Tpo libm/ld/$(DEPDIR)/libm_a-s_rintl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_rintl.c' object='libm/ld/libm_a-s_rintl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_rintl.o `test -f 'libm/ld/s_rintl.c' || echo '$(srcdir)/'`libm/ld/s_rintl.c + +libm/ld/libm_a-s_rintl.obj: libm/ld/s_rintl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_rintl.obj -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_rintl.Tpo -c -o libm/ld/libm_a-s_rintl.obj `if test -f 'libm/ld/s_rintl.c'; then $(CYGPATH_W) 'libm/ld/s_rintl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_rintl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_rintl.Tpo libm/ld/$(DEPDIR)/libm_a-s_rintl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_rintl.c' object='libm/ld/libm_a-s_rintl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_rintl.obj `if test -f 'libm/ld/s_rintl.c'; then $(CYGPATH_W) 'libm/ld/s_rintl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_rintl.c'; fi` + +libm/ld/libm_a-s_roundl.o: libm/ld/s_roundl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_roundl.o -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_roundl.Tpo -c -o libm/ld/libm_a-s_roundl.o `test -f 'libm/ld/s_roundl.c' || echo '$(srcdir)/'`libm/ld/s_roundl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_roundl.Tpo libm/ld/$(DEPDIR)/libm_a-s_roundl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_roundl.c' object='libm/ld/libm_a-s_roundl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_roundl.o `test -f 'libm/ld/s_roundl.c' || echo '$(srcdir)/'`libm/ld/s_roundl.c + +libm/ld/libm_a-s_roundl.obj: libm/ld/s_roundl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_roundl.obj -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_roundl.Tpo -c -o libm/ld/libm_a-s_roundl.obj `if test -f 'libm/ld/s_roundl.c'; then $(CYGPATH_W) 'libm/ld/s_roundl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_roundl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_roundl.Tpo libm/ld/$(DEPDIR)/libm_a-s_roundl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_roundl.c' object='libm/ld/libm_a-s_roundl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_roundl.obj `if test -f 'libm/ld/s_roundl.c'; then $(CYGPATH_W) 'libm/ld/s_roundl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_roundl.c'; fi` + +libm/ld/libm_a-scalblnl.o: libm/ld/scalblnl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-scalblnl.o -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-scalblnl.Tpo -c -o libm/ld/libm_a-scalblnl.o `test -f 'libm/ld/scalblnl.c' || echo '$(srcdir)/'`libm/ld/scalblnl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-scalblnl.Tpo libm/ld/$(DEPDIR)/libm_a-scalblnl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/scalblnl.c' object='libm/ld/libm_a-scalblnl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-scalblnl.o `test -f 'libm/ld/scalblnl.c' || echo '$(srcdir)/'`libm/ld/scalblnl.c + +libm/ld/libm_a-scalblnl.obj: libm/ld/scalblnl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-scalblnl.obj -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-scalblnl.Tpo -c -o libm/ld/libm_a-scalblnl.obj `if test -f 'libm/ld/scalblnl.c'; then $(CYGPATH_W) 'libm/ld/scalblnl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/scalblnl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-scalblnl.Tpo libm/ld/$(DEPDIR)/libm_a-scalblnl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/scalblnl.c' object='libm/ld/libm_a-scalblnl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-scalblnl.obj `if test -f 'libm/ld/scalblnl.c'; then $(CYGPATH_W) 'libm/ld/scalblnl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/scalblnl.c'; fi` + +libm/ld/libm_a-s_scalbnl.o: libm/ld/s_scalbnl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_scalbnl.o -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_scalbnl.Tpo -c -o libm/ld/libm_a-s_scalbnl.o `test -f 'libm/ld/s_scalbnl.c' || echo '$(srcdir)/'`libm/ld/s_scalbnl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_scalbnl.Tpo libm/ld/$(DEPDIR)/libm_a-s_scalbnl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_scalbnl.c' object='libm/ld/libm_a-s_scalbnl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_scalbnl.o `test -f 'libm/ld/s_scalbnl.c' || echo '$(srcdir)/'`libm/ld/s_scalbnl.c + +libm/ld/libm_a-s_scalbnl.obj: libm/ld/s_scalbnl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_scalbnl.obj -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_scalbnl.Tpo -c -o libm/ld/libm_a-s_scalbnl.obj `if test -f 'libm/ld/s_scalbnl.c'; then $(CYGPATH_W) 'libm/ld/s_scalbnl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_scalbnl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_scalbnl.Tpo libm/ld/$(DEPDIR)/libm_a-s_scalbnl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_scalbnl.c' object='libm/ld/libm_a-s_scalbnl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_scalbnl.obj `if test -f 'libm/ld/s_scalbnl.c'; then $(CYGPATH_W) 'libm/ld/s_scalbnl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_scalbnl.c'; fi` + +libm/ld/libm_a-s_sinl.o: libm/ld/s_sinl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_sinl.o -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_sinl.Tpo -c -o libm/ld/libm_a-s_sinl.o `test -f 'libm/ld/s_sinl.c' || echo '$(srcdir)/'`libm/ld/s_sinl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_sinl.Tpo libm/ld/$(DEPDIR)/libm_a-s_sinl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_sinl.c' object='libm/ld/libm_a-s_sinl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_sinl.o `test -f 'libm/ld/s_sinl.c' || echo '$(srcdir)/'`libm/ld/s_sinl.c + +libm/ld/libm_a-s_sinl.obj: libm/ld/s_sinl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_sinl.obj -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_sinl.Tpo -c -o libm/ld/libm_a-s_sinl.obj `if test -f 'libm/ld/s_sinl.c'; then $(CYGPATH_W) 'libm/ld/s_sinl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_sinl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_sinl.Tpo libm/ld/$(DEPDIR)/libm_a-s_sinl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_sinl.c' object='libm/ld/libm_a-s_sinl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_sinl.obj `if test -f 'libm/ld/s_sinl.c'; then $(CYGPATH_W) 'libm/ld/s_sinl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_sinl.c'; fi` + +libm/ld/libm_a-s_tanhl.o: libm/ld/s_tanhl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_tanhl.o -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_tanhl.Tpo -c -o libm/ld/libm_a-s_tanhl.o `test -f 'libm/ld/s_tanhl.c' || echo '$(srcdir)/'`libm/ld/s_tanhl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_tanhl.Tpo libm/ld/$(DEPDIR)/libm_a-s_tanhl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_tanhl.c' object='libm/ld/libm_a-s_tanhl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_tanhl.o `test -f 'libm/ld/s_tanhl.c' || echo '$(srcdir)/'`libm/ld/s_tanhl.c + +libm/ld/libm_a-s_tanhl.obj: libm/ld/s_tanhl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_tanhl.obj -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_tanhl.Tpo -c -o libm/ld/libm_a-s_tanhl.obj `if test -f 'libm/ld/s_tanhl.c'; then $(CYGPATH_W) 'libm/ld/s_tanhl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_tanhl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_tanhl.Tpo libm/ld/$(DEPDIR)/libm_a-s_tanhl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_tanhl.c' object='libm/ld/libm_a-s_tanhl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_tanhl.obj `if test -f 'libm/ld/s_tanhl.c'; then $(CYGPATH_W) 'libm/ld/s_tanhl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_tanhl.c'; fi` + +libm/ld/libm_a-s_tanl.o: libm/ld/s_tanl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_tanl.o -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_tanl.Tpo -c -o libm/ld/libm_a-s_tanl.o `test -f 'libm/ld/s_tanl.c' || echo '$(srcdir)/'`libm/ld/s_tanl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_tanl.Tpo libm/ld/$(DEPDIR)/libm_a-s_tanl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_tanl.c' object='libm/ld/libm_a-s_tanl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_tanl.o `test -f 'libm/ld/s_tanl.c' || echo '$(srcdir)/'`libm/ld/s_tanl.c + +libm/ld/libm_a-s_tanl.obj: libm/ld/s_tanl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_tanl.obj -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_tanl.Tpo -c -o libm/ld/libm_a-s_tanl.obj `if test -f 'libm/ld/s_tanl.c'; then $(CYGPATH_W) 'libm/ld/s_tanl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_tanl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_tanl.Tpo libm/ld/$(DEPDIR)/libm_a-s_tanl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_tanl.c' object='libm/ld/libm_a-s_tanl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_tanl.obj `if test -f 'libm/ld/s_tanl.c'; then $(CYGPATH_W) 'libm/ld/s_tanl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_tanl.c'; fi` + +libm/ld/libm_a-s_truncl.o: libm/ld/s_truncl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_truncl.o -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_truncl.Tpo -c -o libm/ld/libm_a-s_truncl.o `test -f 'libm/ld/s_truncl.c' || echo '$(srcdir)/'`libm/ld/s_truncl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_truncl.Tpo libm/ld/$(DEPDIR)/libm_a-s_truncl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_truncl.c' object='libm/ld/libm_a-s_truncl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_truncl.o `test -f 'libm/ld/s_truncl.c' || echo '$(srcdir)/'`libm/ld/s_truncl.c + +libm/ld/libm_a-s_truncl.obj: libm/ld/s_truncl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld/libm_a-s_truncl.obj -MD -MP -MF libm/ld/$(DEPDIR)/libm_a-s_truncl.Tpo -c -o libm/ld/libm_a-s_truncl.obj `if test -f 'libm/ld/s_truncl.c'; then $(CYGPATH_W) 'libm/ld/s_truncl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_truncl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld/$(DEPDIR)/libm_a-s_truncl.Tpo libm/ld/$(DEPDIR)/libm_a-s_truncl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld/s_truncl.c' object='libm/ld/libm_a-s_truncl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld/libm_a-s_truncl.obj `if test -f 'libm/ld/s_truncl.c'; then $(CYGPATH_W) 'libm/ld/s_truncl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld/s_truncl.c'; fi` + libm/complex/libm_a-cabs.o: libm/complex/cabs.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/complex/libm_a-cabs.o -MD -MP -MF libm/complex/$(DEPDIR)/libm_a-cabs.Tpo -c -o libm/complex/libm_a-cabs.o `test -f 'libm/complex/cabs.c' || echo '$(srcdir)/'`libm/complex/cabs.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/complex/$(DEPDIR)/libm_a-cabs.Tpo libm/complex/$(DEPDIR)/libm_a-cabs.Po @@ -42062,6 +44169,1378 @@ libm/machine/aarch64/libm_a-feupdateenv.obj: libm/machine/aarch64/feupdateenv.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/aarch64/libm_a-feupdateenv.obj `if test -f 'libm/machine/aarch64/feupdateenv.c'; then $(CYGPATH_W) 'libm/machine/aarch64/feupdateenv.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/aarch64/feupdateenv.c'; fi` +libm/ld128/libm_a-e_powl.o: libm/ld128/e_powl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld128/libm_a-e_powl.o -MD -MP -MF libm/ld128/$(DEPDIR)/libm_a-e_powl.Tpo -c -o libm/ld128/libm_a-e_powl.o `test -f 'libm/ld128/e_powl.c' || echo '$(srcdir)/'`libm/ld128/e_powl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld128/$(DEPDIR)/libm_a-e_powl.Tpo libm/ld128/$(DEPDIR)/libm_a-e_powl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld128/e_powl.c' object='libm/ld128/libm_a-e_powl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld128/libm_a-e_powl.o `test -f 'libm/ld128/e_powl.c' || echo '$(srcdir)/'`libm/ld128/e_powl.c + +libm/ld128/libm_a-e_powl.obj: libm/ld128/e_powl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld128/libm_a-e_powl.obj -MD -MP -MF libm/ld128/$(DEPDIR)/libm_a-e_powl.Tpo -c -o libm/ld128/libm_a-e_powl.obj `if test -f 'libm/ld128/e_powl.c'; then $(CYGPATH_W) 'libm/ld128/e_powl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld128/e_powl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld128/$(DEPDIR)/libm_a-e_powl.Tpo libm/ld128/$(DEPDIR)/libm_a-e_powl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld128/e_powl.c' object='libm/ld128/libm_a-e_powl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld128/libm_a-e_powl.obj `if test -f 'libm/ld128/e_powl.c'; then $(CYGPATH_W) 'libm/ld128/e_powl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld128/e_powl.c'; fi` + +libm/ld128/libm_a-s_erfl.o: libm/ld128/s_erfl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld128/libm_a-s_erfl.o -MD -MP -MF libm/ld128/$(DEPDIR)/libm_a-s_erfl.Tpo -c -o libm/ld128/libm_a-s_erfl.o `test -f 'libm/ld128/s_erfl.c' || echo '$(srcdir)/'`libm/ld128/s_erfl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld128/$(DEPDIR)/libm_a-s_erfl.Tpo libm/ld128/$(DEPDIR)/libm_a-s_erfl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld128/s_erfl.c' object='libm/ld128/libm_a-s_erfl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld128/libm_a-s_erfl.o `test -f 'libm/ld128/s_erfl.c' || echo '$(srcdir)/'`libm/ld128/s_erfl.c + +libm/ld128/libm_a-s_erfl.obj: libm/ld128/s_erfl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld128/libm_a-s_erfl.obj -MD -MP -MF libm/ld128/$(DEPDIR)/libm_a-s_erfl.Tpo -c -o libm/ld128/libm_a-s_erfl.obj `if test -f 'libm/ld128/s_erfl.c'; then $(CYGPATH_W) 'libm/ld128/s_erfl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld128/s_erfl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld128/$(DEPDIR)/libm_a-s_erfl.Tpo libm/ld128/$(DEPDIR)/libm_a-s_erfl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld128/s_erfl.c' object='libm/ld128/libm_a-s_erfl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld128/libm_a-s_erfl.obj `if test -f 'libm/ld128/s_erfl.c'; then $(CYGPATH_W) 'libm/ld128/s_erfl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld128/s_erfl.c'; fi` + +libm/ld128/libm_a-s_exp2l.o: libm/ld128/s_exp2l.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld128/libm_a-s_exp2l.o -MD -MP -MF libm/ld128/$(DEPDIR)/libm_a-s_exp2l.Tpo -c -o libm/ld128/libm_a-s_exp2l.o `test -f 'libm/ld128/s_exp2l.c' || echo '$(srcdir)/'`libm/ld128/s_exp2l.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld128/$(DEPDIR)/libm_a-s_exp2l.Tpo libm/ld128/$(DEPDIR)/libm_a-s_exp2l.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld128/s_exp2l.c' object='libm/ld128/libm_a-s_exp2l.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld128/libm_a-s_exp2l.o `test -f 'libm/ld128/s_exp2l.c' || echo '$(srcdir)/'`libm/ld128/s_exp2l.c + +libm/ld128/libm_a-s_exp2l.obj: libm/ld128/s_exp2l.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld128/libm_a-s_exp2l.obj -MD -MP -MF libm/ld128/$(DEPDIR)/libm_a-s_exp2l.Tpo -c -o libm/ld128/libm_a-s_exp2l.obj `if test -f 'libm/ld128/s_exp2l.c'; then $(CYGPATH_W) 'libm/ld128/s_exp2l.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld128/s_exp2l.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld128/$(DEPDIR)/libm_a-s_exp2l.Tpo libm/ld128/$(DEPDIR)/libm_a-s_exp2l.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld128/s_exp2l.c' object='libm/ld128/libm_a-s_exp2l.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld128/libm_a-s_exp2l.obj `if test -f 'libm/ld128/s_exp2l.c'; then $(CYGPATH_W) 'libm/ld128/s_exp2l.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld128/s_exp2l.c'; fi` + +libm/ld128/libm_a-s_expl.o: libm/ld128/s_expl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld128/libm_a-s_expl.o -MD -MP -MF libm/ld128/$(DEPDIR)/libm_a-s_expl.Tpo -c -o libm/ld128/libm_a-s_expl.o `test -f 'libm/ld128/s_expl.c' || echo '$(srcdir)/'`libm/ld128/s_expl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld128/$(DEPDIR)/libm_a-s_expl.Tpo libm/ld128/$(DEPDIR)/libm_a-s_expl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld128/s_expl.c' object='libm/ld128/libm_a-s_expl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld128/libm_a-s_expl.o `test -f 'libm/ld128/s_expl.c' || echo '$(srcdir)/'`libm/ld128/s_expl.c + +libm/ld128/libm_a-s_expl.obj: libm/ld128/s_expl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld128/libm_a-s_expl.obj -MD -MP -MF libm/ld128/$(DEPDIR)/libm_a-s_expl.Tpo -c -o libm/ld128/libm_a-s_expl.obj `if test -f 'libm/ld128/s_expl.c'; then $(CYGPATH_W) 'libm/ld128/s_expl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld128/s_expl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld128/$(DEPDIR)/libm_a-s_expl.Tpo libm/ld128/$(DEPDIR)/libm_a-s_expl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld128/s_expl.c' object='libm/ld128/libm_a-s_expl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld128/libm_a-s_expl.obj `if test -f 'libm/ld128/s_expl.c'; then $(CYGPATH_W) 'libm/ld128/s_expl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld128/s_expl.c'; fi` + +libm/ld128/libm_a-s_logl.o: libm/ld128/s_logl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld128/libm_a-s_logl.o -MD -MP -MF libm/ld128/$(DEPDIR)/libm_a-s_logl.Tpo -c -o libm/ld128/libm_a-s_logl.o `test -f 'libm/ld128/s_logl.c' || echo '$(srcdir)/'`libm/ld128/s_logl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld128/$(DEPDIR)/libm_a-s_logl.Tpo libm/ld128/$(DEPDIR)/libm_a-s_logl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld128/s_logl.c' object='libm/ld128/libm_a-s_logl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld128/libm_a-s_logl.o `test -f 'libm/ld128/s_logl.c' || echo '$(srcdir)/'`libm/ld128/s_logl.c + +libm/ld128/libm_a-s_logl.obj: libm/ld128/s_logl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld128/libm_a-s_logl.obj -MD -MP -MF libm/ld128/$(DEPDIR)/libm_a-s_logl.Tpo -c -o libm/ld128/libm_a-s_logl.obj `if test -f 'libm/ld128/s_logl.c'; then $(CYGPATH_W) 'libm/ld128/s_logl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld128/s_logl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld128/$(DEPDIR)/libm_a-s_logl.Tpo libm/ld128/$(DEPDIR)/libm_a-s_logl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld128/s_logl.c' object='libm/ld128/libm_a-s_logl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld128/libm_a-s_logl.obj `if test -f 'libm/ld128/s_logl.c'; then $(CYGPATH_W) 'libm/ld128/s_logl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld128/s_logl.c'; fi` + +libm/ld128/libm_a-b_tgammal.o: libm/ld128/b_tgammal.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld128/libm_a-b_tgammal.o -MD -MP -MF libm/ld128/$(DEPDIR)/libm_a-b_tgammal.Tpo -c -o libm/ld128/libm_a-b_tgammal.o `test -f 'libm/ld128/b_tgammal.c' || echo '$(srcdir)/'`libm/ld128/b_tgammal.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld128/$(DEPDIR)/libm_a-b_tgammal.Tpo libm/ld128/$(DEPDIR)/libm_a-b_tgammal.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld128/b_tgammal.c' object='libm/ld128/libm_a-b_tgammal.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld128/libm_a-b_tgammal.o `test -f 'libm/ld128/b_tgammal.c' || echo '$(srcdir)/'`libm/ld128/b_tgammal.c + +libm/ld128/libm_a-b_tgammal.obj: libm/ld128/b_tgammal.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld128/libm_a-b_tgammal.obj -MD -MP -MF libm/ld128/$(DEPDIR)/libm_a-b_tgammal.Tpo -c -o libm/ld128/libm_a-b_tgammal.obj `if test -f 'libm/ld128/b_tgammal.c'; then $(CYGPATH_W) 'libm/ld128/b_tgammal.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld128/b_tgammal.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld128/$(DEPDIR)/libm_a-b_tgammal.Tpo libm/ld128/$(DEPDIR)/libm_a-b_tgammal.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld128/b_tgammal.c' object='libm/ld128/libm_a-b_tgammal.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld128/libm_a-b_tgammal.obj `if test -f 'libm/ld128/b_tgammal.c'; then $(CYGPATH_W) 'libm/ld128/b_tgammal.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld128/b_tgammal.c'; fi` + +libm/ld128/libm_a-invtrig.o: libm/ld128/invtrig.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld128/libm_a-invtrig.o -MD -MP -MF libm/ld128/$(DEPDIR)/libm_a-invtrig.Tpo -c -o libm/ld128/libm_a-invtrig.o `test -f 'libm/ld128/invtrig.c' || echo '$(srcdir)/'`libm/ld128/invtrig.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld128/$(DEPDIR)/libm_a-invtrig.Tpo libm/ld128/$(DEPDIR)/libm_a-invtrig.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld128/invtrig.c' object='libm/ld128/libm_a-invtrig.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld128/libm_a-invtrig.o `test -f 'libm/ld128/invtrig.c' || echo '$(srcdir)/'`libm/ld128/invtrig.c + +libm/ld128/libm_a-invtrig.obj: libm/ld128/invtrig.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld128/libm_a-invtrig.obj -MD -MP -MF libm/ld128/$(DEPDIR)/libm_a-invtrig.Tpo -c -o libm/ld128/libm_a-invtrig.obj `if test -f 'libm/ld128/invtrig.c'; then $(CYGPATH_W) 'libm/ld128/invtrig.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld128/invtrig.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld128/$(DEPDIR)/libm_a-invtrig.Tpo libm/ld128/$(DEPDIR)/libm_a-invtrig.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld128/invtrig.c' object='libm/ld128/libm_a-invtrig.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld128/libm_a-invtrig.obj `if test -f 'libm/ld128/invtrig.c'; then $(CYGPATH_W) 'libm/ld128/invtrig.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld128/invtrig.c'; fi` + +libm/ld128/libm_a-e_lgammal_r.o: libm/ld128/e_lgammal_r.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld128/libm_a-e_lgammal_r.o -MD -MP -MF libm/ld128/$(DEPDIR)/libm_a-e_lgammal_r.Tpo -c -o libm/ld128/libm_a-e_lgammal_r.o `test -f 'libm/ld128/e_lgammal_r.c' || echo '$(srcdir)/'`libm/ld128/e_lgammal_r.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld128/$(DEPDIR)/libm_a-e_lgammal_r.Tpo libm/ld128/$(DEPDIR)/libm_a-e_lgammal_r.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld128/e_lgammal_r.c' object='libm/ld128/libm_a-e_lgammal_r.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld128/libm_a-e_lgammal_r.o `test -f 'libm/ld128/e_lgammal_r.c' || echo '$(srcdir)/'`libm/ld128/e_lgammal_r.c + +libm/ld128/libm_a-e_lgammal_r.obj: libm/ld128/e_lgammal_r.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld128/libm_a-e_lgammal_r.obj -MD -MP -MF libm/ld128/$(DEPDIR)/libm_a-e_lgammal_r.Tpo -c -o libm/ld128/libm_a-e_lgammal_r.obj `if test -f 'libm/ld128/e_lgammal_r.c'; then $(CYGPATH_W) 'libm/ld128/e_lgammal_r.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld128/e_lgammal_r.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld128/$(DEPDIR)/libm_a-e_lgammal_r.Tpo libm/ld128/$(DEPDIR)/libm_a-e_lgammal_r.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld128/e_lgammal_r.c' object='libm/ld128/libm_a-e_lgammal_r.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld128/libm_a-e_lgammal_r.obj `if test -f 'libm/ld128/e_lgammal_r.c'; then $(CYGPATH_W) 'libm/ld128/e_lgammal_r.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld128/e_lgammal_r.c'; fi` + +libm/ld128/libm_a-k_cosl.o: libm/ld128/k_cosl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld128/libm_a-k_cosl.o -MD -MP -MF libm/ld128/$(DEPDIR)/libm_a-k_cosl.Tpo -c -o libm/ld128/libm_a-k_cosl.o `test -f 'libm/ld128/k_cosl.c' || echo '$(srcdir)/'`libm/ld128/k_cosl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld128/$(DEPDIR)/libm_a-k_cosl.Tpo libm/ld128/$(DEPDIR)/libm_a-k_cosl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld128/k_cosl.c' object='libm/ld128/libm_a-k_cosl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld128/libm_a-k_cosl.o `test -f 'libm/ld128/k_cosl.c' || echo '$(srcdir)/'`libm/ld128/k_cosl.c + +libm/ld128/libm_a-k_cosl.obj: libm/ld128/k_cosl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld128/libm_a-k_cosl.obj -MD -MP -MF libm/ld128/$(DEPDIR)/libm_a-k_cosl.Tpo -c -o libm/ld128/libm_a-k_cosl.obj `if test -f 'libm/ld128/k_cosl.c'; then $(CYGPATH_W) 'libm/ld128/k_cosl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld128/k_cosl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld128/$(DEPDIR)/libm_a-k_cosl.Tpo libm/ld128/$(DEPDIR)/libm_a-k_cosl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld128/k_cosl.c' object='libm/ld128/libm_a-k_cosl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld128/libm_a-k_cosl.obj `if test -f 'libm/ld128/k_cosl.c'; then $(CYGPATH_W) 'libm/ld128/k_cosl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld128/k_cosl.c'; fi` + +libm/ld128/libm_a-k_sinl.o: libm/ld128/k_sinl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld128/libm_a-k_sinl.o -MD -MP -MF libm/ld128/$(DEPDIR)/libm_a-k_sinl.Tpo -c -o libm/ld128/libm_a-k_sinl.o `test -f 'libm/ld128/k_sinl.c' || echo '$(srcdir)/'`libm/ld128/k_sinl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld128/$(DEPDIR)/libm_a-k_sinl.Tpo libm/ld128/$(DEPDIR)/libm_a-k_sinl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld128/k_sinl.c' object='libm/ld128/libm_a-k_sinl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld128/libm_a-k_sinl.o `test -f 'libm/ld128/k_sinl.c' || echo '$(srcdir)/'`libm/ld128/k_sinl.c + +libm/ld128/libm_a-k_sinl.obj: libm/ld128/k_sinl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld128/libm_a-k_sinl.obj -MD -MP -MF libm/ld128/$(DEPDIR)/libm_a-k_sinl.Tpo -c -o libm/ld128/libm_a-k_sinl.obj `if test -f 'libm/ld128/k_sinl.c'; then $(CYGPATH_W) 'libm/ld128/k_sinl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld128/k_sinl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld128/$(DEPDIR)/libm_a-k_sinl.Tpo libm/ld128/$(DEPDIR)/libm_a-k_sinl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld128/k_sinl.c' object='libm/ld128/libm_a-k_sinl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld128/libm_a-k_sinl.obj `if test -f 'libm/ld128/k_sinl.c'; then $(CYGPATH_W) 'libm/ld128/k_sinl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld128/k_sinl.c'; fi` + +libm/machine/amdgcn/libm_a-v64_mathcnst.o: libm/machine/amdgcn/v64_mathcnst.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64_mathcnst.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64_mathcnst.Tpo -c -o libm/machine/amdgcn/libm_a-v64_mathcnst.o `test -f 'libm/machine/amdgcn/v64_mathcnst.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64_mathcnst.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64_mathcnst.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64_mathcnst.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64_mathcnst.c' object='libm/machine/amdgcn/libm_a-v64_mathcnst.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64_mathcnst.o `test -f 'libm/machine/amdgcn/v64_mathcnst.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64_mathcnst.c + +libm/machine/amdgcn/libm_a-v64_mathcnst.obj: libm/machine/amdgcn/v64_mathcnst.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64_mathcnst.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64_mathcnst.Tpo -c -o libm/machine/amdgcn/libm_a-v64_mathcnst.obj `if test -f 'libm/machine/amdgcn/v64_mathcnst.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64_mathcnst.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64_mathcnst.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64_mathcnst.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64_mathcnst.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64_mathcnst.c' object='libm/machine/amdgcn/libm_a-v64_mathcnst.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64_mathcnst.obj `if test -f 'libm/machine/amdgcn/v64_mathcnst.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64_mathcnst.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64_mathcnst.c'; fi` + +libm/machine/amdgcn/libm_a-v64_reent.o: libm/machine/amdgcn/v64_reent.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64_reent.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64_reent.Tpo -c -o libm/machine/amdgcn/libm_a-v64_reent.o `test -f 'libm/machine/amdgcn/v64_reent.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64_reent.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64_reent.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64_reent.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64_reent.c' object='libm/machine/amdgcn/libm_a-v64_reent.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64_reent.o `test -f 'libm/machine/amdgcn/v64_reent.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64_reent.c + +libm/machine/amdgcn/libm_a-v64_reent.obj: libm/machine/amdgcn/v64_reent.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64_reent.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64_reent.Tpo -c -o libm/machine/amdgcn/libm_a-v64_reent.obj `if test -f 'libm/machine/amdgcn/v64_reent.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64_reent.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64_reent.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64_reent.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64_reent.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64_reent.c' object='libm/machine/amdgcn/libm_a-v64_reent.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64_reent.obj `if test -f 'libm/machine/amdgcn/v64_reent.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64_reent.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64_reent.c'; fi` + +libm/machine/amdgcn/libm_a-v64df_acos.o: libm/machine/amdgcn/v64df_acos.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_acos.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_acos.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_acos.o `test -f 'libm/machine/amdgcn/v64df_acos.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_acos.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_acos.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_acos.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_acos.c' object='libm/machine/amdgcn/libm_a-v64df_acos.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_acos.o `test -f 'libm/machine/amdgcn/v64df_acos.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_acos.c + +libm/machine/amdgcn/libm_a-v64df_acos.obj: libm/machine/amdgcn/v64df_acos.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_acos.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_acos.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_acos.obj `if test -f 'libm/machine/amdgcn/v64df_acos.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_acos.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_acos.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_acos.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_acos.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_acos.c' object='libm/machine/amdgcn/libm_a-v64df_acos.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_acos.obj `if test -f 'libm/machine/amdgcn/v64df_acos.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_acos.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_acos.c'; fi` + +libm/machine/amdgcn/libm_a-v64df_acosh.o: libm/machine/amdgcn/v64df_acosh.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_acosh.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_acosh.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_acosh.o `test -f 'libm/machine/amdgcn/v64df_acosh.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_acosh.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_acosh.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_acosh.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_acosh.c' object='libm/machine/amdgcn/libm_a-v64df_acosh.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_acosh.o `test -f 'libm/machine/amdgcn/v64df_acosh.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_acosh.c + +libm/machine/amdgcn/libm_a-v64df_acosh.obj: libm/machine/amdgcn/v64df_acosh.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_acosh.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_acosh.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_acosh.obj `if test -f 'libm/machine/amdgcn/v64df_acosh.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_acosh.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_acosh.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_acosh.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_acosh.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_acosh.c' object='libm/machine/amdgcn/libm_a-v64df_acosh.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_acosh.obj `if test -f 'libm/machine/amdgcn/v64df_acosh.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_acosh.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_acosh.c'; fi` + +libm/machine/amdgcn/libm_a-v64df_asin.o: libm/machine/amdgcn/v64df_asin.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_asin.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_asin.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_asin.o `test -f 'libm/machine/amdgcn/v64df_asin.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_asin.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_asin.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_asin.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_asin.c' object='libm/machine/amdgcn/libm_a-v64df_asin.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_asin.o `test -f 'libm/machine/amdgcn/v64df_asin.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_asin.c + +libm/machine/amdgcn/libm_a-v64df_asin.obj: libm/machine/amdgcn/v64df_asin.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_asin.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_asin.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_asin.obj `if test -f 'libm/machine/amdgcn/v64df_asin.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_asin.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_asin.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_asin.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_asin.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_asin.c' object='libm/machine/amdgcn/libm_a-v64df_asin.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_asin.obj `if test -f 'libm/machine/amdgcn/v64df_asin.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_asin.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_asin.c'; fi` + +libm/machine/amdgcn/libm_a-v64df_asine.o: libm/machine/amdgcn/v64df_asine.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_asine.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_asine.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_asine.o `test -f 'libm/machine/amdgcn/v64df_asine.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_asine.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_asine.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_asine.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_asine.c' object='libm/machine/amdgcn/libm_a-v64df_asine.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_asine.o `test -f 'libm/machine/amdgcn/v64df_asine.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_asine.c + +libm/machine/amdgcn/libm_a-v64df_asine.obj: libm/machine/amdgcn/v64df_asine.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_asine.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_asine.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_asine.obj `if test -f 'libm/machine/amdgcn/v64df_asine.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_asine.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_asine.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_asine.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_asine.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_asine.c' object='libm/machine/amdgcn/libm_a-v64df_asine.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_asine.obj `if test -f 'libm/machine/amdgcn/v64df_asine.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_asine.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_asine.c'; fi` + +libm/machine/amdgcn/libm_a-v64df_asinh.o: libm/machine/amdgcn/v64df_asinh.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_asinh.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_asinh.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_asinh.o `test -f 'libm/machine/amdgcn/v64df_asinh.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_asinh.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_asinh.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_asinh.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_asinh.c' object='libm/machine/amdgcn/libm_a-v64df_asinh.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_asinh.o `test -f 'libm/machine/amdgcn/v64df_asinh.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_asinh.c + +libm/machine/amdgcn/libm_a-v64df_asinh.obj: libm/machine/amdgcn/v64df_asinh.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_asinh.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_asinh.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_asinh.obj `if test -f 'libm/machine/amdgcn/v64df_asinh.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_asinh.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_asinh.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_asinh.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_asinh.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_asinh.c' object='libm/machine/amdgcn/libm_a-v64df_asinh.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_asinh.obj `if test -f 'libm/machine/amdgcn/v64df_asinh.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_asinh.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_asinh.c'; fi` + +libm/machine/amdgcn/libm_a-v64df_atan.o: libm/machine/amdgcn/v64df_atan.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_atan.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_atan.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_atan.o `test -f 'libm/machine/amdgcn/v64df_atan.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_atan.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_atan.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_atan.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_atan.c' object='libm/machine/amdgcn/libm_a-v64df_atan.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_atan.o `test -f 'libm/machine/amdgcn/v64df_atan.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_atan.c + +libm/machine/amdgcn/libm_a-v64df_atan.obj: libm/machine/amdgcn/v64df_atan.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_atan.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_atan.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_atan.obj `if test -f 'libm/machine/amdgcn/v64df_atan.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_atan.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_atan.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_atan.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_atan.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_atan.c' object='libm/machine/amdgcn/libm_a-v64df_atan.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_atan.obj `if test -f 'libm/machine/amdgcn/v64df_atan.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_atan.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_atan.c'; fi` + +libm/machine/amdgcn/libm_a-v64df_atan2.o: libm/machine/amdgcn/v64df_atan2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_atan2.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_atan2.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_atan2.o `test -f 'libm/machine/amdgcn/v64df_atan2.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_atan2.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_atan2.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_atan2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_atan2.c' object='libm/machine/amdgcn/libm_a-v64df_atan2.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_atan2.o `test -f 'libm/machine/amdgcn/v64df_atan2.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_atan2.c + +libm/machine/amdgcn/libm_a-v64df_atan2.obj: libm/machine/amdgcn/v64df_atan2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_atan2.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_atan2.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_atan2.obj `if test -f 'libm/machine/amdgcn/v64df_atan2.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_atan2.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_atan2.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_atan2.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_atan2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_atan2.c' object='libm/machine/amdgcn/libm_a-v64df_atan2.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_atan2.obj `if test -f 'libm/machine/amdgcn/v64df_atan2.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_atan2.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_atan2.c'; fi` + +libm/machine/amdgcn/libm_a-v64df_atangent.o: libm/machine/amdgcn/v64df_atangent.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_atangent.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_atangent.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_atangent.o `test -f 'libm/machine/amdgcn/v64df_atangent.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_atangent.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_atangent.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_atangent.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_atangent.c' object='libm/machine/amdgcn/libm_a-v64df_atangent.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_atangent.o `test -f 'libm/machine/amdgcn/v64df_atangent.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_atangent.c + +libm/machine/amdgcn/libm_a-v64df_atangent.obj: libm/machine/amdgcn/v64df_atangent.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_atangent.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_atangent.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_atangent.obj `if test -f 'libm/machine/amdgcn/v64df_atangent.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_atangent.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_atangent.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_atangent.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_atangent.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_atangent.c' object='libm/machine/amdgcn/libm_a-v64df_atangent.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_atangent.obj `if test -f 'libm/machine/amdgcn/v64df_atangent.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_atangent.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_atangent.c'; fi` + +libm/machine/amdgcn/libm_a-v64df_atanh.o: libm/machine/amdgcn/v64df_atanh.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_atanh.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_atanh.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_atanh.o `test -f 'libm/machine/amdgcn/v64df_atanh.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_atanh.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_atanh.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_atanh.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_atanh.c' object='libm/machine/amdgcn/libm_a-v64df_atanh.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_atanh.o `test -f 'libm/machine/amdgcn/v64df_atanh.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_atanh.c + +libm/machine/amdgcn/libm_a-v64df_atanh.obj: libm/machine/amdgcn/v64df_atanh.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_atanh.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_atanh.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_atanh.obj `if test -f 'libm/machine/amdgcn/v64df_atanh.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_atanh.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_atanh.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_atanh.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_atanh.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_atanh.c' object='libm/machine/amdgcn/libm_a-v64df_atanh.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_atanh.obj `if test -f 'libm/machine/amdgcn/v64df_atanh.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_atanh.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_atanh.c'; fi` + +libm/machine/amdgcn/libm_a-v64df_copysign.o: libm/machine/amdgcn/v64df_copysign.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_copysign.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_copysign.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_copysign.o `test -f 'libm/machine/amdgcn/v64df_copysign.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_copysign.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_copysign.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_copysign.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_copysign.c' object='libm/machine/amdgcn/libm_a-v64df_copysign.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_copysign.o `test -f 'libm/machine/amdgcn/v64df_copysign.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_copysign.c + +libm/machine/amdgcn/libm_a-v64df_copysign.obj: libm/machine/amdgcn/v64df_copysign.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_copysign.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_copysign.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_copysign.obj `if test -f 'libm/machine/amdgcn/v64df_copysign.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_copysign.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_copysign.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_copysign.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_copysign.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_copysign.c' object='libm/machine/amdgcn/libm_a-v64df_copysign.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_copysign.obj `if test -f 'libm/machine/amdgcn/v64df_copysign.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_copysign.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_copysign.c'; fi` + +libm/machine/amdgcn/libm_a-v64df_cos.o: libm/machine/amdgcn/v64df_cos.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_cos.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_cos.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_cos.o `test -f 'libm/machine/amdgcn/v64df_cos.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_cos.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_cos.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_cos.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_cos.c' object='libm/machine/amdgcn/libm_a-v64df_cos.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_cos.o `test -f 'libm/machine/amdgcn/v64df_cos.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_cos.c + +libm/machine/amdgcn/libm_a-v64df_cos.obj: libm/machine/amdgcn/v64df_cos.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_cos.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_cos.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_cos.obj `if test -f 'libm/machine/amdgcn/v64df_cos.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_cos.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_cos.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_cos.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_cos.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_cos.c' object='libm/machine/amdgcn/libm_a-v64df_cos.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_cos.obj `if test -f 'libm/machine/amdgcn/v64df_cos.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_cos.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_cos.c'; fi` + +libm/machine/amdgcn/libm_a-v64df_cosh.o: libm/machine/amdgcn/v64df_cosh.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_cosh.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_cosh.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_cosh.o `test -f 'libm/machine/amdgcn/v64df_cosh.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_cosh.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_cosh.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_cosh.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_cosh.c' object='libm/machine/amdgcn/libm_a-v64df_cosh.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_cosh.o `test -f 'libm/machine/amdgcn/v64df_cosh.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_cosh.c + +libm/machine/amdgcn/libm_a-v64df_cosh.obj: libm/machine/amdgcn/v64df_cosh.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_cosh.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_cosh.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_cosh.obj `if test -f 'libm/machine/amdgcn/v64df_cosh.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_cosh.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_cosh.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_cosh.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_cosh.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_cosh.c' object='libm/machine/amdgcn/libm_a-v64df_cosh.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_cosh.obj `if test -f 'libm/machine/amdgcn/v64df_cosh.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_cosh.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_cosh.c'; fi` + +libm/machine/amdgcn/libm_a-v64df_erf.o: libm/machine/amdgcn/v64df_erf.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_erf.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_erf.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_erf.o `test -f 'libm/machine/amdgcn/v64df_erf.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_erf.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_erf.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_erf.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_erf.c' object='libm/machine/amdgcn/libm_a-v64df_erf.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_erf.o `test -f 'libm/machine/amdgcn/v64df_erf.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_erf.c + +libm/machine/amdgcn/libm_a-v64df_erf.obj: libm/machine/amdgcn/v64df_erf.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_erf.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_erf.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_erf.obj `if test -f 'libm/machine/amdgcn/v64df_erf.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_erf.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_erf.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_erf.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_erf.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_erf.c' object='libm/machine/amdgcn/libm_a-v64df_erf.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_erf.obj `if test -f 'libm/machine/amdgcn/v64df_erf.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_erf.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_erf.c'; fi` + +libm/machine/amdgcn/libm_a-v64df_exp.o: libm/machine/amdgcn/v64df_exp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_exp.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_exp.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_exp.o `test -f 'libm/machine/amdgcn/v64df_exp.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_exp.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_exp.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_exp.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_exp.c' object='libm/machine/amdgcn/libm_a-v64df_exp.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_exp.o `test -f 'libm/machine/amdgcn/v64df_exp.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_exp.c + +libm/machine/amdgcn/libm_a-v64df_exp.obj: libm/machine/amdgcn/v64df_exp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_exp.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_exp.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_exp.obj `if test -f 'libm/machine/amdgcn/v64df_exp.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_exp.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_exp.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_exp.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_exp.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_exp.c' object='libm/machine/amdgcn/libm_a-v64df_exp.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_exp.obj `if test -f 'libm/machine/amdgcn/v64df_exp.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_exp.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_exp.c'; fi` + +libm/machine/amdgcn/libm_a-v64df_exp2.o: libm/machine/amdgcn/v64df_exp2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_exp2.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_exp2.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_exp2.o `test -f 'libm/machine/amdgcn/v64df_exp2.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_exp2.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_exp2.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_exp2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_exp2.c' object='libm/machine/amdgcn/libm_a-v64df_exp2.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_exp2.o `test -f 'libm/machine/amdgcn/v64df_exp2.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_exp2.c + +libm/machine/amdgcn/libm_a-v64df_exp2.obj: libm/machine/amdgcn/v64df_exp2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_exp2.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_exp2.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_exp2.obj `if test -f 'libm/machine/amdgcn/v64df_exp2.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_exp2.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_exp2.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_exp2.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_exp2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_exp2.c' object='libm/machine/amdgcn/libm_a-v64df_exp2.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_exp2.obj `if test -f 'libm/machine/amdgcn/v64df_exp2.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_exp2.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_exp2.c'; fi` + +libm/machine/amdgcn/libm_a-v64df_finite.o: libm/machine/amdgcn/v64df_finite.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_finite.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_finite.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_finite.o `test -f 'libm/machine/amdgcn/v64df_finite.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_finite.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_finite.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_finite.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_finite.c' object='libm/machine/amdgcn/libm_a-v64df_finite.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_finite.o `test -f 'libm/machine/amdgcn/v64df_finite.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_finite.c + +libm/machine/amdgcn/libm_a-v64df_finite.obj: libm/machine/amdgcn/v64df_finite.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_finite.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_finite.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_finite.obj `if test -f 'libm/machine/amdgcn/v64df_finite.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_finite.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_finite.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_finite.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_finite.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_finite.c' object='libm/machine/amdgcn/libm_a-v64df_finite.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_finite.obj `if test -f 'libm/machine/amdgcn/v64df_finite.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_finite.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_finite.c'; fi` + +libm/machine/amdgcn/libm_a-v64df_fmod.o: libm/machine/amdgcn/v64df_fmod.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_fmod.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_fmod.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_fmod.o `test -f 'libm/machine/amdgcn/v64df_fmod.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_fmod.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_fmod.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_fmod.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_fmod.c' object='libm/machine/amdgcn/libm_a-v64df_fmod.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_fmod.o `test -f 'libm/machine/amdgcn/v64df_fmod.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_fmod.c + +libm/machine/amdgcn/libm_a-v64df_fmod.obj: libm/machine/amdgcn/v64df_fmod.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_fmod.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_fmod.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_fmod.obj `if test -f 'libm/machine/amdgcn/v64df_fmod.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_fmod.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_fmod.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_fmod.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_fmod.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_fmod.c' object='libm/machine/amdgcn/libm_a-v64df_fmod.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_fmod.obj `if test -f 'libm/machine/amdgcn/v64df_fmod.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_fmod.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_fmod.c'; fi` + +libm/machine/amdgcn/libm_a-v64df_gamma.o: libm/machine/amdgcn/v64df_gamma.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_gamma.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_gamma.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_gamma.o `test -f 'libm/machine/amdgcn/v64df_gamma.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_gamma.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_gamma.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_gamma.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_gamma.c' object='libm/machine/amdgcn/libm_a-v64df_gamma.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_gamma.o `test -f 'libm/machine/amdgcn/v64df_gamma.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_gamma.c + +libm/machine/amdgcn/libm_a-v64df_gamma.obj: libm/machine/amdgcn/v64df_gamma.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_gamma.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_gamma.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_gamma.obj `if test -f 'libm/machine/amdgcn/v64df_gamma.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_gamma.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_gamma.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_gamma.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_gamma.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_gamma.c' object='libm/machine/amdgcn/libm_a-v64df_gamma.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_gamma.obj `if test -f 'libm/machine/amdgcn/v64df_gamma.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_gamma.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_gamma.c'; fi` + +libm/machine/amdgcn/libm_a-v64df_hypot.o: libm/machine/amdgcn/v64df_hypot.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_hypot.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_hypot.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_hypot.o `test -f 'libm/machine/amdgcn/v64df_hypot.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_hypot.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_hypot.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_hypot.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_hypot.c' object='libm/machine/amdgcn/libm_a-v64df_hypot.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_hypot.o `test -f 'libm/machine/amdgcn/v64df_hypot.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_hypot.c + +libm/machine/amdgcn/libm_a-v64df_hypot.obj: libm/machine/amdgcn/v64df_hypot.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_hypot.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_hypot.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_hypot.obj `if test -f 'libm/machine/amdgcn/v64df_hypot.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_hypot.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_hypot.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_hypot.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_hypot.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_hypot.c' object='libm/machine/amdgcn/libm_a-v64df_hypot.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_hypot.obj `if test -f 'libm/machine/amdgcn/v64df_hypot.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_hypot.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_hypot.c'; fi` + +libm/machine/amdgcn/libm_a-v64df_ilogb.o: libm/machine/amdgcn/v64df_ilogb.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_ilogb.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_ilogb.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_ilogb.o `test -f 'libm/machine/amdgcn/v64df_ilogb.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_ilogb.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_ilogb.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_ilogb.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_ilogb.c' object='libm/machine/amdgcn/libm_a-v64df_ilogb.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_ilogb.o `test -f 'libm/machine/amdgcn/v64df_ilogb.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_ilogb.c + +libm/machine/amdgcn/libm_a-v64df_ilogb.obj: libm/machine/amdgcn/v64df_ilogb.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_ilogb.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_ilogb.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_ilogb.obj `if test -f 'libm/machine/amdgcn/v64df_ilogb.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_ilogb.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_ilogb.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_ilogb.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_ilogb.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_ilogb.c' object='libm/machine/amdgcn/libm_a-v64df_ilogb.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_ilogb.obj `if test -f 'libm/machine/amdgcn/v64df_ilogb.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_ilogb.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_ilogb.c'; fi` + +libm/machine/amdgcn/libm_a-v64df_isnan.o: libm/machine/amdgcn/v64df_isnan.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_isnan.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_isnan.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_isnan.o `test -f 'libm/machine/amdgcn/v64df_isnan.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_isnan.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_isnan.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_isnan.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_isnan.c' object='libm/machine/amdgcn/libm_a-v64df_isnan.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_isnan.o `test -f 'libm/machine/amdgcn/v64df_isnan.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_isnan.c + +libm/machine/amdgcn/libm_a-v64df_isnan.obj: libm/machine/amdgcn/v64df_isnan.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_isnan.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_isnan.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_isnan.obj `if test -f 'libm/machine/amdgcn/v64df_isnan.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_isnan.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_isnan.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_isnan.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_isnan.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_isnan.c' object='libm/machine/amdgcn/libm_a-v64df_isnan.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_isnan.obj `if test -f 'libm/machine/amdgcn/v64df_isnan.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_isnan.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_isnan.c'; fi` + +libm/machine/amdgcn/libm_a-v64df_ispos.o: libm/machine/amdgcn/v64df_ispos.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_ispos.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_ispos.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_ispos.o `test -f 'libm/machine/amdgcn/v64df_ispos.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_ispos.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_ispos.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_ispos.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_ispos.c' object='libm/machine/amdgcn/libm_a-v64df_ispos.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_ispos.o `test -f 'libm/machine/amdgcn/v64df_ispos.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_ispos.c + +libm/machine/amdgcn/libm_a-v64df_ispos.obj: libm/machine/amdgcn/v64df_ispos.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_ispos.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_ispos.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_ispos.obj `if test -f 'libm/machine/amdgcn/v64df_ispos.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_ispos.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_ispos.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_ispos.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_ispos.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_ispos.c' object='libm/machine/amdgcn/libm_a-v64df_ispos.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_ispos.obj `if test -f 'libm/machine/amdgcn/v64df_ispos.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_ispos.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_ispos.c'; fi` + +libm/machine/amdgcn/libm_a-v64df_lgamma.o: libm/machine/amdgcn/v64df_lgamma.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_lgamma.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_lgamma.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_lgamma.o `test -f 'libm/machine/amdgcn/v64df_lgamma.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_lgamma.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_lgamma.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_lgamma.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_lgamma.c' object='libm/machine/amdgcn/libm_a-v64df_lgamma.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_lgamma.o `test -f 'libm/machine/amdgcn/v64df_lgamma.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_lgamma.c + +libm/machine/amdgcn/libm_a-v64df_lgamma.obj: libm/machine/amdgcn/v64df_lgamma.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_lgamma.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_lgamma.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_lgamma.obj `if test -f 'libm/machine/amdgcn/v64df_lgamma.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_lgamma.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_lgamma.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_lgamma.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_lgamma.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_lgamma.c' object='libm/machine/amdgcn/libm_a-v64df_lgamma.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_lgamma.obj `if test -f 'libm/machine/amdgcn/v64df_lgamma.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_lgamma.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_lgamma.c'; fi` + +libm/machine/amdgcn/libm_a-v64df_lgamma_r.o: libm/machine/amdgcn/v64df_lgamma_r.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_lgamma_r.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_lgamma_r.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_lgamma_r.o `test -f 'libm/machine/amdgcn/v64df_lgamma_r.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_lgamma_r.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_lgamma_r.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_lgamma_r.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_lgamma_r.c' object='libm/machine/amdgcn/libm_a-v64df_lgamma_r.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_lgamma_r.o `test -f 'libm/machine/amdgcn/v64df_lgamma_r.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_lgamma_r.c + +libm/machine/amdgcn/libm_a-v64df_lgamma_r.obj: libm/machine/amdgcn/v64df_lgamma_r.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_lgamma_r.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_lgamma_r.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_lgamma_r.obj `if test -f 'libm/machine/amdgcn/v64df_lgamma_r.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_lgamma_r.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_lgamma_r.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_lgamma_r.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_lgamma_r.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_lgamma_r.c' object='libm/machine/amdgcn/libm_a-v64df_lgamma_r.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_lgamma_r.obj `if test -f 'libm/machine/amdgcn/v64df_lgamma_r.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_lgamma_r.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_lgamma_r.c'; fi` + +libm/machine/amdgcn/libm_a-v64df_log.o: libm/machine/amdgcn/v64df_log.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_log.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_log.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_log.o `test -f 'libm/machine/amdgcn/v64df_log.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_log.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_log.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_log.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_log.c' object='libm/machine/amdgcn/libm_a-v64df_log.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_log.o `test -f 'libm/machine/amdgcn/v64df_log.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_log.c + +libm/machine/amdgcn/libm_a-v64df_log.obj: libm/machine/amdgcn/v64df_log.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_log.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_log.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_log.obj `if test -f 'libm/machine/amdgcn/v64df_log.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_log.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_log.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_log.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_log.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_log.c' object='libm/machine/amdgcn/libm_a-v64df_log.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_log.obj `if test -f 'libm/machine/amdgcn/v64df_log.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_log.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_log.c'; fi` + +libm/machine/amdgcn/libm_a-v64df_log10.o: libm/machine/amdgcn/v64df_log10.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_log10.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_log10.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_log10.o `test -f 'libm/machine/amdgcn/v64df_log10.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_log10.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_log10.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_log10.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_log10.c' object='libm/machine/amdgcn/libm_a-v64df_log10.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_log10.o `test -f 'libm/machine/amdgcn/v64df_log10.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_log10.c + +libm/machine/amdgcn/libm_a-v64df_log10.obj: libm/machine/amdgcn/v64df_log10.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_log10.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_log10.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_log10.obj `if test -f 'libm/machine/amdgcn/v64df_log10.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_log10.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_log10.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_log10.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_log10.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_log10.c' object='libm/machine/amdgcn/libm_a-v64df_log10.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_log10.obj `if test -f 'libm/machine/amdgcn/v64df_log10.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_log10.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_log10.c'; fi` + +libm/machine/amdgcn/libm_a-v64df_log2.o: libm/machine/amdgcn/v64df_log2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_log2.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_log2.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_log2.o `test -f 'libm/machine/amdgcn/v64df_log2.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_log2.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_log2.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_log2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_log2.c' object='libm/machine/amdgcn/libm_a-v64df_log2.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_log2.o `test -f 'libm/machine/amdgcn/v64df_log2.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_log2.c + +libm/machine/amdgcn/libm_a-v64df_log2.obj: libm/machine/amdgcn/v64df_log2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_log2.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_log2.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_log2.obj `if test -f 'libm/machine/amdgcn/v64df_log2.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_log2.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_log2.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_log2.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_log2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_log2.c' object='libm/machine/amdgcn/libm_a-v64df_log2.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_log2.obj `if test -f 'libm/machine/amdgcn/v64df_log2.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_log2.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_log2.c'; fi` + +libm/machine/amdgcn/libm_a-v64df_modf.o: libm/machine/amdgcn/v64df_modf.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_modf.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_modf.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_modf.o `test -f 'libm/machine/amdgcn/v64df_modf.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_modf.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_modf.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_modf.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_modf.c' object='libm/machine/amdgcn/libm_a-v64df_modf.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_modf.o `test -f 'libm/machine/amdgcn/v64df_modf.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_modf.c + +libm/machine/amdgcn/libm_a-v64df_modf.obj: libm/machine/amdgcn/v64df_modf.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_modf.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_modf.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_modf.obj `if test -f 'libm/machine/amdgcn/v64df_modf.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_modf.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_modf.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_modf.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_modf.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_modf.c' object='libm/machine/amdgcn/libm_a-v64df_modf.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_modf.obj `if test -f 'libm/machine/amdgcn/v64df_modf.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_modf.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_modf.c'; fi` + +libm/machine/amdgcn/libm_a-v64df_numtest.o: libm/machine/amdgcn/v64df_numtest.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_numtest.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_numtest.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_numtest.o `test -f 'libm/machine/amdgcn/v64df_numtest.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_numtest.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_numtest.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_numtest.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_numtest.c' object='libm/machine/amdgcn/libm_a-v64df_numtest.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_numtest.o `test -f 'libm/machine/amdgcn/v64df_numtest.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_numtest.c + +libm/machine/amdgcn/libm_a-v64df_numtest.obj: libm/machine/amdgcn/v64df_numtest.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_numtest.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_numtest.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_numtest.obj `if test -f 'libm/machine/amdgcn/v64df_numtest.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_numtest.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_numtest.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_numtest.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_numtest.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_numtest.c' object='libm/machine/amdgcn/libm_a-v64df_numtest.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_numtest.obj `if test -f 'libm/machine/amdgcn/v64df_numtest.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_numtest.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_numtest.c'; fi` + +libm/machine/amdgcn/libm_a-v64df_pow.o: libm/machine/amdgcn/v64df_pow.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_pow.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_pow.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_pow.o `test -f 'libm/machine/amdgcn/v64df_pow.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_pow.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_pow.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_pow.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_pow.c' object='libm/machine/amdgcn/libm_a-v64df_pow.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_pow.o `test -f 'libm/machine/amdgcn/v64df_pow.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_pow.c + +libm/machine/amdgcn/libm_a-v64df_pow.obj: libm/machine/amdgcn/v64df_pow.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_pow.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_pow.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_pow.obj `if test -f 'libm/machine/amdgcn/v64df_pow.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_pow.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_pow.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_pow.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_pow.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_pow.c' object='libm/machine/amdgcn/libm_a-v64df_pow.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_pow.obj `if test -f 'libm/machine/amdgcn/v64df_pow.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_pow.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_pow.c'; fi` + +libm/machine/amdgcn/libm_a-v64df_remainder.o: libm/machine/amdgcn/v64df_remainder.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_remainder.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_remainder.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_remainder.o `test -f 'libm/machine/amdgcn/v64df_remainder.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_remainder.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_remainder.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_remainder.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_remainder.c' object='libm/machine/amdgcn/libm_a-v64df_remainder.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_remainder.o `test -f 'libm/machine/amdgcn/v64df_remainder.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_remainder.c + +libm/machine/amdgcn/libm_a-v64df_remainder.obj: libm/machine/amdgcn/v64df_remainder.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_remainder.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_remainder.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_remainder.obj `if test -f 'libm/machine/amdgcn/v64df_remainder.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_remainder.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_remainder.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_remainder.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_remainder.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_remainder.c' object='libm/machine/amdgcn/libm_a-v64df_remainder.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_remainder.obj `if test -f 'libm/machine/amdgcn/v64df_remainder.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_remainder.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_remainder.c'; fi` + +libm/machine/amdgcn/libm_a-v64df_rint.o: libm/machine/amdgcn/v64df_rint.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_rint.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_rint.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_rint.o `test -f 'libm/machine/amdgcn/v64df_rint.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_rint.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_rint.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_rint.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_rint.c' object='libm/machine/amdgcn/libm_a-v64df_rint.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_rint.o `test -f 'libm/machine/amdgcn/v64df_rint.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_rint.c + +libm/machine/amdgcn/libm_a-v64df_rint.obj: libm/machine/amdgcn/v64df_rint.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_rint.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_rint.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_rint.obj `if test -f 'libm/machine/amdgcn/v64df_rint.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_rint.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_rint.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_rint.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_rint.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_rint.c' object='libm/machine/amdgcn/libm_a-v64df_rint.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_rint.obj `if test -f 'libm/machine/amdgcn/v64df_rint.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_rint.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_rint.c'; fi` + +libm/machine/amdgcn/libm_a-v64df_scalb.o: libm/machine/amdgcn/v64df_scalb.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_scalb.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_scalb.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_scalb.o `test -f 'libm/machine/amdgcn/v64df_scalb.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_scalb.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_scalb.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_scalb.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_scalb.c' object='libm/machine/amdgcn/libm_a-v64df_scalb.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_scalb.o `test -f 'libm/machine/amdgcn/v64df_scalb.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_scalb.c + +libm/machine/amdgcn/libm_a-v64df_scalb.obj: libm/machine/amdgcn/v64df_scalb.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_scalb.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_scalb.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_scalb.obj `if test -f 'libm/machine/amdgcn/v64df_scalb.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_scalb.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_scalb.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_scalb.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_scalb.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_scalb.c' object='libm/machine/amdgcn/libm_a-v64df_scalb.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_scalb.obj `if test -f 'libm/machine/amdgcn/v64df_scalb.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_scalb.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_scalb.c'; fi` + +libm/machine/amdgcn/libm_a-v64df_scalbn.o: libm/machine/amdgcn/v64df_scalbn.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_scalbn.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_scalbn.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_scalbn.o `test -f 'libm/machine/amdgcn/v64df_scalbn.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_scalbn.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_scalbn.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_scalbn.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_scalbn.c' object='libm/machine/amdgcn/libm_a-v64df_scalbn.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_scalbn.o `test -f 'libm/machine/amdgcn/v64df_scalbn.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_scalbn.c + +libm/machine/amdgcn/libm_a-v64df_scalbn.obj: libm/machine/amdgcn/v64df_scalbn.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_scalbn.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_scalbn.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_scalbn.obj `if test -f 'libm/machine/amdgcn/v64df_scalbn.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_scalbn.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_scalbn.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_scalbn.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_scalbn.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_scalbn.c' object='libm/machine/amdgcn/libm_a-v64df_scalbn.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_scalbn.obj `if test -f 'libm/machine/amdgcn/v64df_scalbn.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_scalbn.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_scalbn.c'; fi` + +libm/machine/amdgcn/libm_a-v64df_signif.o: libm/machine/amdgcn/v64df_signif.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_signif.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_signif.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_signif.o `test -f 'libm/machine/amdgcn/v64df_signif.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_signif.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_signif.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_signif.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_signif.c' object='libm/machine/amdgcn/libm_a-v64df_signif.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_signif.o `test -f 'libm/machine/amdgcn/v64df_signif.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_signif.c + +libm/machine/amdgcn/libm_a-v64df_signif.obj: libm/machine/amdgcn/v64df_signif.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_signif.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_signif.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_signif.obj `if test -f 'libm/machine/amdgcn/v64df_signif.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_signif.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_signif.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_signif.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_signif.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_signif.c' object='libm/machine/amdgcn/libm_a-v64df_signif.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_signif.obj `if test -f 'libm/machine/amdgcn/v64df_signif.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_signif.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_signif.c'; fi` + +libm/machine/amdgcn/libm_a-v64df_sin.o: libm/machine/amdgcn/v64df_sin.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_sin.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_sin.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_sin.o `test -f 'libm/machine/amdgcn/v64df_sin.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_sin.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_sin.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_sin.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_sin.c' object='libm/machine/amdgcn/libm_a-v64df_sin.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_sin.o `test -f 'libm/machine/amdgcn/v64df_sin.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_sin.c + +libm/machine/amdgcn/libm_a-v64df_sin.obj: libm/machine/amdgcn/v64df_sin.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_sin.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_sin.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_sin.obj `if test -f 'libm/machine/amdgcn/v64df_sin.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_sin.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_sin.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_sin.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_sin.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_sin.c' object='libm/machine/amdgcn/libm_a-v64df_sin.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_sin.obj `if test -f 'libm/machine/amdgcn/v64df_sin.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_sin.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_sin.c'; fi` + +libm/machine/amdgcn/libm_a-v64df_sine.o: libm/machine/amdgcn/v64df_sine.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_sine.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_sine.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_sine.o `test -f 'libm/machine/amdgcn/v64df_sine.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_sine.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_sine.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_sine.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_sine.c' object='libm/machine/amdgcn/libm_a-v64df_sine.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_sine.o `test -f 'libm/machine/amdgcn/v64df_sine.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_sine.c + +libm/machine/amdgcn/libm_a-v64df_sine.obj: libm/machine/amdgcn/v64df_sine.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_sine.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_sine.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_sine.obj `if test -f 'libm/machine/amdgcn/v64df_sine.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_sine.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_sine.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_sine.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_sine.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_sine.c' object='libm/machine/amdgcn/libm_a-v64df_sine.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_sine.obj `if test -f 'libm/machine/amdgcn/v64df_sine.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_sine.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_sine.c'; fi` + +libm/machine/amdgcn/libm_a-v64df_sineh.o: libm/machine/amdgcn/v64df_sineh.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_sineh.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_sineh.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_sineh.o `test -f 'libm/machine/amdgcn/v64df_sineh.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_sineh.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_sineh.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_sineh.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_sineh.c' object='libm/machine/amdgcn/libm_a-v64df_sineh.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_sineh.o `test -f 'libm/machine/amdgcn/v64df_sineh.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_sineh.c + +libm/machine/amdgcn/libm_a-v64df_sineh.obj: libm/machine/amdgcn/v64df_sineh.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_sineh.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_sineh.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_sineh.obj `if test -f 'libm/machine/amdgcn/v64df_sineh.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_sineh.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_sineh.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_sineh.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_sineh.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_sineh.c' object='libm/machine/amdgcn/libm_a-v64df_sineh.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_sineh.obj `if test -f 'libm/machine/amdgcn/v64df_sineh.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_sineh.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_sineh.c'; fi` + +libm/machine/amdgcn/libm_a-v64df_sinh.o: libm/machine/amdgcn/v64df_sinh.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_sinh.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_sinh.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_sinh.o `test -f 'libm/machine/amdgcn/v64df_sinh.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_sinh.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_sinh.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_sinh.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_sinh.c' object='libm/machine/amdgcn/libm_a-v64df_sinh.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_sinh.o `test -f 'libm/machine/amdgcn/v64df_sinh.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_sinh.c + +libm/machine/amdgcn/libm_a-v64df_sinh.obj: libm/machine/amdgcn/v64df_sinh.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_sinh.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_sinh.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_sinh.obj `if test -f 'libm/machine/amdgcn/v64df_sinh.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_sinh.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_sinh.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_sinh.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_sinh.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_sinh.c' object='libm/machine/amdgcn/libm_a-v64df_sinh.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_sinh.obj `if test -f 'libm/machine/amdgcn/v64df_sinh.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_sinh.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_sinh.c'; fi` + +libm/machine/amdgcn/libm_a-v64df_sqrt.o: libm/machine/amdgcn/v64df_sqrt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_sqrt.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_sqrt.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_sqrt.o `test -f 'libm/machine/amdgcn/v64df_sqrt.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_sqrt.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_sqrt.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_sqrt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_sqrt.c' object='libm/machine/amdgcn/libm_a-v64df_sqrt.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_sqrt.o `test -f 'libm/machine/amdgcn/v64df_sqrt.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_sqrt.c + +libm/machine/amdgcn/libm_a-v64df_sqrt.obj: libm/machine/amdgcn/v64df_sqrt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_sqrt.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_sqrt.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_sqrt.obj `if test -f 'libm/machine/amdgcn/v64df_sqrt.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_sqrt.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_sqrt.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_sqrt.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_sqrt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_sqrt.c' object='libm/machine/amdgcn/libm_a-v64df_sqrt.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_sqrt.obj `if test -f 'libm/machine/amdgcn/v64df_sqrt.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_sqrt.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_sqrt.c'; fi` + +libm/machine/amdgcn/libm_a-v64df_tan.o: libm/machine/amdgcn/v64df_tan.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_tan.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_tan.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_tan.o `test -f 'libm/machine/amdgcn/v64df_tan.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_tan.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_tan.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_tan.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_tan.c' object='libm/machine/amdgcn/libm_a-v64df_tan.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_tan.o `test -f 'libm/machine/amdgcn/v64df_tan.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_tan.c + +libm/machine/amdgcn/libm_a-v64df_tan.obj: libm/machine/amdgcn/v64df_tan.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_tan.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_tan.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_tan.obj `if test -f 'libm/machine/amdgcn/v64df_tan.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_tan.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_tan.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_tan.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_tan.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_tan.c' object='libm/machine/amdgcn/libm_a-v64df_tan.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_tan.obj `if test -f 'libm/machine/amdgcn/v64df_tan.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_tan.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_tan.c'; fi` + +libm/machine/amdgcn/libm_a-v64df_tanh.o: libm/machine/amdgcn/v64df_tanh.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_tanh.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_tanh.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_tanh.o `test -f 'libm/machine/amdgcn/v64df_tanh.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_tanh.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_tanh.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_tanh.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_tanh.c' object='libm/machine/amdgcn/libm_a-v64df_tanh.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_tanh.o `test -f 'libm/machine/amdgcn/v64df_tanh.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_tanh.c + +libm/machine/amdgcn/libm_a-v64df_tanh.obj: libm/machine/amdgcn/v64df_tanh.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_tanh.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_tanh.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_tanh.obj `if test -f 'libm/machine/amdgcn/v64df_tanh.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_tanh.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_tanh.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_tanh.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_tanh.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_tanh.c' object='libm/machine/amdgcn/libm_a-v64df_tanh.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_tanh.obj `if test -f 'libm/machine/amdgcn/v64df_tanh.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_tanh.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_tanh.c'; fi` + +libm/machine/amdgcn/libm_a-v64df_tgamma.o: libm/machine/amdgcn/v64df_tgamma.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_tgamma.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_tgamma.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_tgamma.o `test -f 'libm/machine/amdgcn/v64df_tgamma.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_tgamma.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_tgamma.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_tgamma.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_tgamma.c' object='libm/machine/amdgcn/libm_a-v64df_tgamma.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_tgamma.o `test -f 'libm/machine/amdgcn/v64df_tgamma.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64df_tgamma.c + +libm/machine/amdgcn/libm_a-v64df_tgamma.obj: libm/machine/amdgcn/v64df_tgamma.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64df_tgamma.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_tgamma.Tpo -c -o libm/machine/amdgcn/libm_a-v64df_tgamma.obj `if test -f 'libm/machine/amdgcn/v64df_tgamma.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_tgamma.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_tgamma.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_tgamma.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64df_tgamma.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64df_tgamma.c' object='libm/machine/amdgcn/libm_a-v64df_tgamma.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64df_tgamma.obj `if test -f 'libm/machine/amdgcn/v64df_tgamma.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64df_tgamma.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64df_tgamma.c'; fi` + +libm/machine/amdgcn/libm_a-v64sf_acos.o: libm/machine/amdgcn/v64sf_acos.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_acos.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_acos.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_acos.o `test -f 'libm/machine/amdgcn/v64sf_acos.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_acos.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_acos.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_acos.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_acos.c' object='libm/machine/amdgcn/libm_a-v64sf_acos.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_acos.o `test -f 'libm/machine/amdgcn/v64sf_acos.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_acos.c + +libm/machine/amdgcn/libm_a-v64sf_acos.obj: libm/machine/amdgcn/v64sf_acos.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_acos.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_acos.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_acos.obj `if test -f 'libm/machine/amdgcn/v64sf_acos.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_acos.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_acos.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_acos.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_acos.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_acos.c' object='libm/machine/amdgcn/libm_a-v64sf_acos.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_acos.obj `if test -f 'libm/machine/amdgcn/v64sf_acos.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_acos.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_acos.c'; fi` + +libm/machine/amdgcn/libm_a-v64sf_acosh.o: libm/machine/amdgcn/v64sf_acosh.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_acosh.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_acosh.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_acosh.o `test -f 'libm/machine/amdgcn/v64sf_acosh.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_acosh.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_acosh.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_acosh.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_acosh.c' object='libm/machine/amdgcn/libm_a-v64sf_acosh.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_acosh.o `test -f 'libm/machine/amdgcn/v64sf_acosh.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_acosh.c + +libm/machine/amdgcn/libm_a-v64sf_acosh.obj: libm/machine/amdgcn/v64sf_acosh.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_acosh.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_acosh.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_acosh.obj `if test -f 'libm/machine/amdgcn/v64sf_acosh.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_acosh.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_acosh.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_acosh.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_acosh.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_acosh.c' object='libm/machine/amdgcn/libm_a-v64sf_acosh.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_acosh.obj `if test -f 'libm/machine/amdgcn/v64sf_acosh.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_acosh.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_acosh.c'; fi` + +libm/machine/amdgcn/libm_a-v64sf_asin.o: libm/machine/amdgcn/v64sf_asin.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_asin.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_asin.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_asin.o `test -f 'libm/machine/amdgcn/v64sf_asin.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_asin.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_asin.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_asin.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_asin.c' object='libm/machine/amdgcn/libm_a-v64sf_asin.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_asin.o `test -f 'libm/machine/amdgcn/v64sf_asin.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_asin.c + +libm/machine/amdgcn/libm_a-v64sf_asin.obj: libm/machine/amdgcn/v64sf_asin.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_asin.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_asin.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_asin.obj `if test -f 'libm/machine/amdgcn/v64sf_asin.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_asin.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_asin.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_asin.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_asin.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_asin.c' object='libm/machine/amdgcn/libm_a-v64sf_asin.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_asin.obj `if test -f 'libm/machine/amdgcn/v64sf_asin.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_asin.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_asin.c'; fi` + +libm/machine/amdgcn/libm_a-v64sf_asine.o: libm/machine/amdgcn/v64sf_asine.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_asine.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_asine.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_asine.o `test -f 'libm/machine/amdgcn/v64sf_asine.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_asine.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_asine.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_asine.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_asine.c' object='libm/machine/amdgcn/libm_a-v64sf_asine.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_asine.o `test -f 'libm/machine/amdgcn/v64sf_asine.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_asine.c + +libm/machine/amdgcn/libm_a-v64sf_asine.obj: libm/machine/amdgcn/v64sf_asine.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_asine.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_asine.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_asine.obj `if test -f 'libm/machine/amdgcn/v64sf_asine.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_asine.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_asine.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_asine.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_asine.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_asine.c' object='libm/machine/amdgcn/libm_a-v64sf_asine.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_asine.obj `if test -f 'libm/machine/amdgcn/v64sf_asine.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_asine.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_asine.c'; fi` + +libm/machine/amdgcn/libm_a-v64sf_asinh.o: libm/machine/amdgcn/v64sf_asinh.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_asinh.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_asinh.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_asinh.o `test -f 'libm/machine/amdgcn/v64sf_asinh.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_asinh.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_asinh.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_asinh.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_asinh.c' object='libm/machine/amdgcn/libm_a-v64sf_asinh.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_asinh.o `test -f 'libm/machine/amdgcn/v64sf_asinh.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_asinh.c + +libm/machine/amdgcn/libm_a-v64sf_asinh.obj: libm/machine/amdgcn/v64sf_asinh.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_asinh.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_asinh.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_asinh.obj `if test -f 'libm/machine/amdgcn/v64sf_asinh.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_asinh.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_asinh.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_asinh.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_asinh.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_asinh.c' object='libm/machine/amdgcn/libm_a-v64sf_asinh.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_asinh.obj `if test -f 'libm/machine/amdgcn/v64sf_asinh.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_asinh.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_asinh.c'; fi` + +libm/machine/amdgcn/libm_a-v64sf_atan.o: libm/machine/amdgcn/v64sf_atan.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_atan.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_atan.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_atan.o `test -f 'libm/machine/amdgcn/v64sf_atan.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_atan.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_atan.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_atan.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_atan.c' object='libm/machine/amdgcn/libm_a-v64sf_atan.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_atan.o `test -f 'libm/machine/amdgcn/v64sf_atan.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_atan.c + +libm/machine/amdgcn/libm_a-v64sf_atan.obj: libm/machine/amdgcn/v64sf_atan.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_atan.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_atan.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_atan.obj `if test -f 'libm/machine/amdgcn/v64sf_atan.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_atan.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_atan.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_atan.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_atan.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_atan.c' object='libm/machine/amdgcn/libm_a-v64sf_atan.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_atan.obj `if test -f 'libm/machine/amdgcn/v64sf_atan.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_atan.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_atan.c'; fi` + +libm/machine/amdgcn/libm_a-v64sf_atan2.o: libm/machine/amdgcn/v64sf_atan2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_atan2.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_atan2.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_atan2.o `test -f 'libm/machine/amdgcn/v64sf_atan2.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_atan2.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_atan2.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_atan2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_atan2.c' object='libm/machine/amdgcn/libm_a-v64sf_atan2.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_atan2.o `test -f 'libm/machine/amdgcn/v64sf_atan2.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_atan2.c + +libm/machine/amdgcn/libm_a-v64sf_atan2.obj: libm/machine/amdgcn/v64sf_atan2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_atan2.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_atan2.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_atan2.obj `if test -f 'libm/machine/amdgcn/v64sf_atan2.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_atan2.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_atan2.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_atan2.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_atan2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_atan2.c' object='libm/machine/amdgcn/libm_a-v64sf_atan2.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_atan2.obj `if test -f 'libm/machine/amdgcn/v64sf_atan2.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_atan2.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_atan2.c'; fi` + +libm/machine/amdgcn/libm_a-v64sf_atangent.o: libm/machine/amdgcn/v64sf_atangent.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_atangent.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_atangent.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_atangent.o `test -f 'libm/machine/amdgcn/v64sf_atangent.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_atangent.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_atangent.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_atangent.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_atangent.c' object='libm/machine/amdgcn/libm_a-v64sf_atangent.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_atangent.o `test -f 'libm/machine/amdgcn/v64sf_atangent.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_atangent.c + +libm/machine/amdgcn/libm_a-v64sf_atangent.obj: libm/machine/amdgcn/v64sf_atangent.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_atangent.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_atangent.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_atangent.obj `if test -f 'libm/machine/amdgcn/v64sf_atangent.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_atangent.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_atangent.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_atangent.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_atangent.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_atangent.c' object='libm/machine/amdgcn/libm_a-v64sf_atangent.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_atangent.obj `if test -f 'libm/machine/amdgcn/v64sf_atangent.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_atangent.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_atangent.c'; fi` + +libm/machine/amdgcn/libm_a-v64sf_atanh.o: libm/machine/amdgcn/v64sf_atanh.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_atanh.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_atanh.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_atanh.o `test -f 'libm/machine/amdgcn/v64sf_atanh.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_atanh.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_atanh.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_atanh.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_atanh.c' object='libm/machine/amdgcn/libm_a-v64sf_atanh.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_atanh.o `test -f 'libm/machine/amdgcn/v64sf_atanh.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_atanh.c + +libm/machine/amdgcn/libm_a-v64sf_atanh.obj: libm/machine/amdgcn/v64sf_atanh.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_atanh.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_atanh.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_atanh.obj `if test -f 'libm/machine/amdgcn/v64sf_atanh.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_atanh.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_atanh.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_atanh.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_atanh.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_atanh.c' object='libm/machine/amdgcn/libm_a-v64sf_atanh.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_atanh.obj `if test -f 'libm/machine/amdgcn/v64sf_atanh.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_atanh.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_atanh.c'; fi` + +libm/machine/amdgcn/libm_a-v64sf_copysign.o: libm/machine/amdgcn/v64sf_copysign.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_copysign.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_copysign.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_copysign.o `test -f 'libm/machine/amdgcn/v64sf_copysign.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_copysign.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_copysign.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_copysign.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_copysign.c' object='libm/machine/amdgcn/libm_a-v64sf_copysign.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_copysign.o `test -f 'libm/machine/amdgcn/v64sf_copysign.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_copysign.c + +libm/machine/amdgcn/libm_a-v64sf_copysign.obj: libm/machine/amdgcn/v64sf_copysign.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_copysign.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_copysign.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_copysign.obj `if test -f 'libm/machine/amdgcn/v64sf_copysign.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_copysign.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_copysign.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_copysign.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_copysign.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_copysign.c' object='libm/machine/amdgcn/libm_a-v64sf_copysign.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_copysign.obj `if test -f 'libm/machine/amdgcn/v64sf_copysign.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_copysign.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_copysign.c'; fi` + +libm/machine/amdgcn/libm_a-v64sf_cos.o: libm/machine/amdgcn/v64sf_cos.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_cos.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_cos.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_cos.o `test -f 'libm/machine/amdgcn/v64sf_cos.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_cos.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_cos.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_cos.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_cos.c' object='libm/machine/amdgcn/libm_a-v64sf_cos.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_cos.o `test -f 'libm/machine/amdgcn/v64sf_cos.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_cos.c + +libm/machine/amdgcn/libm_a-v64sf_cos.obj: libm/machine/amdgcn/v64sf_cos.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_cos.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_cos.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_cos.obj `if test -f 'libm/machine/amdgcn/v64sf_cos.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_cos.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_cos.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_cos.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_cos.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_cos.c' object='libm/machine/amdgcn/libm_a-v64sf_cos.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_cos.obj `if test -f 'libm/machine/amdgcn/v64sf_cos.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_cos.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_cos.c'; fi` + +libm/machine/amdgcn/libm_a-v64sf_cosh.o: libm/machine/amdgcn/v64sf_cosh.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_cosh.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_cosh.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_cosh.o `test -f 'libm/machine/amdgcn/v64sf_cosh.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_cosh.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_cosh.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_cosh.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_cosh.c' object='libm/machine/amdgcn/libm_a-v64sf_cosh.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_cosh.o `test -f 'libm/machine/amdgcn/v64sf_cosh.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_cosh.c + +libm/machine/amdgcn/libm_a-v64sf_cosh.obj: libm/machine/amdgcn/v64sf_cosh.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_cosh.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_cosh.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_cosh.obj `if test -f 'libm/machine/amdgcn/v64sf_cosh.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_cosh.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_cosh.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_cosh.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_cosh.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_cosh.c' object='libm/machine/amdgcn/libm_a-v64sf_cosh.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_cosh.obj `if test -f 'libm/machine/amdgcn/v64sf_cosh.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_cosh.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_cosh.c'; fi` + +libm/machine/amdgcn/libm_a-v64sf_erf.o: libm/machine/amdgcn/v64sf_erf.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_erf.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_erf.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_erf.o `test -f 'libm/machine/amdgcn/v64sf_erf.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_erf.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_erf.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_erf.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_erf.c' object='libm/machine/amdgcn/libm_a-v64sf_erf.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_erf.o `test -f 'libm/machine/amdgcn/v64sf_erf.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_erf.c + +libm/machine/amdgcn/libm_a-v64sf_erf.obj: libm/machine/amdgcn/v64sf_erf.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_erf.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_erf.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_erf.obj `if test -f 'libm/machine/amdgcn/v64sf_erf.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_erf.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_erf.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_erf.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_erf.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_erf.c' object='libm/machine/amdgcn/libm_a-v64sf_erf.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_erf.obj `if test -f 'libm/machine/amdgcn/v64sf_erf.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_erf.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_erf.c'; fi` + +libm/machine/amdgcn/libm_a-v64sf_exp.o: libm/machine/amdgcn/v64sf_exp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_exp.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_exp.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_exp.o `test -f 'libm/machine/amdgcn/v64sf_exp.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_exp.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_exp.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_exp.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_exp.c' object='libm/machine/amdgcn/libm_a-v64sf_exp.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_exp.o `test -f 'libm/machine/amdgcn/v64sf_exp.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_exp.c + +libm/machine/amdgcn/libm_a-v64sf_exp.obj: libm/machine/amdgcn/v64sf_exp.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_exp.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_exp.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_exp.obj `if test -f 'libm/machine/amdgcn/v64sf_exp.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_exp.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_exp.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_exp.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_exp.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_exp.c' object='libm/machine/amdgcn/libm_a-v64sf_exp.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_exp.obj `if test -f 'libm/machine/amdgcn/v64sf_exp.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_exp.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_exp.c'; fi` + +libm/machine/amdgcn/libm_a-v64sf_exp2.o: libm/machine/amdgcn/v64sf_exp2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_exp2.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_exp2.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_exp2.o `test -f 'libm/machine/amdgcn/v64sf_exp2.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_exp2.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_exp2.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_exp2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_exp2.c' object='libm/machine/amdgcn/libm_a-v64sf_exp2.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_exp2.o `test -f 'libm/machine/amdgcn/v64sf_exp2.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_exp2.c + +libm/machine/amdgcn/libm_a-v64sf_exp2.obj: libm/machine/amdgcn/v64sf_exp2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_exp2.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_exp2.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_exp2.obj `if test -f 'libm/machine/amdgcn/v64sf_exp2.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_exp2.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_exp2.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_exp2.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_exp2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_exp2.c' object='libm/machine/amdgcn/libm_a-v64sf_exp2.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_exp2.obj `if test -f 'libm/machine/amdgcn/v64sf_exp2.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_exp2.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_exp2.c'; fi` + +libm/machine/amdgcn/libm_a-v64sf_finite.o: libm/machine/amdgcn/v64sf_finite.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_finite.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_finite.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_finite.o `test -f 'libm/machine/amdgcn/v64sf_finite.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_finite.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_finite.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_finite.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_finite.c' object='libm/machine/amdgcn/libm_a-v64sf_finite.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_finite.o `test -f 'libm/machine/amdgcn/v64sf_finite.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_finite.c + +libm/machine/amdgcn/libm_a-v64sf_finite.obj: libm/machine/amdgcn/v64sf_finite.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_finite.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_finite.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_finite.obj `if test -f 'libm/machine/amdgcn/v64sf_finite.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_finite.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_finite.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_finite.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_finite.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_finite.c' object='libm/machine/amdgcn/libm_a-v64sf_finite.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_finite.obj `if test -f 'libm/machine/amdgcn/v64sf_finite.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_finite.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_finite.c'; fi` + +libm/machine/amdgcn/libm_a-v64sf_fmod.o: libm/machine/amdgcn/v64sf_fmod.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_fmod.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_fmod.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_fmod.o `test -f 'libm/machine/amdgcn/v64sf_fmod.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_fmod.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_fmod.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_fmod.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_fmod.c' object='libm/machine/amdgcn/libm_a-v64sf_fmod.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_fmod.o `test -f 'libm/machine/amdgcn/v64sf_fmod.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_fmod.c + +libm/machine/amdgcn/libm_a-v64sf_fmod.obj: libm/machine/amdgcn/v64sf_fmod.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_fmod.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_fmod.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_fmod.obj `if test -f 'libm/machine/amdgcn/v64sf_fmod.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_fmod.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_fmod.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_fmod.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_fmod.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_fmod.c' object='libm/machine/amdgcn/libm_a-v64sf_fmod.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_fmod.obj `if test -f 'libm/machine/amdgcn/v64sf_fmod.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_fmod.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_fmod.c'; fi` + +libm/machine/amdgcn/libm_a-v64sf_gamma.o: libm/machine/amdgcn/v64sf_gamma.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_gamma.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_gamma.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_gamma.o `test -f 'libm/machine/amdgcn/v64sf_gamma.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_gamma.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_gamma.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_gamma.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_gamma.c' object='libm/machine/amdgcn/libm_a-v64sf_gamma.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_gamma.o `test -f 'libm/machine/amdgcn/v64sf_gamma.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_gamma.c + +libm/machine/amdgcn/libm_a-v64sf_gamma.obj: libm/machine/amdgcn/v64sf_gamma.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_gamma.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_gamma.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_gamma.obj `if test -f 'libm/machine/amdgcn/v64sf_gamma.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_gamma.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_gamma.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_gamma.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_gamma.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_gamma.c' object='libm/machine/amdgcn/libm_a-v64sf_gamma.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_gamma.obj `if test -f 'libm/machine/amdgcn/v64sf_gamma.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_gamma.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_gamma.c'; fi` + +libm/machine/amdgcn/libm_a-v64sf_hypot.o: libm/machine/amdgcn/v64sf_hypot.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_hypot.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_hypot.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_hypot.o `test -f 'libm/machine/amdgcn/v64sf_hypot.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_hypot.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_hypot.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_hypot.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_hypot.c' object='libm/machine/amdgcn/libm_a-v64sf_hypot.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_hypot.o `test -f 'libm/machine/amdgcn/v64sf_hypot.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_hypot.c + +libm/machine/amdgcn/libm_a-v64sf_hypot.obj: libm/machine/amdgcn/v64sf_hypot.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_hypot.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_hypot.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_hypot.obj `if test -f 'libm/machine/amdgcn/v64sf_hypot.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_hypot.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_hypot.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_hypot.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_hypot.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_hypot.c' object='libm/machine/amdgcn/libm_a-v64sf_hypot.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_hypot.obj `if test -f 'libm/machine/amdgcn/v64sf_hypot.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_hypot.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_hypot.c'; fi` + +libm/machine/amdgcn/libm_a-v64sf_ilogb.o: libm/machine/amdgcn/v64sf_ilogb.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_ilogb.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_ilogb.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_ilogb.o `test -f 'libm/machine/amdgcn/v64sf_ilogb.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_ilogb.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_ilogb.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_ilogb.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_ilogb.c' object='libm/machine/amdgcn/libm_a-v64sf_ilogb.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_ilogb.o `test -f 'libm/machine/amdgcn/v64sf_ilogb.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_ilogb.c + +libm/machine/amdgcn/libm_a-v64sf_ilogb.obj: libm/machine/amdgcn/v64sf_ilogb.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_ilogb.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_ilogb.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_ilogb.obj `if test -f 'libm/machine/amdgcn/v64sf_ilogb.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_ilogb.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_ilogb.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_ilogb.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_ilogb.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_ilogb.c' object='libm/machine/amdgcn/libm_a-v64sf_ilogb.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_ilogb.obj `if test -f 'libm/machine/amdgcn/v64sf_ilogb.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_ilogb.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_ilogb.c'; fi` + +libm/machine/amdgcn/libm_a-v64sf_isnan.o: libm/machine/amdgcn/v64sf_isnan.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_isnan.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_isnan.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_isnan.o `test -f 'libm/machine/amdgcn/v64sf_isnan.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_isnan.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_isnan.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_isnan.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_isnan.c' object='libm/machine/amdgcn/libm_a-v64sf_isnan.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_isnan.o `test -f 'libm/machine/amdgcn/v64sf_isnan.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_isnan.c + +libm/machine/amdgcn/libm_a-v64sf_isnan.obj: libm/machine/amdgcn/v64sf_isnan.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_isnan.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_isnan.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_isnan.obj `if test -f 'libm/machine/amdgcn/v64sf_isnan.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_isnan.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_isnan.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_isnan.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_isnan.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_isnan.c' object='libm/machine/amdgcn/libm_a-v64sf_isnan.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_isnan.obj `if test -f 'libm/machine/amdgcn/v64sf_isnan.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_isnan.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_isnan.c'; fi` + +libm/machine/amdgcn/libm_a-v64sf_ispos.o: libm/machine/amdgcn/v64sf_ispos.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_ispos.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_ispos.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_ispos.o `test -f 'libm/machine/amdgcn/v64sf_ispos.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_ispos.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_ispos.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_ispos.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_ispos.c' object='libm/machine/amdgcn/libm_a-v64sf_ispos.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_ispos.o `test -f 'libm/machine/amdgcn/v64sf_ispos.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_ispos.c + +libm/machine/amdgcn/libm_a-v64sf_ispos.obj: libm/machine/amdgcn/v64sf_ispos.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_ispos.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_ispos.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_ispos.obj `if test -f 'libm/machine/amdgcn/v64sf_ispos.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_ispos.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_ispos.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_ispos.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_ispos.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_ispos.c' object='libm/machine/amdgcn/libm_a-v64sf_ispos.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_ispos.obj `if test -f 'libm/machine/amdgcn/v64sf_ispos.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_ispos.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_ispos.c'; fi` + +libm/machine/amdgcn/libm_a-v64sf_lgamma.o: libm/machine/amdgcn/v64sf_lgamma.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_lgamma.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_lgamma.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_lgamma.o `test -f 'libm/machine/amdgcn/v64sf_lgamma.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_lgamma.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_lgamma.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_lgamma.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_lgamma.c' object='libm/machine/amdgcn/libm_a-v64sf_lgamma.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_lgamma.o `test -f 'libm/machine/amdgcn/v64sf_lgamma.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_lgamma.c + +libm/machine/amdgcn/libm_a-v64sf_lgamma.obj: libm/machine/amdgcn/v64sf_lgamma.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_lgamma.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_lgamma.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_lgamma.obj `if test -f 'libm/machine/amdgcn/v64sf_lgamma.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_lgamma.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_lgamma.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_lgamma.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_lgamma.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_lgamma.c' object='libm/machine/amdgcn/libm_a-v64sf_lgamma.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_lgamma.obj `if test -f 'libm/machine/amdgcn/v64sf_lgamma.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_lgamma.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_lgamma.c'; fi` + +libm/machine/amdgcn/libm_a-v64sf_lgamma_r.o: libm/machine/amdgcn/v64sf_lgamma_r.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_lgamma_r.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_lgamma_r.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_lgamma_r.o `test -f 'libm/machine/amdgcn/v64sf_lgamma_r.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_lgamma_r.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_lgamma_r.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_lgamma_r.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_lgamma_r.c' object='libm/machine/amdgcn/libm_a-v64sf_lgamma_r.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_lgamma_r.o `test -f 'libm/machine/amdgcn/v64sf_lgamma_r.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_lgamma_r.c + +libm/machine/amdgcn/libm_a-v64sf_lgamma_r.obj: libm/machine/amdgcn/v64sf_lgamma_r.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_lgamma_r.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_lgamma_r.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_lgamma_r.obj `if test -f 'libm/machine/amdgcn/v64sf_lgamma_r.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_lgamma_r.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_lgamma_r.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_lgamma_r.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_lgamma_r.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_lgamma_r.c' object='libm/machine/amdgcn/libm_a-v64sf_lgamma_r.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_lgamma_r.obj `if test -f 'libm/machine/amdgcn/v64sf_lgamma_r.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_lgamma_r.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_lgamma_r.c'; fi` + +libm/machine/amdgcn/libm_a-v64sf_log.o: libm/machine/amdgcn/v64sf_log.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_log.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_log.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_log.o `test -f 'libm/machine/amdgcn/v64sf_log.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_log.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_log.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_log.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_log.c' object='libm/machine/amdgcn/libm_a-v64sf_log.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_log.o `test -f 'libm/machine/amdgcn/v64sf_log.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_log.c + +libm/machine/amdgcn/libm_a-v64sf_log.obj: libm/machine/amdgcn/v64sf_log.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_log.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_log.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_log.obj `if test -f 'libm/machine/amdgcn/v64sf_log.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_log.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_log.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_log.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_log.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_log.c' object='libm/machine/amdgcn/libm_a-v64sf_log.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_log.obj `if test -f 'libm/machine/amdgcn/v64sf_log.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_log.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_log.c'; fi` + +libm/machine/amdgcn/libm_a-v64sf_log10.o: libm/machine/amdgcn/v64sf_log10.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_log10.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_log10.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_log10.o `test -f 'libm/machine/amdgcn/v64sf_log10.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_log10.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_log10.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_log10.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_log10.c' object='libm/machine/amdgcn/libm_a-v64sf_log10.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_log10.o `test -f 'libm/machine/amdgcn/v64sf_log10.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_log10.c + +libm/machine/amdgcn/libm_a-v64sf_log10.obj: libm/machine/amdgcn/v64sf_log10.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_log10.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_log10.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_log10.obj `if test -f 'libm/machine/amdgcn/v64sf_log10.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_log10.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_log10.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_log10.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_log10.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_log10.c' object='libm/machine/amdgcn/libm_a-v64sf_log10.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_log10.obj `if test -f 'libm/machine/amdgcn/v64sf_log10.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_log10.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_log10.c'; fi` + +libm/machine/amdgcn/libm_a-v64sf_log2.o: libm/machine/amdgcn/v64sf_log2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_log2.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_log2.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_log2.o `test -f 'libm/machine/amdgcn/v64sf_log2.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_log2.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_log2.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_log2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_log2.c' object='libm/machine/amdgcn/libm_a-v64sf_log2.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_log2.o `test -f 'libm/machine/amdgcn/v64sf_log2.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_log2.c + +libm/machine/amdgcn/libm_a-v64sf_log2.obj: libm/machine/amdgcn/v64sf_log2.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_log2.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_log2.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_log2.obj `if test -f 'libm/machine/amdgcn/v64sf_log2.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_log2.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_log2.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_log2.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_log2.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_log2.c' object='libm/machine/amdgcn/libm_a-v64sf_log2.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_log2.obj `if test -f 'libm/machine/amdgcn/v64sf_log2.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_log2.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_log2.c'; fi` + +libm/machine/amdgcn/libm_a-v64sf_modf.o: libm/machine/amdgcn/v64sf_modf.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_modf.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_modf.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_modf.o `test -f 'libm/machine/amdgcn/v64sf_modf.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_modf.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_modf.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_modf.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_modf.c' object='libm/machine/amdgcn/libm_a-v64sf_modf.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_modf.o `test -f 'libm/machine/amdgcn/v64sf_modf.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_modf.c + +libm/machine/amdgcn/libm_a-v64sf_modf.obj: libm/machine/amdgcn/v64sf_modf.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_modf.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_modf.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_modf.obj `if test -f 'libm/machine/amdgcn/v64sf_modf.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_modf.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_modf.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_modf.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_modf.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_modf.c' object='libm/machine/amdgcn/libm_a-v64sf_modf.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_modf.obj `if test -f 'libm/machine/amdgcn/v64sf_modf.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_modf.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_modf.c'; fi` + +libm/machine/amdgcn/libm_a-v64sf_numtest.o: libm/machine/amdgcn/v64sf_numtest.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_numtest.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_numtest.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_numtest.o `test -f 'libm/machine/amdgcn/v64sf_numtest.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_numtest.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_numtest.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_numtest.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_numtest.c' object='libm/machine/amdgcn/libm_a-v64sf_numtest.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_numtest.o `test -f 'libm/machine/amdgcn/v64sf_numtest.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_numtest.c + +libm/machine/amdgcn/libm_a-v64sf_numtest.obj: libm/machine/amdgcn/v64sf_numtest.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_numtest.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_numtest.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_numtest.obj `if test -f 'libm/machine/amdgcn/v64sf_numtest.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_numtest.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_numtest.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_numtest.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_numtest.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_numtest.c' object='libm/machine/amdgcn/libm_a-v64sf_numtest.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_numtest.obj `if test -f 'libm/machine/amdgcn/v64sf_numtest.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_numtest.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_numtest.c'; fi` + +libm/machine/amdgcn/libm_a-v64sf_pow.o: libm/machine/amdgcn/v64sf_pow.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_pow.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_pow.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_pow.o `test -f 'libm/machine/amdgcn/v64sf_pow.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_pow.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_pow.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_pow.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_pow.c' object='libm/machine/amdgcn/libm_a-v64sf_pow.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_pow.o `test -f 'libm/machine/amdgcn/v64sf_pow.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_pow.c + +libm/machine/amdgcn/libm_a-v64sf_pow.obj: libm/machine/amdgcn/v64sf_pow.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_pow.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_pow.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_pow.obj `if test -f 'libm/machine/amdgcn/v64sf_pow.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_pow.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_pow.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_pow.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_pow.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_pow.c' object='libm/machine/amdgcn/libm_a-v64sf_pow.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_pow.obj `if test -f 'libm/machine/amdgcn/v64sf_pow.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_pow.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_pow.c'; fi` + +libm/machine/amdgcn/libm_a-v64sf_remainder.o: libm/machine/amdgcn/v64sf_remainder.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_remainder.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_remainder.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_remainder.o `test -f 'libm/machine/amdgcn/v64sf_remainder.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_remainder.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_remainder.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_remainder.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_remainder.c' object='libm/machine/amdgcn/libm_a-v64sf_remainder.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_remainder.o `test -f 'libm/machine/amdgcn/v64sf_remainder.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_remainder.c + +libm/machine/amdgcn/libm_a-v64sf_remainder.obj: libm/machine/amdgcn/v64sf_remainder.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_remainder.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_remainder.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_remainder.obj `if test -f 'libm/machine/amdgcn/v64sf_remainder.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_remainder.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_remainder.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_remainder.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_remainder.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_remainder.c' object='libm/machine/amdgcn/libm_a-v64sf_remainder.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_remainder.obj `if test -f 'libm/machine/amdgcn/v64sf_remainder.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_remainder.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_remainder.c'; fi` + +libm/machine/amdgcn/libm_a-v64sf_rint.o: libm/machine/amdgcn/v64sf_rint.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_rint.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_rint.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_rint.o `test -f 'libm/machine/amdgcn/v64sf_rint.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_rint.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_rint.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_rint.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_rint.c' object='libm/machine/amdgcn/libm_a-v64sf_rint.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_rint.o `test -f 'libm/machine/amdgcn/v64sf_rint.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_rint.c + +libm/machine/amdgcn/libm_a-v64sf_rint.obj: libm/machine/amdgcn/v64sf_rint.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_rint.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_rint.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_rint.obj `if test -f 'libm/machine/amdgcn/v64sf_rint.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_rint.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_rint.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_rint.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_rint.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_rint.c' object='libm/machine/amdgcn/libm_a-v64sf_rint.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_rint.obj `if test -f 'libm/machine/amdgcn/v64sf_rint.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_rint.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_rint.c'; fi` + +libm/machine/amdgcn/libm_a-v64sf_scalb.o: libm/machine/amdgcn/v64sf_scalb.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_scalb.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_scalb.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_scalb.o `test -f 'libm/machine/amdgcn/v64sf_scalb.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_scalb.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_scalb.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_scalb.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_scalb.c' object='libm/machine/amdgcn/libm_a-v64sf_scalb.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_scalb.o `test -f 'libm/machine/amdgcn/v64sf_scalb.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_scalb.c + +libm/machine/amdgcn/libm_a-v64sf_scalb.obj: libm/machine/amdgcn/v64sf_scalb.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_scalb.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_scalb.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_scalb.obj `if test -f 'libm/machine/amdgcn/v64sf_scalb.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_scalb.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_scalb.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_scalb.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_scalb.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_scalb.c' object='libm/machine/amdgcn/libm_a-v64sf_scalb.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_scalb.obj `if test -f 'libm/machine/amdgcn/v64sf_scalb.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_scalb.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_scalb.c'; fi` + +libm/machine/amdgcn/libm_a-v64sf_scalbn.o: libm/machine/amdgcn/v64sf_scalbn.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_scalbn.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_scalbn.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_scalbn.o `test -f 'libm/machine/amdgcn/v64sf_scalbn.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_scalbn.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_scalbn.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_scalbn.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_scalbn.c' object='libm/machine/amdgcn/libm_a-v64sf_scalbn.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_scalbn.o `test -f 'libm/machine/amdgcn/v64sf_scalbn.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_scalbn.c + +libm/machine/amdgcn/libm_a-v64sf_scalbn.obj: libm/machine/amdgcn/v64sf_scalbn.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_scalbn.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_scalbn.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_scalbn.obj `if test -f 'libm/machine/amdgcn/v64sf_scalbn.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_scalbn.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_scalbn.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_scalbn.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_scalbn.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_scalbn.c' object='libm/machine/amdgcn/libm_a-v64sf_scalbn.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_scalbn.obj `if test -f 'libm/machine/amdgcn/v64sf_scalbn.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_scalbn.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_scalbn.c'; fi` + +libm/machine/amdgcn/libm_a-v64sf_signif.o: libm/machine/amdgcn/v64sf_signif.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_signif.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_signif.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_signif.o `test -f 'libm/machine/amdgcn/v64sf_signif.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_signif.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_signif.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_signif.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_signif.c' object='libm/machine/amdgcn/libm_a-v64sf_signif.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_signif.o `test -f 'libm/machine/amdgcn/v64sf_signif.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_signif.c + +libm/machine/amdgcn/libm_a-v64sf_signif.obj: libm/machine/amdgcn/v64sf_signif.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_signif.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_signif.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_signif.obj `if test -f 'libm/machine/amdgcn/v64sf_signif.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_signif.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_signif.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_signif.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_signif.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_signif.c' object='libm/machine/amdgcn/libm_a-v64sf_signif.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_signif.obj `if test -f 'libm/machine/amdgcn/v64sf_signif.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_signif.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_signif.c'; fi` + +libm/machine/amdgcn/libm_a-v64sf_sin.o: libm/machine/amdgcn/v64sf_sin.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_sin.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_sin.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_sin.o `test -f 'libm/machine/amdgcn/v64sf_sin.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_sin.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_sin.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_sin.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_sin.c' object='libm/machine/amdgcn/libm_a-v64sf_sin.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_sin.o `test -f 'libm/machine/amdgcn/v64sf_sin.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_sin.c + +libm/machine/amdgcn/libm_a-v64sf_sin.obj: libm/machine/amdgcn/v64sf_sin.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_sin.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_sin.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_sin.obj `if test -f 'libm/machine/amdgcn/v64sf_sin.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_sin.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_sin.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_sin.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_sin.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_sin.c' object='libm/machine/amdgcn/libm_a-v64sf_sin.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_sin.obj `if test -f 'libm/machine/amdgcn/v64sf_sin.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_sin.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_sin.c'; fi` + +libm/machine/amdgcn/libm_a-v64sf_sine.o: libm/machine/amdgcn/v64sf_sine.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_sine.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_sine.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_sine.o `test -f 'libm/machine/amdgcn/v64sf_sine.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_sine.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_sine.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_sine.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_sine.c' object='libm/machine/amdgcn/libm_a-v64sf_sine.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_sine.o `test -f 'libm/machine/amdgcn/v64sf_sine.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_sine.c + +libm/machine/amdgcn/libm_a-v64sf_sine.obj: libm/machine/amdgcn/v64sf_sine.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_sine.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_sine.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_sine.obj `if test -f 'libm/machine/amdgcn/v64sf_sine.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_sine.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_sine.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_sine.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_sine.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_sine.c' object='libm/machine/amdgcn/libm_a-v64sf_sine.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_sine.obj `if test -f 'libm/machine/amdgcn/v64sf_sine.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_sine.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_sine.c'; fi` + +libm/machine/amdgcn/libm_a-v64sf_sineh.o: libm/machine/amdgcn/v64sf_sineh.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_sineh.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_sineh.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_sineh.o `test -f 'libm/machine/amdgcn/v64sf_sineh.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_sineh.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_sineh.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_sineh.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_sineh.c' object='libm/machine/amdgcn/libm_a-v64sf_sineh.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_sineh.o `test -f 'libm/machine/amdgcn/v64sf_sineh.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_sineh.c + +libm/machine/amdgcn/libm_a-v64sf_sineh.obj: libm/machine/amdgcn/v64sf_sineh.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_sineh.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_sineh.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_sineh.obj `if test -f 'libm/machine/amdgcn/v64sf_sineh.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_sineh.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_sineh.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_sineh.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_sineh.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_sineh.c' object='libm/machine/amdgcn/libm_a-v64sf_sineh.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_sineh.obj `if test -f 'libm/machine/amdgcn/v64sf_sineh.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_sineh.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_sineh.c'; fi` + +libm/machine/amdgcn/libm_a-v64sf_sinh.o: libm/machine/amdgcn/v64sf_sinh.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_sinh.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_sinh.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_sinh.o `test -f 'libm/machine/amdgcn/v64sf_sinh.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_sinh.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_sinh.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_sinh.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_sinh.c' object='libm/machine/amdgcn/libm_a-v64sf_sinh.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_sinh.o `test -f 'libm/machine/amdgcn/v64sf_sinh.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_sinh.c + +libm/machine/amdgcn/libm_a-v64sf_sinh.obj: libm/machine/amdgcn/v64sf_sinh.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_sinh.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_sinh.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_sinh.obj `if test -f 'libm/machine/amdgcn/v64sf_sinh.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_sinh.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_sinh.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_sinh.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_sinh.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_sinh.c' object='libm/machine/amdgcn/libm_a-v64sf_sinh.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_sinh.obj `if test -f 'libm/machine/amdgcn/v64sf_sinh.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_sinh.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_sinh.c'; fi` + +libm/machine/amdgcn/libm_a-v64sf_sqrt.o: libm/machine/amdgcn/v64sf_sqrt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_sqrt.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_sqrt.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_sqrt.o `test -f 'libm/machine/amdgcn/v64sf_sqrt.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_sqrt.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_sqrt.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_sqrt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_sqrt.c' object='libm/machine/amdgcn/libm_a-v64sf_sqrt.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_sqrt.o `test -f 'libm/machine/amdgcn/v64sf_sqrt.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_sqrt.c + +libm/machine/amdgcn/libm_a-v64sf_sqrt.obj: libm/machine/amdgcn/v64sf_sqrt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_sqrt.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_sqrt.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_sqrt.obj `if test -f 'libm/machine/amdgcn/v64sf_sqrt.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_sqrt.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_sqrt.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_sqrt.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_sqrt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_sqrt.c' object='libm/machine/amdgcn/libm_a-v64sf_sqrt.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_sqrt.obj `if test -f 'libm/machine/amdgcn/v64sf_sqrt.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_sqrt.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_sqrt.c'; fi` + +libm/machine/amdgcn/libm_a-v64sf_tan.o: libm/machine/amdgcn/v64sf_tan.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_tan.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_tan.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_tan.o `test -f 'libm/machine/amdgcn/v64sf_tan.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_tan.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_tan.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_tan.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_tan.c' object='libm/machine/amdgcn/libm_a-v64sf_tan.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_tan.o `test -f 'libm/machine/amdgcn/v64sf_tan.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_tan.c + +libm/machine/amdgcn/libm_a-v64sf_tan.obj: libm/machine/amdgcn/v64sf_tan.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_tan.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_tan.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_tan.obj `if test -f 'libm/machine/amdgcn/v64sf_tan.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_tan.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_tan.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_tan.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_tan.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_tan.c' object='libm/machine/amdgcn/libm_a-v64sf_tan.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_tan.obj `if test -f 'libm/machine/amdgcn/v64sf_tan.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_tan.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_tan.c'; fi` + +libm/machine/amdgcn/libm_a-v64sf_tanh.o: libm/machine/amdgcn/v64sf_tanh.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_tanh.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_tanh.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_tanh.o `test -f 'libm/machine/amdgcn/v64sf_tanh.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_tanh.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_tanh.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_tanh.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_tanh.c' object='libm/machine/amdgcn/libm_a-v64sf_tanh.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_tanh.o `test -f 'libm/machine/amdgcn/v64sf_tanh.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_tanh.c + +libm/machine/amdgcn/libm_a-v64sf_tanh.obj: libm/machine/amdgcn/v64sf_tanh.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_tanh.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_tanh.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_tanh.obj `if test -f 'libm/machine/amdgcn/v64sf_tanh.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_tanh.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_tanh.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_tanh.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_tanh.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_tanh.c' object='libm/machine/amdgcn/libm_a-v64sf_tanh.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_tanh.obj `if test -f 'libm/machine/amdgcn/v64sf_tanh.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_tanh.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_tanh.c'; fi` + +libm/machine/amdgcn/libm_a-v64sf_tgamma.o: libm/machine/amdgcn/v64sf_tgamma.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_tgamma.o -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_tgamma.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_tgamma.o `test -f 'libm/machine/amdgcn/v64sf_tgamma.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_tgamma.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_tgamma.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_tgamma.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_tgamma.c' object='libm/machine/amdgcn/libm_a-v64sf_tgamma.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_tgamma.o `test -f 'libm/machine/amdgcn/v64sf_tgamma.c' || echo '$(srcdir)/'`libm/machine/amdgcn/v64sf_tgamma.c + +libm/machine/amdgcn/libm_a-v64sf_tgamma.obj: libm/machine/amdgcn/v64sf_tgamma.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/amdgcn/libm_a-v64sf_tgamma.obj -MD -MP -MF libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_tgamma.Tpo -c -o libm/machine/amdgcn/libm_a-v64sf_tgamma.obj `if test -f 'libm/machine/amdgcn/v64sf_tgamma.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_tgamma.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_tgamma.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_tgamma.Tpo libm/machine/amdgcn/$(DEPDIR)/libm_a-v64sf_tgamma.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/amdgcn/v64sf_tgamma.c' object='libm/machine/amdgcn/libm_a-v64sf_tgamma.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/amdgcn/libm_a-v64sf_tgamma.obj `if test -f 'libm/machine/amdgcn/v64sf_tgamma.c'; then $(CYGPATH_W) 'libm/machine/amdgcn/v64sf_tgamma.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/amdgcn/v64sf_tgamma.c'; fi` + libm/machine/arm/libm_a-e_sqrt.o: libm/machine/arm/e_sqrt.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/arm/libm_a-e_sqrt.o -MD -MP -MF libm/machine/arm/$(DEPDIR)/libm_a-e_sqrt.Tpo -c -o libm/machine/arm/libm_a-e_sqrt.o `test -f 'libm/machine/arm/e_sqrt.c' || echo '$(srcdir)/'`libm/machine/arm/e_sqrt.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/arm/$(DEPDIR)/libm_a-e_sqrt.Tpo libm/machine/arm/$(DEPDIR)/libm_a-e_sqrt.Po @@ -42846,6 +46325,174 @@ libm/machine/i386/libm_a-feupdateenv.obj: libm/machine/i386/feupdateenv.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/i386/libm_a-feupdateenv.obj `if test -f 'libm/machine/i386/feupdateenv.c'; then $(CYGPATH_W) 'libm/machine/i386/feupdateenv.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/i386/feupdateenv.c'; fi` +libm/ld80/libm_a-b_tgammal.o: libm/ld80/b_tgammal.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld80/libm_a-b_tgammal.o -MD -MP -MF libm/ld80/$(DEPDIR)/libm_a-b_tgammal.Tpo -c -o libm/ld80/libm_a-b_tgammal.o `test -f 'libm/ld80/b_tgammal.c' || echo '$(srcdir)/'`libm/ld80/b_tgammal.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld80/$(DEPDIR)/libm_a-b_tgammal.Tpo libm/ld80/$(DEPDIR)/libm_a-b_tgammal.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld80/b_tgammal.c' object='libm/ld80/libm_a-b_tgammal.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld80/libm_a-b_tgammal.o `test -f 'libm/ld80/b_tgammal.c' || echo '$(srcdir)/'`libm/ld80/b_tgammal.c + +libm/ld80/libm_a-b_tgammal.obj: libm/ld80/b_tgammal.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld80/libm_a-b_tgammal.obj -MD -MP -MF libm/ld80/$(DEPDIR)/libm_a-b_tgammal.Tpo -c -o libm/ld80/libm_a-b_tgammal.obj `if test -f 'libm/ld80/b_tgammal.c'; then $(CYGPATH_W) 'libm/ld80/b_tgammal.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld80/b_tgammal.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld80/$(DEPDIR)/libm_a-b_tgammal.Tpo libm/ld80/$(DEPDIR)/libm_a-b_tgammal.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld80/b_tgammal.c' object='libm/ld80/libm_a-b_tgammal.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld80/libm_a-b_tgammal.obj `if test -f 'libm/ld80/b_tgammal.c'; then $(CYGPATH_W) 'libm/ld80/b_tgammal.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld80/b_tgammal.c'; fi` + +libm/ld80/libm_a-e_powl.o: libm/ld80/e_powl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld80/libm_a-e_powl.o -MD -MP -MF libm/ld80/$(DEPDIR)/libm_a-e_powl.Tpo -c -o libm/ld80/libm_a-e_powl.o `test -f 'libm/ld80/e_powl.c' || echo '$(srcdir)/'`libm/ld80/e_powl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld80/$(DEPDIR)/libm_a-e_powl.Tpo libm/ld80/$(DEPDIR)/libm_a-e_powl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld80/e_powl.c' object='libm/ld80/libm_a-e_powl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld80/libm_a-e_powl.o `test -f 'libm/ld80/e_powl.c' || echo '$(srcdir)/'`libm/ld80/e_powl.c + +libm/ld80/libm_a-e_powl.obj: libm/ld80/e_powl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld80/libm_a-e_powl.obj -MD -MP -MF libm/ld80/$(DEPDIR)/libm_a-e_powl.Tpo -c -o libm/ld80/libm_a-e_powl.obj `if test -f 'libm/ld80/e_powl.c'; then $(CYGPATH_W) 'libm/ld80/e_powl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld80/e_powl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld80/$(DEPDIR)/libm_a-e_powl.Tpo libm/ld80/$(DEPDIR)/libm_a-e_powl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld80/e_powl.c' object='libm/ld80/libm_a-e_powl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld80/libm_a-e_powl.obj `if test -f 'libm/ld80/e_powl.c'; then $(CYGPATH_W) 'libm/ld80/e_powl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld80/e_powl.c'; fi` + +libm/ld80/libm_a-s_erfl.o: libm/ld80/s_erfl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld80/libm_a-s_erfl.o -MD -MP -MF libm/ld80/$(DEPDIR)/libm_a-s_erfl.Tpo -c -o libm/ld80/libm_a-s_erfl.o `test -f 'libm/ld80/s_erfl.c' || echo '$(srcdir)/'`libm/ld80/s_erfl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld80/$(DEPDIR)/libm_a-s_erfl.Tpo libm/ld80/$(DEPDIR)/libm_a-s_erfl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld80/s_erfl.c' object='libm/ld80/libm_a-s_erfl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld80/libm_a-s_erfl.o `test -f 'libm/ld80/s_erfl.c' || echo '$(srcdir)/'`libm/ld80/s_erfl.c + +libm/ld80/libm_a-s_erfl.obj: libm/ld80/s_erfl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld80/libm_a-s_erfl.obj -MD -MP -MF libm/ld80/$(DEPDIR)/libm_a-s_erfl.Tpo -c -o libm/ld80/libm_a-s_erfl.obj `if test -f 'libm/ld80/s_erfl.c'; then $(CYGPATH_W) 'libm/ld80/s_erfl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld80/s_erfl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld80/$(DEPDIR)/libm_a-s_erfl.Tpo libm/ld80/$(DEPDIR)/libm_a-s_erfl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld80/s_erfl.c' object='libm/ld80/libm_a-s_erfl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld80/libm_a-s_erfl.obj `if test -f 'libm/ld80/s_erfl.c'; then $(CYGPATH_W) 'libm/ld80/s_erfl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld80/s_erfl.c'; fi` + +libm/ld80/libm_a-s_exp2l.o: libm/ld80/s_exp2l.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld80/libm_a-s_exp2l.o -MD -MP -MF libm/ld80/$(DEPDIR)/libm_a-s_exp2l.Tpo -c -o libm/ld80/libm_a-s_exp2l.o `test -f 'libm/ld80/s_exp2l.c' || echo '$(srcdir)/'`libm/ld80/s_exp2l.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld80/$(DEPDIR)/libm_a-s_exp2l.Tpo libm/ld80/$(DEPDIR)/libm_a-s_exp2l.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld80/s_exp2l.c' object='libm/ld80/libm_a-s_exp2l.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld80/libm_a-s_exp2l.o `test -f 'libm/ld80/s_exp2l.c' || echo '$(srcdir)/'`libm/ld80/s_exp2l.c + +libm/ld80/libm_a-s_exp2l.obj: libm/ld80/s_exp2l.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld80/libm_a-s_exp2l.obj -MD -MP -MF libm/ld80/$(DEPDIR)/libm_a-s_exp2l.Tpo -c -o libm/ld80/libm_a-s_exp2l.obj `if test -f 'libm/ld80/s_exp2l.c'; then $(CYGPATH_W) 'libm/ld80/s_exp2l.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld80/s_exp2l.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld80/$(DEPDIR)/libm_a-s_exp2l.Tpo libm/ld80/$(DEPDIR)/libm_a-s_exp2l.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld80/s_exp2l.c' object='libm/ld80/libm_a-s_exp2l.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld80/libm_a-s_exp2l.obj `if test -f 'libm/ld80/s_exp2l.c'; then $(CYGPATH_W) 'libm/ld80/s_exp2l.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld80/s_exp2l.c'; fi` + +libm/ld80/libm_a-s_expl.o: libm/ld80/s_expl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld80/libm_a-s_expl.o -MD -MP -MF libm/ld80/$(DEPDIR)/libm_a-s_expl.Tpo -c -o libm/ld80/libm_a-s_expl.o `test -f 'libm/ld80/s_expl.c' || echo '$(srcdir)/'`libm/ld80/s_expl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld80/$(DEPDIR)/libm_a-s_expl.Tpo libm/ld80/$(DEPDIR)/libm_a-s_expl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld80/s_expl.c' object='libm/ld80/libm_a-s_expl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld80/libm_a-s_expl.o `test -f 'libm/ld80/s_expl.c' || echo '$(srcdir)/'`libm/ld80/s_expl.c + +libm/ld80/libm_a-s_expl.obj: libm/ld80/s_expl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld80/libm_a-s_expl.obj -MD -MP -MF libm/ld80/$(DEPDIR)/libm_a-s_expl.Tpo -c -o libm/ld80/libm_a-s_expl.obj `if test -f 'libm/ld80/s_expl.c'; then $(CYGPATH_W) 'libm/ld80/s_expl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld80/s_expl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld80/$(DEPDIR)/libm_a-s_expl.Tpo libm/ld80/$(DEPDIR)/libm_a-s_expl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld80/s_expl.c' object='libm/ld80/libm_a-s_expl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld80/libm_a-s_expl.obj `if test -f 'libm/ld80/s_expl.c'; then $(CYGPATH_W) 'libm/ld80/s_expl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld80/s_expl.c'; fi` + +libm/ld80/libm_a-s_logl.o: libm/ld80/s_logl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld80/libm_a-s_logl.o -MD -MP -MF libm/ld80/$(DEPDIR)/libm_a-s_logl.Tpo -c -o libm/ld80/libm_a-s_logl.o `test -f 'libm/ld80/s_logl.c' || echo '$(srcdir)/'`libm/ld80/s_logl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld80/$(DEPDIR)/libm_a-s_logl.Tpo libm/ld80/$(DEPDIR)/libm_a-s_logl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld80/s_logl.c' object='libm/ld80/libm_a-s_logl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld80/libm_a-s_logl.o `test -f 'libm/ld80/s_logl.c' || echo '$(srcdir)/'`libm/ld80/s_logl.c + +libm/ld80/libm_a-s_logl.obj: libm/ld80/s_logl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld80/libm_a-s_logl.obj -MD -MP -MF libm/ld80/$(DEPDIR)/libm_a-s_logl.Tpo -c -o libm/ld80/libm_a-s_logl.obj `if test -f 'libm/ld80/s_logl.c'; then $(CYGPATH_W) 'libm/ld80/s_logl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld80/s_logl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld80/$(DEPDIR)/libm_a-s_logl.Tpo libm/ld80/$(DEPDIR)/libm_a-s_logl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld80/s_logl.c' object='libm/ld80/libm_a-s_logl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld80/libm_a-s_logl.obj `if test -f 'libm/ld80/s_logl.c'; then $(CYGPATH_W) 'libm/ld80/s_logl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld80/s_logl.c'; fi` + +libm/ld80/libm_a-s_sinpil.o: libm/ld80/s_sinpil.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld80/libm_a-s_sinpil.o -MD -MP -MF libm/ld80/$(DEPDIR)/libm_a-s_sinpil.Tpo -c -o libm/ld80/libm_a-s_sinpil.o `test -f 'libm/ld80/s_sinpil.c' || echo '$(srcdir)/'`libm/ld80/s_sinpil.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld80/$(DEPDIR)/libm_a-s_sinpil.Tpo libm/ld80/$(DEPDIR)/libm_a-s_sinpil.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld80/s_sinpil.c' object='libm/ld80/libm_a-s_sinpil.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld80/libm_a-s_sinpil.o `test -f 'libm/ld80/s_sinpil.c' || echo '$(srcdir)/'`libm/ld80/s_sinpil.c + +libm/ld80/libm_a-s_sinpil.obj: libm/ld80/s_sinpil.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld80/libm_a-s_sinpil.obj -MD -MP -MF libm/ld80/$(DEPDIR)/libm_a-s_sinpil.Tpo -c -o libm/ld80/libm_a-s_sinpil.obj `if test -f 'libm/ld80/s_sinpil.c'; then $(CYGPATH_W) 'libm/ld80/s_sinpil.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld80/s_sinpil.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld80/$(DEPDIR)/libm_a-s_sinpil.Tpo libm/ld80/$(DEPDIR)/libm_a-s_sinpil.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld80/s_sinpil.c' object='libm/ld80/libm_a-s_sinpil.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld80/libm_a-s_sinpil.obj `if test -f 'libm/ld80/s_sinpil.c'; then $(CYGPATH_W) 'libm/ld80/s_sinpil.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld80/s_sinpil.c'; fi` + +libm/ld80/libm_a-s_cospil.o: libm/ld80/s_cospil.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld80/libm_a-s_cospil.o -MD -MP -MF libm/ld80/$(DEPDIR)/libm_a-s_cospil.Tpo -c -o libm/ld80/libm_a-s_cospil.o `test -f 'libm/ld80/s_cospil.c' || echo '$(srcdir)/'`libm/ld80/s_cospil.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld80/$(DEPDIR)/libm_a-s_cospil.Tpo libm/ld80/$(DEPDIR)/libm_a-s_cospil.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld80/s_cospil.c' object='libm/ld80/libm_a-s_cospil.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld80/libm_a-s_cospil.o `test -f 'libm/ld80/s_cospil.c' || echo '$(srcdir)/'`libm/ld80/s_cospil.c + +libm/ld80/libm_a-s_cospil.obj: libm/ld80/s_cospil.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld80/libm_a-s_cospil.obj -MD -MP -MF libm/ld80/$(DEPDIR)/libm_a-s_cospil.Tpo -c -o libm/ld80/libm_a-s_cospil.obj `if test -f 'libm/ld80/s_cospil.c'; then $(CYGPATH_W) 'libm/ld80/s_cospil.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld80/s_cospil.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld80/$(DEPDIR)/libm_a-s_cospil.Tpo libm/ld80/$(DEPDIR)/libm_a-s_cospil.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld80/s_cospil.c' object='libm/ld80/libm_a-s_cospil.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld80/libm_a-s_cospil.obj `if test -f 'libm/ld80/s_cospil.c'; then $(CYGPATH_W) 'libm/ld80/s_cospil.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld80/s_cospil.c'; fi` + +libm/ld80/libm_a-invtrig.o: libm/ld80/invtrig.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld80/libm_a-invtrig.o -MD -MP -MF libm/ld80/$(DEPDIR)/libm_a-invtrig.Tpo -c -o libm/ld80/libm_a-invtrig.o `test -f 'libm/ld80/invtrig.c' || echo '$(srcdir)/'`libm/ld80/invtrig.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld80/$(DEPDIR)/libm_a-invtrig.Tpo libm/ld80/$(DEPDIR)/libm_a-invtrig.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld80/invtrig.c' object='libm/ld80/libm_a-invtrig.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld80/libm_a-invtrig.o `test -f 'libm/ld80/invtrig.c' || echo '$(srcdir)/'`libm/ld80/invtrig.c + +libm/ld80/libm_a-invtrig.obj: libm/ld80/invtrig.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld80/libm_a-invtrig.obj -MD -MP -MF libm/ld80/$(DEPDIR)/libm_a-invtrig.Tpo -c -o libm/ld80/libm_a-invtrig.obj `if test -f 'libm/ld80/invtrig.c'; then $(CYGPATH_W) 'libm/ld80/invtrig.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld80/invtrig.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld80/$(DEPDIR)/libm_a-invtrig.Tpo libm/ld80/$(DEPDIR)/libm_a-invtrig.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld80/invtrig.c' object='libm/ld80/libm_a-invtrig.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld80/libm_a-invtrig.obj `if test -f 'libm/ld80/invtrig.c'; then $(CYGPATH_W) 'libm/ld80/invtrig.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld80/invtrig.c'; fi` + +libm/ld80/libm_a-e_lgammal_r.o: libm/ld80/e_lgammal_r.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld80/libm_a-e_lgammal_r.o -MD -MP -MF libm/ld80/$(DEPDIR)/libm_a-e_lgammal_r.Tpo -c -o libm/ld80/libm_a-e_lgammal_r.o `test -f 'libm/ld80/e_lgammal_r.c' || echo '$(srcdir)/'`libm/ld80/e_lgammal_r.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld80/$(DEPDIR)/libm_a-e_lgammal_r.Tpo libm/ld80/$(DEPDIR)/libm_a-e_lgammal_r.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld80/e_lgammal_r.c' object='libm/ld80/libm_a-e_lgammal_r.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld80/libm_a-e_lgammal_r.o `test -f 'libm/ld80/e_lgammal_r.c' || echo '$(srcdir)/'`libm/ld80/e_lgammal_r.c + +libm/ld80/libm_a-e_lgammal_r.obj: libm/ld80/e_lgammal_r.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld80/libm_a-e_lgammal_r.obj -MD -MP -MF libm/ld80/$(DEPDIR)/libm_a-e_lgammal_r.Tpo -c -o libm/ld80/libm_a-e_lgammal_r.obj `if test -f 'libm/ld80/e_lgammal_r.c'; then $(CYGPATH_W) 'libm/ld80/e_lgammal_r.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld80/e_lgammal_r.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld80/$(DEPDIR)/libm_a-e_lgammal_r.Tpo libm/ld80/$(DEPDIR)/libm_a-e_lgammal_r.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld80/e_lgammal_r.c' object='libm/ld80/libm_a-e_lgammal_r.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld80/libm_a-e_lgammal_r.obj `if test -f 'libm/ld80/e_lgammal_r.c'; then $(CYGPATH_W) 'libm/ld80/e_lgammal_r.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld80/e_lgammal_r.c'; fi` + +libm/ld80/libm_a-k_cosl.o: libm/ld80/k_cosl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld80/libm_a-k_cosl.o -MD -MP -MF libm/ld80/$(DEPDIR)/libm_a-k_cosl.Tpo -c -o libm/ld80/libm_a-k_cosl.o `test -f 'libm/ld80/k_cosl.c' || echo '$(srcdir)/'`libm/ld80/k_cosl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld80/$(DEPDIR)/libm_a-k_cosl.Tpo libm/ld80/$(DEPDIR)/libm_a-k_cosl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld80/k_cosl.c' object='libm/ld80/libm_a-k_cosl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld80/libm_a-k_cosl.o `test -f 'libm/ld80/k_cosl.c' || echo '$(srcdir)/'`libm/ld80/k_cosl.c + +libm/ld80/libm_a-k_cosl.obj: libm/ld80/k_cosl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld80/libm_a-k_cosl.obj -MD -MP -MF libm/ld80/$(DEPDIR)/libm_a-k_cosl.Tpo -c -o libm/ld80/libm_a-k_cosl.obj `if test -f 'libm/ld80/k_cosl.c'; then $(CYGPATH_W) 'libm/ld80/k_cosl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld80/k_cosl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld80/$(DEPDIR)/libm_a-k_cosl.Tpo libm/ld80/$(DEPDIR)/libm_a-k_cosl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld80/k_cosl.c' object='libm/ld80/libm_a-k_cosl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld80/libm_a-k_cosl.obj `if test -f 'libm/ld80/k_cosl.c'; then $(CYGPATH_W) 'libm/ld80/k_cosl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld80/k_cosl.c'; fi` + +libm/ld80/libm_a-k_sinl.o: libm/ld80/k_sinl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld80/libm_a-k_sinl.o -MD -MP -MF libm/ld80/$(DEPDIR)/libm_a-k_sinl.Tpo -c -o libm/ld80/libm_a-k_sinl.o `test -f 'libm/ld80/k_sinl.c' || echo '$(srcdir)/'`libm/ld80/k_sinl.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld80/$(DEPDIR)/libm_a-k_sinl.Tpo libm/ld80/$(DEPDIR)/libm_a-k_sinl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld80/k_sinl.c' object='libm/ld80/libm_a-k_sinl.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld80/libm_a-k_sinl.o `test -f 'libm/ld80/k_sinl.c' || echo '$(srcdir)/'`libm/ld80/k_sinl.c + +libm/ld80/libm_a-k_sinl.obj: libm/ld80/k_sinl.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/ld80/libm_a-k_sinl.obj -MD -MP -MF libm/ld80/$(DEPDIR)/libm_a-k_sinl.Tpo -c -o libm/ld80/libm_a-k_sinl.obj `if test -f 'libm/ld80/k_sinl.c'; then $(CYGPATH_W) 'libm/ld80/k_sinl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld80/k_sinl.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/ld80/$(DEPDIR)/libm_a-k_sinl.Tpo libm/ld80/$(DEPDIR)/libm_a-k_sinl.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/ld80/k_sinl.c' object='libm/ld80/libm_a-k_sinl.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/ld80/libm_a-k_sinl.obj `if test -f 'libm/ld80/k_sinl.c'; then $(CYGPATH_W) 'libm/ld80/k_sinl.c'; else $(CYGPATH_W) '$(srcdir)/libm/ld80/k_sinl.c'; fi` + libm/machine/mips/libm_a-feclearexcept.o: libm/machine/mips/feclearexcept.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/mips/libm_a-feclearexcept.o -MD -MP -MF libm/machine/mips/$(DEPDIR)/libm_a-feclearexcept.Tpo -c -o libm/machine/mips/libm_a-feclearexcept.o `test -f 'libm/machine/mips/feclearexcept.c' || echo '$(srcdir)/'`libm/machine/mips/feclearexcept.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/mips/$(DEPDIR)/libm_a-feclearexcept.Tpo libm/machine/mips/$(DEPDIR)/libm_a-feclearexcept.Po @@ -45968,6 +49615,146 @@ libm/machine/x86_64/libm_a-feupdateenv.obj: libm/machine/x86_64/feupdateenv.c @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/x86_64/libm_a-feupdateenv.obj `if test -f 'libm/machine/x86_64/feupdateenv.c'; then $(CYGPATH_W) 'libm/machine/x86_64/feupdateenv.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/x86_64/feupdateenv.c'; fi` +libm/machine/xtensa/libm_a-feclearexcept.o: libm/machine/xtensa/feclearexcept.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/xtensa/libm_a-feclearexcept.o -MD -MP -MF libm/machine/xtensa/$(DEPDIR)/libm_a-feclearexcept.Tpo -c -o libm/machine/xtensa/libm_a-feclearexcept.o `test -f 'libm/machine/xtensa/feclearexcept.c' || echo '$(srcdir)/'`libm/machine/xtensa/feclearexcept.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/xtensa/$(DEPDIR)/libm_a-feclearexcept.Tpo libm/machine/xtensa/$(DEPDIR)/libm_a-feclearexcept.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/xtensa/feclearexcept.c' object='libm/machine/xtensa/libm_a-feclearexcept.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/xtensa/libm_a-feclearexcept.o `test -f 'libm/machine/xtensa/feclearexcept.c' || echo '$(srcdir)/'`libm/machine/xtensa/feclearexcept.c + +libm/machine/xtensa/libm_a-feclearexcept.obj: libm/machine/xtensa/feclearexcept.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/xtensa/libm_a-feclearexcept.obj -MD -MP -MF libm/machine/xtensa/$(DEPDIR)/libm_a-feclearexcept.Tpo -c -o libm/machine/xtensa/libm_a-feclearexcept.obj `if test -f 'libm/machine/xtensa/feclearexcept.c'; then $(CYGPATH_W) 'libm/machine/xtensa/feclearexcept.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/xtensa/feclearexcept.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/xtensa/$(DEPDIR)/libm_a-feclearexcept.Tpo libm/machine/xtensa/$(DEPDIR)/libm_a-feclearexcept.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/xtensa/feclearexcept.c' object='libm/machine/xtensa/libm_a-feclearexcept.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/xtensa/libm_a-feclearexcept.obj `if test -f 'libm/machine/xtensa/feclearexcept.c'; then $(CYGPATH_W) 'libm/machine/xtensa/feclearexcept.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/xtensa/feclearexcept.c'; fi` + +libm/machine/xtensa/libm_a-fegetenv.o: libm/machine/xtensa/fegetenv.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/xtensa/libm_a-fegetenv.o -MD -MP -MF libm/machine/xtensa/$(DEPDIR)/libm_a-fegetenv.Tpo -c -o libm/machine/xtensa/libm_a-fegetenv.o `test -f 'libm/machine/xtensa/fegetenv.c' || echo '$(srcdir)/'`libm/machine/xtensa/fegetenv.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/xtensa/$(DEPDIR)/libm_a-fegetenv.Tpo libm/machine/xtensa/$(DEPDIR)/libm_a-fegetenv.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/xtensa/fegetenv.c' object='libm/machine/xtensa/libm_a-fegetenv.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/xtensa/libm_a-fegetenv.o `test -f 'libm/machine/xtensa/fegetenv.c' || echo '$(srcdir)/'`libm/machine/xtensa/fegetenv.c + +libm/machine/xtensa/libm_a-fegetenv.obj: libm/machine/xtensa/fegetenv.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/xtensa/libm_a-fegetenv.obj -MD -MP -MF libm/machine/xtensa/$(DEPDIR)/libm_a-fegetenv.Tpo -c -o libm/machine/xtensa/libm_a-fegetenv.obj `if test -f 'libm/machine/xtensa/fegetenv.c'; then $(CYGPATH_W) 'libm/machine/xtensa/fegetenv.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/xtensa/fegetenv.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/xtensa/$(DEPDIR)/libm_a-fegetenv.Tpo libm/machine/xtensa/$(DEPDIR)/libm_a-fegetenv.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/xtensa/fegetenv.c' object='libm/machine/xtensa/libm_a-fegetenv.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/xtensa/libm_a-fegetenv.obj `if test -f 'libm/machine/xtensa/fegetenv.c'; then $(CYGPATH_W) 'libm/machine/xtensa/fegetenv.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/xtensa/fegetenv.c'; fi` + +libm/machine/xtensa/libm_a-fegetexcept.o: libm/machine/xtensa/fegetexcept.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/xtensa/libm_a-fegetexcept.o -MD -MP -MF libm/machine/xtensa/$(DEPDIR)/libm_a-fegetexcept.Tpo -c -o libm/machine/xtensa/libm_a-fegetexcept.o `test -f 'libm/machine/xtensa/fegetexcept.c' || echo '$(srcdir)/'`libm/machine/xtensa/fegetexcept.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/xtensa/$(DEPDIR)/libm_a-fegetexcept.Tpo libm/machine/xtensa/$(DEPDIR)/libm_a-fegetexcept.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/xtensa/fegetexcept.c' object='libm/machine/xtensa/libm_a-fegetexcept.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/xtensa/libm_a-fegetexcept.o `test -f 'libm/machine/xtensa/fegetexcept.c' || echo '$(srcdir)/'`libm/machine/xtensa/fegetexcept.c + +libm/machine/xtensa/libm_a-fegetexcept.obj: libm/machine/xtensa/fegetexcept.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/xtensa/libm_a-fegetexcept.obj -MD -MP -MF libm/machine/xtensa/$(DEPDIR)/libm_a-fegetexcept.Tpo -c -o libm/machine/xtensa/libm_a-fegetexcept.obj `if test -f 'libm/machine/xtensa/fegetexcept.c'; then $(CYGPATH_W) 'libm/machine/xtensa/fegetexcept.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/xtensa/fegetexcept.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/xtensa/$(DEPDIR)/libm_a-fegetexcept.Tpo libm/machine/xtensa/$(DEPDIR)/libm_a-fegetexcept.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/xtensa/fegetexcept.c' object='libm/machine/xtensa/libm_a-fegetexcept.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/xtensa/libm_a-fegetexcept.obj `if test -f 'libm/machine/xtensa/fegetexcept.c'; then $(CYGPATH_W) 'libm/machine/xtensa/fegetexcept.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/xtensa/fegetexcept.c'; fi` + +libm/machine/xtensa/libm_a-fegetexceptflag.o: libm/machine/xtensa/fegetexceptflag.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/xtensa/libm_a-fegetexceptflag.o -MD -MP -MF libm/machine/xtensa/$(DEPDIR)/libm_a-fegetexceptflag.Tpo -c -o libm/machine/xtensa/libm_a-fegetexceptflag.o `test -f 'libm/machine/xtensa/fegetexceptflag.c' || echo '$(srcdir)/'`libm/machine/xtensa/fegetexceptflag.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/xtensa/$(DEPDIR)/libm_a-fegetexceptflag.Tpo libm/machine/xtensa/$(DEPDIR)/libm_a-fegetexceptflag.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/xtensa/fegetexceptflag.c' object='libm/machine/xtensa/libm_a-fegetexceptflag.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/xtensa/libm_a-fegetexceptflag.o `test -f 'libm/machine/xtensa/fegetexceptflag.c' || echo '$(srcdir)/'`libm/machine/xtensa/fegetexceptflag.c + +libm/machine/xtensa/libm_a-fegetexceptflag.obj: libm/machine/xtensa/fegetexceptflag.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/xtensa/libm_a-fegetexceptflag.obj -MD -MP -MF libm/machine/xtensa/$(DEPDIR)/libm_a-fegetexceptflag.Tpo -c -o libm/machine/xtensa/libm_a-fegetexceptflag.obj `if test -f 'libm/machine/xtensa/fegetexceptflag.c'; then $(CYGPATH_W) 'libm/machine/xtensa/fegetexceptflag.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/xtensa/fegetexceptflag.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/xtensa/$(DEPDIR)/libm_a-fegetexceptflag.Tpo libm/machine/xtensa/$(DEPDIR)/libm_a-fegetexceptflag.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/xtensa/fegetexceptflag.c' object='libm/machine/xtensa/libm_a-fegetexceptflag.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/xtensa/libm_a-fegetexceptflag.obj `if test -f 'libm/machine/xtensa/fegetexceptflag.c'; then $(CYGPATH_W) 'libm/machine/xtensa/fegetexceptflag.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/xtensa/fegetexceptflag.c'; fi` + +libm/machine/xtensa/libm_a-fegetround.o: libm/machine/xtensa/fegetround.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/xtensa/libm_a-fegetround.o -MD -MP -MF libm/machine/xtensa/$(DEPDIR)/libm_a-fegetround.Tpo -c -o libm/machine/xtensa/libm_a-fegetround.o `test -f 'libm/machine/xtensa/fegetround.c' || echo '$(srcdir)/'`libm/machine/xtensa/fegetround.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/xtensa/$(DEPDIR)/libm_a-fegetround.Tpo libm/machine/xtensa/$(DEPDIR)/libm_a-fegetround.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/xtensa/fegetround.c' object='libm/machine/xtensa/libm_a-fegetround.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/xtensa/libm_a-fegetround.o `test -f 'libm/machine/xtensa/fegetround.c' || echo '$(srcdir)/'`libm/machine/xtensa/fegetround.c + +libm/machine/xtensa/libm_a-fegetround.obj: libm/machine/xtensa/fegetround.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/xtensa/libm_a-fegetround.obj -MD -MP -MF libm/machine/xtensa/$(DEPDIR)/libm_a-fegetround.Tpo -c -o libm/machine/xtensa/libm_a-fegetround.obj `if test -f 'libm/machine/xtensa/fegetround.c'; then $(CYGPATH_W) 'libm/machine/xtensa/fegetround.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/xtensa/fegetround.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/xtensa/$(DEPDIR)/libm_a-fegetround.Tpo libm/machine/xtensa/$(DEPDIR)/libm_a-fegetround.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/xtensa/fegetround.c' object='libm/machine/xtensa/libm_a-fegetround.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/xtensa/libm_a-fegetround.obj `if test -f 'libm/machine/xtensa/fegetround.c'; then $(CYGPATH_W) 'libm/machine/xtensa/fegetround.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/xtensa/fegetround.c'; fi` + +libm/machine/xtensa/libm_a-feholdexcept.o: libm/machine/xtensa/feholdexcept.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/xtensa/libm_a-feholdexcept.o -MD -MP -MF libm/machine/xtensa/$(DEPDIR)/libm_a-feholdexcept.Tpo -c -o libm/machine/xtensa/libm_a-feholdexcept.o `test -f 'libm/machine/xtensa/feholdexcept.c' || echo '$(srcdir)/'`libm/machine/xtensa/feholdexcept.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/xtensa/$(DEPDIR)/libm_a-feholdexcept.Tpo libm/machine/xtensa/$(DEPDIR)/libm_a-feholdexcept.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/xtensa/feholdexcept.c' object='libm/machine/xtensa/libm_a-feholdexcept.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/xtensa/libm_a-feholdexcept.o `test -f 'libm/machine/xtensa/feholdexcept.c' || echo '$(srcdir)/'`libm/machine/xtensa/feholdexcept.c + +libm/machine/xtensa/libm_a-feholdexcept.obj: libm/machine/xtensa/feholdexcept.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/xtensa/libm_a-feholdexcept.obj -MD -MP -MF libm/machine/xtensa/$(DEPDIR)/libm_a-feholdexcept.Tpo -c -o libm/machine/xtensa/libm_a-feholdexcept.obj `if test -f 'libm/machine/xtensa/feholdexcept.c'; then $(CYGPATH_W) 'libm/machine/xtensa/feholdexcept.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/xtensa/feholdexcept.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/xtensa/$(DEPDIR)/libm_a-feholdexcept.Tpo libm/machine/xtensa/$(DEPDIR)/libm_a-feholdexcept.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/xtensa/feholdexcept.c' object='libm/machine/xtensa/libm_a-feholdexcept.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/xtensa/libm_a-feholdexcept.obj `if test -f 'libm/machine/xtensa/feholdexcept.c'; then $(CYGPATH_W) 'libm/machine/xtensa/feholdexcept.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/xtensa/feholdexcept.c'; fi` + +libm/machine/xtensa/libm_a-feraiseexcept.o: libm/machine/xtensa/feraiseexcept.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/xtensa/libm_a-feraiseexcept.o -MD -MP -MF libm/machine/xtensa/$(DEPDIR)/libm_a-feraiseexcept.Tpo -c -o libm/machine/xtensa/libm_a-feraiseexcept.o `test -f 'libm/machine/xtensa/feraiseexcept.c' || echo '$(srcdir)/'`libm/machine/xtensa/feraiseexcept.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/xtensa/$(DEPDIR)/libm_a-feraiseexcept.Tpo libm/machine/xtensa/$(DEPDIR)/libm_a-feraiseexcept.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/xtensa/feraiseexcept.c' object='libm/machine/xtensa/libm_a-feraiseexcept.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/xtensa/libm_a-feraiseexcept.o `test -f 'libm/machine/xtensa/feraiseexcept.c' || echo '$(srcdir)/'`libm/machine/xtensa/feraiseexcept.c + +libm/machine/xtensa/libm_a-feraiseexcept.obj: libm/machine/xtensa/feraiseexcept.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/xtensa/libm_a-feraiseexcept.obj -MD -MP -MF libm/machine/xtensa/$(DEPDIR)/libm_a-feraiseexcept.Tpo -c -o libm/machine/xtensa/libm_a-feraiseexcept.obj `if test -f 'libm/machine/xtensa/feraiseexcept.c'; then $(CYGPATH_W) 'libm/machine/xtensa/feraiseexcept.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/xtensa/feraiseexcept.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/xtensa/$(DEPDIR)/libm_a-feraiseexcept.Tpo libm/machine/xtensa/$(DEPDIR)/libm_a-feraiseexcept.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/xtensa/feraiseexcept.c' object='libm/machine/xtensa/libm_a-feraiseexcept.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/xtensa/libm_a-feraiseexcept.obj `if test -f 'libm/machine/xtensa/feraiseexcept.c'; then $(CYGPATH_W) 'libm/machine/xtensa/feraiseexcept.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/xtensa/feraiseexcept.c'; fi` + +libm/machine/xtensa/libm_a-fetestexcept.o: libm/machine/xtensa/fetestexcept.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/xtensa/libm_a-fetestexcept.o -MD -MP -MF libm/machine/xtensa/$(DEPDIR)/libm_a-fetestexcept.Tpo -c -o libm/machine/xtensa/libm_a-fetestexcept.o `test -f 'libm/machine/xtensa/fetestexcept.c' || echo '$(srcdir)/'`libm/machine/xtensa/fetestexcept.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/xtensa/$(DEPDIR)/libm_a-fetestexcept.Tpo libm/machine/xtensa/$(DEPDIR)/libm_a-fetestexcept.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/xtensa/fetestexcept.c' object='libm/machine/xtensa/libm_a-fetestexcept.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/xtensa/libm_a-fetestexcept.o `test -f 'libm/machine/xtensa/fetestexcept.c' || echo '$(srcdir)/'`libm/machine/xtensa/fetestexcept.c + +libm/machine/xtensa/libm_a-fetestexcept.obj: libm/machine/xtensa/fetestexcept.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/xtensa/libm_a-fetestexcept.obj -MD -MP -MF libm/machine/xtensa/$(DEPDIR)/libm_a-fetestexcept.Tpo -c -o libm/machine/xtensa/libm_a-fetestexcept.obj `if test -f 'libm/machine/xtensa/fetestexcept.c'; then $(CYGPATH_W) 'libm/machine/xtensa/fetestexcept.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/xtensa/fetestexcept.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/xtensa/$(DEPDIR)/libm_a-fetestexcept.Tpo libm/machine/xtensa/$(DEPDIR)/libm_a-fetestexcept.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/xtensa/fetestexcept.c' object='libm/machine/xtensa/libm_a-fetestexcept.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/xtensa/libm_a-fetestexcept.obj `if test -f 'libm/machine/xtensa/fetestexcept.c'; then $(CYGPATH_W) 'libm/machine/xtensa/fetestexcept.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/xtensa/fetestexcept.c'; fi` + +libm/machine/xtensa/libm_a-feupdateenv.o: libm/machine/xtensa/feupdateenv.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/xtensa/libm_a-feupdateenv.o -MD -MP -MF libm/machine/xtensa/$(DEPDIR)/libm_a-feupdateenv.Tpo -c -o libm/machine/xtensa/libm_a-feupdateenv.o `test -f 'libm/machine/xtensa/feupdateenv.c' || echo '$(srcdir)/'`libm/machine/xtensa/feupdateenv.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/xtensa/$(DEPDIR)/libm_a-feupdateenv.Tpo libm/machine/xtensa/$(DEPDIR)/libm_a-feupdateenv.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/xtensa/feupdateenv.c' object='libm/machine/xtensa/libm_a-feupdateenv.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/xtensa/libm_a-feupdateenv.o `test -f 'libm/machine/xtensa/feupdateenv.c' || echo '$(srcdir)/'`libm/machine/xtensa/feupdateenv.c + +libm/machine/xtensa/libm_a-feupdateenv.obj: libm/machine/xtensa/feupdateenv.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/xtensa/libm_a-feupdateenv.obj -MD -MP -MF libm/machine/xtensa/$(DEPDIR)/libm_a-feupdateenv.Tpo -c -o libm/machine/xtensa/libm_a-feupdateenv.obj `if test -f 'libm/machine/xtensa/feupdateenv.c'; then $(CYGPATH_W) 'libm/machine/xtensa/feupdateenv.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/xtensa/feupdateenv.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/xtensa/$(DEPDIR)/libm_a-feupdateenv.Tpo libm/machine/xtensa/$(DEPDIR)/libm_a-feupdateenv.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/xtensa/feupdateenv.c' object='libm/machine/xtensa/libm_a-feupdateenv.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/xtensa/libm_a-feupdateenv.obj `if test -f 'libm/machine/xtensa/feupdateenv.c'; then $(CYGPATH_W) 'libm/machine/xtensa/feupdateenv.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/xtensa/feupdateenv.c'; fi` + +libm/machine/xtensa/libm_a-ef_sqrt.o: libm/machine/xtensa/ef_sqrt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/xtensa/libm_a-ef_sqrt.o -MD -MP -MF libm/machine/xtensa/$(DEPDIR)/libm_a-ef_sqrt.Tpo -c -o libm/machine/xtensa/libm_a-ef_sqrt.o `test -f 'libm/machine/xtensa/ef_sqrt.c' || echo '$(srcdir)/'`libm/machine/xtensa/ef_sqrt.c +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/xtensa/$(DEPDIR)/libm_a-ef_sqrt.Tpo libm/machine/xtensa/$(DEPDIR)/libm_a-ef_sqrt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/xtensa/ef_sqrt.c' object='libm/machine/xtensa/libm_a-ef_sqrt.o' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/xtensa/libm_a-ef_sqrt.o `test -f 'libm/machine/xtensa/ef_sqrt.c' || echo '$(srcdir)/'`libm/machine/xtensa/ef_sqrt.c + +libm/machine/xtensa/libm_a-ef_sqrt.obj: libm/machine/xtensa/ef_sqrt.c +@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -MT libm/machine/xtensa/libm_a-ef_sqrt.obj -MD -MP -MF libm/machine/xtensa/$(DEPDIR)/libm_a-ef_sqrt.Tpo -c -o libm/machine/xtensa/libm_a-ef_sqrt.obj `if test -f 'libm/machine/xtensa/ef_sqrt.c'; then $(CYGPATH_W) 'libm/machine/xtensa/ef_sqrt.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/xtensa/ef_sqrt.c'; fi` +@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) libm/machine/xtensa/$(DEPDIR)/libm_a-ef_sqrt.Tpo libm/machine/xtensa/$(DEPDIR)/libm_a-ef_sqrt.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='libm/machine/xtensa/ef_sqrt.c' object='libm/machine/xtensa/libm_a-ef_sqrt.obj' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libm_a_CPPFLAGS) $(CPPFLAGS) $(libm_a_CFLAGS) $(CFLAGS) -c -o libm/machine/xtensa/libm_a-ef_sqrt.obj `if test -f 'libm/machine/xtensa/ef_sqrt.c'; then $(CYGPATH_W) 'libm/machine/xtensa/ef_sqrt.c'; else $(CYGPATH_W) '$(srcdir)/libm/machine/xtensa/ef_sqrt.c'; fi` + .s.o: $(AM_V_CCAS)$(CCASCOMPILE) -c -o $@ $< @@ -46435,6 +50222,8 @@ distclean-generic: -rm -f libc/machine/xc16x/$(am__dirstamp) -rm -f libc/machine/xstormy16/$(DEPDIR)/$(am__dirstamp) -rm -f libc/machine/xstormy16/$(am__dirstamp) + -rm -f libc/machine/xtensa/$(DEPDIR)/$(am__dirstamp) + -rm -f libc/machine/xtensa/$(am__dirstamp) -rm -f libc/machine/z8k/$(DEPDIR)/$(am__dirstamp) -rm -f libc/machine/z8k/$(am__dirstamp) -rm -f libc/misc/$(DEPDIR)/$(am__dirstamp) @@ -46499,6 +50288,8 @@ distclean-generic: -rm -f libc/sys/tirtos/$(am__dirstamp) -rm -f libc/sys/w65/$(DEPDIR)/$(am__dirstamp) -rm -f libc/sys/w65/$(am__dirstamp) + -rm -f libc/sys/xtensa/$(DEPDIR)/$(am__dirstamp) + -rm -f libc/sys/xtensa/$(am__dirstamp) -rm -f libc/sys/z8ksim/$(DEPDIR)/$(am__dirstamp) -rm -f libc/sys/z8ksim/$(am__dirstamp) -rm -f libc/syscalls/$(DEPDIR)/$(am__dirstamp) @@ -46516,8 +50307,16 @@ distclean-generic: -rm -f libm/complex/$(am__dirstamp) -rm -f libm/fenv/$(DEPDIR)/$(am__dirstamp) -rm -f libm/fenv/$(am__dirstamp) + -rm -f libm/ld/$(DEPDIR)/$(am__dirstamp) + -rm -f libm/ld/$(am__dirstamp) + -rm -f libm/ld128/$(DEPDIR)/$(am__dirstamp) + -rm -f libm/ld128/$(am__dirstamp) + -rm -f libm/ld80/$(DEPDIR)/$(am__dirstamp) + -rm -f libm/ld80/$(am__dirstamp) -rm -f libm/machine/aarch64/$(DEPDIR)/$(am__dirstamp) -rm -f libm/machine/aarch64/$(am__dirstamp) + -rm -f libm/machine/amdgcn/$(DEPDIR)/$(am__dirstamp) + -rm -f libm/machine/amdgcn/$(am__dirstamp) -rm -f libm/machine/arm/$(DEPDIR)/$(am__dirstamp) -rm -f libm/machine/arm/$(am__dirstamp) -rm -f libm/machine/i386/$(DEPDIR)/$(am__dirstamp) @@ -46538,6 +50337,8 @@ distclean-generic: -rm -f libm/machine/spu/$(am__dirstamp) -rm -f libm/machine/x86_64/$(DEPDIR)/$(am__dirstamp) -rm -f libm/machine/x86_64/$(am__dirstamp) + -rm -f libm/machine/xtensa/$(DEPDIR)/$(am__dirstamp) + -rm -f libm/machine/xtensa/$(am__dirstamp) -rm -f libm/math/$(DEPDIR)/$(am__dirstamp) -rm -f libm/math/$(am__dirstamp) -rm -f libm/mathfp/$(DEPDIR)/$(am__dirstamp) @@ -46555,7 +50356,7 @@ clean-am: clean-aminfo clean-checkPROGRAMS clean-generic clean-local \ distclean: distclean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) - -rm -rf libc/argz/$(DEPDIR) libc/ctype/$(DEPDIR) libc/errno/$(DEPDIR) libc/iconv/ccs/$(DEPDIR) libc/iconv/ces/$(DEPDIR) libc/iconv/lib/$(DEPDIR) libc/locale/$(DEPDIR) libc/machine/aarch64/$(DEPDIR) libc/machine/amdgcn/$(DEPDIR) libc/machine/arc/$(DEPDIR) libc/machine/arm/$(DEPDIR) libc/machine/bfin/$(DEPDIR) libc/machine/cr16/$(DEPDIR) libc/machine/cris/$(DEPDIR) libc/machine/crx/$(DEPDIR) libc/machine/csky/$(DEPDIR) libc/machine/d10v/$(DEPDIR) libc/machine/d30v/$(DEPDIR) libc/machine/epiphany/$(DEPDIR) libc/machine/fr30/$(DEPDIR) libc/machine/frv/$(DEPDIR) libc/machine/ft32/$(DEPDIR) libc/machine/h8300/$(DEPDIR) libc/machine/h8500/$(DEPDIR) libc/machine/hppa/$(DEPDIR) libc/machine/i386/$(DEPDIR) libc/machine/i960/$(DEPDIR) libc/machine/iq2000/$(DEPDIR) libc/machine/lm32/$(DEPDIR) libc/machine/m32c/$(DEPDIR) libc/machine/m32r/$(DEPDIR) libc/machine/m68hc11/$(DEPDIR) libc/machine/m68k/$(DEPDIR) libc/machine/m88k/$(DEPDIR) libc/machine/mep/$(DEPDIR) libc/machine/microblaze/$(DEPDIR) libc/machine/mips/$(DEPDIR) libc/machine/mn10200/$(DEPDIR) libc/machine/mn10300/$(DEPDIR) libc/machine/moxie/$(DEPDIR) libc/machine/msp430/$(DEPDIR) libc/machine/mt/$(DEPDIR) libc/machine/nds32/$(DEPDIR) libc/machine/necv70/$(DEPDIR) libc/machine/nvptx/$(DEPDIR) libc/machine/or1k/$(DEPDIR) libc/machine/powerpc/$(DEPDIR) libc/machine/riscv/$(DEPDIR) libc/machine/rl78/$(DEPDIR) libc/machine/rx/$(DEPDIR) libc/machine/sh/$(DEPDIR) libc/machine/sparc/$(DEPDIR) libc/machine/spu/$(DEPDIR) libc/machine/tic4x/$(DEPDIR) libc/machine/tic6x/$(DEPDIR) libc/machine/tic80/$(DEPDIR) libc/machine/v850/$(DEPDIR) libc/machine/visium/$(DEPDIR) libc/machine/w65/$(DEPDIR) libc/machine/x86_64/$(DEPDIR) libc/machine/xc16x/$(DEPDIR) libc/machine/xstormy16/$(DEPDIR) libc/machine/z8k/$(DEPDIR) libc/misc/$(DEPDIR) libc/posix/$(DEPDIR) libc/reent/$(DEPDIR) libc/search/$(DEPDIR) libc/signal/$(DEPDIR) libc/ssp/$(DEPDIR) libc/stdio/$(DEPDIR) libc/stdio64/$(DEPDIR) libc/stdlib/$(DEPDIR) libc/string/$(DEPDIR) libc/sys/a29khif/$(DEPDIR) libc/sys/amdgcn/$(DEPDIR) libc/sys/arm/$(DEPDIR) libc/sys/d10v/$(DEPDIR) libc/sys/epiphany/$(DEPDIR) libc/sys/h8300hms/$(DEPDIR) libc/sys/h8500hms/$(DEPDIR) libc/sys/m88kbug/$(DEPDIR) libc/sys/mmixware/$(DEPDIR) libc/sys/netware/$(DEPDIR) libc/sys/or1k/$(DEPDIR) libc/sys/rdos/$(DEPDIR) libc/sys/rtems/$(DEPDIR) libc/sys/sh/$(DEPDIR) libc/sys/sysmec/$(DEPDIR) libc/sys/sysnec810/$(DEPDIR) libc/sys/sysnecv850/$(DEPDIR) libc/sys/sysvi386/$(DEPDIR) libc/sys/sysvnecv70/$(DEPDIR) libc/sys/tirtos/$(DEPDIR) libc/sys/w65/$(DEPDIR) libc/sys/z8ksim/$(DEPDIR) libc/syscalls/$(DEPDIR) libc/time/$(DEPDIR) libc/unix/$(DEPDIR) libc/xdr/$(DEPDIR) libm/common/$(DEPDIR) libm/complex/$(DEPDIR) libm/fenv/$(DEPDIR) libm/machine/aarch64/$(DEPDIR) libm/machine/arm/$(DEPDIR) libm/machine/i386/$(DEPDIR) libm/machine/mips/$(DEPDIR) libm/machine/nds32/$(DEPDIR) libm/machine/powerpc/$(DEPDIR) libm/machine/pru/$(DEPDIR) libm/machine/riscv/$(DEPDIR) libm/machine/sparc/$(DEPDIR) libm/machine/spu/$(DEPDIR) libm/machine/x86_64/$(DEPDIR) libm/math/$(DEPDIR) libm/mathfp/$(DEPDIR) libm/test/$(DEPDIR) + -rm -rf libc/argz/$(DEPDIR) libc/ctype/$(DEPDIR) libc/errno/$(DEPDIR) libc/iconv/ccs/$(DEPDIR) libc/iconv/ces/$(DEPDIR) libc/iconv/lib/$(DEPDIR) libc/locale/$(DEPDIR) libc/machine/aarch64/$(DEPDIR) libc/machine/amdgcn/$(DEPDIR) libc/machine/arc/$(DEPDIR) libc/machine/arm/$(DEPDIR) libc/machine/bfin/$(DEPDIR) libc/machine/cr16/$(DEPDIR) libc/machine/cris/$(DEPDIR) libc/machine/crx/$(DEPDIR) libc/machine/csky/$(DEPDIR) libc/machine/d10v/$(DEPDIR) libc/machine/d30v/$(DEPDIR) libc/machine/epiphany/$(DEPDIR) libc/machine/fr30/$(DEPDIR) libc/machine/frv/$(DEPDIR) libc/machine/ft32/$(DEPDIR) libc/machine/h8300/$(DEPDIR) libc/machine/h8500/$(DEPDIR) libc/machine/hppa/$(DEPDIR) libc/machine/i386/$(DEPDIR) libc/machine/i960/$(DEPDIR) libc/machine/iq2000/$(DEPDIR) libc/machine/lm32/$(DEPDIR) libc/machine/m32c/$(DEPDIR) libc/machine/m32r/$(DEPDIR) libc/machine/m68hc11/$(DEPDIR) libc/machine/m68k/$(DEPDIR) libc/machine/m88k/$(DEPDIR) libc/machine/mep/$(DEPDIR) libc/machine/microblaze/$(DEPDIR) libc/machine/mips/$(DEPDIR) libc/machine/mn10200/$(DEPDIR) libc/machine/mn10300/$(DEPDIR) libc/machine/moxie/$(DEPDIR) libc/machine/msp430/$(DEPDIR) libc/machine/mt/$(DEPDIR) libc/machine/nds32/$(DEPDIR) libc/machine/necv70/$(DEPDIR) libc/machine/nvptx/$(DEPDIR) libc/machine/or1k/$(DEPDIR) libc/machine/powerpc/$(DEPDIR) libc/machine/riscv/$(DEPDIR) libc/machine/rl78/$(DEPDIR) libc/machine/rx/$(DEPDIR) libc/machine/sh/$(DEPDIR) libc/machine/sparc/$(DEPDIR) libc/machine/spu/$(DEPDIR) libc/machine/tic4x/$(DEPDIR) libc/machine/tic6x/$(DEPDIR) libc/machine/tic80/$(DEPDIR) libc/machine/v850/$(DEPDIR) libc/machine/visium/$(DEPDIR) libc/machine/w65/$(DEPDIR) libc/machine/x86_64/$(DEPDIR) libc/machine/xc16x/$(DEPDIR) libc/machine/xstormy16/$(DEPDIR) libc/machine/xtensa/$(DEPDIR) libc/machine/z8k/$(DEPDIR) libc/misc/$(DEPDIR) libc/posix/$(DEPDIR) libc/reent/$(DEPDIR) libc/search/$(DEPDIR) libc/signal/$(DEPDIR) libc/ssp/$(DEPDIR) libc/stdio/$(DEPDIR) libc/stdio64/$(DEPDIR) libc/stdlib/$(DEPDIR) libc/string/$(DEPDIR) libc/sys/a29khif/$(DEPDIR) libc/sys/amdgcn/$(DEPDIR) libc/sys/arm/$(DEPDIR) libc/sys/d10v/$(DEPDIR) libc/sys/epiphany/$(DEPDIR) libc/sys/h8300hms/$(DEPDIR) libc/sys/h8500hms/$(DEPDIR) libc/sys/m88kbug/$(DEPDIR) libc/sys/mmixware/$(DEPDIR) libc/sys/netware/$(DEPDIR) libc/sys/or1k/$(DEPDIR) libc/sys/rdos/$(DEPDIR) libc/sys/rtems/$(DEPDIR) libc/sys/sh/$(DEPDIR) libc/sys/sysmec/$(DEPDIR) libc/sys/sysnec810/$(DEPDIR) libc/sys/sysnecv850/$(DEPDIR) libc/sys/sysvi386/$(DEPDIR) libc/sys/sysvnecv70/$(DEPDIR) libc/sys/tirtos/$(DEPDIR) libc/sys/w65/$(DEPDIR) libc/sys/xtensa/$(DEPDIR) libc/sys/z8ksim/$(DEPDIR) libc/syscalls/$(DEPDIR) libc/time/$(DEPDIR) libc/unix/$(DEPDIR) libc/xdr/$(DEPDIR) libm/common/$(DEPDIR) libm/complex/$(DEPDIR) libm/fenv/$(DEPDIR) libm/ld/$(DEPDIR) libm/ld128/$(DEPDIR) libm/ld80/$(DEPDIR) libm/machine/aarch64/$(DEPDIR) libm/machine/amdgcn/$(DEPDIR) libm/machine/arm/$(DEPDIR) libm/machine/i386/$(DEPDIR) libm/machine/mips/$(DEPDIR) libm/machine/nds32/$(DEPDIR) libm/machine/powerpc/$(DEPDIR) libm/machine/pru/$(DEPDIR) libm/machine/riscv/$(DEPDIR) libm/machine/sparc/$(DEPDIR) libm/machine/spu/$(DEPDIR) libm/machine/x86_64/$(DEPDIR) libm/machine/xtensa/$(DEPDIR) libm/math/$(DEPDIR) libm/mathfp/$(DEPDIR) libm/test/$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-DEJAGNU distclean-compile \ distclean-generic distclean-hdr distclean-local distclean-tags @@ -46693,7 +50494,7 @@ installcheck-am: maintainer-clean: maintainer-clean-am -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache - -rm -rf libc/argz/$(DEPDIR) libc/ctype/$(DEPDIR) libc/errno/$(DEPDIR) libc/iconv/ccs/$(DEPDIR) libc/iconv/ces/$(DEPDIR) libc/iconv/lib/$(DEPDIR) libc/locale/$(DEPDIR) libc/machine/aarch64/$(DEPDIR) libc/machine/amdgcn/$(DEPDIR) libc/machine/arc/$(DEPDIR) libc/machine/arm/$(DEPDIR) libc/machine/bfin/$(DEPDIR) libc/machine/cr16/$(DEPDIR) libc/machine/cris/$(DEPDIR) libc/machine/crx/$(DEPDIR) libc/machine/csky/$(DEPDIR) libc/machine/d10v/$(DEPDIR) libc/machine/d30v/$(DEPDIR) libc/machine/epiphany/$(DEPDIR) libc/machine/fr30/$(DEPDIR) libc/machine/frv/$(DEPDIR) libc/machine/ft32/$(DEPDIR) libc/machine/h8300/$(DEPDIR) libc/machine/h8500/$(DEPDIR) libc/machine/hppa/$(DEPDIR) libc/machine/i386/$(DEPDIR) libc/machine/i960/$(DEPDIR) libc/machine/iq2000/$(DEPDIR) libc/machine/lm32/$(DEPDIR) libc/machine/m32c/$(DEPDIR) libc/machine/m32r/$(DEPDIR) libc/machine/m68hc11/$(DEPDIR) libc/machine/m68k/$(DEPDIR) libc/machine/m88k/$(DEPDIR) libc/machine/mep/$(DEPDIR) libc/machine/microblaze/$(DEPDIR) libc/machine/mips/$(DEPDIR) libc/machine/mn10200/$(DEPDIR) libc/machine/mn10300/$(DEPDIR) libc/machine/moxie/$(DEPDIR) libc/machine/msp430/$(DEPDIR) libc/machine/mt/$(DEPDIR) libc/machine/nds32/$(DEPDIR) libc/machine/necv70/$(DEPDIR) libc/machine/nvptx/$(DEPDIR) libc/machine/or1k/$(DEPDIR) libc/machine/powerpc/$(DEPDIR) libc/machine/riscv/$(DEPDIR) libc/machine/rl78/$(DEPDIR) libc/machine/rx/$(DEPDIR) libc/machine/sh/$(DEPDIR) libc/machine/sparc/$(DEPDIR) libc/machine/spu/$(DEPDIR) libc/machine/tic4x/$(DEPDIR) libc/machine/tic6x/$(DEPDIR) libc/machine/tic80/$(DEPDIR) libc/machine/v850/$(DEPDIR) libc/machine/visium/$(DEPDIR) libc/machine/w65/$(DEPDIR) libc/machine/x86_64/$(DEPDIR) libc/machine/xc16x/$(DEPDIR) libc/machine/xstormy16/$(DEPDIR) libc/machine/z8k/$(DEPDIR) libc/misc/$(DEPDIR) libc/posix/$(DEPDIR) libc/reent/$(DEPDIR) libc/search/$(DEPDIR) libc/signal/$(DEPDIR) libc/ssp/$(DEPDIR) libc/stdio/$(DEPDIR) libc/stdio64/$(DEPDIR) libc/stdlib/$(DEPDIR) libc/string/$(DEPDIR) libc/sys/a29khif/$(DEPDIR) libc/sys/amdgcn/$(DEPDIR) libc/sys/arm/$(DEPDIR) libc/sys/d10v/$(DEPDIR) libc/sys/epiphany/$(DEPDIR) libc/sys/h8300hms/$(DEPDIR) libc/sys/h8500hms/$(DEPDIR) libc/sys/m88kbug/$(DEPDIR) libc/sys/mmixware/$(DEPDIR) libc/sys/netware/$(DEPDIR) libc/sys/or1k/$(DEPDIR) libc/sys/rdos/$(DEPDIR) libc/sys/rtems/$(DEPDIR) libc/sys/sh/$(DEPDIR) libc/sys/sysmec/$(DEPDIR) libc/sys/sysnec810/$(DEPDIR) libc/sys/sysnecv850/$(DEPDIR) libc/sys/sysvi386/$(DEPDIR) libc/sys/sysvnecv70/$(DEPDIR) libc/sys/tirtos/$(DEPDIR) libc/sys/w65/$(DEPDIR) libc/sys/z8ksim/$(DEPDIR) libc/syscalls/$(DEPDIR) libc/time/$(DEPDIR) libc/unix/$(DEPDIR) libc/xdr/$(DEPDIR) libm/common/$(DEPDIR) libm/complex/$(DEPDIR) libm/fenv/$(DEPDIR) libm/machine/aarch64/$(DEPDIR) libm/machine/arm/$(DEPDIR) libm/machine/i386/$(DEPDIR) libm/machine/mips/$(DEPDIR) libm/machine/nds32/$(DEPDIR) libm/machine/powerpc/$(DEPDIR) libm/machine/pru/$(DEPDIR) libm/machine/riscv/$(DEPDIR) libm/machine/sparc/$(DEPDIR) libm/machine/spu/$(DEPDIR) libm/machine/x86_64/$(DEPDIR) libm/math/$(DEPDIR) libm/mathfp/$(DEPDIR) libm/test/$(DEPDIR) + -rm -rf libc/argz/$(DEPDIR) libc/ctype/$(DEPDIR) libc/errno/$(DEPDIR) libc/iconv/ccs/$(DEPDIR) libc/iconv/ces/$(DEPDIR) libc/iconv/lib/$(DEPDIR) libc/locale/$(DEPDIR) libc/machine/aarch64/$(DEPDIR) libc/machine/amdgcn/$(DEPDIR) libc/machine/arc/$(DEPDIR) libc/machine/arm/$(DEPDIR) libc/machine/bfin/$(DEPDIR) libc/machine/cr16/$(DEPDIR) libc/machine/cris/$(DEPDIR) libc/machine/crx/$(DEPDIR) libc/machine/csky/$(DEPDIR) libc/machine/d10v/$(DEPDIR) libc/machine/d30v/$(DEPDIR) libc/machine/epiphany/$(DEPDIR) libc/machine/fr30/$(DEPDIR) libc/machine/frv/$(DEPDIR) libc/machine/ft32/$(DEPDIR) libc/machine/h8300/$(DEPDIR) libc/machine/h8500/$(DEPDIR) libc/machine/hppa/$(DEPDIR) libc/machine/i386/$(DEPDIR) libc/machine/i960/$(DEPDIR) libc/machine/iq2000/$(DEPDIR) libc/machine/lm32/$(DEPDIR) libc/machine/m32c/$(DEPDIR) libc/machine/m32r/$(DEPDIR) libc/machine/m68hc11/$(DEPDIR) libc/machine/m68k/$(DEPDIR) libc/machine/m88k/$(DEPDIR) libc/machine/mep/$(DEPDIR) libc/machine/microblaze/$(DEPDIR) libc/machine/mips/$(DEPDIR) libc/machine/mn10200/$(DEPDIR) libc/machine/mn10300/$(DEPDIR) libc/machine/moxie/$(DEPDIR) libc/machine/msp430/$(DEPDIR) libc/machine/mt/$(DEPDIR) libc/machine/nds32/$(DEPDIR) libc/machine/necv70/$(DEPDIR) libc/machine/nvptx/$(DEPDIR) libc/machine/or1k/$(DEPDIR) libc/machine/powerpc/$(DEPDIR) libc/machine/riscv/$(DEPDIR) libc/machine/rl78/$(DEPDIR) libc/machine/rx/$(DEPDIR) libc/machine/sh/$(DEPDIR) libc/machine/sparc/$(DEPDIR) libc/machine/spu/$(DEPDIR) libc/machine/tic4x/$(DEPDIR) libc/machine/tic6x/$(DEPDIR) libc/machine/tic80/$(DEPDIR) libc/machine/v850/$(DEPDIR) libc/machine/visium/$(DEPDIR) libc/machine/w65/$(DEPDIR) libc/machine/x86_64/$(DEPDIR) libc/machine/xc16x/$(DEPDIR) libc/machine/xstormy16/$(DEPDIR) libc/machine/xtensa/$(DEPDIR) libc/machine/z8k/$(DEPDIR) libc/misc/$(DEPDIR) libc/posix/$(DEPDIR) libc/reent/$(DEPDIR) libc/search/$(DEPDIR) libc/signal/$(DEPDIR) libc/ssp/$(DEPDIR) libc/stdio/$(DEPDIR) libc/stdio64/$(DEPDIR) libc/stdlib/$(DEPDIR) libc/string/$(DEPDIR) libc/sys/a29khif/$(DEPDIR) libc/sys/amdgcn/$(DEPDIR) libc/sys/arm/$(DEPDIR) libc/sys/d10v/$(DEPDIR) libc/sys/epiphany/$(DEPDIR) libc/sys/h8300hms/$(DEPDIR) libc/sys/h8500hms/$(DEPDIR) libc/sys/m88kbug/$(DEPDIR) libc/sys/mmixware/$(DEPDIR) libc/sys/netware/$(DEPDIR) libc/sys/or1k/$(DEPDIR) libc/sys/rdos/$(DEPDIR) libc/sys/rtems/$(DEPDIR) libc/sys/sh/$(DEPDIR) libc/sys/sysmec/$(DEPDIR) libc/sys/sysnec810/$(DEPDIR) libc/sys/sysnecv850/$(DEPDIR) libc/sys/sysvi386/$(DEPDIR) libc/sys/sysvnecv70/$(DEPDIR) libc/sys/tirtos/$(DEPDIR) libc/sys/w65/$(DEPDIR) libc/sys/xtensa/$(DEPDIR) libc/sys/z8ksim/$(DEPDIR) libc/syscalls/$(DEPDIR) libc/time/$(DEPDIR) libc/unix/$(DEPDIR) libc/xdr/$(DEPDIR) libm/common/$(DEPDIR) libm/complex/$(DEPDIR) libm/fenv/$(DEPDIR) libm/ld/$(DEPDIR) libm/ld128/$(DEPDIR) libm/ld80/$(DEPDIR) libm/machine/aarch64/$(DEPDIR) libm/machine/amdgcn/$(DEPDIR) libm/machine/arm/$(DEPDIR) libm/machine/i386/$(DEPDIR) libm/machine/mips/$(DEPDIR) libm/machine/nds32/$(DEPDIR) libm/machine/powerpc/$(DEPDIR) libm/machine/pru/$(DEPDIR) libm/machine/riscv/$(DEPDIR) libm/machine/sparc/$(DEPDIR) libm/machine/spu/$(DEPDIR) libm/machine/x86_64/$(DEPDIR) libm/machine/xtensa/$(DEPDIR) libm/math/$(DEPDIR) libm/mathfp/$(DEPDIR) libm/test/$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-aminfo \ maintainer-clean-generic maintainer-clean-local @@ -46821,13 +50622,11 @@ stmp-targ-include: config.status $(AM_V_at)s=machine/$(machine_dir)/sys d=sys $(TARG_INCLUDE_CP_DIR) $(AM_V_at)s=machine/$(machine_dir)/include d= $(TARG_INCLUDE_CP_DIR) $(AM_V_at)s=sys/$(sys_dir)/include d= $(TARG_INCLUDE_CP_DIR) - $(AM_V_at)for i in $(srcdir)/libc/sys/$(sys_dir)/include/*/; do \ - if [ -d $$i ]; then \ - d=`basename $$i`; \ - $(MKDIR_P) targ-include/$$d; \ - s=sys/${sys_dir}/include/$$d $(TARG_INCLUDE_CP_DIR) || exit $$?; \ - fi \ - done + $(AM_V_at)for i in $(call rwildcard,$(srcdir)/libc/sys/$(sys_dir)/include/,*.h); do \ + f=`echo $$i | sed s:^$(srcdir)/libc/sys/$(sys_dir)/include/::`; \ + $(MKDIR_P) targ-include/`dirname $$f`; \ + cp $$i targ-include/$$f; \ + done $(AM_V_at)s=sys/$(sys_dir)/sys d=sys $(TARG_INCLUDE_CP_DIR) $(AM_V_at)s=sys/$(sys_dir)/bits d=bits $(TARG_INCLUDE_CP_DIR) $(AM_V_at)s=sys/$(sys_dir)/machine d=machine $(TARG_INCLUDE_CP_DIR) @@ -46912,18 +50711,10 @@ install-data-local: install-toollibLIBRARIES install-multi $(INSTALL_DATA_LOCAL) $(INSTALL_DATA) $$i $(DESTDIR)$(tooldir)/include/machine/`basename $$i`; \ else true; fi ; \ done ; \ - for i in $(srcdir)/libc/sys/$(sys_dir)/include/*.h; do \ - if [ -f $$i ]; then \ - $(INSTALL_DATA) $$i $(DESTDIR)$(tooldir)/include/`basename $$i`; \ - else true; fi ; \ - done ; \ - for i in $(srcdir)/libc/sys/$(sys_dir)/include/*; do \ - if [ -d $$i ]; then \ - $(MKDIR_P) $(DESTDIR)$(tooldir)/include/`basename $$i`; \ - for j in $$i/*.h; do \ - $(INSTALL_DATA) $$j $(DESTDIR)$(tooldir)/include/`basename $$i`/`basename $$j`; \ - done ; \ - else true; fi ; \ + for i in $(call rwildcard,$(srcdir)/libc/sys/$(sys_dir)/include/,*.h); do \ + f=`echo $$i | sed s:^$(srcdir)/libc/sys/$(sys_dir)/::`; \ + $(MKDIR_P) $(DESTDIR)$(tooldir)/`dirname $$f`; \ + $(INSTALL_DATA) $$i $(DESTDIR)$(tooldir)/`dirname $$f`; \ done ; \ for i in $(srcdir)/libc/sys/$(sys_dir)/machine/$(machine_dir)/include/*.h; do \ if [ -f $$i ]; then \ diff --git a/newlib/NEWS b/newlib/NEWS index c39b925c46..348cb4d7d0 100644 --- a/newlib/NEWS +++ b/newlib/NEWS @@ -1,9 +1,31 @@ +*** Major changes in newlib version 4.4.0: + +- long double support for i386, aarch64, and x86_64 added from FreeBSD +- RISC-V Zfinx/Zdinx extension support +- wildcard support added to allow arbitrary include dirs to be specified for a platform +- Xtensa port added +- printf family helper functions split out into separate files to save space when linking +- wide-oriented I/O fixes including proper split of byte and wide-oriented stdio functions +- support added for RISC-V long double math +- fixes for c99/gcc-14 warnings treated as errors in multiple platforms + *** Major changes in newlib version 4.3.0: + - remove i?86-pc-linux-gnu support - remove decstation & sunos support - remove phoenix OS support +- remove unused members from struct _reent (see also --enable-newlib-reent-binary-compat) - build system internals heavily rewritten & updated +- make arm jmp_buf size and alignment ABI-conformant +- fixed bug in arm setjmp/longjmp to preserve floating-point register values +- add --enable-newlib-reent-thread-local configuration option +- add --enable-newlib-reent-binary-compat configuration option +- add 64-bit powerpc setjmp/longjmp support +- use global stdio streams for all configurations +- use global atexit data for all configurations +- vectorized math routines added for amdgcn platform +- nvptx: remove newlib ELIX level 1 restriction *** Major changes in newlib version 4.2.0: diff --git a/newlib/acinclude.m4 b/newlib/acinclude.m4 index 9e48349877..2f8fb8d0fa 100644 --- a/newlib/acinclude.m4 +++ b/newlib/acinclude.m4 @@ -2,7 +2,7 @@ dnl This provides configure definitions used by all the newlib dnl configure.in files. AC_DEFUN([DEF_NEWLIB_MAJOR_VERSION],m4_define([NEWLIB_MAJOR_VERSION],[4])) -AC_DEFUN([DEF_NEWLIB_MINOR_VERSION],m4_define([NEWLIB_MINOR_VERSION],[2])) +AC_DEFUN([DEF_NEWLIB_MINOR_VERSION],m4_define([NEWLIB_MINOR_VERSION],[4])) AC_DEFUN([DEF_NEWLIB_PATCHLEVEL_VERSION],m4_define([NEWLIB_PATCHLEVEL_VERSION],[0])) AC_DEFUN([DEF_NEWLIB_VERSION],m4_define([NEWLIB_VERSION],[NEWLIB_MAJOR_VERSION.NEWLIB_MINOR_VERSION.NEWLIB_PATCHLEVEL_VERSION])) diff --git a/newlib/configure b/newlib/configure index d3171b4f5b..00de6b93a2 100755 --- a/newlib/configure +++ b/newlib/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for newlib 4.2.0. +# Generated by GNU Autoconf 2.69 for newlib 4.4.0. # # # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc. @@ -576,8 +576,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='newlib' PACKAGE_TARNAME='newlib' -PACKAGE_VERSION='4.2.0' -PACKAGE_STRING='newlib 4.2.0' +PACKAGE_VERSION='4.4.0' +PACKAGE_STRING='newlib 4.4.0' PACKAGE_BUGREPORT='' PACKAGE_URL='' @@ -603,6 +603,8 @@ HAVE_MULTISUBDIR_FALSE HAVE_MULTISUBDIR_TRUE HAVE_DOC_FALSE HAVE_DOC_TRUE +HAVE_LIBM_MACHINE_XTENSA_FALSE +HAVE_LIBM_MACHINE_XTENSA_TRUE HAVE_LIBM_MACHINE_X86_64_FALSE HAVE_LIBM_MACHINE_X86_64_TRUE HAVE_LIBM_MACHINE_RISCV_FALSE @@ -623,16 +625,24 @@ HAVE_LIBM_MACHINE_I386_FALSE HAVE_LIBM_MACHINE_I386_TRUE HAVE_LIBM_MACHINE_ARM_FALSE HAVE_LIBM_MACHINE_ARM_TRUE +HAVE_LIBM_MACHINE_AMDGCN_FALSE +HAVE_LIBM_MACHINE_AMDGCN_TRUE HAVE_LIBM_MACHINE_AARCH64_FALSE HAVE_LIBM_MACHINE_AARCH64_TRUE +XTENSA_XCHAL_HAVE_FP_SQRT_FALSE +XTENSA_XCHAL_HAVE_FP_SQRT_TRUE HAS_NDS32_FPU_DP_FALSE HAS_NDS32_FPU_DP_TRUE HAS_NDS32_FPU_SP_FALSE HAS_NDS32_FPU_SP_TRUE MACH_ADD_SETJMP_FALSE MACH_ADD_SETJMP_TRUE +HAVE_FPMATH_H_FALSE +HAVE_FPMATH_H_TRUE HAVE_LIBC_MACHINE_Z8K_FALSE HAVE_LIBC_MACHINE_Z8K_TRUE +HAVE_LIBC_MACHINE_XTENSA_FALSE +HAVE_LIBC_MACHINE_XTENSA_TRUE HAVE_LIBC_MACHINE_XSTORMY16_FALSE HAVE_LIBC_MACHINE_XSTORMY16_TRUE HAVE_LIBC_MACHINE_XC16X_FALSE @@ -747,6 +757,8 @@ HAVE_LIBC_MACHINE_AMDGCN_FALSE HAVE_LIBC_MACHINE_AMDGCN_TRUE HAVE_LIBC_MACHINE_AARCH64_FALSE HAVE_LIBC_MACHINE_AARCH64_TRUE +XTENSA_ESP32_PSRAM_CACHE_FIX_FALSE +XTENSA_ESP32_PSRAM_CACHE_FIX_TRUE HAVE_SPU_EA_FALSE HAVE_SPU_EA_TRUE SH64_FALSE @@ -763,6 +775,8 @@ HAVE_LONG_DOUBLE_FALSE HAVE_LONG_DOUBLE_TRUE HAVE_LIBC_SYS_Z8KSIM_DIR_FALSE HAVE_LIBC_SYS_Z8KSIM_DIR_TRUE +HAVE_LIBC_SYS_XTENSA_DIR_FALSE +HAVE_LIBC_SYS_XTENSA_DIR_TRUE HAVE_LIBC_SYS_W65_DIR_FALSE HAVE_LIBC_SYS_W65_DIR_TRUE HAVE_LIBC_SYS_TIRTOS_DIR_FALSE @@ -1549,7 +1563,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures newlib 4.2.0 to adapt to many kinds of systems. +\`configure' configures newlib 4.4.0 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1619,7 +1633,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of newlib 4.2.0:";; + short | recursive ) echo "Configuration of newlib 4.4.0:";; esac cat <<\_ACEOF @@ -1751,7 +1765,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -newlib configure 4.2.0 +newlib configure 4.4.0 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -1843,7 +1857,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by newlib $as_me 4.2.0, which was +It was created by newlib $as_me 4.4.0, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -4856,7 +4870,7 @@ fi # Define the identity of the package. PACKAGE='newlib' - VERSION='4.2.0' + VERSION='4.4.0' # Some tools Automake needs. @@ -5497,6 +5511,13 @@ fi else HAVE_LIBC_SYS_W65_DIR_TRUE='#' HAVE_LIBC_SYS_W65_DIR_FALSE= +fi + if test "${sys_dir}" = xtensa; then + HAVE_LIBC_SYS_XTENSA_DIR_TRUE= + HAVE_LIBC_SYS_XTENSA_DIR_FALSE='#' +else + HAVE_LIBC_SYS_XTENSA_DIR_TRUE='#' + HAVE_LIBC_SYS_XTENSA_DIR_FALSE= fi if test "${sys_dir}" = z8ksim; then HAVE_LIBC_SYS_Z8KSIM_DIR_TRUE= @@ -5712,6 +5733,15 @@ else fi + if echo $CC | grep mfix-esp32-psram-cache-issue >/dev/null 2>&1; then + XTENSA_ESP32_PSRAM_CACHE_FIX_TRUE= + XTENSA_ESP32_PSRAM_CACHE_FIX_FALSE='#' +else + XTENSA_ESP32_PSRAM_CACHE_FIX_TRUE='#' + XTENSA_ESP32_PSRAM_CACHE_FIX_FALSE= +fi + + if test "${machine_dir}" = aarch64; then HAVE_LIBC_MACHINE_AARCH64_TRUE= @@ -6111,6 +6141,13 @@ fi else HAVE_LIBC_MACHINE_XSTORMY16_TRUE='#' HAVE_LIBC_MACHINE_XSTORMY16_FALSE= +fi + if test "${machine_dir}" = xtensa; then + HAVE_LIBC_MACHINE_XTENSA_TRUE= + HAVE_LIBC_MACHINE_XTENSA_FALSE='#' +else + HAVE_LIBC_MACHINE_XTENSA_TRUE='#' + HAVE_LIBC_MACHINE_XTENSA_FALSE= fi if test "${machine_dir}" = z8k; then HAVE_LIBC_MACHINE_Z8K_TRUE= @@ -6121,6 +6158,16 @@ else fi + if test -r "${srcdir}/libc/machine/${machine_dir}/machine/_fpmath.h"; then + HAVE_FPMATH_H_TRUE= + HAVE_FPMATH_H_FALSE='#' +else + HAVE_FPMATH_H_TRUE='#' + HAVE_FPMATH_H_FALSE= +fi + + + if test "x$mach_add_setjmp" = "xtrue"; then MACH_ADD_SETJMP_TRUE= MACH_ADD_SETJMP_FALSE='#' @@ -6207,6 +6254,47 @@ else fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for XCHAL_HAVE_FP_SQRT" >&5 +$as_echo_n "checking for XCHAL_HAVE_FP_SQRT... " >&6; } +if ${newlib_cv_xchal_have_fp_sqrt+:} false; then : + $as_echo_n "(cached) " >&6 +else + cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ +#define _LIBM +// targ-include does not exist yet, use relative path +#include "../sys/xtensa/include/xtensa/config/core-isa.h" +#if (!XCHAL_HAVE_FP_SQRT) +# error "Have not XCHAL_HAVE_FP_SQRT" +#endif + +int +main () +{ + + ; + return 0; +} +_ACEOF +if ac_fn_c_try_cpp "$LINENO"; then : + newlib_cv_xchal_have_fp_sqrt="yes" +else + newlib_cv_xchal_have_fp_sqrt="no" +fi +rm -f conftest.err conftest.i conftest.$ac_ext +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $newlib_cv_xchal_have_fp_sqrt" >&5 +$as_echo "$newlib_cv_xchal_have_fp_sqrt" >&6; } + + if test "$newlib_cv_xchal_have_fp_sqrt" = "yes"; then + XTENSA_XCHAL_HAVE_FP_SQRT_TRUE= + XTENSA_XCHAL_HAVE_FP_SQRT_FALSE='#' +else + XTENSA_XCHAL_HAVE_FP_SQRT_TRUE='#' + XTENSA_XCHAL_HAVE_FP_SQRT_FALSE= +fi + + if test "${libm_machine_dir}" = "aarch64"; then HAVE_LIBM_MACHINE_AARCH64_TRUE= @@ -6216,6 +6304,14 @@ else HAVE_LIBM_MACHINE_AARCH64_FALSE= fi + if test "${libm_machine_dir}" = "amdgcn"; then + HAVE_LIBM_MACHINE_AMDGCN_TRUE= + HAVE_LIBM_MACHINE_AMDGCN_FALSE='#' +else + HAVE_LIBM_MACHINE_AMDGCN_TRUE='#' + HAVE_LIBM_MACHINE_AMDGCN_FALSE= +fi + if test "${libm_machine_dir}" = "arm"; then HAVE_LIBM_MACHINE_ARM_TRUE= HAVE_LIBM_MACHINE_ARM_FALSE='#' @@ -6296,6 +6392,14 @@ else HAVE_LIBM_MACHINE_X86_64_FALSE= fi + if test "${libm_machine_dir}" = "xtensa"; then + HAVE_LIBM_MACHINE_XTENSA_TRUE= + HAVE_LIBM_MACHINE_XTENSA_FALSE='#' +else + HAVE_LIBM_MACHINE_XTENSA_TRUE='#' + HAVE_LIBM_MACHINE_XTENSA_FALSE= +fi + @@ -6397,13 +6501,13 @@ fi -$as_echo "#define _NEWLIB_VERSION \"4.2.0\"" >>confdefs.h +$as_echo "#define _NEWLIB_VERSION \"4.4.0\"" >>confdefs.h $as_echo "#define __NEWLIB__ 4" >>confdefs.h -$as_echo "#define __NEWLIB_MINOR__ 2" >>confdefs.h +$as_echo "#define __NEWLIB_MINOR__ 4" >>confdefs.h $as_echo "#define __NEWLIB_PATCHLEVEL__ 0" >>confdefs.h @@ -7595,6 +7699,10 @@ if test -z "${HAVE_LIBC_SYS_W65_DIR_TRUE}" && test -z "${HAVE_LIBC_SYS_W65_DIR_F as_fn_error $? "conditional \"HAVE_LIBC_SYS_W65_DIR\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${HAVE_LIBC_SYS_XTENSA_DIR_TRUE}" && test -z "${HAVE_LIBC_SYS_XTENSA_DIR_FALSE}"; then + as_fn_error $? "conditional \"HAVE_LIBC_SYS_XTENSA_DIR\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${HAVE_LIBC_SYS_Z8KSIM_DIR_TRUE}" && test -z "${HAVE_LIBC_SYS_Z8KSIM_DIR_FALSE}"; then as_fn_error $? "conditional \"HAVE_LIBC_SYS_Z8KSIM_DIR\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -7627,6 +7735,10 @@ if test -z "${HAVE_SPU_EA_TRUE}" && test -z "${HAVE_SPU_EA_FALSE}"; then as_fn_error $? "conditional \"HAVE_SPU_EA\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${XTENSA_ESP32_PSRAM_CACHE_FIX_TRUE}" && test -z "${XTENSA_ESP32_PSRAM_CACHE_FIX_FALSE}"; then + as_fn_error $? "conditional \"XTENSA_ESP32_PSRAM_CACHE_FIX\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${HAVE_LIBC_MACHINE_AARCH64_TRUE}" && test -z "${HAVE_LIBC_MACHINE_AARCH64_FALSE}"; then as_fn_error $? "conditional \"HAVE_LIBC_MACHINE_AARCH64\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -7855,10 +7967,18 @@ if test -z "${HAVE_LIBC_MACHINE_XSTORMY16_TRUE}" && test -z "${HAVE_LIBC_MACHINE as_fn_error $? "conditional \"HAVE_LIBC_MACHINE_XSTORMY16\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${HAVE_LIBC_MACHINE_XTENSA_TRUE}" && test -z "${HAVE_LIBC_MACHINE_XTENSA_FALSE}"; then + as_fn_error $? "conditional \"HAVE_LIBC_MACHINE_XTENSA\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${HAVE_LIBC_MACHINE_Z8K_TRUE}" && test -z "${HAVE_LIBC_MACHINE_Z8K_FALSE}"; then as_fn_error $? "conditional \"HAVE_LIBC_MACHINE_Z8K\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${HAVE_FPMATH_H_TRUE}" && test -z "${HAVE_FPMATH_H_FALSE}"; then + as_fn_error $? "conditional \"HAVE_FPMATH_H\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${MACH_ADD_SETJMP_TRUE}" && test -z "${MACH_ADD_SETJMP_FALSE}"; then as_fn_error $? "conditional \"MACH_ADD_SETJMP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -7871,10 +7991,18 @@ if test -z "${HAS_NDS32_FPU_DP_TRUE}" && test -z "${HAS_NDS32_FPU_DP_FALSE}"; th as_fn_error $? "conditional \"HAS_NDS32_FPU_DP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${XTENSA_XCHAL_HAVE_FP_SQRT_TRUE}" && test -z "${XTENSA_XCHAL_HAVE_FP_SQRT_FALSE}"; then + as_fn_error $? "conditional \"XTENSA_XCHAL_HAVE_FP_SQRT\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${HAVE_LIBM_MACHINE_AARCH64_TRUE}" && test -z "${HAVE_LIBM_MACHINE_AARCH64_FALSE}"; then as_fn_error $? "conditional \"HAVE_LIBM_MACHINE_AARCH64\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${HAVE_LIBM_MACHINE_AMDGCN_TRUE}" && test -z "${HAVE_LIBM_MACHINE_AMDGCN_FALSE}"; then + as_fn_error $? "conditional \"HAVE_LIBM_MACHINE_AMDGCN\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${HAVE_LIBM_MACHINE_ARM_TRUE}" && test -z "${HAVE_LIBM_MACHINE_ARM_FALSE}"; then as_fn_error $? "conditional \"HAVE_LIBM_MACHINE_ARM\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -7915,6 +8043,10 @@ if test -z "${HAVE_LIBM_MACHINE_X86_64_TRUE}" && test -z "${HAVE_LIBM_MACHINE_X8 as_fn_error $? "conditional \"HAVE_LIBM_MACHINE_X86_64\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi +if test -z "${HAVE_LIBM_MACHINE_XTENSA_TRUE}" && test -z "${HAVE_LIBM_MACHINE_XTENSA_FALSE}"; then + as_fn_error $? "conditional \"HAVE_LIBM_MACHINE_XTENSA\" was never defined. +Usually this means the macro was only invoked conditionally." "$LINENO" 5 +fi if test -z "${HAVE_DOC_TRUE}" && test -z "${HAVE_DOC_FALSE}"; then as_fn_error $? "conditional \"HAVE_DOC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 @@ -8328,7 +8460,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by newlib $as_me 4.2.0, which was +This file was extended by newlib $as_me 4.4.0, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -8394,7 +8526,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -newlib config.status 4.2.0 +newlib config.status 4.4.0 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" @@ -9137,7 +9269,7 @@ $as_echo "$as_me: executing $ac_file commands" >&6;} case $ac_file$ac_mode in - "newlib.h":H) sed -i.tmp -e '/^#define [^_]/d' -e '/^\/\* #undef [^_]/d' newlib.h && rm -f newlib.h.tmp ;; + "newlib.h":H) sed -i.tmp -E -e '/^#define [^_]/d' -e '/^\/\* #undef [^_]/d' -e '/_NEWLIB_VERSION|__NEWLIB_(MINOR|PATCHLEVEL)__|__NEWLIB__/d' newlib.h && rm -f newlib.h.tmp ;; "default-1":C) # Only add multilib support code if we just rebuilt the top-level # Makefile. diff --git a/newlib/configure.ac b/newlib/configure.ac index 97549ba32d..55e5a94468 100644 --- a/newlib/configure.ac +++ b/newlib/configure.ac @@ -8,8 +8,11 @@ dnl Since we can't control what defines autoheader picks up (various autoconf dnl macros will add their own), filter out all the ones w/out a _ prefix. All dnl the ones we want to export use a _ prefix, and all the rest we don't want dnl to export as it'll pollute the namespace of newlib users. +dnl We also filter out version defines that we want in _newlib_version.h. dnl NB: newlib.h must be the first AC_CONFIG_HEADERS call for autoheader. -AC_CONFIG_HEADERS([newlib.h:newlib.hin], [sed -i.tmp -e '/^#define [^_]/d' -e '/^\/\* #undef [^_]/d' newlib.h && rm -f newlib.h.tmp]) +AC_CONFIG_HEADERS( + [newlib.h:newlib.hin], + [sed -i.tmp -E -e '/^#define [^_]/d' -e '/^\/\* #undef [^_]/d' -e '/_NEWLIB_VERSION|__NEWLIB_(MINOR|PATCHLEVEL)__|__NEWLIB__/d' newlib.h && rm -f newlib.h.tmp]) AH_TOP([/* NB: The contents are filtered before being installed. */ #ifndef __NEWLIB_H__ @@ -410,10 +413,10 @@ EOF fi AC_SUBST(EXEEXT_FOR_BUILD) -AC_DEFINE(_NEWLIB_VERSION,"NEWLIB_VERSION","The newlib version in string format.") -AC_DEFINE(__NEWLIB__,NEWLIB_MAJOR_VERSION,"The newlib major version number.") -AC_DEFINE(__NEWLIB_MINOR__,NEWLIB_MINOR_VERSION,"The newlib minor version number.") -AC_DEFINE(__NEWLIB_PATCHLEVEL__,NEWLIB_PATCHLEVEL_VERSION,"The newlib patch level.") +AC_DEFINE(_NEWLIB_VERSION, "NEWLIB_VERSION", [The newlib version in string format.]) +AC_DEFINE(__NEWLIB__, NEWLIB_MAJOR_VERSION, [The newlib major version number.]) +AC_DEFINE(__NEWLIB_MINOR__, NEWLIB_MINOR_VERSION, [The newlib minor version number.]) +AC_DEFINE(__NEWLIB_PATCHLEVEL__, NEWLIB_PATCHLEVEL_VERSION, [The newlib patch level.]) if test "${newlib_elix_level}" -gt "0"; then AC_DEFINE_UNQUOTED(_ELIX_LEVEL, ${newlib_elix_level}, [EL/IX level]) diff --git a/newlib/configure.host b/newlib/configure.host index 4e4c393912..2023e58f57 100644 --- a/newlib/configure.host +++ b/newlib/configure.host @@ -119,6 +119,7 @@ case "${host_cpu}" in amdgcn*) newlib_cflags="${newlib_cflags} -D__DYNAMIC_REENT__" machine_dir=amdgcn + libm_machine_dir=amdgcn newlib_cv_initfinit_array=yes ;; arc*) @@ -364,6 +365,13 @@ case "${host_cpu}" in newlib_cflags="${newlib_cflags} -DMALLOC_PROVIDED" newlib_cflags="${newlib_cflags} -DPREFER_SIZE_OVER_SPEED" ;; + xtensa) + libm_machine_dir=xtensa + machine_dir=xtensa + newlib_cflags="${newlib_cflags} -mlongcalls" + default_newlib_atexit_dynamic_alloc="no" + have_init_fini=no + ;; z8k) machine_dir=z8k ;; @@ -568,6 +576,9 @@ case "${host}" in w65-*-*) sys_dir=w65 ;; + xtensa*-*-*) + sys_dir=xtensa + ;; z8k-*-coff) sys_dir=z8ksim ;; @@ -586,7 +597,7 @@ case "${host}" in default_newlib_io_long_double="yes" default_newlib_io_pos_args="yes" CC="${CC} -I${cygwin_srcdir}/include" - newlib_cflags="${newlib_cflags} -DHAVE_OPENDIR -DHAVE_RENAME -DGETREENT_PROVIDED -DSIGNAL_PROVIDED -DHAVE_BLKSIZE -DHAVE_FCNTL -DMALLOC_PROVIDED" + newlib_cflags="${newlib_cflags} -DHAVE_OPENDIR -DHAVE_RENAME -DGETREENT_PROVIDED -DSIGNAL_PROVIDED -DHAVE_BLKSIZE -DHAVE_FCNTL -DMALLOC_PROVIDED -DHAVE_CHDIR -DHAVE_FCHDIR" syscall_dir=syscalls ;; # RTEMS supplies its own versions of some routines: @@ -860,6 +871,9 @@ newlib_cflags="${newlib_cflags} -DCLOCK_PROVIDED -DMALLOC_PROVIDED -DEXIT_PROVID xstormy16-*-*) syscall_dir=syscalls ;; + xtensa*-*-* | xtensa*-*) + syscall_dir=syscalls + ;; z8k-*-*) syscall_dir=syscalls ;; @@ -937,11 +951,6 @@ fi # Target-specific defaults case "${host_cpu}" in nvptx*) - if [ "x${newlib_elix_level}" = "x0" ]; then - newlib_elix_level=1; - elif [ "x${newlib_elix_level}" != "x1" ]; then - newlib_msg_warn="nvptx does not support elix level > 1"; - fi if [[ -z ${newlib_global_stdio_streams} ]]; then newlib_global_stdio_streams="yes"; fi diff --git a/newlib/doc/doc.str b/newlib/doc/doc.str index b0bfc9ea41..52d41f245c 100644 --- a/newlib/doc/doc.str +++ b/newlib/doc/doc.str @@ -75,7 +75,7 @@ ; : FUNCTION - "@node " - a + "@node Function " - a skip_past_newline copy_past_newline dup - a x x diff --git a/newlib/libc/acinclude.m4 b/newlib/libc/acinclude.m4 index 7cba7db398..24148b13f3 100644 --- a/newlib/libc/acinclude.m4 +++ b/newlib/libc/acinclude.m4 @@ -23,6 +23,7 @@ m4_foreach_w([SYS_DIR], [ sh sysmec sysnec810 sysnecv850 sysvi386 sysvnecv70 tic80 tirtos w65 + xtensa z8ksim ], [AM_CONDITIONAL([HAVE_LIBC_SYS_]m4_toupper(SYS_DIR)[_DIR], test "${sys_dir}" = SYS_DIR)]) @@ -38,6 +39,7 @@ m4_include([libc/machine/nds32/acinclude.m4]) m4_include([libc/machine/powerpc/acinclude.m4]) m4_include([libc/machine/sh/acinclude.m4]) m4_include([libc/machine/spu/acinclude.m4]) +m4_include([libc/machine/xtensa/acinclude.m4]) m4_foreach_w([MACHINE], [ aarch64 amdgcn arc arm @@ -58,8 +60,11 @@ m4_foreach_w([MACHINE], [ tic4x tic6x tic80 v850 visium w65 - x86_64 xc16x xstormy16 + x86_64 xc16x xstormy16 xtensa z8k ], [AM_CONDITIONAL([HAVE_LIBC_MACHINE_]m4_toupper(MACHINE), test "${machine_dir}" = MACHINE)]) +AM_CONDITIONAL(HAVE_FPMATH_H, test -r "${srcdir}/libc/machine/${machine_dir}/machine/_fpmath.h") + + AM_CONDITIONAL(MACH_ADD_SETJMP, test "x$mach_add_setjmp" = "xtrue") diff --git a/newlib/libc/ctype/categories.t b/newlib/libc/ctype/categories.t index 38bb959e63..4fec4afb63 100644 --- a/newlib/libc/ctype/categories.t +++ b/newlib/libc/ctype/categories.t @@ -453,6 +453,7 @@ {CAT_Mn, 0x0CE2, 1}, {CAT_Nd, 0x0CE6, 9}, {CAT_Lo, 0x0CF1, 1}, + {CAT_Mc, 0x0CF3, 0}, {CAT_Mn, 0x0D00, 1}, {CAT_Mc, 0x0D02, 1}, {CAT_Lo, 0x0D04, 8}, @@ -514,7 +515,7 @@ {CAT_Lo, 0x0EBD, 0}, {CAT_Lo, 0x0EC0, 4}, {CAT_Lm, 0x0EC6, 0}, - {CAT_Mn, 0x0EC8, 5}, + {CAT_Mn, 0x0EC8, 6}, {CAT_Nd, 0x0ED0, 9}, {CAT_Lo, 0x0EDC, 3}, {CAT_Lo, 0x0F00, 0}, @@ -1682,6 +1683,7 @@ {CAT_Mn, 0x10EAB, 1}, {CAT_Pd, 0x10EAD, 0}, {CAT_Lo, 0x10EB0, 1}, + {CAT_Mn, 0x10EFD, 2}, {CAT_Lo, 0x10F00, 28}, {CAT_No, 0x10F1D, 9}, {CAT_Lo, 0x10F27, 0}, @@ -1763,6 +1765,8 @@ {CAT_Mn, 0x11236, 1}, {CAT_Po, 0x11238, 5}, {CAT_Mn, 0x1123E, 0}, + {CAT_Lo, 0x1123F, 1}, + {CAT_Mn, 0x11241, 0}, {CAT_Lo, 0x11280, 6}, {CAT_Lo, 0x11288, 0}, {CAT_Lo, 0x1128A, 3}, @@ -1923,6 +1927,7 @@ {CAT_Lo, 0x11A9D, 0}, {CAT_Po, 0x11A9E, 4}, {CAT_Lo, 0x11AB0, 72}, + {CAT_Po, 0x11B00, 9}, {CAT_Lo, 0x11C00, 8}, {CAT_Lo, 0x11C0A, 36}, {CAT_Mc, 0x11C2F, 0}, @@ -1968,6 +1973,19 @@ {CAT_Mn, 0x11EF3, 1}, {CAT_Mc, 0x11EF5, 1}, {CAT_Po, 0x11EF7, 1}, + {CAT_Mn, 0x11F00, 1}, + {CAT_Lo, 0x11F02, 0}, + {CAT_Mc, 0x11F03, 0}, + {CAT_Lo, 0x11F04, 12}, + {CAT_Lo, 0x11F12, 33}, + {CAT_Mc, 0x11F34, 1}, + {CAT_Mn, 0x11F36, 4}, + {CAT_Mc, 0x11F3E, 1}, + {CAT_Mn, 0x11F40, 0}, + {CAT_Mc, 0x11F41, 0}, + {CAT_Mn, 0x11F42, 0}, + {CAT_Po, 0x11F43, 12}, + {CAT_Nd, 0x11F50, 9}, {CAT_Lo, 0x11FB0, 0}, {CAT_No, 0x11FC0, 20}, {CAT_So, 0x11FD5, 7}, @@ -1980,8 +1998,11 @@ {CAT_Lo, 0x12480, 195}, {CAT_Lo, 0x12F90, 96}, {CAT_Po, 0x12FF1, 1}, - {CAT_Lo, 0x13000, 1070}, - {CAT_Cf, 0x13430, 8}, + {CAT_Lo, 0x13000, 1071}, + {CAT_Cf, 0x13430, 15}, + {CAT_Mn, 0x13440, 0}, + {CAT_Lo, 0x13441, 5}, + {CAT_Mn, 0x13447, 14}, {CAT_Lo, 0x14400, 582}, {CAT_Lo, 0x16800, 568}, {CAT_Lo, 0x16A40, 30}, @@ -2024,7 +2045,9 @@ {CAT_Lm, 0x1AFF5, 6}, {CAT_Lm, 0x1AFFD, 1}, {CAT_Lo, 0x1B000, 290}, + {CAT_Lo, 0x1B132, 0}, {CAT_Lo, 0x1B150, 2}, + {CAT_Lo, 0x1B155, 0}, {CAT_Lo, 0x1B164, 3}, {CAT_Lo, 0x1B170, 395}, {CAT_Lo, 0x1BC00, 106}, @@ -2055,6 +2078,7 @@ {CAT_So, 0x1D200, 65}, {CAT_Mn, 0x1D242, 2}, {CAT_So, 0x1D245, 0}, + {CAT_No, 0x1D2C0, 19}, {CAT_No, 0x1D2E0, 19}, {CAT_So, 0x1D300, 86}, {CAT_No, 0x1D360, 24}, @@ -2143,11 +2167,14 @@ {CAT_Ll, 0x1DF00, 9}, {CAT_Lo, 0x1DF0A, 0}, {CAT_Ll, 0x1DF0B, 19}, + {CAT_Ll, 0x1DF25, 5}, {CAT_Mn, 0x1E000, 6}, {CAT_Mn, 0x1E008, 16}, {CAT_Mn, 0x1E01B, 6}, {CAT_Mn, 0x1E023, 1}, {CAT_Mn, 0x1E026, 4}, + {CAT_Lm, 0x1E030, 61}, + {CAT_Mn, 0x1E08F, 0}, {CAT_Lo, 0x1E100, 44}, {CAT_Mn, 0x1E130, 6}, {CAT_Lm, 0x1E137, 6}, @@ -2160,6 +2187,10 @@ {CAT_Mn, 0x1E2EC, 3}, {CAT_Nd, 0x1E2F0, 9}, {CAT_Sc, 0x1E2FF, 0}, + {CAT_Lo, 0x1E4D0, 26}, + {CAT_Lm, 0x1E4EB, 0}, + {CAT_Mn, 0x1E4EC, 3}, + {CAT_Nd, 0x1E4F0, 9}, {CAT_Lo, 0x1E7E0, 6}, {CAT_Lo, 0x1E7E8, 3}, {CAT_Lo, 0x1E7ED, 1}, @@ -2230,10 +2261,10 @@ {CAT_So, 0x1F300, 250}, {CAT_Sk, 0x1F3FB, 4}, {CAT_So, 0x1F400, 727}, - {CAT_So, 0x1F6DD, 15}, + {CAT_So, 0x1F6DC, 16}, {CAT_So, 0x1F6F0, 12}, - {CAT_So, 0x1F700, 115}, - {CAT_So, 0x1F780, 88}, + {CAT_So, 0x1F700, 118}, + {CAT_So, 0x1F77B, 94}, {CAT_So, 0x1F7E0, 11}, {CAT_So, 0x1F7F0, 0}, {CAT_So, 0x1F800, 11}, @@ -2244,25 +2275,24 @@ {CAT_So, 0x1F8B0, 1}, {CAT_So, 0x1F900, 339}, {CAT_So, 0x1FA60, 13}, - {CAT_So, 0x1FA70, 4}, - {CAT_So, 0x1FA78, 4}, - {CAT_So, 0x1FA80, 6}, - {CAT_So, 0x1FA90, 28}, - {CAT_So, 0x1FAB0, 10}, - {CAT_So, 0x1FAC0, 5}, - {CAT_So, 0x1FAD0, 9}, - {CAT_So, 0x1FAE0, 7}, - {CAT_So, 0x1FAF0, 6}, + {CAT_So, 0x1FA70, 12}, + {CAT_So, 0x1FA80, 8}, + {CAT_So, 0x1FA90, 45}, + {CAT_So, 0x1FABF, 6}, + {CAT_So, 0x1FACE, 13}, + {CAT_So, 0x1FAE0, 8}, + {CAT_So, 0x1FAF0, 8}, {CAT_So, 0x1FB00, 146}, {CAT_So, 0x1FB94, 54}, {CAT_Nd, 0x1FBF0, 9}, {CAT_Lo, 0x20000, 42719}, - {CAT_Lo, 0x2A700, 4152}, + {CAT_Lo, 0x2A700, 4153}, {CAT_Lo, 0x2B740, 221}, {CAT_Lo, 0x2B820, 5761}, {CAT_Lo, 0x2CEB0, 7472}, {CAT_Lo, 0x2F800, 541}, {CAT_Lo, 0x30000, 4938}, + {CAT_Lo, 0x31350, 4191}, {CAT_Cf, 0xE0001, 0}, {CAT_Cf, 0xE0020, 95}, {CAT_Mn, 0xE0100, 239}, diff --git a/newlib/libc/ctype/ctype.tex b/newlib/libc/ctype/ctype.tex index 1cd223e698..e9b42d8539 100644 --- a/newlib/libc/ctype/ctype.tex +++ b/newlib/libc/ctype/ctype.tex @@ -7,39 +7,39 @@ The header file @file{ctype.h} defines the macros. @menu -* isalnum:: Alphanumeric character predicate (isalnum, isalnum_l) -* isalpha:: Alphabetic character predicate (isalpha, isalpha_l) -* isascii:: ASCII character predicate (isascii, isascii_l) -* isblank:: Blank character predicate (isblank, isblank_l) -* iscntrl:: Control character predicate (iscntrl, iscntrl_l) -* isdigit:: Decimal digit predicate (isdigit, isdigit_l) -* islower:: Lowercase character predicate (islower, islower_l) -* isprint:: Printable character predicates (isprint, isprint_l. isgraph, isgraph_l) -* ispunct:: Punctuation character predicate (ispunct, ispunct_l) -* isspace:: Whitespace character predicate (isspace, isspace_l) -* isupper:: Uppercase character predicate (isupper, isupper_l) -* isxdigit:: Hexadecimal digit predicate (isxdigit, isxdigit_l) -* toascii:: Force integers to ASCII range (toascii, toascii_l) -* tolower:: Translate characters to lowercase (tolower, tolower_l) -* toupper:: Translate characters to uppercase (toupper, toupper_l) -* iswalnum:: Alphanumeric wide character predicate (iswalnum, iswalnum_l) -* iswalpha:: Alphabetic wide character predicate (iswalpha, iswalpha_l) -* iswblank:: Blank wide character predicate (iswblank, iswblank_l) -* iswcntrl:: Control wide character predicate (iswcntrl, iswcntrl_l) -* iswdigit:: Decimal digit wide character predicate (iswdigit, iswdigit_l) -* iswgraph:: Graphic wide character predicate (iswgraph, iswgraph_l) -* iswlower:: Lowercase wide character predicate (iswlower, iswlower_l) -* iswprint:: Printable wide character predicate (iswprint, iswprint_l) -* iswpunct:: Punctuation wide character predicate (iswpunct, iswpunct_l) -* iswspace:: Whitespace wide character predicate (iswspace, iswspace_l) -* iswupper:: Uppercase wide character predicate (iswupper, iswupper_l) -* iswxdigit:: Hexadecimal digit wide character predicate (iswxdigit, iswxdigit_l) -* iswctype:: Extensible wide-character test (iswctype, iswctype_l) -* wctype:: Compute wide-character test type (wctype, wctype_l) -* towlower:: Translate wide characters to lowercase (towlower, towlower_l) -* towupper:: Translate wide characters to uppercase (towupper, towupper_l) -* towctrans:: Extensible wide-character translation (towctrans, towctrans_l) -* wctrans:: Compute wide-character translation type (wctrans, wctrans_l) +* Function isalnum:: Alphanumeric character predicate (isalnum, isalnum_l) +* Function isalpha:: Alphabetic character predicate (isalpha, isalpha_l) +* Function isascii:: ASCII character predicate (isascii, isascii_l) +* Function isblank:: Blank character predicate (isblank, isblank_l) +* Function iscntrl:: Control character predicate (iscntrl, iscntrl_l) +* Function isdigit:: Decimal digit predicate (isdigit, isdigit_l) +* Function islower:: Lowercase character predicate (islower, islower_l) +* Function isprint:: Printable character predicates (isprint, isprint_l. isgraph, isgraph_l) +* Function ispunct:: Punctuation character predicate (ispunct, ispunct_l) +* Function isspace:: Whitespace character predicate (isspace, isspace_l) +* Function isupper:: Uppercase character predicate (isupper, isupper_l) +* Function isxdigit:: Hexadecimal digit predicate (isxdigit, isxdigit_l) +* Function toascii:: Force integers to ASCII range (toascii, toascii_l) +* Function tolower:: Translate characters to lowercase (tolower, tolower_l) +* Function toupper:: Translate characters to uppercase (toupper, toupper_l) +* Function iswalnum:: Alphanumeric wide character predicate (iswalnum, iswalnum_l) +* Function iswalpha:: Alphabetic wide character predicate (iswalpha, iswalpha_l) +* Function iswblank:: Blank wide character predicate (iswblank, iswblank_l) +* Function iswcntrl:: Control wide character predicate (iswcntrl, iswcntrl_l) +* Function iswdigit:: Decimal digit wide character predicate (iswdigit, iswdigit_l) +* Function iswgraph:: Graphic wide character predicate (iswgraph, iswgraph_l) +* Function iswlower:: Lowercase wide character predicate (iswlower, iswlower_l) +* Function iswprint:: Printable wide character predicate (iswprint, iswprint_l) +* Function iswpunct:: Punctuation wide character predicate (iswpunct, iswpunct_l) +* Function iswspace:: Whitespace wide character predicate (iswspace, iswspace_l) +* Function iswupper:: Uppercase wide character predicate (iswupper, iswupper_l) +* Function iswxdigit:: Hexadecimal digit wide character predicate (iswxdigit, iswxdigit_l) +* Function iswctype:: Extensible wide-character test (iswctype, iswctype_l) +* Function wctype:: Compute wide-character test type (wctype, wctype_l) +* Function towlower:: Translate wide characters to lowercase (towlower, towlower_l) +* Function towupper:: Translate wide characters to uppercase (towupper, towupper_l) +* Function towctrans:: Extensible wide-character translation (towctrans, towctrans_l) +* Function wctrans:: Compute wide-character translation type (wctrans, wctrans_l) @end menu @page diff --git a/newlib/libc/ctype/ctype_cp.h b/newlib/libc/ctype/ctype_cp.h index 9370778a28..f6aa2e582f 100644 --- a/newlib/libc/ctype/ctype_cp.h +++ b/newlib/libc/ctype/ctype_cp.h @@ -1,8 +1,8 @@ -/* ctype table definitions for Windows codepage charsets. +/* ctype table definitions for Windows codepage charsets. Included by ctype_.c. */ #define _CTYPE_CP437_128_254 \ - _U, _L, _L, _L, _L, _L, _L, _L, \ + _U, _L, _L, _L, _L, _L, _L, _L, \ _L, _L, _L, _L, _L, _L, _U, _U, \ _U, _L, _U, _L, _L, _L, _L, _L, \ _L, _U, _U, _P, _P, _P, _P, _P, \ @@ -20,7 +20,7 @@ _P, _P, _P, _P, _P, _P, _P #define _CTYPE_CP437_255 _S|_B #define _CTYPE_CP720_128_254 \ - 0, 0, _L, _L, 0, _L, 0, _L, \ + 0, 0, _L, _L, 0, _L, 0, _L, \ _L, _L, _L, _L, _L, 0, 0, 0, \ 0, _P, _P, _L, _P, _P, _L, _L, \ _U|_L, _U|_L, _U|_L, _U|_L, _P, _U|_L, _U|_L, _U|_L, \ @@ -38,7 +38,7 @@ _P, _P, _P, _P, _P, _P, _P #define _CTYPE_CP720_255 _S|_B #define _CTYPE_CP737_128_254 \ - _U, _U, _U, _U, _U, _U, _U, _U, \ + _U, _U, _U, _U, _U, _U, _U, _U, \ _U, _U, _U, _U, _U, _U, _U, _U, \ _U, _U, _U, _U, _U, _U, _U, _U, \ _L, _L, _L, _L, _L, _L, _L, _L, \ @@ -56,7 +56,7 @@ _P, _P, _P, _P, _P, _P, _P #define _CTYPE_CP737_255 _S|_B #define _CTYPE_CP775_128_254 \ - _U, _L, _L, _L, _L, _L, _L, _L, \ + _U, _L, _L, _L, _L, _L, _L, _L, \ _L, _L, _U, _L, _L, _U, _U, _U, \ _U, _L, _U, _L, _L, _U, _P, _U, \ _L, _U, _U, _L, _P, _U, _P, _P, \ @@ -74,7 +74,7 @@ _P, _P, _P, _P, _P, _P, _P #define _CTYPE_CP775_255 _S|_B #define _CTYPE_CP850_128_254 \ - _U, _L, _L, _L, _L, _L, _L, _L, \ + _U, _L, _L, _L, _L, _L, _L, _L, \ _L, _L, _L, _L, _L, _L, _U, _U, \ _U, _L, _U, _L, _L, _L, _L, _L, \ _L, _U, _U, _L, _P, _U, _P, _L, \ @@ -92,7 +92,7 @@ _P, _P, _P, _P, _P, _P, _P #define _CTYPE_CP850_255 _S|_B #define _CTYPE_CP852_128_254 \ - _U, _L, _L, _L, _L, _L, _L, _L, \ + _U, _L, _L, _L, _L, _L, _L, _L, \ _L, _L, _U, _L, _L, _U, _U, _U, \ _U, _U, _L, _L, _L, _U, _L, _U, \ _L, _U, _U, _U, _L, _U, _P, _L, \ @@ -110,7 +110,7 @@ _P, _P, _P, _L, _U, _L, _P #define _CTYPE_CP852_255 _S|_B #define _CTYPE_CP855_128_254 \ - _L, _U, _L, _U, _L, _U, _L, _U, \ + _L, _U, _L, _U, _L, _U, _L, _U, \ _L, _U, _L, _U, _L, _U, _L, _U, \ _L, _U, _L, _U, _L, _U, _L, _U, \ _L, _U, _L, _U, _L, _U, _L, _U, \ @@ -128,7 +128,7 @@ _U, _L, _U, _L, _U, _P, _P #define _CTYPE_CP855_255 _S|_B #define _CTYPE_CP857_128_254 \ - _U, _L, _L, _L, _L, _L, _L, _L, \ + _U, _L, _L, _L, _L, _L, _L, _L, \ _L, _L, _L, _L, _L, _L, _U, _U, \ _U, _L, _U, _L, _L, _L, _L, _L, \ _U, _U, _U, _L, _P, _U, _U, _L, \ @@ -146,7 +146,7 @@ _P, _P, _P, _P, _P, _P, _P #define _CTYPE_CP857_255 _S|_B #define _CTYPE_CP858_128_254 \ - _U, _L, _L, _L, _L, _L, _L, _L, \ + _U, _L, _L, _L, _L, _L, _L, _L, \ _L, _L, _L, _L, _L, _L, _U, _U, \ _U, _L, _U, _L, _L, _L, _L, _L, \ _L, _U, _U, _L, _P, _U, _P, _L, \ @@ -164,7 +164,7 @@ _P, _P, _P, _P, _P, _P, _P #define _CTYPE_CP858_255 _S|_B #define _CTYPE_CP862_128_254 \ - _U|_L, _U|_L, _U|_L, _U|_L, _U|_L, _U|_L, _U|_L, _U|_L, \ + _U|_L, _U|_L, _U|_L, _U|_L, _U|_L, _U|_L, _U|_L, _U|_L, \ _U|_L, _U|_L, _U|_L, _U|_L, _U|_L, _U|_L, _U|_L, _U|_L, \ _U|_L, _U|_L, _U|_L, _U|_L, _U|_L, _U|_L, _U|_L, _U|_L, \ _U|_L, _U|_L, _U|_L, _P, _P, _P, _P, _L, \ @@ -182,7 +182,7 @@ _P, _P, _P, _P, _P, _P, _P #define _CTYPE_CP862_255 _S|_B #define _CTYPE_CP866_128_254 \ - _U, _U, _U, _U, _U, _U, _U, _U, \ + _U, _U, _U, _U, _U, _U, _U, _U, \ _U, _U, _U, _U, _U, _U, _U, _U, \ _U, _U, _U, _U, _U, _U, _U, _U, \ _U, _U, _U, _U, _U, _U, _U, _U, \ @@ -200,7 +200,7 @@ _P, _P, _P, _P, _P, _P, _P #define _CTYPE_CP866_255 _S|_B #define _CTYPE_CP874_128_254 \ - _P, 0, 0, 0, 0, _P, 0, 0, \ + _P, 0, 0, 0, 0, _P, 0, 0, \ 0, 0, 0, 0, 0, 0, 0, 0, \ 0, _P, _P, _P, _P, _P, _P, _P, \ 0, 0, 0, 0, 0, 0, 0, 0, \ @@ -218,7 +218,7 @@ _P, _P, _U|_L, _U|_L, 0, 0, 0 #define _CTYPE_CP874_255 0 #define _CTYPE_CP1125_128_254 \ - _U, _U, _U, _U, _U, _U, _U, _U, \ + _U, _U, _U, _U, _U, _U, _U, _U, \ _U, _U, _U, _U, _U, _U, _U, _U, \ _U, _U, _U, _U, _U, _U, _U, _U, \ _U, _U, _U, _U, _U, _U, _U, _U, \ @@ -236,7 +236,7 @@ _U, _L, _P, _P, _P, _P, _P #define _CTYPE_CP1125_255 _S|_B #define _CTYPE_CP1250_128_254 \ - _P, 0, _P, 0, _P, _P, _P, _P, \ + _P, 0, _P, 0, _P, _P, _P, _P, \ 0, _P, _U, _P, _U, _U, _U, _U, \ 0, _P, _P, _P, _P, _P, _P, _P, \ 0, _P, _L, _P, _L, _L, _L, _L, \ @@ -254,7 +254,7 @@ _L, _L, _L, _L, _L, _L, _L #define _CTYPE_CP1250_255 _P #define _CTYPE_CP1251_128_254 \ - _U, _U, _P, _L, _P, _P, _P, _P, \ + _U, _U, _P, _L, _P, _P, _P, _P, \ _P, _P, _U, _P, _U, _U, _U, _U, \ _L, _P, _P, _P, _P, _P, _P, _P, \ 0, _P, _L, _P, _L, _L, _L, _L, \ @@ -272,7 +272,7 @@ _L, _L, _L, _L, _L, _L, _L #define _CTYPE_CP1251_255 _L #define _CTYPE_CP1252_128_254 \ - _P, 0, _P, _L, _P, _P, _P, _P, \ + _P, 0, _P, _L, _P, _P, _P, _P, \ _P, _P, _U, _P, _U, _U, 0, 0, \ 0, _P, _P, _P, _P, _P, _P, _P, \ _P, _P, _L, _P, _L, 0, _L, _U, \ @@ -290,7 +290,7 @@ _L, _L, _L, _L, _L, _L, _L #define _CTYPE_CP1252_255 _L #define _CTYPE_CP1253_128_254 \ - _P, 0, _P, _L, _P, _P, _P, _P, \ + _P, 0, _P, _L, _P, _P, _P, _P, \ 0, _P, 0, _P, 0, 0, 0, 0, \ 0, _P, _P, _P, _P, _P, _P, _P, \ 0, _P, 0, _P, 0, 0, 0, 0, \ @@ -308,7 +308,7 @@ _L, _L, _L, _L, _L, _L, _L #define _CTYPE_CP1253_255 _L #define _CTYPE_CP1254_128_254 \ - _P, 0, _P, _L, _P, _P, _P, _P, \ + _P, 0, _P, _L, _P, _P, _P, _P, \ _P, _P, _U, _P, _U, 0, 0, 0, \ 0, _P, _P, _P, _P, _P, _P, _P, \ _P, _P, _L, _P, _L, 0, 0, _U, \ @@ -326,7 +326,7 @@ _L, _L, _L, _L, _L, _L, _L #define _CTYPE_CP1254_255 _L #define _CTYPE_CP1255_128_254 \ - _P, 0, _P, _L, _P, _P, _P, _P, \ + _P, 0, _P, _L, _P, _P, _P, _P, \ _P, _P, 0, _P, 0, 0, 0, 0, \ 0, _P, _P, _P, _P, _P, _P, _P, \ _P, _P, 0, _P, 0, 0, 0, 0, \ @@ -344,7 +344,7 @@ _U|_L, _U|_L, _U|_L, 0, 0, _P, _P #define _CTYPE_CP1255_255 0 #define _CTYPE_CP1256_128_254 \ - _P, _U|_L, _P, _L, _P, _P, _P, _P, \ + _P, _U|_L, _P, _L, _P, _P, _P, _P, \ _P, _P, _U|_L, _P, _U, _U|_L, _U|_L, _U|_L, \ _U|_L, _P, _P, _P, _P, _P, _P, _P, \ _U|_L, _P, _U|_L, _P, _L, _P, _P, _U|_L, \ @@ -362,7 +362,7 @@ _P, _L, _P, _L, _L, _P, _P #define _CTYPE_CP1256_255 _U|_L #define _CTYPE_CP1257_128_254 \ - _P, 0, _P, 0, _P, _P, _P, _P, \ + _P, 0, _P, 0, _P, _P, _P, _P, \ 0, _P, 0, _P, 0, _P, _P, _P, \ 0, _P, _P, _P, _P, _P, _P, _P, \ 0, _P, 0, _P, 0, _P, _P, 0, \ @@ -380,7 +380,7 @@ _L, _L, _L, _L, _L, _L, _L #define _CTYPE_CP1257_255 _P #define _CTYPE_CP1258_128_254 \ - _P, 0, _P, _L, _P, _P, _P, _P, \ + _P, 0, _P, _L, _P, _P, _P, _P, \ _P, _P, 0, _P, _U, 0, 0, 0, \ 0, _P, _P, _P, _P, _P, _P, _P, \ _P, _P, 0, _P, _L, 0, 0, _U, \ @@ -398,7 +398,7 @@ _L, _L, _L, _L, _L, _L, _P #define _CTYPE_CP1258_255 _L #define _CTYPE_CP20866_128_254 \ - _P, _P, _P, _P, _P, _P, _P, _P, \ + _P, _P, _P, _P, _P, _P, _P, _P, \ _P, _P, _P, _P, _P, _P, _P, _P, \ _P, _P, _P, _P, _P, _P, _P, _P, \ _P, _P, _S|_B, _P, _P, _P, _P, _P, \ @@ -416,7 +416,7 @@ _U, _U, _U, _U, _U, _U, _U #define _CTYPE_CP20866_255 _U #define _CTYPE_CP21866_128_254 \ - _P, _P, _P, _P, _P, _P, _P, _P, \ + _P, _P, _P, _P, _P, _P, _P, _P, \ _P, _P, _P, _P, _P, _P, _P, _P, \ _P, _P, _P, _P, _P, _P, _P, _P, \ _P, _P, _S|_B, _P, _P, _P, _P, _P, \ @@ -434,7 +434,7 @@ _U, _U, _U, _U, _U, _U, _U #define _CTYPE_CP21866_255 _U #define _CTYPE_GEORGIAN_PS_128_254 \ - _P, 0, _P, _L, _P, _P, _P, _P, \ + _P, 0, _P, _L, _P, _P, _P, _P, \ _P, _P, _U, _P, _U, _U, 0, 0, \ 0, _P, _P, _P, _P, _P, _P, _P, \ _P, _P, _L, _P, _L, 0, _L, _U, \ @@ -452,7 +452,7 @@ _L, _L, _L, _L, _L, _L, _L #define _CTYPE_GEORGIAN_PS_255 _L #define _CTYPE_PT154_128_254 \ - _U, _U, _U, _L, _P, _P, _U, _U, \ + _U, _U, _U, _L, _P, _P, _U, _U, \ _U, _L, _U, _U, _U, _U, _U, _U, \ _L, _P, _P, _P, _P, _P, _P, _P, \ _L, _L, _L, _L, _L, _L, _L, _L, \ @@ -469,13 +469,31 @@ _L, _L, _L, _L, _L, _L, _L, _L, \ _L, _L, _L, _L, _L, _L, _L #define _CTYPE_PT154_255 _L +#define _CTYPE_CP103_128_254 \ + _L, _L, _P, _U, _P, _P, _P, _P, \ + 0, _P, _L, _P, _U, _L, _U, 0, \ + _U, _P, _P, _P, _P, _P, _P, _P, \ + 0, _P, 0, _P, 0, 0, 0, 0, \ + 0, _L, _U, _L, _P, _L, _P, _P, \ + 0, 0, 0, _P, _P, _P, _P, 0, \ + _P, _P, _P, _U, 0, _U, _P, _P, \ + 0, _P, 0, _P, 0, 0, 0, _P, \ + _L, _L, _L, _L, _L, _L, _L, _L, \ + _L, _L, _L, _L, _L, _L, _L, _L, \ + _L, _L, _L, _L, _L, _L, _L, _L, \ + _L, _L, _L, _L, _L, _L, _L, _L, \ + _U, _U, _U, _U, _U, _U, _U, _U, \ + _U, _U, _U, _U, _U, _U, _U, _U, \ + _U, _U, _U, _U, _U, _U, _U, _U, \ + _U, _U, _U, _U, _U, _U, _U +#define _CTYPE_CP103_255 _U #if defined(ALLOW_NEGATIVE_CTYPE_INDEX) #ifndef __CYGWIN__ static const #endif -char __ctype_cp[26][128 + 256] = { +char __ctype_cp[27][128 + 256] = { { _CTYPE_CP437_128_254, 0, _CTYPE_DATA_0_127, @@ -632,11 +650,17 @@ char __ctype_cp[26][128 + 256] = { _CTYPE_PT154_128_254, _CTYPE_PT154_255 }, + { _CTYPE_CP103_128_254, + 0, + _CTYPE_DATA_0_127, + _CTYPE_CP103_128_254, + _CTYPE_CP103_255 + }, }; #else /* !defined(ALLOW_NEGATIVE_CTYPE_INDEX) */ -static const char __ctype_cp[26][1 + 256] = { +static const char __ctype_cp[27][1 + 256] = { { 0, _CTYPE_DATA_0_127, _CTYPE_CP437_128_254, @@ -767,6 +791,11 @@ static const char __ctype_cp[26][1 + 256] = { _CTYPE_PT154_128_254, _CTYPE_PT154_255 }, + { 0, + _CTYPE_DATA_0_127, + _CTYPE_CP103_128_254, + _CTYPE_CP103_255 + }, }; #endif /* ALLOW_NEGATIVE_CTYPE_INDEX */ diff --git a/newlib/libc/ctype/ctype_iso.h b/newlib/libc/ctype/ctype_iso.h index 60087dc92d..616e4cc03a 100644 --- a/newlib/libc/ctype/ctype_iso.h +++ b/newlib/libc/ctype/ctype_iso.h @@ -1,4 +1,4 @@ -/* ctype table definitions for ISO-8859-x charsets. +/* ctype table definitions for ISO-8859-x charsets. Included by ctype_.c. */ #define _CTYPE_ISO_8859_1_128_254 \ @@ -20,7 +20,7 @@ _L, _L, _L, _L, _L, _L, _L #define _CTYPE_ISO_8859_1_255 _L #define _CTYPE_ISO_8859_2_128_254 \ - _C, _C, _C, _C, _C, _C, _C, _C, \ + _C, _C, _C, _C, _C, _C, _C, _C, \ _C, _C, _C, _C, _C, _C, _C, _C, \ _C, _C, _C, _C, _C, _C, _C, _C, \ _C, _C, _C, _C, _C, _C, _C, _C, \ @@ -38,7 +38,7 @@ _L, _L, _L, _L, _L, _L, _L #define _CTYPE_ISO_8859_2_255 _P #define _CTYPE_ISO_8859_3_128_254 \ - _C, _C, _C, _C, _C, _C, _C, _C, \ + _C, _C, _C, _C, _C, _C, _C, _C, \ _C, _C, _C, _C, _C, _C, _C, _C, \ _C, _C, _C, _C, _C, _C, _C, _C, \ _C, _C, _C, _C, _C, _C, _C, _C, \ @@ -56,7 +56,7 @@ _L, _L, _L, _L, _L, _L, _L #define _CTYPE_ISO_8859_3_255 _P #define _CTYPE_ISO_8859_4_128_254 \ - _C, _C, _C, _C, _C, _C, _C, _C, \ + _C, _C, _C, _C, _C, _C, _C, _C, \ _C, _C, _C, _C, _C, _C, _C, _C, \ _C, _C, _C, _C, _C, _C, _C, _C, \ _C, _C, _C, _C, _C, _C, _C, _C, \ @@ -74,7 +74,7 @@ _L, _L, _L, _L, _L, _L, _L #define _CTYPE_ISO_8859_4_255 _L #define _CTYPE_ISO_8859_5_128_254 \ - _C, _C, _C, _C, _C, _C, _C, _C, \ + _C, _C, _C, _C, _C, _C, _C, _C, \ _C, _C, _C, _C, _C, _C, _C, _C, \ _C, _C, _C, _C, _C, _C, _C, _C, \ _C, _C, _C, _C, _C, _C, _C, _C, \ @@ -92,7 +92,7 @@ _L, _L, _L, _L, _L, _P, _L #define _CTYPE_ISO_8859_5_255 _L #define _CTYPE_ISO_8859_6_128_254 \ - _C, _C, _C, _C, _C, _C, _C, _C, \ + _C, _C, _C, _C, _C, _C, _C, _C, \ _C, _C, _C, _C, _C, _C, _C, _C, \ _C, _C, _C, _C, _C, _C, _C, _C, \ _C, _C, _C, _C, _C, _C, _C, _C, \ @@ -110,7 +110,7 @@ 0, 0, 0, 0, 0, 0, 0 #define _CTYPE_ISO_8859_6_255 0 #define _CTYPE_ISO_8859_7_128_254 \ - _C, _C, _C, _C, _C, _C, _C, _C, \ + _C, _C, _C, _C, _C, _C, _C, _C, \ _C, _C, _C, _C, _C, _C, _C, _C, \ _C, _C, _C, _C, _C, _C, _C, _C, \ _C, _C, _C, _C, _C, _C, _C, _C, \ @@ -128,7 +128,7 @@ _L, _L, _L, _L, _L, _L, _L #define _CTYPE_ISO_8859_7_255 0 #define _CTYPE_ISO_8859_8_128_254 \ - _C, _C, _C, _C, _C, _C, _C, _C, \ + _C, _C, _C, _C, _C, _C, _C, _C, \ _C, _C, _C, _C, _C, _C, _C, _C, \ _C, _C, _C, _C, _C, _C, _C, _C, \ _C, _C, _C, _C, _C, _C, _C, _C, \ @@ -146,7 +146,7 @@ _U|_L, _U|_L, _U|_L, 0, 0, _P, _P #define _CTYPE_ISO_8859_8_255 0 #define _CTYPE_ISO_8859_9_128_254 \ - _C, _C, _C, _C, _C, _C, _C, _C, \ + _C, _C, _C, _C, _C, _C, _C, _C, \ _C, _C, _C, _C, _C, _C, _C, _C, \ _C, _C, _C, _C, _C, _C, _C, _C, \ _C, _C, _C, _C, _C, _C, _C, _C, \ @@ -164,7 +164,7 @@ _L, _L, _L, _L, _L, _L, _L #define _CTYPE_ISO_8859_9_255 _L #define _CTYPE_ISO_8859_10_128_254 \ - _C, _C, _C, _C, _C, _C, _C, _C, \ + _C, _C, _C, _C, _C, _C, _C, _C, \ _C, _C, _C, _C, _C, _C, _C, _C, \ _C, _C, _C, _C, _C, _C, _C, _C, \ _C, _C, _C, _C, _C, _C, _C, _C, \ @@ -182,7 +182,7 @@ _L, _L, _L, _L, _L, _L, _L #define _CTYPE_ISO_8859_10_255 _L #define _CTYPE_ISO_8859_11_128_254 \ - _C, _C, _C, _C, _C, _C, _C, _C, \ + _C, _C, _C, _C, _C, _C, _C, _C, \ _C, _C, _C, _C, _C, _C, _C, _C, \ _C, _C, _C, _C, _C, _C, _C, _C, \ _C, _C, _C, _C, _C, _C, _C, _C, \ @@ -200,7 +200,7 @@ _U|_L, _U|_L, _U|_L, _U|_L, 0, 0, 0 #define _CTYPE_ISO_8859_11_255 0 #define _CTYPE_ISO_8859_13_128_254 \ - _C, _C, _C, _C, _C, _C, _C, _C, \ + _C, _C, _C, _C, _C, _C, _C, _C, \ _C, _C, _C, _C, _C, _C, _C, _C, \ _C, _C, _C, _C, _C, _C, _C, _C, \ _C, _C, _C, _C, _C, _C, _C, _C, \ @@ -218,7 +218,7 @@ _L, _L, _L, _L, _L, _L, _L #define _CTYPE_ISO_8859_13_255 _P #define _CTYPE_ISO_8859_14_128_254 \ - _C, _C, _C, _C, _C, _C, _C, _C, \ + _C, _C, _C, _C, _C, _C, _C, _C, \ _C, _C, _C, _C, _C, _C, _C, _C, \ _C, _C, _C, _C, _C, _C, _C, _C, \ _C, _C, _C, _C, _C, _C, _C, _C, \ @@ -236,7 +236,7 @@ _L, _L, _L, _L, _L, _L, _L #define _CTYPE_ISO_8859_14_255 _L #define _CTYPE_ISO_8859_15_128_254 \ - _C, _C, _C, _C, _C, _C, _C, _C, \ + _C, _C, _C, _C, _C, _C, _C, _C, \ _C, _C, _C, _C, _C, _C, _C, _C, \ _C, _C, _C, _C, _C, _C, _C, _C, \ _C, _C, _C, _C, _C, _C, _C, _C, \ @@ -254,7 +254,7 @@ _L, _L, _L, _L, _L, _L, _L #define _CTYPE_ISO_8859_15_255 _L #define _CTYPE_ISO_8859_16_128_254 \ - _C, _C, _C, _C, _C, _C, _C, _C, \ + _C, _C, _C, _C, _C, _C, _C, _C, \ _C, _C, _C, _C, _C, _C, _C, _C, \ _C, _C, _C, _C, _C, _C, _C, _C, \ _C, _C, _C, _C, _C, _C, _C, _C, \ diff --git a/newlib/libc/ctype/mkcaseconv b/newlib/libc/ctype/mkcaseconv index ab0571d8fa..a455aed16e 100755 --- a/newlib/libc/ctype/mkcaseconv +++ b/newlib/libc/ctype/mkcaseconv @@ -89,7 +89,7 @@ then diff=-1 } item () { - if [ "$1" == "#error" ] + if [ "$1" = "#error" ] then echo "$*" return fi diff --git a/newlib/libc/iconv/iconv.tex b/newlib/libc/iconv/iconv.tex index 42d04c0b61..b668af7fb0 100644 --- a/newlib/libc/iconv/iconv.tex +++ b/newlib/libc/iconv/iconv.tex @@ -1,4 +1,4 @@ -@node Iconv +@node Encoding conversions @chapter Encoding conversions (@file{iconv.h}) This chapter describes the Newlib iconv library. @@ -6,7 +6,7 @@ @file{iconv.h}. @menu -* iconv:: Encoding conversion routines +* Function iconv:: Encoding conversion routines * Introduction to iconv:: Introduction to iconv and encodings * Supported encodings:: The list of currently supported encodings * iconv design decisions:: General iconv library design issues diff --git a/newlib/libc/include/_syslist.h b/newlib/libc/include/_syslist.h index 271644efa9..2946af5512 100644 --- a/newlib/libc/include/_syslist.h +++ b/newlib/libc/include/_syslist.h @@ -24,6 +24,7 @@ #define _unlink unlink #define _wait wait #define _write write +#define _getentropy getentropy #endif /* MISSING_SYSCALL_NAMES */ #if defined MISSING_SYSCALL_NAMES || !defined HAVE_OPENDIR diff --git a/newlib/libc/include/machine/ieeefp.h b/newlib/libc/include/machine/ieeefp.h index 9bb8af02f4..ede75e1aa8 100644 --- a/newlib/libc/include/machine/ieeefp.h +++ b/newlib/libc/include/machine/ieeefp.h @@ -218,9 +218,14 @@ #else #define __IEEE_LITTLE_ENDIAN #endif -#ifdef __riscv_flen +#if defined(__riscv_flen) || defined (__riscv_zfinx) # define _SUPPORTS_ERREXCEPT #endif +#if (__riscv_flen == 64) || defined (__riscv_zdinx) +# define __OBSOLETE_MATH_DEFAULT 0 +#else +# define __OBSOLETE_MATH_DEFAULT 1 +#endif #endif #ifdef __i960__ @@ -501,6 +506,10 @@ #define __IEEE_LITTLE_ENDIAN #endif +#ifdef __XTENSA_EB__ +#define __IEEE_BIG_ENDIAN +#endif + #ifdef __CYGWIN__ #define __OBSOLETE_MATH_DEFAULT 0 #endif diff --git a/newlib/libc/include/machine/setjmp.h b/newlib/libc/include/machine/setjmp.h index 53878a03d3..e3534e18d0 100644 --- a/newlib/libc/include/machine/setjmp.h +++ b/newlib/libc/include/machine/setjmp.h @@ -12,9 +12,13 @@ _BEGIN_STD_C #if defined(__arm__) || defined(__thumb__) /* * All callee preserved registers: - * v1 - v7, fp, ip, sp, lr, f4, f5, f6, f7 + * core registers: + * r4 - r10, fp, sp, lr + * VFP registers (architectural support dependent): + * d8 - d15 */ -#define _JBLEN 23 +#define _JBLEN 20 +#define _JBTYPE long long #endif #if defined(__aarch64__) @@ -300,6 +304,35 @@ _BEGIN_STD_C #define _JBLEN 8 #endif +#ifdef __XTENSA__ +#if __XTENSA_WINDOWED_ABI__ + +/* The jmp_buf structure for Xtensa windowed ABI holds the following + (where "proc" is the procedure that calls setjmp): 4-12 registers + from the window of proc, the 4 words from the save area at proc's $sp + (in case a subsequent alloca in proc moves $sp), and the return + address within proc. Everything else is saved on the stack in the + normal save areas. The jmp_buf structure is: + + struct jmp_buf { + int regs[12]; + int save[4]; + void *return_address; + } + + See the setjmp code for details. */ + +/* sizeof(struct jmp_buf) */ +#define _JBLEN 17 + +#else /* __XTENSA_CALL0_ABI__ */ + +/* a0, a1, a12, a13, a14, a15 */ +#define _JBLEN 6 + +#endif /* __XTENSA_CALL0_ABI__ */ +#endif /* __XTENSA__ */ + #ifdef __mep__ /* 16 GPRs, pc, hi, lo */ #define _JBLEN 19 diff --git a/newlib/libc/include/math.h b/newlib/libc/include/math.h index 54e30ef82d..5e92d2662d 100644 --- a/newlib/libc/include/math.h +++ b/newlib/libc/include/math.h @@ -445,7 +445,9 @@ extern float hypotf (float, float); simply call the double functions. On Cygwin the long double functions are implemented independently from newlib to be able to use optimized assembler functions despite using the Microsoft x86_64 ABI. */ -#if defined (_LDBL_EQ_DBL) || defined (__CYGWIN__) +#if defined (_LDBL_EQ_DBL) || defined (__CYGWIN__) || \ + defined(__aarch64__) || defined(__i386__) || defined(__x86_64__) || \ + defined(__riscv) /* Reentrant ANSI C functions. */ #ifndef __math_68881 extern long double atanl (long double); diff --git a/newlib/libc/include/reent.h b/newlib/libc/include/reent.h index 23d572cd3c..b1dd2a7c45 100644 --- a/newlib/libc/include/reent.h +++ b/newlib/libc/include/reent.h @@ -125,6 +125,7 @@ struct timezone; #define _unlink_r(__reent, __path) unlink(__path) #define _wait_r(__reent, __status) wait(__status) #define _write_r(__reent, __fd, __buff, __cnt) write(__fd, __buff, __cnt) +#define _getentropy_r(__reent, __buff, __cnt) getentropy(__buff, __cnt) #define _gettimeofday_r(__reent, __tp, __tzp) gettimeofday(__tp, __tzp) #ifdef __LARGE64_FILES @@ -156,6 +157,7 @@ extern _CLOCK_T_ _times_r (struct _reent *, struct tms *); extern int _unlink_r (struct _reent *, const char *); extern int _wait_r (struct _reent *, int *); extern _ssize_t _write_r (struct _reent *, int, const void *, size_t); +extern int _getentropy_r (struct _reent *, void *, size_t); /* This one is not guaranteed to be available on all targets. */ extern int _gettimeofday_r (struct _reent *, struct timeval *__tp, void *__tzp); diff --git a/newlib/libc/include/spawn.h b/newlib/libc/include/spawn.h index d172177b12..d6ae992dbd 100644 --- a/newlib/libc/include/spawn.h +++ b/newlib/libc/include/spawn.h @@ -70,6 +70,13 @@ int posix_spawn_file_actions_addopen (posix_spawn_file_actions_t * __restrict, int, const char * __restrict, int, mode_t); int posix_spawn_file_actions_adddup2 (posix_spawn_file_actions_t *, int, int); int posix_spawn_file_actions_addclose (posix_spawn_file_actions_t *, int); +#if __MISC_VISIBLE || __GNU_VISIBLE +int posix_spawn_file_actions_addchdir_np (posix_spawn_file_actions_t *__restrict +, + const char *__restrict); +int posix_spawn_file_actions_addfchdir_np (posix_spawn_file_actions_t *__restrict, + int); +#endif /* * Spawn attributes diff --git a/newlib/libc/include/ssp/ssp.h b/newlib/libc/include/ssp/ssp.h index 9229086599..49ea5f2dd8 100644 --- a/newlib/libc/include/ssp/ssp.h +++ b/newlib/libc/include/ssp/ssp.h @@ -43,11 +43,20 @@ #define __ssp_inline extern __inline__ __attribute__((__always_inline__, __gnu_inline__)) +#if __SSP_FORTIFY_LEVEL > 2 +#define __ssp_bos(ptr) __builtin_dynamic_object_size(ptr, 1) +#define __ssp_bos0(ptr) __builtin_dynamic_object_size(ptr, 0) +#define __ssp_bos_known(ptr) \ + (__builtin_object_size(ptr, 0) != (size_t)-1 \ + || !__builtin_constant_p(__ssp_bos(ptr))) +#else #define __ssp_bos(ptr) __builtin_object_size(ptr, __SSP_FORTIFY_LEVEL > 1) #define __ssp_bos0(ptr) __builtin_object_size(ptr, 0) +#define __ssp_bos_known(ptr) (__ssp_bos0(ptr) != (size_t)-1) +#endif #define __ssp_check(buf, len, bos) \ - if (bos(buf) != (size_t)-1 && len > bos(buf)) \ + if (__ssp_bos_known(buf) && len > bos(buf)) \ __chk_fail() #define __ssp_decl(rtype, fun, args) \ rtype __ssp_real_(fun) args __asm__(__ASMNAME(#fun)); \ diff --git a/newlib/libc/include/ssp/string.h b/newlib/libc/include/ssp/string.h index 85c4512acf..22b52097cb 100644 --- a/newlib/libc/include/ssp/string.h +++ b/newlib/libc/include/ssp/string.h @@ -49,12 +49,12 @@ __END_DECLS #if __SSP_FORTIFY_LEVEL > 0 #define __ssp_bos_check3(fun, dst, src, len) \ - ((__ssp_bos0(dst) != (size_t)-1) ? \ + (__ssp_bos_known(dst) ? \ __builtin___ ## fun ## _chk(dst, src, len, __ssp_bos0(dst)) : \ __ ## fun ## _ichk(dst, src, len)) #define __ssp_bos_check2(fun, dst, src) \ - ((__ssp_bos0(dst) != (size_t)-1) ? \ + (__ssp_bos_known(dst) ? \ __builtin___ ## fun ## _chk(dst, src, __ssp_bos0(dst)) : \ __ ## fun ## _ichk(dst, src)) diff --git a/newlib/libc/include/ssp/strings.h b/newlib/libc/include/ssp/strings.h index 13adba1752..be59882ebc 100644 --- a/newlib/libc/include/ssp/strings.h +++ b/newlib/libc/include/ssp/strings.h @@ -37,11 +37,11 @@ #if __BSD_VISIBLE || __POSIX_VISIBLE <= 200112 #define bcopy(src, dst, len) \ - ((__ssp_bos0(dst) != (size_t)-1) ? \ + (__ssp_bos_known(dst) ? \ __builtin___memmove_chk(dst, src, len, __ssp_bos0(dst)) : \ __memmove_ichk(dst, src, len)) #define bzero(dst, len) \ - ((__ssp_bos0(dst) != (size_t)-1) ? \ + (__ssp_bos_known(dst) ? \ __builtin___memset_chk(dst, 0, len, __ssp_bos0(dst)) : \ __memset_ichk(dst, 0, len)) #endif diff --git a/newlib/libc/include/stdatomic.h b/newlib/libc/include/stdatomic.h index d58e795eb9..af915145c1 100644 --- a/newlib/libc/include/stdatomic.h +++ b/newlib/libc/include/stdatomic.h @@ -33,7 +33,8 @@ #include #include -#if __has_extension(c_atomic) || __has_extension(cxx_atomic) +#if (__has_extension(c_atomic) || __has_extension(cxx_atomic)) && \ + defined(__clang__) #define __CLANG_ATOMICS #elif __GNUC_PREREQ__(4, 7) #define __GNUC_ATOMICS diff --git a/newlib/libc/include/stdio.h b/newlib/libc/include/stdio.h index ea4ddf3293..77966578d8 100644 --- a/newlib/libc/include/stdio.h +++ b/newlib/libc/include/stdio.h @@ -620,10 +620,8 @@ FILE *_funopen_r (struct _reent *, const void *__cookie, int (*__closefn)(void *__cookie)); # endif /* !__LARGE64_FILES */ -# define fropen(__cookie, __fn) funopen(__cookie, __fn, (int (*)())0, \ - (fpos_t (*)())0, (int (*)())0) -# define fwopen(__cookie, __fn) funopen(__cookie, (int (*)())0, __fn, \ - (fpos_t (*)())0, (int (*)())0) +# define fropen(__cookie, __fn) funopen(__cookie, __fn, NULL, NULL, NULL) +# define fwopen(__cookie, __fn) funopen(__cookie, NULL, __fn, NULL, NULL) #endif /* __BSD_VISIBLE */ #if __GNU_VISIBLE diff --git a/newlib/libc/include/stdlib.h b/newlib/libc/include/stdlib.h index 15b349440e..0690a03773 100644 --- a/newlib/libc/include/stdlib.h +++ b/newlib/libc/include/stdlib.h @@ -221,11 +221,13 @@ char * ecvtbuf (double, int, int*, int*, char *); char * fcvtbuf (double, int, int*, int*, char *); char * ecvtf (float,int,int *,int *); #endif +#if !defined (__CYGWIN__) || defined (_LIBC) char * __itoa (int, char *, int); char * __utoa (unsigned, char *, int); -#if __MISC_VISIBLE +# if __MISC_VISIBLE char * itoa (int, char *, int); char * utoa (unsigned, char *, int); +# endif #endif #if __POSIX_VISIBLE int rand_r (unsigned *__seed); diff --git a/newlib/libc/include/sys/cdefs.h b/newlib/libc/include/sys/cdefs.h index 720e700920..d13a92a79e 100644 --- a/newlib/libc/include/sys/cdefs.h +++ b/newlib/libc/include/sys/cdefs.h @@ -328,6 +328,9 @@ * __generic(). Unlike _Generic(), this macro can only distinguish * between a single type, so it requires nested invocations to * distinguish multiple cases. + * + * Note that the comma operator is used to force expr to decay in + * order to match _Generic(). */ #if (defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) || \ @@ -337,7 +340,7 @@ #elif __GNUC_PREREQ__(3, 1) && !defined(__cplusplus) #define __generic(expr, t, yes, no) \ __builtin_choose_expr( \ - __builtin_types_compatible_p(__typeof(expr), t), yes, no) + __builtin_types_compatible_p(__typeof((0, (expr))), t), yes, no) #endif /* @@ -409,17 +412,28 @@ #endif /* - * GCC 2.95 provides `__restrict' as an extension to C90 to support the - * C99-specific `restrict' type qualifier. We happen to use `__restrict' as - * a way to define the `restrict' type qualifier without disturbing older - * software that is unaware of C99 keywords. + * We use `__restrict' as a way to define the `restrict' type qualifier + * without disturbing older software that is unaware of C99 keywords. + * GCC also provides `__restrict' as an extension to support C99-style + * restricted pointers in other language modes. */ -#if !(__GNUC__ == 2 && __GNUC_MINOR__ == 95) -#if !defined(__STDC_VERSION__) || __STDC_VERSION__ < 199901 -#define __restrict -#else +#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901 #define __restrict restrict +#elif !__GNUC_PREREQ__(2, 95) +#define __restrict #endif + +/* + * Additionally, we allow to use `__restrict_arr' for declaring arrays as + * non-overlapping per C99. That's supported since gcc 3.1, but it's not + * allowed in C++. + */ +#if defined(__cplusplus) || !__GNUC_PREREQ__(3, 1) +#define __restrict_arr +#elif defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L +#define __restrict_arr restrict +#else +#define __restrict_arr #endif /* diff --git a/newlib/libc/include/sys/endian.h b/newlib/libc/include/sys/endian.h new file mode 100644 index 0000000000..3685322b69 --- /dev/null +++ b/newlib/libc/include/sys/endian.h @@ -0,0 +1,207 @@ +/*- + * Copyright (c) 2002 Thomas Moestl + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD: head/sys/sys/endian.h 208331 2010-05-20 06:16:13Z phk $ + */ + +#ifndef _SYS_ENDIAN_H_ +#define _SYS_ENDIAN_H_ + +#include +#include +#include + +#ifndef _UINT8_T_DECLARED +typedef __uint8_t uint8_t; +#define _UINT8_T_DECLARED +#endif + +#ifndef _UINT16_T_DECLARED +typedef __uint16_t uint16_t; +#define _UINT16_T_DECLARED +#endif + +#ifndef _UINT32_T_DECLARED +typedef __uint32_t uint32_t; +#define _UINT32_T_DECLARED +#endif + +#ifndef _UINT64_T_DECLARED +typedef __uint64_t uint64_t; +#define _UINT64_T_DECLARED +#endif + +/* + * General byte order swapping functions. + */ +#define bswap16(x) __bswap16(x) +#define bswap32(x) __bswap32(x) +#define bswap64(x) __bswap64(x) + +/* + * Host to big endian, host to little endian, big endian to host, and little + * endian to host byte order functions as detailed in byteorder(9). + */ +#if _BYTE_ORDER == _LITTLE_ENDIAN +#define htobe16(x) bswap16((x)) +#define htobe32(x) bswap32((x)) +#define htobe64(x) bswap64((x)) +#define htole16(x) ((uint16_t)(x)) +#define htole32(x) ((uint32_t)(x)) +#define htole64(x) ((uint64_t)(x)) + +#define be16toh(x) bswap16((x)) +#define be32toh(x) bswap32((x)) +#define be64toh(x) bswap64((x)) +#define le16toh(x) ((uint16_t)(x)) +#define le32toh(x) ((uint32_t)(x)) +#define le64toh(x) ((uint64_t)(x)) +#else /* _BYTE_ORDER != _LITTLE_ENDIAN */ +#define htobe16(x) ((uint16_t)(x)) +#define htobe32(x) ((uint32_t)(x)) +#define htobe64(x) ((uint64_t)(x)) +#define htole16(x) bswap16((x)) +#define htole32(x) bswap32((x)) +#define htole64(x) bswap64((x)) + +#define be16toh(x) ((uint16_t)(x)) +#define be32toh(x) ((uint32_t)(x)) +#define be64toh(x) ((uint64_t)(x)) +#define le16toh(x) bswap16((x)) +#define le32toh(x) bswap32((x)) +#define le64toh(x) bswap64((x)) +#endif /* _BYTE_ORDER == _LITTLE_ENDIAN */ + +/* Alignment-agnostic encode/decode bytestream to/from little/big endian. */ + +static __inline uint16_t +be16dec(const void *pp) +{ + uint8_t const *p = (uint8_t const *)pp; + + return (((unsigned)p[0] << 8) | p[1]); +} + +static __inline uint32_t +be32dec(const void *pp) +{ + uint8_t const *p = (uint8_t const *)pp; + + return (((uint32_t)p[0] << 24) | ((uint32_t)p[1] << 16) | + ((uint32_t)p[2] << 8) | p[3]); +} + +static __inline uint64_t +be64dec(const void *pp) +{ + uint8_t const *p = (uint8_t const *)pp; + + return (((uint64_t)be32dec(p) << 32) | be32dec(p + 4)); +} + +static __inline uint16_t +le16dec(const void *pp) +{ + uint8_t const *p = (uint8_t const *)pp; + + return (((unsigned)p[1] << 8) | p[0]); +} + +static __inline uint32_t +le32dec(const void *pp) +{ + uint8_t const *p = (uint8_t const *)pp; + + return (((uint32_t)p[3] << 24) | ((uint32_t)p[2] << 16) | + ((uint32_t)p[1] << 8) | p[0]); +} + +static __inline uint64_t +le64dec(const void *pp) +{ + uint8_t const *p = (uint8_t const *)pp; + + return (((uint64_t)le32dec(p + 4) << 32) | le32dec(p)); +} + +static __inline void +be16enc(void *pp, uint16_t u) +{ + uint8_t *p = (uint8_t *)pp; + + p[0] = (u >> 8) & 0xff; + p[1] = u & 0xff; +} + +static __inline void +be32enc(void *pp, uint32_t u) +{ + uint8_t *p = (uint8_t *)pp; + + p[0] = (u >> 24) & 0xff; + p[1] = (u >> 16) & 0xff; + p[2] = (u >> 8) & 0xff; + p[3] = u & 0xff; +} + +static __inline void +be64enc(void *pp, uint64_t u) +{ + uint8_t *p = (uint8_t *)pp; + + be32enc(p, (uint32_t)(u >> 32)); + be32enc(p + 4, (uint32_t)(u & 0xffffffffU)); +} + +static __inline void +le16enc(void *pp, uint16_t u) +{ + uint8_t *p = (uint8_t *)pp; + + p[0] = u & 0xff; + p[1] = (u >> 8) & 0xff; +} + +static __inline void +le32enc(void *pp, uint32_t u) +{ + uint8_t *p = (uint8_t *)pp; + + p[0] = u & 0xff; + p[1] = (u >> 8) & 0xff; + p[2] = (u >> 16) & 0xff; + p[3] = (u >> 24) & 0xff; +} + +static __inline void +le64enc(void *pp, uint64_t u) +{ + uint8_t *p = (uint8_t *)pp; + + le32enc(p, (uint32_t)(u & 0xffffffffU)); + le32enc(p + 4, (uint32_t)(u >> 32)); +} + +#endif /* _SYS_ENDIAN_H_ */ diff --git a/newlib/libc/include/sys/features.h b/newlib/libc/include/sys/features.h index 45476ce4ad..6a925c87e9 100644 --- a/newlib/libc/include/sys/features.h +++ b/newlib/libc/include/sys/features.h @@ -87,6 +87,9 @@ extern "C" { * _ISOC11_SOURCE or gcc -std=c11 or g++ -std=c++11 * ISO C11 * + * _ISOC2x_SOURCE or gcc -std=c2x or g++ -std=c++20 + * ISO C11 + * * _ATFILE_SOURCE (implied by _POSIX_C_SOURCE >= 200809L) * "at" functions * @@ -101,7 +104,7 @@ extern "C" { * _DEFAULT_SOURCE (or none of the above) * POSIX-1.2008 with BSD and SVr4 extensions * - * _FORTIFY_SOURCE = 1 or 2 + * _FORTIFY_SOURCE = 1, 2 or 3 * Object Size Checking function wrappers */ @@ -114,6 +117,8 @@ extern "C" { #define _ISOC99_SOURCE 1 #undef _ISOC11_SOURCE #define _ISOC11_SOURCE 1 +#undef _ISOC2X_SOURCE +#define _ISOC2X_SOURCE 1 #undef _POSIX_SOURCE #define _POSIX_SOURCE 1 #undef _POSIX_C_SOURCE @@ -215,6 +220,11 @@ extern "C" { * g++ -std=c++11 or newer (on by default since GCC 6), or with * _ISOC11_SOURCE. * + * __ISO_C_VISIBLE >= 2020 + * ISO C2x; enabled with gcc -std=c2x or newer, + * g++ -std=c++20 or newer, or with + * _ISOC2X_SOURCE. + * * __ATFILE_VISIBLE * "at" functions; enabled by default, with _ATFILE_SOURCE, * _POSIX_C_SOURCE >= 200809L, or _XOPEN_SOURCE >= 700. @@ -237,7 +247,7 @@ extern "C" { * GNU extensions; enabled with _GNU_SOURCE. * * __SSP_FORTIFY_LEVEL - * Object Size Checking; defined to 0 (off), 1, or 2. + * Object Size Checking; defined to 0 (off), 1, 2 or 3. * * In all cases above, "enabled by default" means either by defining * _DEFAULT_SOURCE, or by not defining any of the public feature test macros. @@ -261,7 +271,10 @@ extern "C" { #define __GNU_VISIBLE 0 #endif -#if defined(_ISOC11_SOURCE) || \ +#if defined(_ISOC2X_SOURCE) || \ + (__STDC_VERSION__ - 0) > 201710L || (__cplusplus - 0) >= 202002L +#define __ISO_C_VISIBLE 2020 +#elif defined(_ISOC11_SOURCE) || \ (__STDC_VERSION__ - 0) >= 201112L || (__cplusplus - 0) >= 201103L #define __ISO_C_VISIBLE 2011 #elif defined(_ISOC99_SOURCE) || (_POSIX_C_SOURCE - 0) >= 200112L || \ @@ -322,7 +335,13 @@ extern "C" { #if _FORTIFY_SOURCE > 0 && !defined(__cplusplus) && !defined(__lint__) && \ (__OPTIMIZE__ > 0 || defined(__clang__)) && __GNUC_PREREQ__(4, 1) && \ !defined(_LIBC) -# if _FORTIFY_SOURCE > 1 +# if _FORTIFY_SOURCE > 2 && defined(__has_builtin) +# if __has_builtin(__builtin_dynamic_object_size) +# define __SSP_FORTIFY_LEVEL 3 +# else +# define __SSP_FORTIFY_LEVEL 2 +# endif +# elif _FORTIFY_SOURCE > 1 # define __SSP_FORTIFY_LEVEL 2 # else # define __SSP_FORTIFY_LEVEL 1 diff --git a/newlib/libc/include/sys/reent.h b/newlib/libc/include/sys/reent.h index 6d8b005b2b..a02e7c2bd9 100644 --- a/newlib/libc/include/sys/reent.h +++ b/newlib/libc/include/sys/reent.h @@ -12,6 +12,7 @@ extern "C" { #include <_ansi.h> #include +#include #include #define _NULL 0 @@ -622,6 +623,14 @@ struct _reent _mbstate_t _wcrtomb_state; _mbstate_t _wcsrtombs_state; int _h_errno; +#ifdef __CYGWIN__ + _mbstate_t _c8rtomb_state; + _mbstate_t _c16rtomb_state; + _mbstate_t _c32rtomb_state; + _mbstate_t _mbrtoc8_state; + _mbstate_t _mbrtoc16_state; + _mbstate_t _mbrtoc32_state; +#endif } _reent; #ifdef _REENT_BACKWARD_BINARY_COMPAT struct @@ -730,6 +739,14 @@ struct _reent #define _REENT_MBSRTOWCS_STATE(ptr)((ptr)->_new._reent._mbsrtowcs_state) #define _REENT_WCRTOMB_STATE(ptr)((ptr)->_new._reent._wcrtomb_state) #define _REENT_WCSRTOMBS_STATE(ptr)((ptr)->_new._reent._wcsrtombs_state) +#ifdef __CYGWIN__ +# define _REENT_C8RTOMB_STATE(ptr)((ptr)->_new._reent._c8rtomb_state) +# define _REENT_C16RTOMB_STATE(ptr)((ptr)->_new._reent._c16rtomb_state) +# define _REENT_C32RTOMB_STATE(ptr)((ptr)->_new._reent._c32rtomb_state) +# define _REENT_MBRTOC8_STATE(ptr)((ptr)->_new._reent._mbrtoc8_state) +# define _REENT_MBRTOC16_STATE(ptr)((ptr)->_new._reent._mbrtoc16_state) +# define _REENT_MBRTOC32_STATE(ptr)((ptr)->_new._reent._mbrtoc32_state) +#endif #define _REENT_L64A_BUF(ptr) ((ptr)->_new._reent._l64a_buf) #define _REENT_SIGNAL_BUF(ptr) ((ptr)->_new._reent._signal_buf) #define _REENT_GETDATE_ERR_P(ptr) (&((ptr)->_new._reent._getdate_err)) @@ -812,7 +829,7 @@ extern _Thread_local int _tls_cvtlen; #define _REENT_CVTLEN(_ptr) (_tls_cvtlen) extern _Thread_local void (*_tls_cleanup)(struct _reent *); #define _REENT_CLEANUP(_ptr) (_tls_cleanup) -extern _Thread_local char _tls_emergency; +extern _Thread_local char _tls_emergency[_REENT_EMERGENCY_SIZE]; #define _REENT_EMERGENCY(_ptr) (_tls_emergency) extern _Thread_local int _tls_errno; #define _REENT_ERRNO(_ptr) (_tls_errno) diff --git a/newlib/libc/include/sys/signal.h b/newlib/libc/include/sys/signal.h index 8dc5fb9c34..96bf9781ae 100644 --- a/newlib/libc/include/sys/signal.h +++ b/newlib/libc/include/sys/signal.h @@ -245,9 +245,9 @@ int sigqueue (pid_t, int, const union sigval); /* POSIX Issue 8 adds sig2str() and str2sig() */ #if __SIZEOF_INT__ >= 4 -#define SIG2STR_MAX (sizeof("RTMAX+") + sizeof("4294967295") - 1) +#define SIG2STR_MAX 17 /* (sizeof("RTMAX+") + sizeof("4294967295") - 1) */ #else -#define SIG2STR_MAX (sizeof("RTMAX+") + sizeof("65535") - 1) +#define SIG2STR_MAX 12 /* (sizeof("RTMAX+") + sizeof("65535") - 1) */ #endif int sig2str(int, char *); diff --git a/newlib/libc/include/sys/unistd.h b/newlib/libc/include/sys/unistd.h index 216d779d8a..00901540fc 100644 --- a/newlib/libc/include/sys/unistd.h +++ b/newlib/libc/include/sys/unistd.h @@ -26,6 +26,12 @@ int chown (const char *__path, uid_t __owner, gid_t __group); int chroot (const char *__path); #endif int close (int __fildes); +#if defined(__CYGWIN__) && (__BSD_VISIBLE || __GNU_VISIBLE) +/* Available on FreeBSD (__BSD_VISIBLE) and Linux (__GNU_VISIBLE). */ +int close_range (unsigned int __firstfd, unsigned int __lastfd, int __flags); +/* CLOSE_RANGE_UNSHARE (1 << 1) */ /* Linux-specific, not supported. */ +#define CLOSE_RANGE_CLOEXEC (1 << 2) +#endif #if __POSIX_VISIBLE >= 199209 size_t confstr (int __name, char *__buf, size_t __len); #endif @@ -262,6 +268,7 @@ void * _sbrk (ptrdiff_t __incr); int _unlink (const char *__path); _READ_WRITE_RETURN_TYPE _write (int __fd, const void *__buf, size_t __nbyte); int _execve (const char *__path, char * const __argv[], char * const __envp[]); +int _getentropy (void *, size_t); #endif #if !defined(__INSIDE_CYGWIN__) @@ -315,6 +322,10 @@ int unlinkat (int, const char *, int); # define SEEK_SET 0 # define SEEK_CUR 1 # define SEEK_END 2 +#if __GNU_VISIBLE +# define SEEK_DATA 3 +# define SEEK_HOLE 4 +#endif #include diff --git a/newlib/libc/libc.texi b/newlib/libc/libc.texi index d217d81182..1d798d11e9 100644 --- a/newlib/libc/libc.texi +++ b/newlib/libc/libc.texi @@ -69,12 +69,12 @@ into another language, under the above conditions for modified versions. @title The Red Hat newlib C Library @subtitle Full Configuration @sp 1 -@subtitle @code{libc} 2.5.0 -@subtitle December 2016 -@author {Steve Chamberlain} -@author {Roland Pesch} -@author {Red Hat Support} -@author {Jeff Johnston} +@subtitle @code{libc} 4.4.0 +@subtitle December 2023 +@author Steve Chamberlain +@author Roland Pesch +@author Red Hat Support +@author Jeff Johnston @page @tex @@ -151,10 +151,11 @@ into another language, under the above conditions for modified versions. * Posix:: * Syscalls:: * Arglists:: -* Iconv:: +* Encoding conversions:: * Overflow Protection:: * Document Index:: +* Function Index:: @end menu @end ifnottex @@ -207,13 +208,13 @@ also defines a special type to represent variable argument lists: this type is called @code{va_list}. @menu -* va_start:: -* va_arg:: -* va_end:: +* Function va_start:: +* Function va_arg:: +* Function va_end:: @end menu @page -@node va_start +@node Function va_start @subsection Initialize variable argument list @findex va_start @strong{Synopsis} @@ -238,7 +239,7 @@ variable arguments in an ANSI C function header). You can only use ANSI C requires @code{va_start}. @page -@node va_arg +@node Function va_arg @subsection Extract a value from argument list @findex va_arg @strong{Synopsis} @@ -272,7 +273,7 @@ in your function call. ANSI C requires @code{va_arg}. @page -@node va_end +@node Function va_end @subsection Abandon a variable argument list @findex va_end @strong{Synopsis} @@ -306,14 +307,14 @@ As with @file{stdarg.h}, the type @code{va_list} is used to hold a data structure representing a variable argument list. @menu -* va_alist:: -* va_start-trad:: -* va_arg-trad:: -* va_end-trad:: +* Function va_alist:: +* Function va_start-trad:: +* Function va_arg-trad:: +* Function va_end-trad:: @end menu @page -@node va_alist +@node Function va_alist @subsection Declare variable arguments @findex va_alist @findex va_dcl @@ -339,7 +340,7 @@ possible. declaring variable argument lists prior to ANSI C. @page -@node va_start-trad +@node Function va_start-trad @subsection Initialize variable argument list @findex va_start @strong{Synopsis} @@ -363,7 +364,7 @@ definitions are incompatible; the ANSI version has another parameter besides @var{ap}. @page -@node va_arg-trad +@node Function va_arg-trad @subsection Extract a value from argument list @findex va_arg @strong{Synopsis} @@ -386,7 +387,7 @@ The @code{va_arg} defined in @file{varargs.h} has the same syntax and usage as the ANSI C version from @file{stdarg.h}. @page -@node va_end-trad +@node Function va_end-trad @subsection Abandon a variable argument list @findex va_end @strong{Synopsis} @@ -410,6 +411,10 @@ usage as the ANSI C version from @file{stdarg.h}. @unnumbered Document Index @printindex cp +@node Function Index +@unnumbered Function Index +@printindex fn + @tex % I think something like @@colophon should be in texinfo. In the % meantime: diff --git a/newlib/libc/locale/locale.c b/newlib/libc/locale/locale.c index b0f6314ff4..b16ec15114 100644 --- a/newlib/libc/locale/locale.c +++ b/newlib/libc/locale/locale.c @@ -50,10 +50,10 @@ but uses the UTF-8 charset. The following charsets are recognized: <<"UTF-8">>, <<"JIS">>, <<"EUCJP">>, <<"SJIS">>, <<"KOI8-R">>, <<"KOI8-U">>, -<<"GEORGIAN-PS">>, <<"PT154">>, <<"TIS-620">>, <<"ISO-8859-x">> with -1 <= x <= 16, or <<"CPxxx">> with xxx in [437, 720, 737, 775, 850, 852, 855, -857, 858, 862, 866, 874, 932, 1125, 1250, 1251, 1252, 1253, 1254, 1255, 1256, -1257, 1258]. +<<"KOI8-T">>, <<"GEORGIAN-PS">>, <<"PT154">>, <<"TIS-620">>, <<"ISO-8859-x">> +with 1 <= x <= 16, or <<"CPxxx">> with xxx in [437, 720, 737, 775, 850, 852, +855, 857, 858, 862, 866, 874, 932, 1125, 1250, 1251, 1252, 1253, 1254, 1255, +1256, 1257, 1258]. Charsets are case insensitive. For instance, <<"EUCJP">> and <<"eucJP">> are equivalent. Charset names with dashes can also be written without @@ -65,8 +65,8 @@ build with multibyte support and support for all ISO and Windows Codepage. Otherwise all singlebyte charsets are simply mapped to ASCII. Right now, only newlib for Cygwin is built with full charset support by default. Under Cygwin, this implementation additionally supports the charsets -<<"GBK">>, <<"GB2312">>, <<"eucCN">>, <<"eucKR">>, and <<"Big5">>. Cygwin -does not support <<"JIS">>. +<<"GB18030">>, <<"GBK">>, <<"GB2312">>, <<"eucCN">>, <<"eucKR">>, and +<<"Big5">>. Cygwin does not support <<"JIS">>. Cygwin additionally supports locales from the file /usr/share/locale/locale.alias. @@ -317,7 +317,7 @@ _setlocale_r (struct _reent *p, if (category < LC_ALL || category >= _LC_LAST) { - p->_errno = EINVAL; + _REENT_ERRNO(p) = EINVAL; return NULL; } @@ -343,7 +343,7 @@ _setlocale_r (struct _reent *p, env = __get_locale_env (p, i); if (strlen (env) > ENCODING_LEN) { - p->_errno = EINVAL; + _REENT_ERRNO(p) = EINVAL; return NULL; } strcpy (new_categories[i], env); @@ -354,7 +354,7 @@ _setlocale_r (struct _reent *p, env = __get_locale_env (p, category); if (strlen (env) > ENCODING_LEN) { - p->_errno = EINVAL; + _REENT_ERRNO(p) = EINVAL; return NULL; } strcpy (new_categories[category], env); @@ -364,7 +364,7 @@ _setlocale_r (struct _reent *p, { if (strlen (locale) > ENCODING_LEN) { - p->_errno = EINVAL; + _REENT_ERRNO(p) = EINVAL; return NULL; } strcpy (new_categories[category], locale); @@ -375,7 +375,7 @@ _setlocale_r (struct _reent *p, { if (strlen (locale) > ENCODING_LEN) { - p->_errno = EINVAL; + _REENT_ERRNO(p) = EINVAL; return NULL; } for (i = 1; i < _LC_LAST; ++i) @@ -387,7 +387,7 @@ _setlocale_r (struct _reent *p, ; if (!r[1]) { - p->_errno = EINVAL; + _REENT_ERRNO(p) = EINVAL; return NULL; /* Hmm, just slashes... */ } do @@ -396,7 +396,7 @@ _setlocale_r (struct _reent *p, break; /* Too many slashes... */ if ((len = r - locale) > ENCODING_LEN) { - p->_errno = EINVAL; + _REENT_ERRNO(p) = EINVAL; return NULL; } strlcpy (new_categories[i], locale, len + 1); @@ -429,7 +429,7 @@ _setlocale_r (struct _reent *p, strcpy (saved_categories[i], __get_global_locale ()->categories[i]); if (__loadlocale (__get_global_locale (), i, new_categories[i]) == NULL) { - saverr = p->_errno; + saverr = _REENT_ERRNO(p); for (j = 1; j < i; j++) { strcpy (new_categories[j], saved_categories[j]); @@ -440,7 +440,7 @@ _setlocale_r (struct _reent *p, __loadlocale (__get_global_locale (), j, new_categories[j]); } } - p->_errno = saverr; + _REENT_ERRNO(p) = saverr; return NULL; } } @@ -657,7 +657,7 @@ __loadlocale (struct __locale_t *loc, int category, char *new_locale) } #ifdef __CYGWIN__ /* Newlib does neither provide EUC-KR nor EUC-CN, and Cygwin's - implementation requires Windows support. */ + implementation requires Windows support. */ else if (!strcasecmp (c, "KR")) { strcpy (charset, "EUCKR"); @@ -769,7 +769,7 @@ __loadlocale (struct __locale_t *loc, int category, char *new_locale) break; case 'K': case 'k': - /* KOI8-R, KOI8-U and the aliases without dash */ + /* KOI8-R, KOI8-U, KOI8-T and the aliases without dash */ if (strncasecmp (charset, "KOI8", 4)) FAIL; c = charset + 4; @@ -785,6 +785,11 @@ __loadlocale (struct __locale_t *loc, int category, char *new_locale) val = 21866; strcpy (charset, "CP21866"); } + else if (*c == 'T' || *c == 't') + { + val = 103; + strcpy (charset, "CP103"); + } else FAIL; mbc_max = 1; @@ -812,12 +817,19 @@ __loadlocale (struct __locale_t *loc, int category, char *new_locale) requires Windows support. */ if (!strcasecmp (charset, "GBK") || !strcasecmp (charset, "GB2312")) - { + { strcpy (charset, charset[2] == '2' ? "GB2312" : "GBK"); mbc_max = 2; l_wctomb = __gbk_wctomb; l_mbtowc = __gbk_mbtowc; } + else if (!strcasecmp (charset, "GB18030")) + { + strcpy (charset, "GB18030"); + mbc_max = 4; + l_wctomb = __gb18030_wctomb; + l_mbtowc = __gb18030_mbtowc; + } else #endif /* __CYGWIN__ */ /* GEORGIAN-PS and the alias without dash */ diff --git a/newlib/libc/locale/locale.tex b/newlib/libc/locale/locale.tex index eee7d77cb3..3671698002 100644 --- a/newlib/libc/locale/locale.tex +++ b/newlib/libc/locale/locale.tex @@ -116,7 +116,7 @@ @end table @menu -* setlocale:: Select or query locale +* Function setlocale:: Select or query locale @end menu @page diff --git a/newlib/libc/locale/newlocale.c b/newlib/libc/locale/newlocale.c index 08f29dbcc0..92f9e0a9c4 100644 --- a/newlib/libc/locale/newlocale.c +++ b/newlib/libc/locale/newlocale.c @@ -103,7 +103,7 @@ _newlocale_r (struct _reent *p, int category_mask, const char *locale, /* Check for invalid mask values and valid locale ptr. */ if ((category_mask & ~LC_VALID_MASK) || !locale) { - p->_errno = EINVAL; + _REENT_ERRNO(p) = EINVAL; return NULL; } /* If the new locale is supposed to be all default locale, just return @@ -125,7 +125,7 @@ _newlocale_r (struct _reent *p, int category_mask, const char *locale, : locale; if (strlen (cat) > ENCODING_LEN) { - p->_errno = EINVAL; + _REENT_ERRNO(p) = EINVAL; return NULL; } strcpy (new_categories[i], cat); @@ -171,7 +171,10 @@ _newlocale_r (struct _reent *p, int category_mask, const char *locale, continue; /* Otherwise load locale data. */ else if (!__loadlocale (&tmp_locale, i, new_categories[i])) - goto error; + { + _REENT_ERRNO(p) = ENOENT; + goto error; + } } } /* Allocate new locale_t. */ diff --git a/newlib/libc/locale/nl_langinfo.c b/newlib/libc/locale/nl_langinfo.c index f8fcbb4620..4477d833be 100644 --- a/newlib/libc/locale/nl_langinfo.c +++ b/newlib/libc/locale/nl_langinfo.c @@ -160,7 +160,6 @@ static struct _nl_item_t _NLITEM (monetary, wmon_thousands_sep), _NLITEM (monetary, wpositive_sign), _NLITEM (monetary, wnegative_sign), - _NLITEM (messages, codeset), _NLITEM (messages, wyesexpr), _NLITEM (messages, wnoexpr), _NLITEM (messages, wyesstr), @@ -233,6 +232,8 @@ char *nl_langinfo_l (nl_item item, struct __locale_t *locale) ret = "GEORGIAN-PS"; else if (strcmp (ret + 2, "102") == 0) ret = "PT154"; + else if (strcmp (ret + 2, "103") == 0) + ret = "KOI8-T"; } else if (ret[0] == 'S'/*JIS*/) { diff --git a/newlib/libc/locale/setlocale.h b/newlib/libc/locale/setlocale.h index 3530ec664d..e91034ac85 100644 --- a/newlib/libc/locale/setlocale.h +++ b/newlib/libc/locale/setlocale.h @@ -46,7 +46,7 @@ __BEGIN_DECLS #ifdef __CYGWIN__ struct lc_collate_T { - __uint32_t lcid; + wchar_t win_locale[ENCODING_LEN + 1]; int (*mbtowc) (struct _reent *, wchar_t *, const char *, size_t, mbstate_t *); char codeset[ENCODING_LEN + 1]; @@ -162,13 +162,15 @@ struct lc_messages_T const char *noexpr; const char *yesstr; const char *nostr; -#ifdef __HAVE_LOCALE_INFO_EXTENDED__ +#ifdef __HAVE_LOCALE_INFO__ const char *codeset; /* codeset for mbtowc conversion */ +#ifdef __HAVE_LOCALE_INFO_EXTENDED__ const wchar_t *wyesexpr; const wchar_t *wnoexpr; const wchar_t *wyesstr; const wchar_t *wnostr; #endif +#endif }; extern const struct lc_messages_T _C_messages_locale; diff --git a/newlib/libc/locale/timelocal.c b/newlib/libc/locale/timelocal.c index 4b361544ac..e3a7fd02d7 100644 --- a/newlib/libc/locale/timelocal.c +++ b/newlib/libc/locale/timelocal.c @@ -147,10 +147,11 @@ int __time_load_locale (struct __locale_t *locale, const char *name, void *f_wctomb, const char *charset) { - int ret; + int ret = 0; struct lc_time_T ti; char *bufp = NULL; +#ifdef __HAVE_LOCALE_INFO__ #ifdef __CYGWIN__ extern int __set_lc_time_from_win (const char *, const struct lc_time_T *, struct lc_time_T *, char **, void *, @@ -186,5 +187,6 @@ __time_load_locale (struct __locale_t *locale, const char *name, #else /* TODO */ #endif +#endif /* __HAVE_LOCALE_INFO__ */ return (ret); } diff --git a/newlib/libc/machine/Makefile.inc b/newlib/libc/machine/Makefile.inc index 8aae2c52cc..a53cf9c10c 100644 --- a/newlib/libc/machine/Makefile.inc +++ b/newlib/libc/machine/Makefile.inc @@ -169,6 +169,9 @@ endif if HAVE_LIBC_MACHINE_XSTORMY16 include %D%/xstormy16/Makefile.inc endif +if HAVE_LIBC_MACHINE_XTENSA +include %D%/xtensa/Makefile.inc +endif if HAVE_LIBC_MACHINE_Z8K include %D%/z8k/Makefile.inc endif diff --git a/newlib/libc/machine/aarch64/Makefile.inc b/newlib/libc/machine/aarch64/Makefile.inc index 063a2a84ae..1068d88ce8 100644 --- a/newlib/libc/machine/aarch64/Makefile.inc +++ b/newlib/libc/machine/aarch64/Makefile.inc @@ -5,8 +5,9 @@ libc_a_SOURCES += \ %D%/memcmp.S \ %D%/memcpy-stub.c \ %D%/memcpy.S \ - %D%/memmove-stub.c \ - %D%/memmove.S \ + %D%/memmove.c \ + %D%/memrchr-stub.c \ + %D%/memrchr.S \ %D%/memset-stub.c \ %D%/memset.S \ %D%/rawmemchr.S \ diff --git a/newlib/libc/machine/aarch64/asmdefs.h b/newlib/libc/machine/aarch64/asmdefs.h new file mode 100644 index 0000000000..131b95e1fe --- /dev/null +++ b/newlib/libc/machine/aarch64/asmdefs.h @@ -0,0 +1,106 @@ +/* + * Macros for asm code. AArch64 version. + * + * Copyright (c) 2019-2023, Arm Limited. + * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception + */ + +#ifndef _ASMDEFS_H +#define _ASMDEFS_H + +/* Branch Target Identitication support. */ +#define BTI_C hint 34 +#define BTI_J hint 36 +/* Return address signing support (pac-ret). */ +#define PACIASP hint 25; .cfi_window_save +#define AUTIASP hint 29; .cfi_window_save + +/* GNU_PROPERTY_AARCH64_* macros from elf.h. */ +#define FEATURE_1_AND 0xc0000000 +#define FEATURE_1_BTI 1 +#define FEATURE_1_PAC 2 + +/* Add a NT_GNU_PROPERTY_TYPE_0 note. */ +#ifdef __ILP32__ +#define GNU_PROPERTY(type, value) \ + .section .note.gnu.property, "a"; \ + .p2align 2; \ + .word 4; \ + .word 12; \ + .word 5; \ + .asciz "GNU"; \ + .word type; \ + .word 4; \ + .word value; \ + .text +#else +#define GNU_PROPERTY(type, value) \ + .section .note.gnu.property, "a"; \ + .p2align 3; \ + .word 4; \ + .word 16; \ + .word 5; \ + .asciz "GNU"; \ + .word type; \ + .word 4; \ + .word value; \ + .word 0; \ + .text +#endif + +/* If set then the GNU Property Note section will be added to + mark objects to support BTI and PAC-RET. */ +#ifndef WANT_GNU_PROPERTY +#define WANT_GNU_PROPERTY 1 +#endif + +#if WANT_GNU_PROPERTY +/* Add property note with supported features to all asm files. */ +GNU_PROPERTY (FEATURE_1_AND, FEATURE_1_BTI|FEATURE_1_PAC) +#endif + +#define ENTRY_ALIGN(name, alignment) \ + .global name; \ + .type name,%function; \ + .align alignment; \ + name: \ + .cfi_startproc; \ + BTI_C; + +#define ENTRY(name) ENTRY_ALIGN(name, 6) + +#define ENTRY_ALIAS(name) \ + .global name; \ + .type name,%function; \ + name: + +#define END(name) \ + .cfi_endproc; \ + .size name, .-name; + +#define L(l) .L ## l + +#ifdef __ILP32__ + /* Sanitize padding bits of pointer arguments as per aapcs64 */ +#define PTR_ARG(n) mov w##n, w##n +#else +#define PTR_ARG(n) +#endif + +#ifdef __ILP32__ + /* Sanitize padding bits of size arguments as per aapcs64 */ +#define SIZE_ARG(n) mov w##n, w##n +#else +#define SIZE_ARG(n) +#endif + +/* Compiler supports SVE instructions */ +#ifndef HAVE_SVE +# if __aarch64__ && (__GNUC__ >= 8 || __clang_major__ >= 5) +# define HAVE_SVE 1 +# else +# define HAVE_SVE 0 +# endif +#endif + +#endif diff --git a/newlib/libc/machine/aarch64/machine/_fpmath.h b/newlib/libc/machine/aarch64/machine/_fpmath.h new file mode 100644 index 0000000000..fa62ae81cf --- /dev/null +++ b/newlib/libc/machine/aarch64/machine/_fpmath.h @@ -0,0 +1,64 @@ +/*- + * Copyright (c) 2002, 2003 David Schultz + * Copyright (2) 2014 The FreeBSD Foundation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +/* + * Change unsigned int/long used by FreeBSD to fixed width types because + * ilp32 has a different size for unsigned long. --joel (20 Aug 2022) + */ +#include + +union IEEEl2bits { + long double e; + struct { + uint64_t manl :64; + uint64_t manh :48; + uint32_t exp :15; + uint32_t sign :1; + } bits; + /* TODO andrew: Check the packing here */ + struct { + uint64_t manl :64; + uint64_t manh :48; + uint32_t expsign :16; + } xbits; +}; + +#define LDBL_NBIT 0 +#define LDBL_IMPLICIT_NBIT +#define mask_nbit_l(u) ((void)0) + +#define LDBL_MANH_SIZE 48 +#define LDBL_MANL_SIZE 64 + +#define LDBL_TO_ARRAY32(u, a) do { \ + (a)[0] = (uint32_t)(u).bits.manl; \ + (a)[1] = (uint32_t)((u).bits.manl >> 32); \ + (a)[2] = (uint32_t)(u).bits.manh; \ + (a)[3] = (uint32_t)((u).bits.manh >> 32); \ +} while(0) diff --git a/newlib/libc/machine/aarch64/memchr.S b/newlib/libc/machine/aarch64/memchr.S index 53f5d6bc0e..a0f305e0fc 100644 --- a/newlib/libc/machine/aarch64/memchr.S +++ b/newlib/libc/machine/aarch64/memchr.S @@ -1,31 +1,8 @@ /* * memchr - find a character in a memory zone * - * Copyright (c) 2014, ARM Limited - * All rights Reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of the company nor the names of its contributors - * may be used to endorse or promote products derived from this - * software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * Copyright (c) 2014-2022, Arm Limited. + * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception */ #if (defined (__OPTIMIZE_SIZE__) || defined (PREFER_SIZE_OVER_SPEED)) @@ -37,6 +14,8 @@ * Neon Available. */ +#include "asmdefs.h" + /* Arguments and results. */ #define srcin x0 #define chrin w1 @@ -70,17 +49,11 @@ * identify exactly which byte has matched. */ - .macro def_fn f p2align=0 - .text - .p2align \p2align - .global \f - .type \f, %function -\f: - .endm - -def_fn memchr +ENTRY (memchr) + PTR_ARG (0) + SIZE_ARG (2) /* Do not dereference srcin if no bytes to compare. */ - cbz cntin, .Lzero_length + cbz cntin, L(zero_length) /* * Magic constant 0x40100401 allows us to identify which lane matches * the requested byte. @@ -93,7 +66,7 @@ def_fn memchr dup vrepmask.4s, wtmp2 ands soff, srcin, #31 and cntrem, cntin, #31 - b.eq .Lloop + b.eq L(loop) /* * Input string is not 32-byte aligned. We calculate the syndrome @@ -110,41 +83,41 @@ def_fn memchr and vhas_chr2.16b, vhas_chr2.16b, vrepmask.16b addp vend.16b, vhas_chr1.16b, vhas_chr2.16b /* 256->128 */ addp vend.16b, vend.16b, vend.16b /* 128->64 */ - mov synd, vend.2d[0] + mov synd, vend.d[0] /* Clear the soff*2 lower bits */ lsl tmp, soff, #1 lsr synd, synd, tmp lsl synd, synd, tmp /* The first block can also be the last */ - b.ls .Lmasklast + b.ls L(masklast) /* Have we found something already? */ - cbnz synd, .Ltail + cbnz synd, L(tail) -.Lloop: +L(loop): ld1 {vdata1.16b, vdata2.16b}, [src], #32 subs cntin, cntin, #32 cmeq vhas_chr1.16b, vdata1.16b, vrepchr.16b cmeq vhas_chr2.16b, vdata2.16b, vrepchr.16b /* If we're out of data we finish regardless of the result */ - b.ls .Lend + b.ls L(end) /* Use a fast check for the termination condition */ orr vend.16b, vhas_chr1.16b, vhas_chr2.16b addp vend.2d, vend.2d, vend.2d - mov synd, vend.2d[0] + mov synd, vend.d[0] /* We're not out of data, loop if we haven't found the character */ - cbz synd, .Lloop + cbz synd, L(loop) -.Lend: +L(end): /* Termination condition found, let's calculate the syndrome value */ and vhas_chr1.16b, vhas_chr1.16b, vrepmask.16b and vhas_chr2.16b, vhas_chr2.16b, vrepmask.16b addp vend.16b, vhas_chr1.16b, vhas_chr2.16b /* 256->128 */ addp vend.16b, vend.16b, vend.16b /* 128->64 */ - mov synd, vend.2d[0] + mov synd, vend.d[0] /* Only do the clear for the last possible block */ - b.hi .Ltail + b.hs L(tail) -.Lmasklast: +L(masklast): /* Clear the (32 - ((cntrem + soff) % 32)) * 2 upper bits */ add tmp, cntrem, soff and tmp, tmp, #31 @@ -153,7 +126,7 @@ def_fn memchr lsl synd, synd, tmp lsr synd, synd, tmp -.Ltail: +L(tail): /* Count the trailing zeros using bit reversing */ rbit synd, synd /* Compensate the last post-increment */ @@ -168,9 +141,9 @@ def_fn memchr csel result, xzr, result, eq ret -.Lzero_length: +L(zero_length): mov result, #0 ret - .size memchr, . - memchr +END (memchr) #endif diff --git a/newlib/libc/machine/aarch64/memcmp.S b/newlib/libc/machine/aarch64/memcmp.S index 605d99365e..18874d3215 100644 --- a/newlib/libc/machine/aarch64/memcmp.S +++ b/newlib/libc/machine/aarch64/memcmp.S @@ -1,57 +1,7 @@ /* memcmp - compare memory - - Copyright (c) 2018 Linaro Limited - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the Linaro nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - -/* - * Copyright (c) 2017 ARM Ltd - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the company may not be used to endorse or promote - * products derived from this software without specific prior written - * permission. * - * THIS SOFTWARE IS PROVIDED BY ARM LTD ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL ARM LTD BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED - * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * Copyright (c) 2013-2022, Arm Limited. + * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception */ #if (defined (__OPTIMIZE_SIZE__) || defined (PREFER_SIZE_OVER_SPEED)) @@ -60,103 +10,79 @@ /* Assumptions: * - * ARMv8-a, AArch64, unaligned accesses. + * ARMv8-a, AArch64, Advanced SIMD, unaligned accesses. */ -#define L(l) .L ## l - -/* Parameters and result. */ -#define src1 x0 -#define src2 x1 -#define limit x2 -#define result w0 - -/* Internal variables. */ -#define data1 x3 -#define data1w w3 -#define data1h x4 -#define data2 x5 -#define data2w w5 -#define data2h x6 -#define tmp1 x7 -#define tmp2 x8 - - .macro def_fn f p2align=0 - .text - .p2align \p2align - .global \f - .type \f, %function -\f: - .endm - -def_fn memcmp p2align=6 - subs limit, limit, 8 - b.lo L(less8) - - ldr data1, [src1], 8 - ldr data2, [src2], 8 - cmp data1, data2 - b.ne L(return) - - subs limit, limit, 8 - b.gt L(more16) - - ldr data1, [src1, limit] - ldr data2, [src2, limit] - b L(return) - -L(more16): - ldr data1, [src1], 8 - ldr data2, [src2], 8 - cmp data1, data2 - bne L(return) - - /* Jump directly to comparing the last 16 bytes for 32 byte (or less) - strings. */ - subs limit, limit, 16 +#include "asmdefs.h" + +#define src1 x0 +#define src2 x1 +#define limit x2 +#define result w0 + +#define data1 x3 +#define data1w w3 +#define data2 x4 +#define data2w w4 +#define data3 x5 +#define data3w w5 +#define data4 x6 +#define data4w w6 +#define tmp x6 +#define src1end x7 +#define src2end x8 + + +ENTRY (memcmp) + PTR_ARG (0) + PTR_ARG (1) + SIZE_ARG (2) + + cmp limit, 16 + b.lo L(less16) + ldp data1, data3, [src1] + ldp data2, data4, [src2] + ccmp data1, data2, 0, ne + ccmp data3, data4, 0, eq + b.ne L(return2) + + add src1end, src1, limit + add src2end, src2, limit + cmp limit, 32 b.ls L(last_bytes) + cmp limit, 160 + b.hs L(loop_align) + sub limit, limit, 32 - /* We overlap loads between 0-32 bytes at either side of SRC1 when we - try to align, so limit it only to strings larger than 128 bytes. */ - cmp limit, 96 - b.ls L(loop16) - - /* Align src1 and adjust src2 with bytes not yet done. */ - and tmp1, src1, 15 - add limit, limit, tmp1 - sub src1, src1, tmp1 - sub src2, src2, tmp1 - - /* Loop performing 16 bytes per iteration using aligned src1. - Limit is pre-decremented by 16 and must be larger than zero. - Exit if <= 16 bytes left to do or if the data is not equal. */ .p2align 4 -L(loop16): - ldp data1, data1h, [src1], 16 - ldp data2, data2h, [src2], 16 - subs limit, limit, 16 - ccmp data1, data2, 0, hi - ccmp data1h, data2h, 0, eq - b.eq L(loop16) - +L(loop32): + ldp data1, data3, [src1, 16] + ldp data2, data4, [src2, 16] cmp data1, data2 - bne L(return) - mov data1, data1h - mov data2, data2h + ccmp data3, data4, 0, eq + b.ne L(return2) + cmp limit, 16 + b.ls L(last_bytes) + + ldp data1, data3, [src1, 32] + ldp data2, data4, [src2, 32] cmp data1, data2 - bne L(return) + ccmp data3, data4, 0, eq + b.ne L(return2) + add src1, src1, 32 + add src2, src2, 32 +L(last64): + subs limit, limit, 32 + b.hi L(loop32) /* Compare last 1-16 bytes using unaligned access. */ L(last_bytes): - add src1, src1, limit - add src2, src2, limit - ldp data1, data1h, [src1] - ldp data2, data2h, [src2] - cmp data1, data2 - bne L(return) - mov data1, data1h - mov data2, data2h + ldp data1, data3, [src1end, -16] + ldp data2, data4, [src2end, -16] +L(return2): cmp data1, data2 + csel data1, data1, data3, ne + csel data2, data2, data4, ne /* Compare data bytes and set return value to 0, -1 or 1. */ L(return): @@ -164,33 +90,106 @@ L(return): rev data1, data1 rev data2, data2 #endif - cmp data1, data2 -L(ret_eq): + cmp data1, data2 cset result, ne cneg result, result, lo ret .p2align 4 - /* Compare up to 8 bytes. Limit is [-8..-1]. */ +L(less16): + add src1end, src1, limit + add src2end, src2, limit + tbz limit, 3, L(less8) + ldr data1, [src1] + ldr data2, [src2] + ldr data3, [src1end, -8] + ldr data4, [src2end, -8] + b L(return2) + + .p2align 4 L(less8): - adds limit, limit, 4 - b.lo L(less4) - ldr data1w, [src1], 4 - ldr data2w, [src2], 4 + tbz limit, 2, L(less4) + ldr data1w, [src1] + ldr data2w, [src2] + ldr data3w, [src1end, -4] + ldr data4w, [src2end, -4] + b L(return2) + +L(less4): + tbz limit, 1, L(less2) + ldrh data1w, [src1] + ldrh data2w, [src2] cmp data1w, data2w b.ne L(return) - sub limit, limit, 4 -L(less4): - adds limit, limit, 4 - beq L(ret_eq) -L(byte_loop): - ldrb data1w, [src1], 1 - ldrb data2w, [src2], 1 - subs limit, limit, 1 - ccmp data1w, data2w, 0, ne /* NZCV = 0b0000. */ - b.eq L(byte_loop) +L(less2): + mov result, 0 + tbz limit, 0, L(return_zero) + ldrb data1w, [src1end, -1] + ldrb data2w, [src2end, -1] sub result, data1w, data2w +L(return_zero): + ret + +L(loop_align): + ldp data1, data3, [src1, 16] + ldp data2, data4, [src2, 16] + cmp data1, data2 + ccmp data3, data4, 0, eq + b.ne L(return2) + + /* Align src2 and adjust src1, src2 and limit. */ + and tmp, src2, 15 + sub tmp, tmp, 16 + sub src2, src2, tmp + add limit, limit, tmp + sub src1, src1, tmp + sub limit, limit, 64 + 16 + + .p2align 4 +L(loop64): + ldr q0, [src1, 16] + ldr q1, [src2, 16] + subs limit, limit, 64 + ldr q2, [src1, 32] + ldr q3, [src2, 32] + eor v0.16b, v0.16b, v1.16b + eor v1.16b, v2.16b, v3.16b + ldr q2, [src1, 48] + ldr q3, [src2, 48] + umaxp v0.16b, v0.16b, v1.16b + ldr q4, [src1, 64]! + ldr q5, [src2, 64]! + eor v1.16b, v2.16b, v3.16b + eor v2.16b, v4.16b, v5.16b + umaxp v1.16b, v1.16b, v2.16b + umaxp v0.16b, v0.16b, v1.16b + umaxp v0.16b, v0.16b, v0.16b + fmov tmp, d0 + ccmp tmp, 0, 0, hi + b.eq L(loop64) + + /* If equal, process last 1-64 bytes using scalar loop. */ + add limit, limit, 64 + 16 + cbz tmp, L(last64) + + /* Determine the 8-byte aligned offset of the first difference. */ +#ifdef __AARCH64EB__ + rev16 tmp, tmp +#endif + rev tmp, tmp + clz tmp, tmp + bic tmp, tmp, 7 + sub tmp, tmp, 48 + ldr data1, [src1, tmp] + ldr data2, [src2, tmp] +#ifndef __AARCH64EB__ + rev data1, data1 + rev data2, data2 +#endif + mov result, 1 + cmp data1, data2 + cneg result, result, lo ret - .size memcmp, . - memcmp +END (memcmp) #endif diff --git a/newlib/libc/machine/aarch64/memcpy.S b/newlib/libc/machine/aarch64/memcpy.S index 463bad0a18..248e7843a2 100644 --- a/newlib/libc/machine/aarch64/memcpy.S +++ b/newlib/libc/machine/aarch64/memcpy.S @@ -1,55 +1,8 @@ -/* Copyright (c) 2012-2013, Linaro Limited - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the Linaro nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - /* - * Copyright (c) 2015 ARM Ltd - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the company may not be used to endorse or promote - * products derived from this software without specific prior written - * permission. + * memcpy - copy memory area * - * THIS SOFTWARE IS PROVIDED BY ARM LTD ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL ARM LTD BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED - * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * Copyright (c) 2012-2022, Arm Limited. + * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception */ /* Assumptions: @@ -61,6 +14,7 @@ #if (defined (__OPTIMIZE_SIZE__) || defined (PREFER_SIZE_OVER_SPEED)) /* See memcpy-stub.c */ #else +#include "asmdefs.h" #define dstin x0 #define src x1 @@ -71,122 +25,139 @@ #define A_l x6 #define A_lw w6 #define A_h x7 -#define A_hw w7 #define B_l x8 #define B_lw w8 #define B_h x9 #define C_l x10 +#define C_lw w10 #define C_h x11 #define D_l x12 #define D_h x13 -#define E_l src -#define E_h count -#define F_l srcend -#define F_h dst -#define tmp1 x9 - -#define L(l) .L ## l - - .macro def_fn f p2align=0 - .text - .p2align \p2align - .global \f - .type \f, %function -\f: - .endm - -/* Copies are split into 3 main cases: small copies of up to 16 bytes, - medium copies of 17..96 bytes which are fully unrolled. Large copies - of more than 96 bytes align the destination and use an unrolled loop - processing 64 bytes per iteration. - Small and medium copies read all data before writing, allowing any - kind of overlap, and memmove tailcalls memcpy for these cases as - well as non-overlapping copies. +#define E_l x14 +#define E_h x15 +#define F_l x16 +#define F_h x17 +#define G_l count +#define G_h dst +#define H_l src +#define H_h srcend +#define tmp1 x14 + +/* This implementation handles overlaps and supports both memcpy and memmove + from a single entry point. It uses unaligned accesses and branchless + sequences to keep the code small, simple and improve performance. + + Copies are split into 3 main cases: small copies of up to 32 bytes, medium + copies of up to 128 bytes, and large copies. The overhead of the overlap + check is negligible since it is only required for large copies. + + Large copies use a software pipelined loop processing 64 bytes per iteration. + The destination pointer is 16-byte aligned to minimize unaligned accesses. + The loop tail is handled by always copying 64 bytes from the end. */ -def_fn memcpy p2align=6 - prfm PLDL1KEEP, [src] +ENTRY_ALIAS (memmove) +ENTRY (memcpy) + PTR_ARG (0) + PTR_ARG (1) + SIZE_ARG (2) add srcend, src, count add dstend, dstin, count - cmp count, 16 - b.ls L(copy16) - cmp count, 96 + cmp count, 128 b.hi L(copy_long) + cmp count, 32 + b.hi L(copy32_128) - /* Medium copies: 17..96 bytes. */ - sub tmp1, count, 1 + /* Small copies: 0..32 bytes. */ + cmp count, 16 + b.lo L(copy16) ldp A_l, A_h, [src] - tbnz tmp1, 6, L(copy96) ldp D_l, D_h, [srcend, -16] - tbz tmp1, 5, 1f - ldp B_l, B_h, [src, 16] - ldp C_l, C_h, [srcend, -32] - stp B_l, B_h, [dstin, 16] - stp C_l, C_h, [dstend, -32] -1: stp A_l, A_h, [dstin] stp D_l, D_h, [dstend, -16] ret - .p2align 4 - /* Small copies: 0..16 bytes. */ + /* Copy 8-15 bytes. */ L(copy16): - cmp count, 8 - b.lo 1f + tbz count, 3, L(copy8) ldr A_l, [src] ldr A_h, [srcend, -8] str A_l, [dstin] str A_h, [dstend, -8] ret - .p2align 4 -1: - tbz count, 2, 1f + + .p2align 3 + /* Copy 4-7 bytes. */ +L(copy8): + tbz count, 2, L(copy4) ldr A_lw, [src] - ldr A_hw, [srcend, -4] + ldr B_lw, [srcend, -4] str A_lw, [dstin] - str A_hw, [dstend, -4] + str B_lw, [dstend, -4] ret - /* Copy 0..3 bytes. Use a branchless sequence that copies the same - byte 3 times if count==1, or the 2nd byte twice if count==2. */ -1: - cbz count, 2f + /* Copy 0..3 bytes using a branchless sequence. */ +L(copy4): + cbz count, L(copy0) lsr tmp1, count, 1 ldrb A_lw, [src] - ldrb A_hw, [srcend, -1] + ldrb C_lw, [srcend, -1] ldrb B_lw, [src, tmp1] strb A_lw, [dstin] strb B_lw, [dstin, tmp1] - strb A_hw, [dstend, -1] -2: ret + strb C_lw, [dstend, -1] +L(copy0): + ret .p2align 4 - /* Copy 64..96 bytes. Copy 64 bytes from the start and - 32 bytes from the end. */ -L(copy96): + /* Medium copies: 33..128 bytes. */ +L(copy32_128): + ldp A_l, A_h, [src] ldp B_l, B_h, [src, 16] - ldp C_l, C_h, [src, 32] - ldp D_l, D_h, [src, 48] - ldp E_l, E_h, [srcend, -32] - ldp F_l, F_h, [srcend, -16] + ldp C_l, C_h, [srcend, -32] + ldp D_l, D_h, [srcend, -16] + cmp count, 64 + b.hi L(copy128) stp A_l, A_h, [dstin] stp B_l, B_h, [dstin, 16] - stp C_l, C_h, [dstin, 32] - stp D_l, D_h, [dstin, 48] - stp E_l, E_h, [dstend, -32] - stp F_l, F_h, [dstend, -16] + stp C_l, C_h, [dstend, -32] + stp D_l, D_h, [dstend, -16] ret - /* Align DST to 16 byte alignment so that we don't cross cache line - boundaries on both loads and stores. There are at least 96 bytes - to copy, so copy 16 bytes unaligned and then align. The loop - copies 64 bytes per iteration and prefetches one iteration ahead. */ + .p2align 4 + /* Copy 65..128 bytes. */ +L(copy128): + ldp E_l, E_h, [src, 32] + ldp F_l, F_h, [src, 48] + cmp count, 96 + b.ls L(copy96) + ldp G_l, G_h, [srcend, -64] + ldp H_l, H_h, [srcend, -48] + stp G_l, G_h, [dstend, -64] + stp H_l, H_h, [dstend, -48] +L(copy96): + stp A_l, A_h, [dstin] + stp B_l, B_h, [dstin, 16] + stp E_l, E_h, [dstin, 32] + stp F_l, F_h, [dstin, 48] + stp C_l, C_h, [dstend, -32] + stp D_l, D_h, [dstend, -16] + ret .p2align 4 + /* Copy more than 128 bytes. */ L(copy_long): + /* Use backwards copy if there is an overlap. */ + sub tmp1, dstin, src + cbz tmp1, L(copy0) + cmp tmp1, count + b.lo L(copy_long_backwards) + + /* Copy 16 bytes and then align dst to 16-byte alignment. */ + + ldp D_l, D_h, [src] and tmp1, dstin, 15 bic dst, dstin, 15 - ldp D_l, D_h, [src] sub src, src, tmp1 add count, count, tmp1 /* Count is now 16 too large. */ ldp A_l, A_h, [src, 16] @@ -195,8 +166,9 @@ L(copy_long): ldp C_l, C_h, [src, 48] ldp D_l, D_h, [src, 64]! subs count, count, 128 + 16 /* Test and readjust count. */ - b.ls 2f -1: + b.ls L(copy64_from_end) + +L(loop64): stp A_l, A_h, [dst, 16] ldp A_l, A_h, [src, 16] stp B_l, B_h, [dst, 32] @@ -206,12 +178,10 @@ L(copy_long): stp D_l, D_h, [dst, 64]! ldp D_l, D_h, [src, 64]! subs count, count, 64 - b.hi 1b + b.hi L(loop64) - /* Write the last full set of 64 bytes. The remainder is at most 64 - bytes, so it is safe to always copy 64 bytes from the end even if - there is just 1 byte left. */ -2: + /* Write the last iteration and copy 64 bytes from the end. */ +L(copy64_from_end): ldp E_l, E_h, [srcend, -64] stp A_l, A_h, [dst, 16] ldp A_l, A_h, [srcend, -48] @@ -226,5 +196,51 @@ L(copy_long): stp C_l, C_h, [dstend, -16] ret - .size memcpy, . - memcpy + .p2align 4 + + /* Large backwards copy for overlapping copies. + Copy 16 bytes and then align dst to 16-byte alignment. */ +L(copy_long_backwards): + ldp D_l, D_h, [srcend, -16] + and tmp1, dstend, 15 + sub srcend, srcend, tmp1 + sub count, count, tmp1 + ldp A_l, A_h, [srcend, -16] + stp D_l, D_h, [dstend, -16] + ldp B_l, B_h, [srcend, -32] + ldp C_l, C_h, [srcend, -48] + ldp D_l, D_h, [srcend, -64]! + sub dstend, dstend, tmp1 + subs count, count, 128 + b.ls L(copy64_from_start) + +L(loop64_backwards): + stp A_l, A_h, [dstend, -16] + ldp A_l, A_h, [srcend, -16] + stp B_l, B_h, [dstend, -32] + ldp B_l, B_h, [srcend, -32] + stp C_l, C_h, [dstend, -48] + ldp C_l, C_h, [srcend, -48] + stp D_l, D_h, [dstend, -64]! + ldp D_l, D_h, [srcend, -64]! + subs count, count, 64 + b.hi L(loop64_backwards) + + /* Write the last iteration and copy 64 bytes from the start. */ +L(copy64_from_start): + ldp G_l, G_h, [src, 48] + stp A_l, A_h, [dstend, -16] + ldp A_l, A_h, [src, 32] + stp B_l, B_h, [dstend, -32] + ldp B_l, B_h, [src, 16] + stp C_l, C_h, [dstend, -48] + ldp C_l, C_h, [src] + stp D_l, D_h, [dstend, -64] + stp G_l, G_h, [dstin, 48] + stp A_l, A_h, [dstin, 32] + stp B_l, B_h, [dstin, 16] + stp C_l, C_h, [dstin] + ret + +END (memcpy) #endif diff --git a/newlib/libc/machine/aarch64/memmove.S b/newlib/libc/machine/aarch64/memmove.S deleted file mode 100644 index 597a8c8e9e..0000000000 --- a/newlib/libc/machine/aarch64/memmove.S +++ /dev/null @@ -1,155 +0,0 @@ -/* Copyright (c) 2013, Linaro Limited - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the Linaro nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - -/* - * Copyright (c) 2015 ARM Ltd - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the company may not be used to endorse or promote - * products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY ARM LTD ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL ARM LTD BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED - * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -/* Assumptions: - * - * ARMv8-a, AArch64, unaligned accesses - */ - -#if (defined (__OPTIMIZE_SIZE__) || defined (PREFER_SIZE_OVER_SPEED)) -/* See memmove-stub.c */ -#else - - .macro def_fn f p2align=0 - .text - .p2align \p2align - .global \f - .type \f, %function -\f: - .endm - -/* Parameters and result. */ -#define dstin x0 -#define src x1 -#define count x2 -#define srcend x3 -#define dstend x4 -#define tmp1 x5 -#define A_l x6 -#define A_h x7 -#define B_l x8 -#define B_h x9 -#define C_l x10 -#define C_h x11 -#define D_l x12 -#define D_h x13 -#define E_l count -#define E_h tmp1 - -/* All memmoves up to 96 bytes are done by memcpy as it supports overlaps. - Larger backwards copies are also handled by memcpy. The only remaining - case is forward large copies. The destination is aligned, and an - unrolled loop processes 64 bytes per iteration. -*/ - -def_fn memmove, 6 - sub tmp1, dstin, src - cmp count, 96 - ccmp tmp1, count, 2, hi - b.hs memcpy - - cbz tmp1, 3f - add dstend, dstin, count - add srcend, src, count - - /* Align dstend to 16 byte alignment so that we don't cross cache line - boundaries on both loads and stores. There are at least 96 bytes - to copy, so copy 16 bytes unaligned and then align. The loop - copies 64 bytes per iteration and prefetches one iteration ahead. */ - - and tmp1, dstend, 15 - ldp D_l, D_h, [srcend, -16] - sub srcend, srcend, tmp1 - sub count, count, tmp1 - ldp A_l, A_h, [srcend, -16] - stp D_l, D_h, [dstend, -16] - ldp B_l, B_h, [srcend, -32] - ldp C_l, C_h, [srcend, -48] - ldp D_l, D_h, [srcend, -64]! - sub dstend, dstend, tmp1 - subs count, count, 128 - b.ls 2f - nop -1: - stp A_l, A_h, [dstend, -16] - ldp A_l, A_h, [srcend, -16] - stp B_l, B_h, [dstend, -32] - ldp B_l, B_h, [srcend, -32] - stp C_l, C_h, [dstend, -48] - ldp C_l, C_h, [srcend, -48] - stp D_l, D_h, [dstend, -64]! - ldp D_l, D_h, [srcend, -64]! - subs count, count, 64 - b.hi 1b - - /* Write the last full set of 64 bytes. The remainder is at most 64 - bytes, so it is safe to always copy 64 bytes from the start even if - there is just 1 byte left. */ -2: - ldp E_l, E_h, [src, 48] - stp A_l, A_h, [dstend, -16] - ldp A_l, A_h, [src, 32] - stp B_l, B_h, [dstend, -32] - ldp B_l, B_h, [src, 16] - stp C_l, C_h, [dstend, -48] - ldp C_l, C_h, [src] - stp D_l, D_h, [dstend, -64] - stp E_l, E_h, [dstin, 48] - stp A_l, A_h, [dstin, 32] - stp B_l, B_h, [dstin, 16] - stp C_l, C_h, [dstin] -3: ret - - .size memmove, . - memmove -#endif diff --git a/newlib/libc/machine/aarch64/memmove-stub.c b/newlib/libc/machine/aarch64/memmove.c similarity index 98% rename from newlib/libc/machine/aarch64/memmove-stub.c rename to newlib/libc/machine/aarch64/memmove.c index 8fa4ab9387..bc8255fb8b 100644 --- a/newlib/libc/machine/aarch64/memmove-stub.c +++ b/newlib/libc/machine/aarch64/memmove.c @@ -27,5 +27,5 @@ #if (defined (__OPTIMIZE_SIZE__) || defined (PREFER_SIZE_OVER_SPEED)) # include "../../string/memmove.c" #else -/* See memmove.S */ +/* See memcpy.S */ #endif diff --git a/newlib/libc/machine/aarch64/memrchr-stub.c b/newlib/libc/machine/aarch64/memrchr-stub.c new file mode 100644 index 0000000000..48f13bedc8 --- /dev/null +++ b/newlib/libc/machine/aarch64/memrchr-stub.c @@ -0,0 +1,11 @@ +/* + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (C) 2023 embedded brains GmbH & Co. KG + */ + +#if defined (__OPTIMIZE_SIZE__) || defined (PREFER_SIZE_OVER_SPEED) +#include "../../string/memrchr.c" +#else +/* See memrchr.S */ +#endif diff --git a/newlib/libc/machine/aarch64/memrchr.S b/newlib/libc/machine/aarch64/memrchr.S new file mode 100644 index 0000000000..ba9915cc3d --- /dev/null +++ b/newlib/libc/machine/aarch64/memrchr.S @@ -0,0 +1,115 @@ +/* + * memrchr - find last character in a memory zone. + * + * Copyright (c) 2020-2022, Arm Limited. + * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception + */ + +/* Assumptions: + * + * ARMv8-a, AArch64, Advanced SIMD. + * MTE compatible. + */ + +#if defined (__OPTIMIZE_SIZE__) || defined (PREFER_SIZE_OVER_SPEED) +/* See memrchr-stub.c */ +#else +#include "asmdefs.h" + +#define srcin x0 +#define chrin w1 +#define cntin x2 +#define result x0 + +#define src x3 +#define cntrem x4 +#define synd x5 +#define shift x6 +#define tmp x7 +#define end x8 +#define endm1 x9 + +#define vrepchr v0 +#define qdata q1 +#define vdata v1 +#define vhas_chr v2 +#define vend v3 +#define dend d3 + +/* + Core algorithm: + For each 16-byte chunk we calculate a 64-bit nibble mask value with four bits + per byte. We take 4 bits of every comparison byte with shift right and narrow + by 4 instruction. Since the bits in the nibble mask reflect the order in + which things occur in the original string, counting leading zeros identifies + exactly which byte matched. */ + +ENTRY (memrchr) + PTR_ARG (0) + add end, srcin, cntin + sub endm1, end, 1 + bic src, endm1, 15 + cbz cntin, L(nomatch) + ld1 {vdata.16b}, [src] + dup vrepchr.16b, chrin + cmeq vhas_chr.16b, vdata.16b, vrepchr.16b + neg shift, end, lsl 2 + shrn vend.8b, vhas_chr.8h, 4 /* 128->64 */ + fmov synd, dend + lsl synd, synd, shift + cbz synd, L(start_loop) + + clz synd, synd + sub result, endm1, synd, lsr 2 + cmp cntin, synd, lsr 2 + csel result, result, xzr, hi + ret + + nop +L(start_loop): + subs cntrem, src, srcin + b.ls L(nomatch) + + /* Make sure that it won't overread by a 16-byte chunk */ + sub cntrem, cntrem, 1 + tbz cntrem, 4, L(loop32_2) + add src, src, 16 + + .p2align 5 +L(loop32): + ldr qdata, [src, -32]! + cmeq vhas_chr.16b, vdata.16b, vrepchr.16b + umaxp vend.16b, vhas_chr.16b, vhas_chr.16b /* 128->64 */ + fmov synd, dend + cbnz synd, L(end) + +L(loop32_2): + ldr qdata, [src, -16] + subs cntrem, cntrem, 32 + cmeq vhas_chr.16b, vdata.16b, vrepchr.16b + b.lo L(end_2) + umaxp vend.16b, vhas_chr.16b, vhas_chr.16b /* 128->64 */ + fmov synd, dend + cbz synd, L(loop32) +L(end_2): + sub src, src, 16 +L(end): + shrn vend.8b, vhas_chr.8h, 4 /* 128->64 */ + fmov synd, dend + + add tmp, src, 15 +#ifdef __AARCH64EB__ + rbit synd, synd +#endif + clz synd, synd + sub tmp, tmp, synd, lsr 2 + cmp tmp, srcin + csel result, tmp, xzr, hs + ret + +L(nomatch): + mov result, 0 + ret + +END (memrchr) +#endif diff --git a/newlib/libc/machine/aarch64/memset.S b/newlib/libc/machine/aarch64/memset.S index 103e3f8bb0..ca76439a91 100644 --- a/newlib/libc/machine/aarch64/memset.S +++ b/newlib/libc/machine/aarch64/memset.S @@ -1,66 +1,20 @@ -/* Copyright (c) 2012-2013, Linaro Limited - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the Linaro nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - /* - * Copyright (c) 2015 ARM Ltd - * All rights reserved. + * memset - fill memory with a constant byte * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the company may not be used to endorse or promote - * products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY ARM LTD ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL ARM LTD BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED - * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * Copyright (c) 2012-2022, Arm Limited. + * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception */ /* Assumptions: * - * ARMv8-a, AArch64, unaligned accesses + * ARMv8-a, AArch64, Advanced SIMD, unaligned accesses. * */ #if (defined (__OPTIMIZE_SIZE__) || defined (PREFER_SIZE_OVER_SPEED)) /* See memset-stub.c */ #else +#include "asmdefs.h" #define dstin x0 #define val x1 @@ -68,24 +22,11 @@ #define count x2 #define dst x3 #define dstend x4 -#define tmp1 x5 -#define tmp1w w5 -#define tmp2 x6 -#define tmp2w w6 -#define zva_len x7 -#define zva_lenw w7 - -#define L(l) .L ## l +#define zva_val x5 - .macro def_fn f p2align=0 - .text - .p2align \p2align - .global \f - .type \f, %function -\f: - .endm - -def_fn memset p2align=6 +ENTRY (memset) + PTR_ARG (0) + SIZE_ARG (2) dup v0.16B, valw add dstend, dstin, count @@ -101,7 +42,7 @@ def_fn memset p2align=6 str val, [dstin] str val, [dstend, -8] ret - nop + .p2align 4 1: tbz count, 2, 2f str valw, [dstin] str valw, [dstend, -4] @@ -131,110 +72,49 @@ L(set96): stp q0, q0, [dstend, -32] ret - .p2align 3 - nop + .p2align 4 L(set_long): and valw, valw, 255 bic dst, dstin, 15 str q0, [dstin] - cmp count, 256 - ccmp valw, 0, 0, cs - b.eq L(try_zva) -L(no_zva): - sub count, dstend, dst /* Count is 16 too large. */ - sub dst, dst, 16 /* Dst is biased by -32. */ - sub count, count, 64 + 16 /* Adjust count and bias for loop. */ -1: stp q0, q0, [dst, 32] - stp q0, q0, [dst, 64]! -L(tail64): - subs count, count, 64 - b.hi 1b -2: stp q0, q0, [dstend, -64] - stp q0, q0, [dstend, -32] - ret - - .p2align 3 -L(try_zva): - mrs tmp1, dczid_el0 - tbnz tmp1w, 4, L(no_zva) - and tmp1w, tmp1w, 15 - cmp tmp1w, 4 /* ZVA size is 64 bytes. */ - b.ne L(zva_128) - - /* Write the first and last 64 byte aligned block using stp rather - than using DC ZVA. This is faster on some cores. - */ -L(zva_64): + cmp count, 160 + ccmp valw, 0, 0, hs + b.ne L(no_zva) + +#ifndef SKIP_ZVA_CHECK + mrs zva_val, dczid_el0 + and zva_val, zva_val, 31 + cmp zva_val, 4 /* ZVA size is 64 bytes. */ + b.ne L(no_zva) +#endif str q0, [dst, 16] stp q0, q0, [dst, 32] bic dst, dst, 63 - stp q0, q0, [dst, 64] - stp q0, q0, [dst, 96] - sub count, dstend, dst /* Count is now 128 too large. */ - sub count, count, 128+64+64 /* Adjust count and bias for loop. */ - add dst, dst, 128 - nop -1: dc zva, dst + sub count, dstend, dst /* Count is now 64 too large. */ + sub count, count, 128 /* Adjust count and bias for loop. */ + + .p2align 4 +L(zva_loop): add dst, dst, 64 + dc zva, dst subs count, count, 64 - b.hi 1b - stp q0, q0, [dst, 0] - stp q0, q0, [dst, 32] + b.hi L(zva_loop) stp q0, q0, [dstend, -64] stp q0, q0, [dstend, -32] ret - .p2align 3 -L(zva_128): - cmp tmp1w, 5 /* ZVA size is 128 bytes. */ - b.ne L(zva_other) - - str q0, [dst, 16] +L(no_zva): + sub count, dstend, dst /* Count is 16 too large. */ + sub dst, dst, 16 /* Dst is biased by -32. */ + sub count, count, 64 + 16 /* Adjust count and bias for loop. */ +L(no_zva_loop): stp q0, q0, [dst, 32] - stp q0, q0, [dst, 64] - stp q0, q0, [dst, 96] - bic dst, dst, 127 - sub count, dstend, dst /* Count is now 128 too large. */ - sub count, count, 128+128 /* Adjust count and bias for loop. */ - add dst, dst, 128 -1: dc zva, dst - add dst, dst, 128 - subs count, count, 128 - b.hi 1b - stp q0, q0, [dstend, -128] - stp q0, q0, [dstend, -96] + stp q0, q0, [dst, 64]! + subs count, count, 64 + b.hi L(no_zva_loop) stp q0, q0, [dstend, -64] stp q0, q0, [dstend, -32] ret -L(zva_other): - mov tmp2w, 4 - lsl zva_lenw, tmp2w, tmp1w - add tmp1, zva_len, 64 /* Max alignment bytes written. */ - cmp count, tmp1 - blo L(no_zva) - - sub tmp2, zva_len, 1 - add tmp1, dst, zva_len - add dst, dst, 16 - subs count, tmp1, dst /* Actual alignment bytes to write. */ - bic tmp1, tmp1, tmp2 /* Aligned dc zva start address. */ - beq 2f -1: stp q0, q0, [dst], 64 - stp q0, q0, [dst, -32] - subs count, count, 64 - b.hi 1b -2: mov dst, tmp1 - sub count, dstend, tmp1 /* Remaining bytes to write. */ - subs count, count, zva_len - b.lo 4f -3: dc zva, dst - add dst, dst, zva_len - subs count, count, zva_len - b.hs 3b -4: add count, count, zva_len - sub dst, dst, 32 /* Bias dst for tail loop. */ - b L(tail64) - - .size memset, . - memset +END (memset) #endif diff --git a/newlib/libc/machine/aarch64/stpcpy.S b/newlib/libc/machine/aarch64/stpcpy.S index 696b45889f..155c68d75a 100644 --- a/newlib/libc/machine/aarch64/stpcpy.S +++ b/newlib/libc/machine/aarch64/stpcpy.S @@ -1,34 +1,10 @@ /* - stpcpy - copy a string returning pointer to end. + * stpcpy - copy a string returning pointer to end. + * + * Copyright (c) 2020, Arm Limited. + * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception + */ - Copyright (c) 2015 ARM Ltd. - All Rights Reserved. +#define BUILD_STPCPY 1 - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the company nor the names of its contributors - may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - -/* This is just a wrapper that uses strcpy code with appropriate - pre-defines. */ - -#define BUILD_STPCPY #include "strcpy.S" diff --git a/newlib/libc/machine/aarch64/strchr.S b/newlib/libc/machine/aarch64/strchr.S index 2448dbc7d5..500d9aff29 100644 --- a/newlib/libc/machine/aarch64/strchr.S +++ b/newlib/libc/machine/aarch64/strchr.S @@ -1,32 +1,9 @@ /* - strchr - find a character in a string - - Copyright (c) 2014, ARM Limited - All rights Reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the company nor the names of its contributors - may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - + * strchr - find a character in a string + * + * Copyright (c) 2014-2022, Arm Limited. + * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception + */ #if (defined (__OPTIMIZE_SIZE__) || defined (PREFER_SIZE_OVER_SPEED)) /* See strchr-stub.c */ #else @@ -37,6 +14,8 @@ * Neon Available. */ +#include "asmdefs.h" + /* Arguments and results. */ #define srcin x0 #define chrin w1 @@ -74,26 +53,19 @@ /* Locals and temporaries. */ - .macro def_fn f p2align=0 - .text - .p2align \p2align - .global \f - .type \f, %function -\f: - .endm - -def_fn strchr - /* Magic constant 0x40100401 to allow us to identify which lane - matches the requested byte. Magic constant 0x80200802 used - similarly for NUL termination. */ - mov wtmp2, #0x0401 - movk wtmp2, #0x4010, lsl #16 +ENTRY (strchr) + PTR_ARG (0) + /* Magic constant 0xc0300c03 to allow us to identify which lane + matches the requested byte. Even bits are set if the character + matches, odd bits if either the char is NUL or matches. */ + mov wtmp2, 0x0c03 + movk wtmp2, 0xc030, lsl 16 dup vrepchr.16b, chrin bic src, srcin, #31 /* Work with aligned 32-byte hunks. */ dup vrepmask_c.4s, wtmp2 ands tmp1, srcin, #31 add vrepmask_0.4s, vrepmask_c.4s, vrepmask_c.4s /* equiv: lsl #1 */ - b.eq .Lloop + b.eq L(loop) /* Input string is not 32-byte aligned. Rather than forcing the padding bytes to a safe value, we calculate the syndrome @@ -105,49 +77,42 @@ def_fn strchr cmeq vhas_chr1.16b, vdata1.16b, vrepchr.16b cmeq vhas_nul2.16b, vdata2.16b, #0 cmeq vhas_chr2.16b, vdata2.16b, vrepchr.16b - and vhas_nul1.16b, vhas_nul1.16b, vrepmask_0.16b - and vhas_nul2.16b, vhas_nul2.16b, vrepmask_0.16b - and vhas_chr1.16b, vhas_chr1.16b, vrepmask_c.16b - and vhas_chr2.16b, vhas_chr2.16b, vrepmask_c.16b - orr vend1.16b, vhas_nul1.16b, vhas_chr1.16b - orr vend2.16b, vhas_nul2.16b, vhas_chr2.16b + bif vhas_nul1.16b, vhas_chr1.16b, vrepmask_0.16b + bif vhas_nul2.16b, vhas_chr2.16b, vrepmask_0.16b + and vend1.16b, vhas_nul1.16b, vrepmask_c.16b + and vend2.16b, vhas_nul2.16b, vrepmask_c.16b lsl tmp1, tmp1, #1 addp vend1.16b, vend1.16b, vend2.16b // 256->128 mov tmp3, #~0 addp vend1.16b, vend1.16b, vend2.16b // 128->64 lsr tmp1, tmp3, tmp1 - mov tmp3, vend1.2d[0] + mov tmp3, vend1.d[0] bic tmp1, tmp3, tmp1 // Mask padding bits. - cbnz tmp1, .Ltail + cbnz tmp1, L(tail) -.Lloop: + .p2align 4 +L(loop): ld1 {vdata1.16b, vdata2.16b}, [src], #32 - cmeq vhas_nul1.16b, vdata1.16b, #0 cmeq vhas_chr1.16b, vdata1.16b, vrepchr.16b - cmeq vhas_nul2.16b, vdata2.16b, #0 cmeq vhas_chr2.16b, vdata2.16b, vrepchr.16b - /* Use a fast check for the termination condition. */ - orr vend1.16b, vhas_nul1.16b, vhas_chr1.16b - orr vend2.16b, vhas_nul2.16b, vhas_chr2.16b - orr vend1.16b, vend1.16b, vend2.16b - addp vend1.2d, vend1.2d, vend1.2d - mov tmp1, vend1.2d[0] - cbz tmp1, .Lloop + cmhs vhas_nul1.16b, vhas_chr1.16b, vdata1.16b + cmhs vhas_nul2.16b, vhas_chr2.16b, vdata2.16b + orr vend1.16b, vhas_nul1.16b, vhas_nul2.16b + umaxp vend1.16b, vend1.16b, vend1.16b + mov tmp1, vend1.d[0] + cbz tmp1, L(loop) /* Termination condition found. Now need to establish exactly why we terminated. */ - and vhas_nul1.16b, vhas_nul1.16b, vrepmask_0.16b - and vhas_nul2.16b, vhas_nul2.16b, vrepmask_0.16b - and vhas_chr1.16b, vhas_chr1.16b, vrepmask_c.16b - and vhas_chr2.16b, vhas_chr2.16b, vrepmask_c.16b - orr vend1.16b, vhas_nul1.16b, vhas_chr1.16b - orr vend2.16b, vhas_nul2.16b, vhas_chr2.16b + bif vhas_nul1.16b, vhas_chr1.16b, vrepmask_0.16b + bif vhas_nul2.16b, vhas_chr2.16b, vrepmask_0.16b + and vend1.16b, vhas_nul1.16b, vrepmask_c.16b + and vend2.16b, vhas_nul2.16b, vrepmask_c.16b addp vend1.16b, vend1.16b, vend2.16b // 256->128 addp vend1.16b, vend1.16b, vend2.16b // 128->64 - - mov tmp1, vend1.2d[0] -.Ltail: + mov tmp1, vend1.d[0] +L(tail): /* Count the trailing zeros, by bit reversing... */ rbit tmp1, tmp1 /* Re-bias source. */ @@ -160,5 +125,5 @@ def_fn strchr csel result, result, xzr, eq ret - .size strchr, . - strchr +END (strchr) #endif diff --git a/newlib/libc/machine/aarch64/strchrnul.S b/newlib/libc/machine/aarch64/strchrnul.S index a0ac13b7f4..ceaf4dca17 100644 --- a/newlib/libc/machine/aarch64/strchrnul.S +++ b/newlib/libc/machine/aarch64/strchrnul.S @@ -1,32 +1,9 @@ /* - strchrnul - find a character or nul in a string - - Copyright (c) 2014, ARM Limited - All rights Reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the company nor the names of its contributors - may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - + * strchrnul - find a character or nul in a string + * + * Copyright (c) 2014-2022, Arm Limited. + * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception + */ #if (defined (__OPTIMIZE_SIZE__) || defined (PREFER_SIZE_OVER_SPEED)) /* See strchrnul-stub.c */ #else @@ -37,6 +14,8 @@ * Neon Available. */ +#include "asmdefs.h" + /* Arguments and results. */ #define srcin x0 #define chrin w1 @@ -70,15 +49,8 @@ /* Locals and temporaries. */ - .macro def_fn f p2align=0 - .text - .p2align \p2align - .global \f - .type \f, %function -\f: - .endm - -def_fn strchrnul +ENTRY (strchrnul) + PTR_ARG (0) /* Magic constant 0x40100401 to allow us to identify which lane matches the termination condition. */ mov wtmp2, #0x0401 @@ -87,7 +59,7 @@ def_fn strchrnul bic src, srcin, #31 /* Work with aligned 32-byte hunks. */ dup vrepmask.4s, wtmp2 ands tmp1, srcin, #31 - b.eq .Lloop + b.eq L(loop) /* Input string is not 32-byte aligned. Rather than forcing the padding bytes to a safe value, we calculate the syndrome @@ -95,47 +67,43 @@ def_fn strchrnul syndrome that are related to the padding. */ ld1 {vdata1.16b, vdata2.16b}, [src], #32 neg tmp1, tmp1 - cmeq vhas_nul1.16b, vdata1.16b, #0 cmeq vhas_chr1.16b, vdata1.16b, vrepchr.16b - cmeq vhas_nul2.16b, vdata2.16b, #0 cmeq vhas_chr2.16b, vdata2.16b, vrepchr.16b - orr vhas_chr1.16b, vhas_chr1.16b, vhas_nul1.16b - orr vhas_chr2.16b, vhas_chr2.16b, vhas_nul2.16b - and vhas_chr1.16b, vhas_chr1.16b, vrepmask.16b - and vhas_chr2.16b, vhas_chr2.16b, vrepmask.16b + cmhs vhas_nul1.16b, vhas_chr1.16b, vdata1.16b + cmhs vhas_nul2.16b, vhas_chr2.16b, vdata2.16b + and vhas_chr1.16b, vhas_nul1.16b, vrepmask.16b + and vhas_chr2.16b, vhas_nul2.16b, vrepmask.16b lsl tmp1, tmp1, #1 addp vend1.16b, vhas_chr1.16b, vhas_chr2.16b // 256->128 mov tmp3, #~0 addp vend1.16b, vend1.16b, vend1.16b // 128->64 lsr tmp1, tmp3, tmp1 - mov tmp3, vend1.2d[0] + mov tmp3, vend1.d[0] bic tmp1, tmp3, tmp1 // Mask padding bits. - cbnz tmp1, .Ltail + cbnz tmp1, L(tail) -.Lloop: + .p2align 4 +L(loop): ld1 {vdata1.16b, vdata2.16b}, [src], #32 - cmeq vhas_nul1.16b, vdata1.16b, #0 cmeq vhas_chr1.16b, vdata1.16b, vrepchr.16b - cmeq vhas_nul2.16b, vdata2.16b, #0 cmeq vhas_chr2.16b, vdata2.16b, vrepchr.16b - /* Use a fast check for the termination condition. */ - orr vhas_chr1.16b, vhas_nul1.16b, vhas_chr1.16b - orr vhas_chr2.16b, vhas_nul2.16b, vhas_chr2.16b - orr vend1.16b, vhas_chr1.16b, vhas_chr2.16b - addp vend1.2d, vend1.2d, vend1.2d - mov tmp1, vend1.2d[0] - cbz tmp1, .Lloop + cmhs vhas_nul1.16b, vhas_chr1.16b, vdata1.16b + cmhs vhas_nul2.16b, vhas_chr2.16b, vdata2.16b + orr vend1.16b, vhas_nul1.16b, vhas_nul2.16b + umaxp vend1.16b, vend1.16b, vend1.16b + mov tmp1, vend1.d[0] + cbz tmp1, L(loop) /* Termination condition found. Now need to establish exactly why we terminated. */ - and vhas_chr1.16b, vhas_chr1.16b, vrepmask.16b - and vhas_chr2.16b, vhas_chr2.16b, vrepmask.16b + and vhas_chr1.16b, vhas_nul1.16b, vrepmask.16b + and vhas_chr2.16b, vhas_nul2.16b, vrepmask.16b addp vend1.16b, vhas_chr1.16b, vhas_chr2.16b // 256->128 addp vend1.16b, vend1.16b, vend1.16b // 128->64 - mov tmp1, vend1.2d[0] -.Ltail: + mov tmp1, vend1.d[0] +L(tail): /* Count the trailing zeros, by bit reversing... */ rbit tmp1, tmp1 /* Re-bias source. */ @@ -145,5 +113,5 @@ def_fn strchrnul add result, src, tmp1, lsr #1 ret - .size strchrnul, . - strchrnul +END (strchrnul) #endif diff --git a/newlib/libc/machine/aarch64/strcmp.S b/newlib/libc/machine/aarch64/strcmp.S index e2bef2d49d..691a1760ee 100644 --- a/newlib/libc/machine/aarch64/strcmp.S +++ b/newlib/libc/machine/aarch64/strcmp.S @@ -1,202 +1,192 @@ -/* Copyright (c) 2012-2018, Linaro Limited - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the Linaro nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - -/* Assumptions: +/* + * strcmp - compare two strings * - * ARMv8-a, AArch64 + * Copyright (c) 2012-2022, Arm Limited. + * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception */ #if (defined (__OPTIMIZE_SIZE__) || defined (PREFER_SIZE_OVER_SPEED)) /* See strcmp-stub.c */ #else - .macro def_fn f p2align=0 - .text - .p2align \p2align - .global \f - .type \f, %function -\f: - .endm +/* Assumptions: + * + * ARMv8-a, AArch64. + * MTE compatible. + */ -#define L(label) .L ## label +#include "asmdefs.h" #define REP8_01 0x0101010101010101 #define REP8_7f 0x7f7f7f7f7f7f7f7f -#define REP8_80 0x8080808080808080 -/* Parameters and result. */ #define src1 x0 #define src2 x1 #define result x0 -/* Internal variables. */ #define data1 x2 #define data1w w2 #define data2 x3 #define data2w w3 #define has_nul x4 #define diff x5 +#define off1 x5 #define syndrome x6 -#define tmp1 x7 -#define tmp2 x8 -#define tmp3 x9 -#define zeroones x10 -#define pos x11 - - /* Start of performance-critical section -- one 64B cache line. */ -def_fn strcmp p2align=6 - eor tmp1, src1, src2 - mov zeroones, #REP8_01 - tst tmp1, #7 +#define tmp x6 +#define data3 x7 +#define zeroones x8 +#define shift x9 +#define off2 x10 + +/* On big-endian early bytes are at MSB and on little-endian LSB. + LS_FW means shifting towards early bytes. */ +#ifdef __AARCH64EB__ +# define LS_FW lsl +#else +# define LS_FW lsr +#endif + +/* NUL detection works on the principle that (X - 1) & (~X) & 0x80 + (=> (X - 1) & ~(X | 0x7f)) is non-zero iff a byte is zero, and + can be done in parallel across the entire word. + Since carry propagation makes 0x1 bytes before a NUL byte appear + NUL too in big-endian, byte-reverse the data before the NUL check. */ + + +ENTRY (strcmp) + PTR_ARG (0) + PTR_ARG (1) + sub off2, src2, src1 + mov zeroones, REP8_01 + and tmp, src1, 7 + tst off2, 7 b.ne L(misaligned8) - ands tmp1, src1, #7 - b.ne L(mutual_align) - /* NUL detection works on the principle that (X - 1) & (~X) & 0x80 - (=> (X - 1) & ~(X | 0x7f)) is non-zero iff a byte is zero, and - can be done in parallel across the entire word. */ + cbnz tmp, L(mutual_align) + + .p2align 4 + L(loop_aligned): - ldr data1, [src1], #8 - ldr data2, [src2], #8 + ldr data2, [src1, off2] + ldr data1, [src1], 8 L(start_realigned): - sub tmp1, data1, zeroones - orr tmp2, data1, #REP8_7f - eor diff, data1, data2 /* Non-zero if differences found. */ - bic has_nul, tmp1, tmp2 /* Non-zero if NUL terminator. */ +#ifdef __AARCH64EB__ + rev tmp, data1 + sub has_nul, tmp, zeroones + orr tmp, tmp, REP8_7f +#else + sub has_nul, data1, zeroones + orr tmp, data1, REP8_7f +#endif + bics has_nul, has_nul, tmp /* Non-zero if NUL terminator. */ + ccmp data1, data2, 0, eq + b.eq L(loop_aligned) +#ifdef __AARCH64EB__ + rev has_nul, has_nul +#endif + eor diff, data1, data2 orr syndrome, diff, has_nul - cbz syndrome, L(loop_aligned) - /* End of performance-critical section -- one 64B cache line. */ - L(end): -#ifndef __AARCH64EB__ +#ifndef __AARCH64EB__ rev syndrome, syndrome rev data1, data1 - /* The MS-non-zero bit of the syndrome marks either the first bit - that is different, or the top bit of the first zero byte. - Shifting left now will bring the critical information into the - top bits. */ - clz pos, syndrome rev data2, data2 - lsl data1, data1, pos - lsl data2, data2, pos - /* But we need to zero-extend (char is unsigned) the value and then - perform a signed 32-bit subtraction. */ - lsr data1, data1, #56 - sub result, data1, data2, lsr #56 - ret -#else - /* For big-endian we cannot use the trick with the syndrome value - as carry-propagation can corrupt the upper bits if the trailing - bytes in the string contain 0x01. */ - /* However, if there is no NUL byte in the dword, we can generate - the result directly. We can't just subtract the bytes as the - MSB might be significant. */ - cbnz has_nul, 1f - cmp data1, data2 - cset result, ne - cneg result, result, lo - ret -1: - /* Re-compute the NUL-byte detection, using a byte-reversed value. */ - rev tmp3, data1 - sub tmp1, tmp3, zeroones - orr tmp2, tmp3, #REP8_7f - bic has_nul, tmp1, tmp2 - rev has_nul, has_nul - orr syndrome, diff, has_nul - clz pos, syndrome - /* The MS-non-zero bit of the syndrome marks either the first bit - that is different, or the top bit of the first zero byte. +#endif + clz shift, syndrome + /* The most-significant-non-zero bit of the syndrome marks either the + first bit that is different, or the top bit of the first zero byte. Shifting left now will bring the critical information into the top bits. */ - lsl data1, data1, pos - lsl data2, data2, pos + lsl data1, data1, shift + lsl data2, data2, shift /* But we need to zero-extend (char is unsigned) the value and then perform a signed 32-bit subtraction. */ - lsr data1, data1, #56 - sub result, data1, data2, lsr #56 + lsr data1, data1, 56 + sub result, data1, data2, lsr 56 ret -#endif + + .p2align 4 L(mutual_align): /* Sources are mutually aligned, but are not currently at an alignment boundary. Round down the addresses and then mask off - the bytes that preceed the start point. */ - bic src1, src1, #7 - bic src2, src2, #7 - lsl tmp1, tmp1, #3 /* Bytes beyond alignment -> bits. */ - ldr data1, [src1], #8 - neg tmp1, tmp1 /* Bits to alignment -64. */ - ldr data2, [src2], #8 - mov tmp2, #~0 -#ifdef __AARCH64EB__ - /* Big-endian. Early bytes are at MSB. */ - lsl tmp2, tmp2, tmp1 /* Shift (tmp1 & 63). */ -#else - /* Little-endian. Early bytes are at LSB. */ - lsr tmp2, tmp2, tmp1 /* Shift (tmp1 & 63). */ -#endif - orr data1, data1, tmp2 - orr data2, data2, tmp2 + the bytes that precede the start point. */ + bic src1, src1, 7 + ldr data2, [src1, off2] + ldr data1, [src1], 8 + neg shift, src2, lsl 3 /* Bits to alignment -64. */ + mov tmp, -1 + LS_FW tmp, tmp, shift + orr data1, data1, tmp + orr data2, data2, tmp b L(start_realigned) L(misaligned8): /* Align SRC1 to 8 bytes and then compare 8 bytes at a time, always - checking to make sure that we don't access beyond page boundary in - SRC2. */ - tst src1, #7 - b.eq L(loop_misaligned) + checking to make sure that we don't access beyond the end of SRC2. */ + cbz tmp, L(src1_aligned) L(do_misaligned): - ldrb data1w, [src1], #1 - ldrb data2w, [src2], #1 - cmp data1w, #1 - ccmp data1w, data2w, #0, cs /* NZCV = 0b0000. */ + ldrb data1w, [src1], 1 + ldrb data2w, [src2], 1 + cmp data1w, 0 + ccmp data1w, data2w, 0, ne /* NZCV = 0b0000. */ b.ne L(done) - tst src1, #7 + tst src1, 7 b.ne L(do_misaligned) -L(loop_misaligned): - /* Test if we are within the last dword of the end of a 4K page. If - yes then jump back to the misaligned loop to copy a byte at a time. */ - and tmp1, src2, #0xff8 - eor tmp1, tmp1, #0xff8 - cbz tmp1, L(do_misaligned) - ldr data1, [src1], #8 - ldr data2, [src2], #8 - - sub tmp1, data1, zeroones - orr tmp2, data1, #REP8_7f - eor diff, data1, data2 /* Non-zero if differences found. */ - bic has_nul, tmp1, tmp2 /* Non-zero if NUL terminator. */ +L(src1_aligned): + neg shift, src2, lsl 3 + bic src2, src2, 7 + ldr data3, [src2], 8 +#ifdef __AARCH64EB__ + rev data3, data3 +#endif + lsr tmp, zeroones, shift + orr data3, data3, tmp + sub has_nul, data3, zeroones + orr tmp, data3, REP8_7f + bics has_nul, has_nul, tmp + b.ne L(tail) + + sub off1, src2, src1 + + .p2align 4 + +L(loop_unaligned): + ldr data3, [src1, off1] + ldr data2, [src1, off2] +#ifdef __AARCH64EB__ + rev data3, data3 +#endif + sub has_nul, data3, zeroones + orr tmp, data3, REP8_7f + ldr data1, [src1], 8 + bics has_nul, has_nul, tmp + ccmp data1, data2, 0, eq + b.eq L(loop_unaligned) + + lsl tmp, has_nul, shift +#ifdef __AARCH64EB__ + rev tmp, tmp +#endif + eor diff, data1, data2 + orr syndrome, diff, tmp + cbnz syndrome, L(end) +L(tail): + ldr data1, [src1] + neg shift, shift + lsr data2, data3, shift + lsr has_nul, has_nul, shift +#ifdef __AARCH64EB__ + rev data2, data2 + rev has_nul, has_nul +#endif + eor diff, data1, data2 orr syndrome, diff, has_nul - cbz syndrome, L(loop_misaligned) b L(end) L(done): sub result, data1, data2 ret - .size strcmp, .-strcmp +END (strcmp) #endif diff --git a/newlib/libc/machine/aarch64/strcpy.S b/newlib/libc/machine/aarch64/strcpy.S index e5405f2535..57c46f3908 100644 --- a/newlib/libc/machine/aarch64/strcpy.S +++ b/newlib/libc/machine/aarch64/strcpy.S @@ -1,341 +1,160 @@ /* - strcpy/stpcpy - copy a string returning pointer to start/end. - - Copyright (c) 2013, 2014, 2015 ARM Ltd. - All Rights Reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the company nor the names of its contributors - may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - + * strcpy/stpcpy - copy a string returning pointer to start/end. + * + * Copyright (c) 2020-2023, Arm Limited. + * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception + */ #if (defined (__OPTIMIZE_SIZE__) || defined (PREFER_SIZE_OVER_SPEED)) /* See strchr-stub.c */ #else /* Assumptions: * - * ARMv8-a, AArch64, unaligned accesses, min page size 4k. + * ARMv8-a, AArch64, Advanced SIMD. + * MTE compatible. */ -/* To build as stpcpy, define BUILD_STPCPY before compiling this file. +#include "asmdefs.h" - To test the page crossing code path more thoroughly, compile with - -DSTRCPY_TEST_PAGE_CROSS - this will force all copies through the slower - entry path. This option is not intended for production use. */ - -/* Arguments and results. */ #define dstin x0 #define srcin x1 +#define result x0 -/* Locals and temporaries. */ #define src x2 #define dst x3 -#define data1 x4 -#define data1w w4 -#define data2 x5 -#define data2w w5 -#define has_nul1 x6 -#define has_nul2 x7 -#define tmp1 x8 -#define tmp2 x9 -#define tmp3 x10 -#define tmp4 x11 -#define zeroones x12 -#define data1a x13 -#define data2a x14 -#define pos x15 -#define len x16 -#define to_align x17 +#define len x4 +#define synd x4 +#define tmp x5 +#define shift x5 +#define data1 x6 +#define dataw1 w6 +#define data2 x7 +#define dataw2 w7 + +#define dataq q0 +#define vdata v0 +#define vhas_nul v1 +#define vend v2 +#define dend d2 +#define dataq2 q1 #ifdef BUILD_STPCPY -#define STRCPY stpcpy +# define STRCPY stpcpy +# define IFSTPCPY(X,...) X,__VA_ARGS__ #else -#define STRCPY strcpy +# define STRCPY strcpy +# define IFSTPCPY(X,...) #endif - .macro def_fn f p2align=0 - .text - .p2align \p2align - .global \f - .type \f, %function -\f: - .endm - - /* NUL detection works on the principle that (X - 1) & (~X) & 0x80 - (=> (X - 1) & ~(X | 0x7f)) is non-zero iff a byte is zero, and - can be done in parallel across the entire word. */ - -#define REP8_01 0x0101010101010101 -#define REP8_7f 0x7f7f7f7f7f7f7f7f -#define REP8_80 0x8080808080808080 - - /* AArch64 systems have a minimum page size of 4k. We can do a quick - page size check for crossing this boundary on entry and if we - do not, then we can short-circuit much of the entry code. We - expect early page-crossing strings to be rare (probability of - 16/MIN_PAGE_SIZE ~= 0.4%), so the branch should be quite - predictable, even with random strings. - - We don't bother checking for larger page sizes, the cost of setting - up the correct page size is just not worth the extra gain from - a small reduction in the cases taking the slow path. Note that - we only care about whether the first fetch, which may be - misaligned, crosses a page boundary - after that we move to aligned - fetches for the remainder of the string. */ - -#ifdef STRCPY_TEST_PAGE_CROSS - /* Make everything that isn't Qword aligned look like a page cross. */ -#define MIN_PAGE_P2 4 -#else -#define MIN_PAGE_P2 12 -#endif - -#define MIN_PAGE_SIZE (1 << MIN_PAGE_P2) - -def_fn STRCPY p2align=6 - /* For moderately short strings, the fastest way to do the copy is to - calculate the length of the string in the same way as strlen, then - essentially do a memcpy of the result. This avoids the need for - multiple byte copies and further means that by the time we - reach the bulk copy loop we know we can always use DWord - accesses. We expect strcpy to rarely be called repeatedly - with the same source string, so branch prediction is likely to - always be difficult - we mitigate against this by preferring - conditional select operations over branches whenever this is - feasible. */ - and tmp2, srcin, #(MIN_PAGE_SIZE - 1) - mov zeroones, #REP8_01 - and to_align, srcin, #15 - cmp tmp2, #(MIN_PAGE_SIZE - 16) - neg tmp1, to_align - /* The first fetch will straddle a (possible) page boundary iff - srcin + 15 causes bit[MIN_PAGE_P2] to change value. A 16-byte - aligned string will never fail the page align check, so will - always take the fast path. */ - b.gt .Lpage_cross - -.Lpage_cross_ok: - ldp data1, data2, [srcin] -#ifdef __AARCH64EB__ - /* Because we expect the end to be found within 16 characters - (profiling shows this is the most common case), it's worth - swapping the bytes now to save having to recalculate the - termination syndrome later. We preserve data1 and data2 - so that we can re-use the values later on. */ - rev tmp2, data1 - sub tmp1, tmp2, zeroones - orr tmp2, tmp2, #REP8_7f - bics has_nul1, tmp1, tmp2 - b.ne .Lfp_le8 - rev tmp4, data2 - sub tmp3, tmp4, zeroones - orr tmp4, tmp4, #REP8_7f -#else - sub tmp1, data1, zeroones - orr tmp2, data1, #REP8_7f - bics has_nul1, tmp1, tmp2 - b.ne .Lfp_le8 - sub tmp3, data2, zeroones - orr tmp4, data2, #REP8_7f +/* + Core algorithm: + For each 16-byte chunk we calculate a 64-bit nibble mask value with four bits + per byte. We take 4 bits of every comparison byte with shift right and narrow + by 4 instruction. Since the bits in the nibble mask reflect the order in + which things occur in the original string, counting leading zeros identifies + exactly which byte matched. */ + +ENTRY (STRCPY) + PTR_ARG (0) + PTR_ARG (1) + bic src, srcin, 15 + ld1 {vdata.16b}, [src] + cmeq vhas_nul.16b, vdata.16b, 0 + lsl shift, srcin, 2 + shrn vend.8b, vhas_nul.8h, 4 + fmov synd, dend + lsr synd, synd, shift + cbnz synd, L(tail) + + ldr dataq, [src, 16]! + cmeq vhas_nul.16b, vdata.16b, 0 + shrn vend.8b, vhas_nul.8h, 4 + fmov synd, dend + cbz synd, L(start_loop) + +#ifndef __AARCH64EB__ + rbit synd, synd #endif - bics has_nul2, tmp3, tmp4 - b.eq .Lbulk_entry + sub tmp, src, srcin + clz len, synd + add len, tmp, len, lsr 2 + tbz len, 4, L(less16) + sub tmp, len, 15 + ldr dataq, [srcin] + ldr dataq2, [srcin, tmp] + str dataq, [dstin] + str dataq2, [dstin, tmp] + IFSTPCPY (add result, dstin, len) + ret - /* The string is short (<=16 bytes). We don't know exactly how - short though, yet. Work out the exact length so that we can - quickly select the optimal copy strategy. */ -.Lfp_gt8: - rev has_nul2, has_nul2 - clz pos, has_nul2 - mov tmp2, #56 - add dst, dstin, pos, lsr #3 /* Bits to bytes. */ - sub pos, tmp2, pos -#ifdef __AARCH64EB__ - lsr data2, data2, pos -#else - lsl data2, data2, pos -#endif - str data2, [dst, #1] +L(tail): + rbit synd, synd + clz len, synd + lsr len, len, 2 +L(less16): + tbz len, 3, L(less8) + sub tmp, len, 7 + ldr data1, [srcin] + ldr data2, [srcin, tmp] str data1, [dstin] -#ifdef BUILD_STPCPY - add dstin, dst, #8 -#endif + str data2, [dstin, tmp] + IFSTPCPY (add result, dstin, len) ret -.Lfp_le8: - rev has_nul1, has_nul1 - clz pos, has_nul1 - add dst, dstin, pos, lsr #3 /* Bits to bytes. */ - subs tmp2, pos, #24 /* Pos in bits. */ - b.lt .Lfp_lt4 -#ifdef __AARCH64EB__ - mov tmp2, #56 - sub pos, tmp2, pos - lsr data2, data1, pos - lsr data1, data1, #32 -#else - lsr data2, data1, tmp2 -#endif - /* 4->7 bytes to copy. */ - str data2w, [dst, #-3] - str data1w, [dstin] -#ifdef BUILD_STPCPY - mov dstin, dst -#endif - ret -.Lfp_lt4: - cbz pos, .Lfp_lt2 - /* 2->3 bytes to copy. */ -#ifdef __AARCH64EB__ - lsr data1, data1, #48 -#endif - strh data1w, [dstin] - /* Fall-through, one byte (max) to go. */ -.Lfp_lt2: - /* Null-terminated string. Last character must be zero! */ - strb wzr, [dst] -#ifdef BUILD_STPCPY - mov dstin, dst -#endif + .p2align 4 +L(less8): + subs tmp, len, 3 + b.lo L(less4) + ldr dataw1, [srcin] + ldr dataw2, [srcin, tmp] + str dataw1, [dstin] + str dataw2, [dstin, tmp] + IFSTPCPY (add result, dstin, len) ret - .p2align 6 - /* Aligning here ensures that the entry code and main loop all lies - within one 64-byte cache line. */ -.Lbulk_entry: - sub to_align, to_align, #16 - stp data1, data2, [dstin] - sub src, srcin, to_align - sub dst, dstin, to_align - b .Lentry_no_page_cross - - /* The inner loop deals with two Dwords at a time. This has a - slightly higher start-up cost, but we should win quite quickly, - especially on cores with a high number of issue slots per - cycle, as we get much better parallelism out of the operations. */ -.Lmain_loop: - stp data1, data2, [dst], #16 -.Lentry_no_page_cross: - ldp data1, data2, [src], #16 - sub tmp1, data1, zeroones - orr tmp2, data1, #REP8_7f - sub tmp3, data2, zeroones - orr tmp4, data2, #REP8_7f - bic has_nul1, tmp1, tmp2 - bics has_nul2, tmp3, tmp4 - ccmp has_nul1, #0, #0, eq /* NZCV = 0000 */ - b.eq .Lmain_loop - - /* Since we know we are copying at least 16 bytes, the fastest way - to deal with the tail is to determine the location of the - trailing NUL, then (re)copy the 16 bytes leading up to that. */ - cmp has_nul1, #0 -#ifdef __AARCH64EB__ - /* For big-endian, carry propagation (if the final byte in the - string is 0x01) means we cannot use has_nul directly. The - easiest way to get the correct byte is to byte-swap the data - and calculate the syndrome a second time. */ - csel data1, data1, data2, ne - rev data1, data1 - sub tmp1, data1, zeroones - orr tmp2, data1, #REP8_7f - bic has_nul1, tmp1, tmp2 -#else - csel has_nul1, has_nul1, has_nul2, ne -#endif - rev has_nul1, has_nul1 - clz pos, has_nul1 - add tmp1, pos, #72 - add pos, pos, #8 - csel pos, pos, tmp1, ne - add src, src, pos, lsr #3 - add dst, dst, pos, lsr #3 - ldp data1, data2, [src, #-32] - stp data1, data2, [dst, #-16] -#ifdef BUILD_STPCPY - sub dstin, dst, #1 -#endif +L(less4): + cbz len, L(zerobyte) + ldrh dataw1, [srcin] + strh dataw1, [dstin] +L(zerobyte): + strb wzr, [dstin, len] + IFSTPCPY (add result, dstin, len) ret -.Lpage_cross: - bic src, srcin, #15 - /* Start by loading two words at [srcin & ~15], then forcing the - bytes that precede srcin to 0xff. This means they never look - like termination bytes. */ - ldp data1, data2, [src] - lsl tmp1, tmp1, #3 /* Bytes beyond alignment -> bits. */ - tst to_align, #7 - csetm tmp2, ne -#ifdef __AARCH64EB__ - lsl tmp2, tmp2, tmp1 /* Shift (tmp1 & 63). */ -#else - lsr tmp2, tmp2, tmp1 /* Shift (tmp1 & 63). */ + .p2align 4 +L(start_loop): + sub tmp, srcin, dstin + ldr dataq2, [srcin] + sub dst, src, tmp + str dataq2, [dstin] +L(loop): + str dataq, [dst], 32 + ldr dataq, [src, 16] + cmeq vhas_nul.16b, vdata.16b, 0 + umaxp vend.16b, vhas_nul.16b, vhas_nul.16b + fmov synd, dend + cbnz synd, L(loopend) + str dataq, [dst, -16] + ldr dataq, [src, 32]! + cmeq vhas_nul.16b, vdata.16b, 0 + umaxp vend.16b, vhas_nul.16b, vhas_nul.16b + fmov synd, dend + cbz synd, L(loop) + add dst, dst, 16 +L(loopend): + shrn vend.8b, vhas_nul.8h, 4 /* 128->64 */ + fmov synd, dend + sub dst, dst, 31 +#ifndef __AARCH64EB__ + rbit synd, synd #endif - orr data1, data1, tmp2 - orr data2a, data2, tmp2 - cmp to_align, #8 - csinv data1, data1, xzr, lt - csel data2, data2, data2a, lt - sub tmp1, data1, zeroones - orr tmp2, data1, #REP8_7f - sub tmp3, data2, zeroones - orr tmp4, data2, #REP8_7f - bic has_nul1, tmp1, tmp2 - bics has_nul2, tmp3, tmp4 - ccmp has_nul1, #0, #0, eq /* NZCV = 0000 */ - b.eq .Lpage_cross_ok - /* We now need to make data1 and data2 look like they've been - loaded directly from srcin. Do a rotate on the 128-bit value. */ - lsl tmp1, to_align, #3 /* Bytes->bits. */ - neg tmp2, to_align, lsl #3 -#ifdef __AARCH64EB__ - lsl data1a, data1, tmp1 - lsr tmp4, data2, tmp2 - lsl data2, data2, tmp1 - orr tmp4, tmp4, data1a - cmp to_align, #8 - csel data1, tmp4, data2, lt - rev tmp2, data1 - rev tmp4, data2 - sub tmp1, tmp2, zeroones - orr tmp2, tmp2, #REP8_7f - sub tmp3, tmp4, zeroones - orr tmp4, tmp4, #REP8_7f -#else - lsr data1a, data1, tmp1 - lsl tmp4, data2, tmp2 - lsr data2, data2, tmp1 - orr tmp4, tmp4, data1a - cmp to_align, #8 - csel data1, tmp4, data2, lt - sub tmp1, data1, zeroones - orr tmp2, data1, #REP8_7f - sub tmp3, data2, zeroones - orr tmp4, data2, #REP8_7f -#endif - bic has_nul1, tmp1, tmp2 - cbnz has_nul1, .Lfp_le8 - bic has_nul2, tmp3, tmp4 - b .Lfp_gt8 + clz len, synd + lsr len, len, 2 + add dst, dst, len + ldr dataq, [dst, tmp] + str dataq, [dst] + IFSTPCPY (add result, dst, 15) + ret - .size STRCPY, . - STRCPY +END (STRCPY) #endif diff --git a/newlib/libc/machine/aarch64/strlen.S b/newlib/libc/machine/aarch64/strlen.S index 872d136ef4..68a6f357cf 100644 --- a/newlib/libc/machine/aarch64/strlen.S +++ b/newlib/libc/machine/aarch64/strlen.S @@ -1,115 +1,92 @@ -/* Copyright (c) 2013-2015, Linaro Limited - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the Linaro nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - +/* + * strlen - calculate the length of a string. + * + * Copyright (c) 2020-2022, Arm Limited. + * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception + */ #if (defined (__OPTIMIZE_SIZE__) || defined (PREFER_SIZE_OVER_SPEED)) /* See strlen-stub.c */ #else /* Assumptions: * - * ARMv8-a, AArch64, unaligned accesses, min page size 4k. + * ARMv8-a, AArch64, Advanced SIMD, unaligned accesses. + * Not MTE compatible. */ -/* To test the page crossing code path more thoroughly, compile with - -DTEST_PAGE_CROSS - this will force all calls through the slower - entry path. This option is not intended for production use. */ - -/* Arguments and results. */ -#define srcin x0 -#define len x0 - -/* Locals and temporaries. */ -#define src x1 -#define data1 x2 -#define data2 x3 -#define has_nul1 x4 -#define has_nul2 x5 -#define tmp1 x4 -#define tmp2 x5 -#define tmp3 x6 -#define tmp4 x7 -#define zeroones x8 - -#define L(l) .L ## l - - .macro def_fn f p2align=0 - .text - .p2align \p2align - .global \f - .type \f, %function -\f: - .endm - - /* NUL detection works on the principle that (X - 1) & (~X) & 0x80 - (=> (X - 1) & ~(X | 0x7f)) is non-zero iff a byte is zero, and - can be done in parallel across the entire word. A faster check - (X - 1) & 0x80 is zero for non-NUL ASCII characters, but gives - false hits for characters 129..255. */ +#include "asmdefs.h" + +#define srcin x0 +#define len x0 + +#define src x1 +#define data1 x2 +#define data2 x3 +#define has_nul1 x4 +#define has_nul2 x5 +#define tmp1 x4 +#define tmp2 x5 +#define tmp3 x6 +#define tmp4 x7 +#define zeroones x8 + +#define maskv v0 +#define maskd d0 +#define dataq1 q1 +#define dataq2 q2 +#define datav1 v1 +#define datav2 v2 +#define tmp x2 +#define tmpw w2 +#define synd x3 +#define syndw w3 +#define shift x4 + +/* For the first 32 bytes, NUL detection works on the principle that + (X - 1) & (~X) & 0x80 (=> (X - 1) & ~(X | 0x7f)) is non-zero if a + byte is zero, and can be done in parallel across the entire word. */ #define REP8_01 0x0101010101010101 #define REP8_7f 0x7f7f7f7f7f7f7f7f -#define REP8_80 0x8080808080808080 + +/* To test the page crossing code path more thoroughly, compile with + -DTEST_PAGE_CROSS - this will force all calls through the slower + entry path. This option is not intended for production use. */ #ifdef TEST_PAGE_CROSS -# define MIN_PAGE_SIZE 15 +# define MIN_PAGE_SIZE 32 #else # define MIN_PAGE_SIZE 4096 #endif - /* Since strings are short on average, we check the first 16 bytes - of the string for a NUL character. In order to do an unaligned ldp - safely we have to do a page cross check first. If there is a NUL - byte we calculate the length from the 2 8-byte words using - conditional select to reduce branch mispredictions (it is unlikely - strlen will be repeatedly called on strings with the same length). - - If the string is longer than 16 bytes, we align src so don't need - further page cross checks, and process 32 bytes per iteration - using the fast NUL check. If we encounter non-ASCII characters, - fallback to a second loop using the full NUL check. - - If the page cross check fails, we read 16 bytes from an aligned - address, remove any characters before the string, and continue - in the main loop using aligned loads. Since strings crossing a - page in the first 16 bytes are rare (probability of - 16/MIN_PAGE_SIZE ~= 0.4%), this case does not need to be optimized. - - AArch64 systems have a minimum page size of 4k. We don't bother - checking for larger page sizes - the cost of setting up the correct - page size is just not worth the extra gain from a small reduction in - the cases taking the slow path. Note that we only care about - whether the first fetch, which may be misaligned, crosses a page - boundary. */ - -def_fn strlen p2align=6 +/* Core algorithm: + + Since strings are short on average, we check the first 32 bytes of the + string for a NUL character without aligning the string. In order to use + unaligned loads safely we must do a page cross check first. + + If there is a NUL byte we calculate the length from the 2 8-byte words + using conditional select to reduce branch mispredictions (it is unlikely + strlen will be repeatedly called on strings with the same length). + + If the string is longer than 32 bytes, align src so we don't need further + page cross checks, and process 32 bytes per iteration using a fast SIMD + loop. + + If the page cross check fails, we read 32 bytes from an aligned address, + and ignore any characters before the string. If it contains a NUL + character, return the length, if not, continue in the main loop. */ + +ENTRY (strlen) + PTR_ARG (0) and tmp1, srcin, MIN_PAGE_SIZE - 1 - mov zeroones, REP8_01 - cmp tmp1, MIN_PAGE_SIZE - 16 - b.gt L(page_cross) + cmp tmp1, MIN_PAGE_SIZE - 32 + b.hi L(page_cross) + + /* Look for a NUL byte in the first 16 bytes. */ ldp data1, data2, [srcin] + mov zeroones, REP8_01 + #ifdef __AARCH64EB__ /* For big-endian, carry propagation (if the final byte in the string is 0x01) means we cannot use has_nul1/2 directly. @@ -125,114 +102,96 @@ def_fn strlen p2align=6 bics has_nul1, tmp1, tmp2 bic has_nul2, tmp3, tmp4 ccmp has_nul2, 0, 0, eq - beq L(main_loop_entry) + b.eq L(bytes16_31) - /* Enter with C = has_nul1 == 0. */ + /* Find the exact offset of the first NUL byte in the first 16 bytes + from the string start. Enter with C = has_nul1 == 0. */ csel has_nul1, has_nul1, has_nul2, cc mov len, 8 rev has_nul1, has_nul1 - clz tmp1, has_nul1 csel len, xzr, len, cc + clz tmp1, has_nul1 add len, len, tmp1, lsr 3 ret - /* The inner loop processes 32 bytes per iteration and uses the fast - NUL check. If we encounter non-ASCII characters, use a second - loop with the accurate NUL check. */ - .p2align 4 -L(main_loop_entry): - bic src, srcin, 15 - sub src, src, 16 -L(main_loop): - ldp data1, data2, [src, 32]! -.Lpage_cross_entry: - sub tmp1, data1, zeroones - sub tmp3, data2, zeroones - orr tmp2, tmp1, tmp3 - tst tmp2, zeroones, lsl 7 - bne 1f - ldp data1, data2, [src, 16] + /* Look for a NUL byte at offset 16..31 in the string. */ +L(bytes16_31): + ldp data1, data2, [srcin, 16] +#ifdef __AARCH64EB__ + rev data1, data1 + rev data2, data2 +#endif sub tmp1, data1, zeroones - sub tmp3, data2, zeroones - orr tmp2, tmp1, tmp3 - tst tmp2, zeroones, lsl 7 - beq L(main_loop) - add src, src, 16 -1: - /* The fast check failed, so do the slower, accurate NUL check. */ orr tmp2, data1, REP8_7f + sub tmp3, data2, zeroones orr tmp4, data2, REP8_7f bics has_nul1, tmp1, tmp2 bic has_nul2, tmp3, tmp4 ccmp has_nul2, 0, 0, eq - beq L(nonascii_loop) + b.eq L(loop_entry) - /* Enter with C = has_nul1 == 0. */ -L(tail): -#ifdef __AARCH64EB__ - /* For big-endian, carry propagation (if the final byte in the - string is 0x01) means we cannot use has_nul1/2 directly. The - easiest way to get the correct byte is to byte-swap the data - and calculate the syndrome a second time. */ - csel data1, data1, data2, cc - rev data1, data1 - sub tmp1, data1, zeroones - orr tmp2, data1, REP8_7f - bic has_nul1, tmp1, tmp2 -#else + /* Find the exact offset of the first NUL byte at offset 16..31 from + the string start. Enter with C = has_nul1 == 0. */ csel has_nul1, has_nul1, has_nul2, cc -#endif - sub len, src, srcin + mov len, 24 rev has_nul1, has_nul1 - add tmp2, len, 8 + mov tmp3, 16 clz tmp1, has_nul1 - csel len, len, tmp2, cc + csel len, tmp3, len, cc add len, len, tmp1, lsr 3 ret -L(nonascii_loop): - ldp data1, data2, [src, 16]! - sub tmp1, data1, zeroones - orr tmp2, data1, REP8_7f - sub tmp3, data2, zeroones - orr tmp4, data2, REP8_7f - bics has_nul1, tmp1, tmp2 - bic has_nul2, tmp3, tmp4 - ccmp has_nul2, 0, 0, eq - bne L(tail) - ldp data1, data2, [src, 16]! - sub tmp1, data1, zeroones - orr tmp2, data1, REP8_7f - sub tmp3, data2, zeroones - orr tmp4, data2, REP8_7f - bics has_nul1, tmp1, tmp2 - bic has_nul2, tmp3, tmp4 - ccmp has_nul2, 0, 0, eq - beq L(nonascii_loop) - b L(tail) + nop +L(loop_entry): + bic src, srcin, 31 + + .p2align 5 +L(loop): + ldp dataq1, dataq2, [src, 32]! + uminp maskv.16b, datav1.16b, datav2.16b + uminp maskv.16b, maskv.16b, maskv.16b + cmeq maskv.8b, maskv.8b, 0 + fmov synd, maskd + cbz synd, L(loop) + + /* Low 32 bits of synd are non-zero if a NUL was found in datav1. */ + cmeq maskv.16b, datav1.16b, 0 + sub len, src, srcin + cbnz syndw, 1f + cmeq maskv.16b, datav2.16b, 0 + add len, len, 16 +1: + /* Generate a bitmask and compute correct byte offset. */ + shrn maskv.8b, maskv.8h, 4 + fmov synd, maskd +#ifndef __AARCH64EB__ + rbit synd, synd +#endif + clz tmp, synd + add len, len, tmp, lsr 2 + ret - /* Load 16 bytes from [srcin & ~15] and force the bytes that precede - srcin to 0x7f, so we ignore any NUL bytes before the string. - Then continue in the aligned loop. */ L(page_cross): - bic src, srcin, 15 - ldp data1, data2, [src] - lsl tmp1, srcin, 3 - mov tmp4, -1 -#ifdef __AARCH64EB__ - /* Big-endian. Early bytes are at MSB. */ - lsr tmp1, tmp4, tmp1 /* Shift (tmp1 & 63). */ -#else - /* Little-endian. Early bytes are at LSB. */ - lsl tmp1, tmp4, tmp1 /* Shift (tmp1 & 63). */ -#endif - orr tmp1, tmp1, REP8_80 - orn data1, data1, tmp1 - orn tmp2, data2, tmp1 - tst srcin, 8 - csel data1, data1, tmp4, eq - csel data2, data2, tmp2, eq - b L(page_cross_entry) - - .size strlen, . - strlen + bic src, srcin, 31 + mov tmpw, 0x0c03 + movk tmpw, 0xc030, lsl 16 + ld1 {datav1.16b, datav2.16b}, [src] + dup maskv.4s, tmpw + cmeq datav1.16b, datav1.16b, 0 + cmeq datav2.16b, datav2.16b, 0 + and datav1.16b, datav1.16b, maskv.16b + and datav2.16b, datav2.16b, maskv.16b + addp maskv.16b, datav1.16b, datav2.16b + addp maskv.16b, maskv.16b, maskv.16b + fmov synd, maskd + lsl shift, srcin, 1 + lsr synd, synd, shift + cbz synd, L(loop) + + rbit synd, synd + clz len, synd + lsr len, len, 1 + ret + +END (strlen) #endif diff --git a/newlib/libc/machine/aarch64/strncmp.S b/newlib/libc/machine/aarch64/strncmp.S index ffdabc2607..373695503d 100644 --- a/newlib/libc/machine/aarch64/strncmp.S +++ b/newlib/libc/machine/aarch64/strncmp.S @@ -1,49 +1,23 @@ -/* Copyright (c) 2013, 2018, Linaro Limited - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the Linaro nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - +/* + * strncmp - compare two strings + * + * Copyright (c) 2013-2022, Arm Limited. + * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception + */ #if (defined (__OPTIMIZE_SIZE__) || defined (PREFER_SIZE_OVER_SPEED)) /* See strcmp-stub.c */ #else /* Assumptions: * - * ARMv8-a, AArch64 + * ARMv8-a, AArch64. + * MTE compatible. */ - .macro def_fn f p2align=0 - .text - .p2align \p2align - .global \f - .type \f, %function -\f: - .endm +#include "asmdefs.h" #define REP8_01 0x0101010101010101 #define REP8_7f 0x7f7f7f7f7f7f7f7f -#define REP8_80 0x8080808080808080 /* Parameters and result. */ #define src1 x0 @@ -64,86 +38,91 @@ #define tmp3 x10 #define zeroones x11 #define pos x12 -#define limit_wd x13 -#define mask x14 -#define endloop x15 +#define mask x13 +#define endloop x14 #define count mask +#define offset pos +#define neg_offset x15 + +/* Define endian dependent shift operations. + On big-endian early bytes are at MSB and on little-endian LSB. + LS_FW means shifting towards early bytes. + LS_BK means shifting towards later bytes. + */ +#ifdef __AARCH64EB__ +#define LS_FW lsl +#define LS_BK lsr +#else +#define LS_FW lsr +#define LS_BK lsl +#endif - .text - .p2align 6 - .rep 7 - nop /* Pad so that the loop below fits a cache line. */ - .endr -def_fn strncmp - cbz limit, .Lret0 +ENTRY (strncmp) + PTR_ARG (0) + PTR_ARG (1) + SIZE_ARG (2) + cbz limit, L(ret0) eor tmp1, src1, src2 mov zeroones, #REP8_01 tst tmp1, #7 and count, src1, #7 - b.ne .Lmisaligned8 - cbnz count, .Lmutual_align - /* Calculate the number of full and partial words -1. */ - sub limit_wd, limit, #1 /* limit != 0, so no underflow. */ - lsr limit_wd, limit_wd, #3 /* Convert to Dwords. */ + b.ne L(misaligned8) + cbnz count, L(mutual_align) /* NUL detection works on the principle that (X - 1) & (~X) & 0x80 (=> (X - 1) & ~(X | 0x7f)) is non-zero iff a byte is zero, and can be done in parallel across the entire word. */ - /* Start of performance-critical section -- one 64B cache line. */ -.Lloop_aligned: + .p2align 4 +L(loop_aligned): ldr data1, [src1], #8 ldr data2, [src2], #8 -.Lstart_realigned: - subs limit_wd, limit_wd, #1 +L(start_realigned): + subs limit, limit, #8 sub tmp1, data1, zeroones orr tmp2, data1, #REP8_7f eor diff, data1, data2 /* Non-zero if differences found. */ - csinv endloop, diff, xzr, pl /* Last Dword or differences. */ + csinv endloop, diff, xzr, hi /* Last Dword or differences. */ bics has_nul, tmp1, tmp2 /* Non-zero if NUL terminator. */ ccmp endloop, #0, #0, eq - b.eq .Lloop_aligned - /* End of performance-critical section -- one 64B cache line. */ + b.eq L(loop_aligned) + /* End of main loop */ - /* Not reached the limit, must have found the end or a diff. */ - tbz limit_wd, #63, .Lnot_limit - - /* Limit % 8 == 0 => all bytes significant. */ - ands limit, limit, #7 - b.eq .Lnot_limit - - lsl limit, limit, #3 /* Bits -> bytes. */ - mov mask, #~0 -#ifdef __AARCH64EB__ - lsr mask, mask, limit -#else - lsl mask, mask, limit -#endif - bic data1, data1, mask - bic data2, data2, mask - - /* Make sure that the NUL byte is marked in the syndrome. */ - orr has_nul, has_nul, mask - -.Lnot_limit: +L(full_check): +#ifndef __AARCH64EB__ orr syndrome, diff, has_nul - -#ifndef __AARCH64EB__ + add limit, limit, 8 /* Rewind limit to before last subs. */ +L(syndrome_check): + /* Limit was reached. Check if the NUL byte or the difference + is before the limit. */ rev syndrome, syndrome rev data1, data1 - /* The MS-non-zero bit of the syndrome marks either the first bit - that is different, or the top bit of the first zero byte. - Shifting left now will bring the critical information into the - top bits. */ clz pos, syndrome rev data2, data2 lsl data1, data1, pos + cmp limit, pos, lsr #3 lsl data2, data2, pos /* But we need to zero-extend (char is unsigned) the value and then perform a signed 32-bit subtraction. */ lsr data1, data1, #56 sub result, data1, data2, lsr #56 + csel result, result, xzr, hi ret #else + /* Not reached the limit, must have found the end or a diff. */ + tbz limit, #63, L(not_limit) + add tmp1, limit, 8 + cbz limit, L(not_limit) + + lsl limit, tmp1, #3 /* Bits -> bytes. */ + mov mask, #~0 + lsr mask, mask, limit + bic data1, data1, mask + bic data2, data2, mask + + /* Make sure that the NUL byte is marked in the syndrome. */ + orr has_nul, has_nul, mask + +L(not_limit): /* For big-endian we cannot use the trick with the syndrome value as carry-propagation can corrupt the upper bits if the trailing bytes in the string contain 0x01. */ @@ -164,10 +143,11 @@ def_fn strncmp rev has_nul, has_nul orr syndrome, diff, has_nul clz pos, syndrome - /* The MS-non-zero bit of the syndrome marks either the first bit - that is different, or the top bit of the first zero byte. + /* The most-significant-non-zero bit of the syndrome marks either the + first bit that is different, or the top bit of the first zero byte. Shifting left now will bring the critical information into the top bits. */ +L(end_quick): lsl data1, data1, pos lsl data2, data2, pos /* But we need to zero-extend (char is unsigned) the value and then @@ -177,7 +157,7 @@ def_fn strncmp ret #endif -.Lmutual_align: +L(mutual_align): /* Sources are mutually aligned, but are not currently at an alignment boundary. Round down the addresses and then mask off the bytes that precede the start point. @@ -189,102 +169,143 @@ def_fn strncmp neg tmp3, count, lsl #3 /* 64 - bits(bytes beyond align). */ ldr data2, [src2], #8 mov tmp2, #~0 - sub limit_wd, limit, #1 /* limit != 0, so no underflow. */ -#ifdef __AARCH64EB__ - /* Big-endian. Early bytes are at MSB. */ - lsl tmp2, tmp2, tmp3 /* Shift (count & 63). */ -#else - /* Little-endian. Early bytes are at LSB. */ - lsr tmp2, tmp2, tmp3 /* Shift (count & 63). */ -#endif - and tmp3, limit_wd, #7 - lsr limit_wd, limit_wd, #3 - /* Adjust the limit. Only low 3 bits used, so overflow irrelevant. */ - add limit, limit, count - add tmp3, tmp3, count + LS_FW tmp2, tmp2, tmp3 /* Shift (count & 63). */ + /* Adjust the limit and ensure it doesn't overflow. */ + adds limit, limit, count + csinv limit, limit, xzr, lo orr data1, data1, tmp2 orr data2, data2, tmp2 - add limit_wd, limit_wd, tmp3, lsr #3 - b .Lstart_realigned + b L(start_realigned) - .p2align 6 + .p2align 4 /* Don't bother with dwords for up to 16 bytes. */ -.Lmisaligned8: +L(misaligned8): cmp limit, #16 - b.hs .Ltry_misaligned_words + b.hs L(try_misaligned_words) -.Lbyte_loop: +L(byte_loop): /* Perhaps we can do better than this. */ ldrb data1w, [src1], #1 ldrb data2w, [src2], #1 subs limit, limit, #1 ccmp data1w, #1, #0, hi /* NZCV = 0b0000. */ ccmp data1w, data2w, #0, cs /* NZCV = 0b0000. */ - b.eq .Lbyte_loop -.Ldone: + b.eq L(byte_loop) +L(done): sub result, data1, data2 ret /* Align the SRC1 to a dword by doing a bytewise compare and then do the dword loop. */ -.Ltry_misaligned_words: - lsr limit_wd, limit, #3 - cbz count, .Ldo_misaligned +L(try_misaligned_words): + cbz count, L(src1_aligned) neg count, count and count, count, #7 sub limit, limit, count - lsr limit_wd, limit, #3 -.Lpage_end_loop: +L(page_end_loop): ldrb data1w, [src1], #1 ldrb data2w, [src2], #1 cmp data1w, #1 ccmp data1w, data2w, #0, cs /* NZCV = 0b0000. */ - b.ne .Ldone + b.ne L(done) subs count, count, #1 - b.hi .Lpage_end_loop + b.hi L(page_end_loop) + + /* The following diagram explains the comparison of misaligned strings. + The bytes are shown in natural order. For little-endian, it is + reversed in the registers. The "x" bytes are before the string. + The "|" separates data that is loaded at one time. + src1 | a a a a a a a a | b b b c c c c c | . . . + src2 | x x x x x a a a a a a a a b b b | c c c c c . . . -.Ldo_misaligned: - /* Prepare ourselves for the next page crossing. Unlike the aligned - loop, we fetch 1 less dword because we risk crossing bounds on - SRC2. */ - mov count, #8 - subs limit_wd, limit_wd, #1 - b.lo .Ldone_loop -.Lloop_misaligned: - and tmp2, src2, #0xff8 - eor tmp2, tmp2, #0xff8 - cbz tmp2, .Lpage_end_loop + After shifting in each step, the data looks like this: + STEP_A STEP_B STEP_C + data1 a a a a a a a a b b b c c c c c b b b c c c c c + data2 a a a a a a a a b b b 0 0 0 0 0 0 0 0 c c c c c + The bytes with "0" are eliminated from the syndrome via mask. + + Align SRC2 down to 16 bytes. This way we can read 16 bytes at a + time from SRC2. The comparison happens in 3 steps. After each step + the loop can exit, or read from SRC1 or SRC2. */ +L(src1_aligned): + /* Calculate offset from 8 byte alignment to string start in bits. No + need to mask offset since shifts are ignoring upper bits. */ + lsl offset, src2, #3 + bic src2, src2, #0xf + mov mask, -1 + neg neg_offset, offset ldr data1, [src1], #8 - ldr data2, [src2], #8 - sub tmp1, data1, zeroones - orr tmp2, data1, #REP8_7f - eor diff, data1, data2 /* Non-zero if differences found. */ - bics has_nul, tmp1, tmp2 /* Non-zero if NUL terminator. */ - ccmp diff, #0, #0, eq - b.ne .Lnot_limit - subs limit_wd, limit_wd, #1 - b.pl .Lloop_misaligned + ldp tmp1, tmp2, [src2], #16 + LS_BK mask, mask, neg_offset + and neg_offset, neg_offset, #63 /* Need actual value for cmp later. */ + /* Skip the first compare if data in tmp1 is irrelevant. */ + tbnz offset, 6, L(misaligned_mid_loop) -.Ldone_loop: - /* We found a difference or a NULL before the limit was reached. */ - and limit, limit, #7 - cbz limit, .Lnot_limit - /* Read the last word. */ - sub src1, src1, 8 - sub src2, src2, 8 - ldr data1, [src1, limit] - ldr data2, [src2, limit] - sub tmp1, data1, zeroones - orr tmp2, data1, #REP8_7f +L(loop_misaligned): + /* STEP_A: Compare full 8 bytes when there is enough data from SRC2.*/ + LS_FW data2, tmp1, offset + LS_BK tmp1, tmp2, neg_offset + subs limit, limit, #8 + orr data2, data2, tmp1 /* 8 bytes from SRC2 combined from two regs.*/ + sub has_nul, data1, zeroones eor diff, data1, data2 /* Non-zero if differences found. */ - bics has_nul, tmp1, tmp2 /* Non-zero if NUL terminator. */ - ccmp diff, #0, #0, eq - b.ne .Lnot_limit + orr tmp3, data1, #REP8_7f + csinv endloop, diff, xzr, hi /* If limit, set to all ones. */ + bic has_nul, has_nul, tmp3 /* Non-zero if NUL byte found in SRC1. */ + orr tmp3, endloop, has_nul + cbnz tmp3, L(full_check) + + ldr data1, [src1], #8 +L(misaligned_mid_loop): + /* STEP_B: Compare first part of data1 to second part of tmp2. */ + LS_FW data2, tmp2, offset +#ifdef __AARCH64EB__ + /* For big-endian we do a byte reverse to avoid carry-propagation + problem described above. This way we can reuse the has_nul in the + next step and also use syndrome value trick at the end. */ + rev tmp3, data1 + #define data1_fixed tmp3 +#else + #define data1_fixed data1 +#endif + sub has_nul, data1_fixed, zeroones + orr tmp3, data1_fixed, #REP8_7f + eor diff, data2, data1 /* Non-zero if differences found. */ + bic has_nul, has_nul, tmp3 /* Non-zero if NUL terminator. */ +#ifdef __AARCH64EB__ + rev has_nul, has_nul +#endif + cmp limit, neg_offset, lsr #3 + orr syndrome, diff, has_nul + bic syndrome, syndrome, mask /* Ignore later bytes. */ + csinv tmp3, syndrome, xzr, hi /* If limit, set to all ones. */ + cbnz tmp3, L(syndrome_check) + + /* STEP_C: Compare second part of data1 to first part of tmp1. */ + ldp tmp1, tmp2, [src2], #16 + cmp limit, #8 + LS_BK data2, tmp1, neg_offset + eor diff, data2, data1 /* Non-zero if differences found. */ + orr syndrome, diff, has_nul + and syndrome, syndrome, mask /* Ignore earlier bytes. */ + csinv tmp3, syndrome, xzr, hi /* If limit, set to all ones. */ + cbnz tmp3, L(syndrome_check) + + ldr data1, [src1], #8 + sub limit, limit, #8 + b L(loop_misaligned) + +#ifdef __AARCH64EB__ +L(syndrome_check): + clz pos, syndrome + cmp pos, limit, lsl #3 + b.lo L(end_quick) +#endif -.Lret0: +L(ret0): mov result, #0 ret - .size strncmp, . - strncmp +END(strncmp) #endif diff --git a/newlib/libc/machine/aarch64/strnlen.S b/newlib/libc/machine/aarch64/strnlen.S index c255c3f7c6..091002e0b0 100644 --- a/newlib/libc/machine/aarch64/strnlen.S +++ b/newlib/libc/machine/aarch64/strnlen.S @@ -1,187 +1,105 @@ -/* strnlen - calculate the length of a string with limit. - - Copyright (c) 2013, Linaro Limited - All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the Linaro nor the - names of its contributors may be used to endorse or promote products - derived from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - +/* + * strnlen - calculate the length of a string with limit. + * + * Copyright (c) 2020-2022, Arm Limited. + * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception + */ #if (defined (__OPTIMIZE_SIZE__) || defined (PREFER_SIZE_OVER_SPEED)) /* See strlen-stub.c */ #else /* Assumptions: * - * ARMv8-a, AArch64 + * ARMv8-a, AArch64, Advanced SIMD. + * MTE compatible. */ -/* Arguments and results. */ +#include "asmdefs.h" + #define srcin x0 -#define len x0 -#define limit x1 +#define cntin x1 +#define result x0 -/* Locals and temporaries. */ #define src x2 -#define data1 x3 -#define data2 x4 -#define data2a x5 -#define has_nul1 x6 -#define has_nul2 x7 -#define tmp1 x8 -#define tmp2 x9 -#define tmp3 x10 -#define tmp4 x11 -#define zeroones x12 -#define pos x13 -#define limit_wd x14 - - .macro def_fn f p2align=0 - .text - .p2align \p2align - .global \f - .type \f, %function -\f: - .endm - -#define REP8_01 0x0101010101010101 -#define REP8_7f 0x7f7f7f7f7f7f7f7f -#define REP8_80 0x8080808080808080 - - .text - .p2align 6 -.Lstart: - /* Pre-pad to ensure critical loop begins an icache line. */ - .rep 7 - nop - .endr - /* Put this code here to avoid wasting more space with pre-padding. */ -.Lhit_limit: - mov len, limit +#define synd x3 +#define shift x4 +#define tmp x4 +#define cntrem x5 + +#define qdata q0 +#define vdata v0 +#define vhas_chr v1 +#define vend v2 +#define dend d2 + +/* + Core algorithm: + Process the string in 16-byte aligned chunks. Compute a 64-bit mask with + four bits per byte using the shrn instruction. A count trailing zeros then + identifies the first zero byte. */ + +ENTRY (strnlen) + PTR_ARG (0) + SIZE_ARG (1) + bic src, srcin, 15 + cbz cntin, L(nomatch) + ld1 {vdata.16b}, [src] + cmeq vhas_chr.16b, vdata.16b, 0 + lsl shift, srcin, 2 + shrn vend.8b, vhas_chr.8h, 4 /* 128->64 */ + fmov synd, dend + lsr synd, synd, shift + cbz synd, L(start_loop) +L(finish): + rbit synd, synd + clz synd, synd + lsr result, synd, 2 + cmp cntin, result + csel result, cntin, result, ls ret -def_fn strnlen - cbz limit, .Lhit_limit - mov zeroones, #REP8_01 - bic src, srcin, #15 - ands tmp1, srcin, #15 - b.ne .Lmisaligned - /* Calculate the number of full and partial words -1. */ - sub limit_wd, limit, #1 /* Limit != 0, so no underflow. */ - lsr limit_wd, limit_wd, #4 /* Convert to Qwords. */ - - /* NUL detection works on the principle that (X - 1) & (~X) & 0x80 - (=> (X - 1) & ~(X | 0x7f)) is non-zero iff a byte is zero, and - can be done in parallel across the entire word. */ - /* The inner loop deals with two Dwords at a time. This has a - slightly higher start-up cost, but we should win quite quickly, - especially on cores with a high number of issue slots per - cycle, as we get much better parallelism out of the operations. */ - - /* Start of critial section -- keep to one 64Byte cache line. */ -.Lloop: - ldp data1, data2, [src], #16 -.Lrealigned: - sub tmp1, data1, zeroones - orr tmp2, data1, #REP8_7f - sub tmp3, data2, zeroones - orr tmp4, data2, #REP8_7f - bic has_nul1, tmp1, tmp2 - bic has_nul2, tmp3, tmp4 - subs limit_wd, limit_wd, #1 - orr tmp1, has_nul1, has_nul2 - ccmp tmp1, #0, #0, pl /* NZCV = 0000 */ - b.eq .Lloop - /* End of critical section -- keep to one 64Byte cache line. */ - - orr tmp1, has_nul1, has_nul2 - cbz tmp1, .Lhit_limit /* No null in final Qword. */ - - /* We know there's a null in the final Qword. The easiest thing - to do now is work out the length of the string and return - MIN (len, limit). */ - - sub len, src, srcin - cbz has_nul1, .Lnul_in_data2 -#ifdef __AARCH64EB__ - mov data2, data1 -#endif - sub len, len, #8 - mov has_nul2, has_nul1 -.Lnul_in_data2: -#ifdef __AARCH64EB__ - /* For big-endian, carry propagation (if the final byte in the - string is 0x01) means we cannot use has_nul directly. The - easiest way to get the correct byte is to byte-swap the data - and calculate the syndrome a second time. */ - rev data2, data2 - sub tmp1, data2, zeroones - orr tmp2, data2, #REP8_7f - bic has_nul2, tmp1, tmp2 -#endif - sub len, len, #8 - rev has_nul2, has_nul2 - clz pos, has_nul2 - add len, len, pos, lsr #3 /* Bits to bytes. */ - cmp len, limit - csel len, len, limit, ls /* Return the lower value. */ +L(nomatch): + mov result, cntin ret -.Lmisaligned: - /* Deal with a partial first word. - We're doing two things in parallel here; - 1) Calculate the number of words (but avoiding overflow if - limit is near ULONG_MAX) - to do this we need to work out - limit + tmp1 - 1 as a 65-bit value before shifting it; - 2) Load and mask the initial data words - we force the bytes - before the ones we are interested in to 0xff - this ensures - early bytes will not hit any zero detection. */ - sub limit_wd, limit, #1 - neg tmp4, tmp1 - cmp tmp1, #8 - - and tmp3, limit_wd, #15 - lsr limit_wd, limit_wd, #4 - mov tmp2, #~0 - - ldp data1, data2, [src], #16 - lsl tmp4, tmp4, #3 /* Bytes beyond alignment -> bits. */ - add tmp3, tmp3, tmp1 - -#ifdef __AARCH64EB__ - /* Big-endian. Early bytes are at MSB. */ - lsl tmp2, tmp2, tmp4 /* Shift (tmp1 & 63). */ -#else - /* Little-endian. Early bytes are at LSB. */ - lsr tmp2, tmp2, tmp4 /* Shift (tmp1 & 63). */ +L(start_loop): + sub tmp, src, srcin + add tmp, tmp, 17 + subs cntrem, cntin, tmp + b.lo L(nomatch) + + /* Make sure that it won't overread by a 16-byte chunk */ + tbz cntrem, 4, L(loop32_2) + sub src, src, 16 + .p2align 5 +L(loop32): + ldr qdata, [src, 32]! + cmeq vhas_chr.16b, vdata.16b, 0 + umaxp vend.16b, vhas_chr.16b, vhas_chr.16b /* 128->64 */ + fmov synd, dend + cbnz synd, L(end) +L(loop32_2): + ldr qdata, [src, 16] + subs cntrem, cntrem, 32 + cmeq vhas_chr.16b, vdata.16b, 0 + b.lo L(end_2) + umaxp vend.16b, vhas_chr.16b, vhas_chr.16b /* 128->64 */ + fmov synd, dend + cbz synd, L(loop32) +L(end_2): + add src, src, 16 +L(end): + shrn vend.8b, vhas_chr.8h, 4 /* 128->64 */ + sub result, src, srcin + fmov synd, dend +#ifndef __AARCH64EB__ + rbit synd, synd #endif - add limit_wd, limit_wd, tmp3, lsr #4 - - orr data1, data1, tmp2 - orr data2a, data2, tmp2 - - csinv data1, data1, xzr, le - csel data2, data2, data2a, le - b .Lrealigned - .size strnlen, . - .Lstart /* Include pre-padding in size. */ + clz synd, synd + add result, result, synd, lsr 2 + cmp cntin, result + csel result, cntin, result, ls + ret +END (strnlen) #endif diff --git a/newlib/libc/machine/aarch64/strrchr.S b/newlib/libc/machine/aarch64/strrchr.S index d64fc09b1a..b0574228b6 100644 --- a/newlib/libc/machine/aarch64/strrchr.S +++ b/newlib/libc/machine/aarch64/strrchr.S @@ -1,32 +1,9 @@ /* - strrchr - find last instance of a character in a string - - Copyright (c) 2014, ARM Limited - All rights Reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - * Neither the name of the company nor the names of its contributors - may be used to endorse or promote products derived from this - software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ - + * strrchr - find last position of a character in a string. + * + * Copyright (c) 2014-2022, Arm Limited. + * SPDX-License-Identifier: MIT OR Apache-2.0 WITH LLVM-exception + */ #if (defined (__OPTIMIZE_SIZE__) || defined (PREFER_SIZE_OVER_SPEED)) /* See strchr-stub.c */ #else @@ -37,6 +14,8 @@ * Neon Available. */ +#include "asmdefs.h" + /* Arguments and results. */ #define srcin x0 #define chrin w1 @@ -78,17 +57,8 @@ in the original string a count_trailing_zeros() operation will identify exactly which byte is causing the termination, and why. */ -/* Locals and temporaries. */ - - .macro def_fn f p2align=0 - .text - .p2align \p2align - .global \f - .type \f, %function -\f: - .endm - -def_fn strrchr +ENTRY (strrchr) + PTR_ARG (0) /* Magic constant 0x40100401 to allow us to identify which lane matches the requested byte. Magic constant 0x80200802 used similarly for NUL termination. */ @@ -100,7 +70,7 @@ def_fn strrchr mov src_offset, #0 ands tmp1, srcin, #31 add vrepmask_0.4s, vrepmask_c.4s, vrepmask_c.4s /* equiv: lsl #1 */ - b.eq .Laligned + b.eq L(aligned) /* Input string is not 32-byte aligned. Rather than forcing the padding bytes to a safe value, we calculate the syndrome @@ -118,45 +88,45 @@ def_fn strrchr and vhas_chr2.16b, vhas_chr2.16b, vrepmask_c.16b addp vhas_nul1.16b, vhas_nul1.16b, vhas_nul2.16b // 256->128 addp vhas_chr1.16b, vhas_chr1.16b, vhas_chr2.16b // 256->128 - addp vhas_nul1.16b, vhas_nul1.16b, vhas_nul1.16b // 128->64 - addp vhas_chr1.16b, vhas_chr1.16b, vhas_chr1.16b // 128->64 - mov nul_match, vhas_nul1.2d[0] + addp vend1.16b, vhas_nul1.16b, vhas_chr1.16b // 128->64 + mov nul_match, vend1.d[0] lsl tmp1, tmp1, #1 mov const_m1, #~0 - mov chr_match, vhas_chr1.2d[0] lsr tmp3, const_m1, tmp1 + mov chr_match, vend1.d[1] bic nul_match, nul_match, tmp3 // Mask padding bits. bic chr_match, chr_match, tmp3 // Mask padding bits. - cbnz nul_match, .Ltail + cbnz nul_match, L(tail) -.Lloop: + .p2align 4 +L(loop): cmp chr_match, #0 csel src_match, src, src_match, ne csel src_offset, chr_match, src_offset, ne -.Laligned: +L(aligned): ld1 {vdata1.16b, vdata2.16b}, [src], #32 - cmeq vhas_nul1.16b, vdata1.16b, #0 cmeq vhas_chr1.16b, vdata1.16b, vrepchr.16b - cmeq vhas_nul2.16b, vdata2.16b, #0 cmeq vhas_chr2.16b, vdata2.16b, vrepchr.16b - addp vend1.16b, vhas_nul1.16b, vhas_nul2.16b // 256->128 + uminp vend1.16b, vdata1.16b, vdata2.16b and vhas_chr1.16b, vhas_chr1.16b, vrepmask_c.16b and vhas_chr2.16b, vhas_chr2.16b, vrepmask_c.16b + cmeq vend1.16b, vend1.16b, 0 addp vhas_chr1.16b, vhas_chr1.16b, vhas_chr2.16b // 256->128 - addp vend1.16b, vend1.16b, vend1.16b // 128->64 - addp vhas_chr1.16b, vhas_chr1.16b, vhas_chr1.16b // 128->64 - mov nul_match, vend1.2d[0] - mov chr_match, vhas_chr1.2d[0] - cbz nul_match, .Lloop + addp vend1.16b, vend1.16b, vhas_chr1.16b // 128->64 + mov nul_match, vend1.d[0] + mov chr_match, vend1.d[1] + cbz nul_match, L(loop) + cmeq vhas_nul1.16b, vdata1.16b, #0 + cmeq vhas_nul2.16b, vdata2.16b, #0 and vhas_nul1.16b, vhas_nul1.16b, vrepmask_0.16b and vhas_nul2.16b, vhas_nul2.16b, vrepmask_0.16b addp vhas_nul1.16b, vhas_nul1.16b, vhas_nul2.16b addp vhas_nul1.16b, vhas_nul1.16b, vhas_nul1.16b - mov nul_match, vhas_nul1.2d[0] + mov nul_match, vhas_nul1.d[0] -.Ltail: +L(tail): /* Work out exactly where the string ends. */ sub tmp4, nul_match, #1 eor tmp4, tmp4, nul_match @@ -178,5 +148,5 @@ def_fn strrchr ret - .size strrchr, . - strrchr +END (strrchr) #endif diff --git a/newlib/libc/machine/amdgcn/Makefile.inc b/newlib/libc/machine/amdgcn/Makefile.inc index d26603aa8d..e1fc5ae4d9 100644 --- a/newlib/libc/machine/amdgcn/Makefile.inc +++ b/newlib/libc/machine/amdgcn/Makefile.inc @@ -1,6 +1,6 @@ libc_a_SOURCES += \ + %D%/_exit.c \ %D%/abort.c \ - %D%/exit.c \ %D%/atexit.c \ %D%/mlock.c \ %D%/getreent.c \ diff --git a/newlib/libc/machine/amdgcn/exit.c b/newlib/libc/machine/amdgcn/_exit.c similarity index 95% rename from newlib/libc/machine/amdgcn/exit.c rename to newlib/libc/machine/amdgcn/_exit.c index bdd532edd7..82171aff98 100644 --- a/newlib/libc/machine/amdgcn/exit.c +++ b/newlib/libc/machine/amdgcn/_exit.c @@ -13,11 +13,11 @@ * they apply. */ -#include +#include #include "exit-value.h" void __attribute__((noreturn)) -exit (int val) +_exit (int val) { exit_with_status_and_signal (val, 0); } diff --git a/newlib/libc/machine/amdgcn/atexit.c b/newlib/libc/machine/amdgcn/atexit.c index 674571435c..8ddd92cfaf 100644 --- a/newlib/libc/machine/amdgcn/atexit.c +++ b/newlib/libc/machine/amdgcn/atexit.c @@ -18,8 +18,7 @@ int atexit (void (*function)(void)) { - /* Our current implementation of exit does not run functions registered with - atexit, so fail here. */ + /* Fail here. */ abort (); return 1; } diff --git a/newlib/libc/machine/amdgcn/exit-value.h b/newlib/libc/machine/amdgcn/exit-value.h index 7aa2508bbd..6b9d2411b7 100644 --- a/newlib/libc/machine/amdgcn/exit-value.h +++ b/newlib/libc/machine/amdgcn/exit-value.h @@ -32,7 +32,6 @@ exit_with_int (int val) *return_value = val; /* Terminate the current kernel. */ - asm ("s_dcache_wb"); asm ("s_endpgm"); __builtin_unreachable (); } diff --git a/newlib/libc/machine/arm/aeabi_memcpy-armv7a.S b/newlib/libc/machine/arm/aeabi_memcpy-armv7a.S index 95f2dcd002..d2c8f389cd 100644 --- a/newlib/libc/machine/arm/aeabi_memcpy-armv7a.S +++ b/newlib/libc/machine/arm/aeabi_memcpy-armv7a.S @@ -26,7 +26,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include "acle-compat.h" +#include "arm-acle-compat.h" /* NOTE: This ifdef MUST match the one in aeabi_memcpy.c. */ #if defined (__ARM_ARCH_7A__) && defined (__ARM_FEATURE_UNALIGNED) && \ diff --git a/newlib/libc/machine/arm/aeabi_memmove-thumb.S b/newlib/libc/machine/arm/aeabi_memmove-thumb.S index fadeb9a3b7..4881d34cbc 100644 --- a/newlib/libc/machine/arm/aeabi_memmove-thumb.S +++ b/newlib/libc/machine/arm/aeabi_memmove-thumb.S @@ -26,7 +26,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include "acle-compat.h" +#include "arm-acle-compat.h" .thumb .syntax unified diff --git a/newlib/libc/machine/arm/aeabi_memmove-thumb2.S b/newlib/libc/machine/arm/aeabi_memmove-thumb2.S index e9504437b4..20ca993e56 100644 --- a/newlib/libc/machine/arm/aeabi_memmove-thumb2.S +++ b/newlib/libc/machine/arm/aeabi_memmove-thumb2.S @@ -26,6 +26,8 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include "arm_asm.h" + .thumb .syntax unified .global __aeabi_memmove @@ -33,8 +35,10 @@ ASM_ALIAS __aeabi_memmove4 __aeabi_memmove ASM_ALIAS __aeabi_memmove8 __aeabi_memmove __aeabi_memmove: + .fnstart + .cfi_startproc + prologue 4 cmp r0, r1 - push {r4} bls 3f adds r3, r1, r2 cmp r0, r3 @@ -48,9 +52,10 @@ __aeabi_memmove: strb r4, [r1, #-1]! bne 1b 2: - pop {r4} - bx lr + .cfi_remember_state + epilogue 4 3: + .cfi_restore_state cmp r2, #0 beq 2b add r2, r2, r1 @@ -60,6 +65,8 @@ __aeabi_memmove: cmp r2, r1 strb r4, [r3, #1]! bne 4b - pop {r4} - bx lr + epilogue 4 + .cfi_endproc + .cantunwind + .fnend .size __aeabi_memmove, . - __aeabi_memmove diff --git a/newlib/libc/machine/arm/aeabi_memset-thumb.S b/newlib/libc/machine/arm/aeabi_memset-thumb.S index ed6ce88605..087c188c0b 100644 --- a/newlib/libc/machine/arm/aeabi_memset-thumb.S +++ b/newlib/libc/machine/arm/aeabi_memset-thumb.S @@ -26,7 +26,7 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include "acle-compat.h" +#include "arm-acle-compat.h" .thumb .syntax unified diff --git a/newlib/libc/machine/arm/aeabi_memset-thumb2.S b/newlib/libc/machine/arm/aeabi_memset-thumb2.S index eaca1d8d73..6b77d3820e 100644 --- a/newlib/libc/machine/arm/aeabi_memset-thumb2.S +++ b/newlib/libc/machine/arm/aeabi_memset-thumb2.S @@ -26,14 +26,18 @@ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include "arm_asm.h" + .thumb .syntax unified .global __aeabi_memset .type __aeabi_memset, %function + .fnstart + .cfi_startproc ASM_ALIAS __aeabi_memset4 __aeabi_memset ASM_ALIAS __aeabi_memset8 __aeabi_memset __aeabi_memset: - push {r4, r5, r6} + prologue 4 6 lsls r4, r0, #30 beq 10f subs r4, r1, #1 @@ -98,10 +102,14 @@ __aeabi_memset: cmp r3, r4 bne 8b 9: - pop {r4, r5, r6} - bx lr + .cfi_remember_state + epilogue 4 6 10: + .cfi_restore_state mov r4, r1 mov r3, r0 b 3b + .cfi_endproc + .cantunwind + .fnend .size __aeabi_memset, . - __aeabi_memset diff --git a/newlib/libc/machine/arm/arm_asm.h b/newlib/libc/machine/arm/arm_asm.h index 2708057deb..d75bb8e5b3 100644 --- a/newlib/libc/machine/arm/arm_asm.h +++ b/newlib/libc/machine/arm/arm_asm.h @@ -29,7 +29,7 @@ #ifndef ARM_ASM__H #define ARM_ASM__H -#include "acle-compat.h" +#include "arm-acle-compat.h" #if __ARM_ARCH >= 7 && defined (__ARM_ARCH_ISA_ARM) # define _ISA_ARM_7 @@ -60,4 +60,445 @@ # define _ISA_THUMB_1 #endif +/* Check whether leaf function PAC signing has been requested in the + -mbranch-protect compile-time option. */ +#define LEAF_PROTECT_BIT 2 + +#ifdef __ARM_FEATURE_PAC_DEFAULT +# define HAVE_PAC_LEAF \ + ((__ARM_FEATURE_PAC_DEFAULT & (1 << LEAF_PROTECT_BIT)) && 1) +#else +# define HAVE_PAC_LEAF 0 +#endif + +/* Provide default parameters for PAC-code handling in leaf-functions. */ +#if HAVE_PAC_LEAF +# ifndef PAC_LEAF_PUSH_IP +# define PAC_LEAF_PUSH_IP 1 +# endif +#else /* !HAVE_PAC_LEAF */ +# undef PAC_LEAF_PUSH_IP +# define PAC_LEAF_PUSH_IP 0 +#endif /* HAVE_PAC_LEAF */ + +#define STACK_ALIGN_ENFORCE 0 + +#ifdef __ASSEMBLER__ + +/****************************************************************************** +* Implementation of the prologue and epilogue assembler macros and their +* associated helper functions. +* +* These functions add support for the following: +* +* - M-profile branch target identification (BTI) landing-pads when compiled +* with `-mbranch-protection=bti'. +* - PAC-signing and verification instructions, depending on hardware support +* and whether the PAC-signing of leaf functions has been requested via the +* `-mbranch-protection=pac-ret+leaf' compiler argument. +* - 8-byte stack alignment preservation at function entry, defaulting to the +* value of STACK_ALIGN_ENFORCE. +* +* Notes: +* - Prologue stack alignment is implemented by detecting a push with an odd +* number of registers and prepending a dummy register to the list. +* - If alignment is attempted on a list containing r0, compilation will result +* in an error. +* - If alignment is attempted in a list containing r1, r0 will be prepended to +* the register list and r0 will be restored prior to function return. for +* functions with non-void return types, this will result in the corruption of +* the result register. +* - Stack alignment is enforced via the following helper macro call-chain: +* +* {prologue|epilogue} ->_align8 -> _preprocess_reglist -> +* _preprocess_reglist1 -> {_prologue|_epilogue} +* +* - Debug CFI directives are automatically added to prologues and epilogues, +* assisted by `cfisavelist' and `cfirestorelist', respectively. +* +* Arguments: +* prologue +* -------- +* - first - If `last' specified, this serves as start of general-purpose +* register (GPR) range to push onto stack, otherwise represents +* single GPR to push onto stack. If omitted, no GPRs pushed +* onto stack at prologue. +* - last - If given, specifies inclusive upper-bound of GPR range. +* - push_ip - Determines whether IP register is to be pushed to stack at +* prologue. When pac-signing is requested, this holds the +* the pac-key. Either 1 or 0 to push or not push, respectively. +* Default behavior: Set to value of PAC_LEAF_PUSH_IP macro. +* - push_lr - Determines whether to push lr to the stack on function entry. +* Either 1 or 0 to push or not push, respectively. +* - align8 - Whether to enforce alignment. Either 1 or 0, with 1 requesting +* alignment. +* +* epilogue +* -------- +* The epilogue should be called passing the same arguments as those passed to +* the prologue to ensure the stack is not corrupted on function return. +* +* Usage examples: +* +* prologue push_ip=1 -> push {ip} +* epilogue push_ip=1, align8=1 -> pop {r2, ip} +* prologue push_ip=1, push_lr=1 -> push {ip, lr} +* epilogue 1 -> pop {r1} +* prologue 1, align8=1 -> push {r0, r1} +* epilogue 1, push_ip=1 -> pop {r1, ip} +* prologue 1, 4 -> push {r1-r4} +* epilogue 1, 4 push_ip=1 -> pop {r1-r4, ip} +* +******************************************************************************/ + +/* Emit .cfi_restore directives for a consecutive sequence of registers. */ + .macro cfirestorelist first, last + .cfi_restore \last + .if \last-\first + cfirestorelist \first, \last-1 + .endif + .endm + +/* Emit .cfi_offset directives for a consecutive sequence of registers. */ + .macro cfisavelist first, last, index=1 + .cfi_offset \last, -4*(\index) + .if \last-\first + cfisavelist \first, \last-1, \index+1 + .endif + .endm + +.macro _prologue first=-1, last=-1, push_ip=PAC_LEAF_PUSH_IP, push_lr=0 + .if \push_ip & 1 != \push_ip + .error "push_ip may be either 0 or 1" + .endif + .if \push_lr & 1 != \push_lr + .error "push_lr may be either 0 or 1" + .endif + .if \first != -1 + .if \last == -1 + /* Upper-bound not provided: Set upper = lower. */ + _prologue \first, \first, \push_ip, \push_lr + .exitm + .endif + .endif +#if HAVE_PAC_LEAF +#if __ARM_FEATURE_BTI_DEFAULT + pacbti ip, lr, sp +#else + pac ip, lr, sp +#endif /* __ARM_FEATURE_BTI_DEFAULT */ + .cfi_register 143, 12 +#else +#if __ARM_FEATURE_BTI_DEFAULT + bti +#endif /* __ARM_FEATURE_BTI_DEFAULT */ +#endif /* HAVE_PAC_LEAF */ + .if \first != -1 + .if \last != \first + .if \last >= 13 + .error "SP cannot be in the save list" + .endif + .if \push_ip + .if \push_lr + /* Case 1: push register range, ip and lr registers. */ + push {r\first-r\last, ip, lr} + .cfi_adjust_cfa_offset ((\last-\first)+3)*4 + .cfi_offset 14, -4 + .cfi_offset 143, -8 + cfisavelist \first, \last, 3 + .else // !\push_lr + /* Case 2: push register range and ip register. */ + push {r\first-r\last, ip} + .cfi_adjust_cfa_offset ((\last-\first)+2)*4 + .cfi_offset 143, -4 + cfisavelist \first, \last, 2 + .endif + .else // !\push_ip + .if \push_lr + /* Case 3: push register range and lr register. */ + push {r\first-r\last, lr} + .cfi_adjust_cfa_offset ((\last-\first)+2)*4 + .cfi_offset 14, -4 + cfisavelist \first, \last, 2 + .else // !\push_lr + /* Case 4: push register range. */ + push {r\first-r\last} + .cfi_adjust_cfa_offset ((\last-\first)+1)*4 + cfisavelist \first, \last, 1 + .endif + .endif + .else // \last == \first + .if \push_ip + .if \push_lr + /* Case 5: push single GP register plus ip and lr registers. */ + push {r\first, ip, lr} + .cfi_adjust_cfa_offset 12 + .cfi_offset 14, -4 + .cfi_offset 143, -8 + cfisavelist \first, \first, 3 + .else // !\push_lr + /* Case 6: push single GP register plus ip register. */ + push {r\first, ip} + .cfi_adjust_cfa_offset 8 + .cfi_offset 143, -4 + cfisavelist \first, \first, 2 + .endif + .else // !\push_ip + .if \push_lr + /* Case 7: push single GP register plus lr register. */ + push {r\first, lr} + .cfi_adjust_cfa_offset 8 + .cfi_offset 14, -4 + cfisavelist \first, \first, 2 + .else // !\push_lr + /* Case 8: push single GP register. */ + push {r\first} + .cfi_adjust_cfa_offset 4 + cfisavelist \first, \first, 1 + .endif + .endif + .endif + .else // \first == -1 + .if \push_ip + .if \push_lr + /* Case 9: push ip and lr registers. */ + push {ip, lr} + .cfi_adjust_cfa_offset 8 + .cfi_offset 14, -4 + .cfi_offset 143, -8 + .else // !\push_lr + /* Case 10: push ip register. */ + push {ip} + .cfi_adjust_cfa_offset 4 + .cfi_offset 143, -4 + .endif + .else // !\push_ip + .if \push_lr + /* Case 11: push lr register. */ + push {lr} + .cfi_adjust_cfa_offset 4 + .cfi_offset 14, -4 + .endif + .endif + .endif +.endm + +.macro _epilogue first=-1, last=-1, push_ip=PAC_LEAF_PUSH_IP, push_lr=0 + .if \push_ip & 1 != \push_ip + .error "push_ip may be either 0 or 1" + .endif + .if \push_lr & 1 != \push_lr + .error "push_lr may be either 0 or 1" + .endif + .if \first != -1 + .if \last == -1 + /* Upper-bound not provided: Set upper = lower. */ + _epilogue \first, \first, \push_ip, \push_lr + .exitm + .endif + .if \last != \first + .if \last >= 13 + .error "SP cannot be in the save list" + .endif + .if \push_ip + .if \push_lr + /* Case 1: pop register range, ip and lr registers. */ + pop {r\first-r\last, ip, lr} + .cfi_restore 14 + .cfi_register 143, 12 + cfirestorelist \first, \last + .else // !\push_lr + /* Case 2: pop register range and ip register. */ + pop {r\first-r\last, ip} + .cfi_register 143, 12 + cfirestorelist \first, \last + .endif + .else // !\push_ip + .if \push_lr + /* Case 3: pop register range and lr register. */ + pop {r\first-r\last, lr} + .cfi_restore 14 + cfirestorelist \first, \last + .else // !\push_lr + /* Case 4: pop register range. */ + pop {r\first-r\last} + cfirestorelist \first, \last + .endif + .endif + .else // \last == \first + .if \push_ip + .if \push_lr + /* Case 5: pop single GP register plus ip and lr registers. */ + pop {r\first, ip, lr} + .cfi_restore 14 + .cfi_register 143, 12 + cfirestorelist \first, \first + .else // !\push_lr + /* Case 6: pop single GP register plus ip register. */ + pop {r\first, ip} + .cfi_register 143, 12 + cfirestorelist \first, \first + .endif + .else // !\push_ip + .if \push_lr + /* Case 7: pop single GP register plus lr register. */ + pop {r\first, lr} + .cfi_restore 14 + cfirestorelist \first, \first + .else // !\push_lr + /* Case 8: pop single GP register. */ + pop {r\first} + cfirestorelist \first, \first + .endif + .endif + .endif + .else // \first == -1 + .if \push_ip + .if \push_lr + /* Case 9: pop ip and lr registers. */ + pop {ip, lr} + .cfi_restore 14 + .cfi_register 143, 12 + .else // !\push_lr + /* Case 10: pop ip register. */ + pop {ip} + .cfi_register 143, 12 + .endif + .else // !\push_ip + .if \push_lr + /* Case 11: pop lr register. */ + pop {lr} + .cfi_restore 14 + .endif + .endif + .endif +#if HAVE_PAC_LEAF + aut ip, lr, sp +#endif /* HAVE_PAC_LEAF */ + bx lr +.endm + +# clean up expressions in 'last' +.macro _preprocess_reglist1 first:req, last:req, push_ip:req, push_lr:req, reglist_op:req + .if \last == 0 + \reglist_op \first, 0, \push_ip, \push_lr + .elseif \last == 1 + \reglist_op \first, 1, \push_ip, \push_lr + .elseif \last == 2 + \reglist_op \first, 2, \push_ip, \push_lr + .elseif \last == 3 + \reglist_op \first, 3, \push_ip, \push_lr + .elseif \last == 4 + \reglist_op \first, 4, \push_ip, \push_lr + .elseif \last == 5 + \reglist_op \first, 5, \push_ip, \push_lr + .elseif \last == 6 + \reglist_op \first, 6, \push_ip, \push_lr + .elseif \last == 7 + \reglist_op \first, 7, \push_ip, \push_lr + .elseif \last == 8 + \reglist_op \first, 8, \push_ip, \push_lr + .elseif \last == 9 + \reglist_op \first, 9, \push_ip, \push_lr + .elseif \last == 10 + \reglist_op \first, 10, \push_ip, \push_lr + .elseif \last == 11 + \reglist_op \first, 11, \push_ip, \push_lr + .else + .error "last (\last) out of range" + .endif +.endm + +# clean up expressions in 'first' +.macro _preprocess_reglist first:req, last, push_ip=0, push_lr=0, reglist_op:req + .ifb \last + _preprocess_reglist \first \first \push_ip \push_lr + .else + .if \first > \last + .error "last (\last) must be at least as great as first (\first)" + .endif + .if \first == 0 + _preprocess_reglist1 0, \last, \push_ip, \push_lr, \reglist_op + .elseif \first == 1 + _preprocess_reglist1 1, \last, \push_ip, \push_lr, \reglist_op + .elseif \first == 2 + _preprocess_reglist1 2, \last, \push_ip, \push_lr, \reglist_op + .elseif \first == 3 + _preprocess_reglist1 3, \last, \push_ip, \push_lr, \reglist_op + .elseif \first == 4 + _preprocess_reglist1 4, \last, \push_ip, \push_lr, \reglist_op + .elseif \first == 5 + _preprocess_reglist1 5, \last, \push_ip, \push_lr, \reglist_op + .elseif \first == 6 + _preprocess_reglist1 6, \last, \push_ip, \push_lr, \reglist_op + .elseif \first == 7 + _preprocess_reglist1 7, \last, \push_ip, \push_lr, \reglist_op + .elseif \first == 8 + _preprocess_reglist1 8, \last, \push_ip, \push_lr, \reglist_op + .elseif \first == 9 + _preprocess_reglist1 9, \last, \push_ip, \push_lr, \reglist_op + .elseif \first == 10 + _preprocess_reglist1 10, \last, \push_ip, \push_lr, \reglist_op + .elseif \first == 11 + _preprocess_reglist1 11, \last, \push_ip, \push_lr, \reglist_op + .else + .error "first (\first) out of range" + .endif + .endif +.endm + +.macro _align8 first, last, push_ip=0, push_lr=0, reglist_op=_prologue + .ifb \first + .ifnb \last + .error "can't have last (\last) without specifying first" + .else // \last not blank + .if ((\push_ip + \push_lr) % 2) == 0 + \reglist_op first=-1, last=-1, push_ip=\push_ip, push_lr=\push_lr + .exitm + .else // ((\push_ip + \push_lr) % 2) odd + _align8 2, 2, \push_ip, \push_lr, \reglist_op + .exitm + .endif // ((\push_ip + \push_lr) % 2) == 0 + .endif // .ifnb \last + .endif // .ifb \first + + .ifb \last + _align8 \first, \first, \push_ip, \push_lr, \reglist_op + .else + .if \push_ip & 1 <> \push_ip + .error "push_ip may be 0 or 1" + .endif + .if \push_lr & 1 <> \push_lr + .error "push_lr may be 0 or 1" + .endif + .ifeq (\last - \first + \push_ip + \push_lr) % 2 + .if \first == 0 + .error "Alignment required and first register is r0" + .exitm + .endif + _preprocess_reglist \first-1, \last, \push_ip, \push_lr, \reglist_op + .else + _preprocess_reglist \first \last, \push_ip, \push_lr, \reglist_op + .endif + .endif +.endm + +.macro prologue first, last, push_ip=PAC_LEAF_PUSH_IP, push_lr=0, align8=STACK_ALIGN_ENFORCE + .if \align8 + _align8 \first, \last, \push_ip, \push_lr, _prologue + .else + _prologue first=\first, last=\last, push_ip=\push_ip, push_lr=\push_lr + .endif +.endm + +.macro epilogue first, last, push_ip=PAC_LEAF_PUSH_IP, push_lr=0, align8=STACK_ALIGN_ENFORCE + .if \align8 + _align8 \first, \last, \push_ip, \push_lr, reglist_op=_epilogue + .else + _epilogue first=\first, last=\last, push_ip=\push_ip, push_lr=\push_lr + .endif +.endm + +#endif /* __ASSEMBLER__ */ + #endif /* ARM_ASM__H */ diff --git a/newlib/libc/machine/arm/machine/acle-compat.h b/newlib/libc/machine/arm/machine/acle-compat.h deleted file mode 100644 index 888ae2ea8a..0000000000 --- a/newlib/libc/machine/arm/machine/acle-compat.h +++ /dev/null @@ -1,182 +0,0 @@ -/* - * Copyright (c) 2014 ARM Ltd - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. The name of the company may not be used to endorse or promote - * products derived from this software without specific prior written - * permission. - * - * THIS SOFTWARE IS PROVIDED BY ARM LTD ``AS IS'' AND ANY EXPRESS OR IMPLIED - * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. - * IN NO EVENT SHALL ARM LTD BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED - * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef __ARM_ARCH - -/* ACLE standardises a set of pre-defines that describe the ARM architecture. - These were mostly implemented in GCC around GCC-4.8; older versions - have no, or only partial support. To provide a level of backwards - compatibility we try to work out what the definitions should be, given - the older pre-defines that GCC did produce. This isn't complete, but - it should be enough for use by routines that depend on this header. */ - -/* No need to handle ARMv8, GCC had ACLE support before that. */ - -# ifdef __ARM_ARCH_7__ -/* The common subset of ARMv7 in all profiles. */ -# define __ARM_ARCH 7 -# define __ARM_ARCH_ISA_THUMB 2 -# define __ARM_FEATURE_CLZ -# define __ARM_FEATURE_LDREX 7 -# define __ARM_FEATURE_UNALIGNED -# endif - -# if defined (__ARM_ARCH_7A__) || defined (__ARM_ARCH_7R__) -# define __ARM_ARCH 7 -# define __ARM_ARCH_ISA_THUMB 2 -# define __ARM_ARCH_ISA_ARM -# define __ARM_FEATURE_CLZ -# define __ARM_FEATURE_SIMD32 -# define __ARM_FEATURE_DSP -# define __ARM_FEATURE_QBIT -# define __ARM_FEATURE_SAT -# define __ARM_FEATURE_LDREX 15 -# define __ARM_FEATURE_UNALIGNED -# ifdef __ARM_ARCH_7A__ -# define __ARM_ARCH_PROFILE 'A' -# else -# define __ARM_ARCH_PROFILE 'R' -# endif -# endif - -# ifdef __ARM_ARCH_7EM__ -# define __ARM_ARCH 7 -# define __ARM_ARCH_ISA_THUMB 2 -# define __ARM_FEATURE_CLZ -# define __ARM_FEATURE_SIMD32 -# define __ARM_FEATURE_DSP -# define __ARM_FEATURE_QBIT -# define __ARM_FEATURE_SAT -# define __ARM_FEATURE_LDREX 7 -# define __ARM_FEATURE_UNALIGNED -# define __ARM_ARCH_PROFILE 'M' -# endif - -# ifdef __ARM_ARCH_7M__ -# define __ARM_ARCH 7 -# define __ARM_ARCH_ISA_THUMB 2 -# define __ARM_FEATURE_CLZ -# define __ARM_FEATURE_QBIT -# define __ARM_FEATURE_SAT -# define __ARM_FEATURE_LDREX 7 -# define __ARM_FEATURE_UNALIGNED -# define __ARM_ARCH_PROFILE 'M' -# endif - -# ifdef __ARM_ARCH_6T2__ -# define __ARM_ARCH 6 -# define __ARM_ARCH_ISA_THUMB 2 -# define __ARM_ARCH_ISA_ARM -# define __ARM_FEATURE_CLZ -# define __ARM_FEATURE_SIMD32 -# define __ARM_FEATURE_DSP -# define __ARM_FEATURE_QBIT -# define __ARM_FEATURE_SAT -# define __ARM_FEATURE_LDREX 4 -# define __ARM_FEATURE_UNALIGNED -# endif - -# ifdef __ARM_ARCH_6M__ -# define __ARM_ARCH 6 -# define __ARM_ARCH_ISA_THUMB 1 -# define __ARM_ARCH_PROFILE 'M' -# endif - -# if defined (__ARM_ARCH_6__) || defined (__ARM_ARCH_6J__) \ - || defined (__ARM_ARCH_6K__) || defined (__ARM_ARCH_6Z__) \ - || defined (__ARM_ARCH_6ZK__) -# define __ARM_ARCH 6 -# define __ARM_ARCH_ISA_THUMB 1 -# define __ARM_ARCH_ISA_ARM -# define __ARM_FEATURE_CLZ -# define __ARM_FEATURE_SIMD32 -# define __ARM_FEATURE_DSP -# define __ARM_FEATURE_QBIT -# define __ARM_FEATURE_SAT -# define __ARM_FEATURE_UNALIGNED -# ifndef __thumb__ -# if defined (__ARM_ARCH_6K__) || defined (__ARM_ARCH_6ZK__) -# define __ARM_FEATURE_LDREX 15 -# else -# define __ARM_FEATURE_LDREX 4 -# endif -# endif -# endif - -# if defined (__ARM_ARCH_5TE__) || defined (__ARM_ARCH_5E__) -# define __ARM_ARCH 5 -# define __ARM_ARCH_ISA_ARM -# ifdef __ARM_ARCH_5TE__ -# define __ARM_ARCH_ISA_THUMB 1 -# endif -# define __ARM_FEATURE_CLZ -# define __ARM_FEATURE_DSP -# endif - -# if defined (__ARM_ARCH_5T__) || defined (__ARM_ARCH_5__) -# define __ARM_ARCH 5 -# define __ARM_ARCH_ISA_ARM -# ifdef __ARM_ARCH_5TE__ -# define __ARM_ARCH_ISA_THUMB 1 -# endif -# define __ARM_FEATURE_CLZ -# endif - -# ifdef __ARM_ARCH_4T__ -# define __ARM_ARCH 4 -# define __ARM_ARCH_ISA_ARM -# define __ARM_ARCH_ISA_THUMB 1 -# endif - -# ifdef __ARM_ARCH_4__ -# define __ARM_ARCH 4 -# define __ARM_ARCH_ISA_ARM -# endif - -# if defined (__ARM_ARCH_3__) || defined (__ARM_ARCH_3M__) -# define __ARM_ARCH 3 -# define __ARM_ARCH_ISA_ARM -# endif - -# ifdef __ARM_ARCH_2__ -# define __ARM_ARCH 2 -# define __ARM_ARCH_ISA_ARM -# endif - -# ifdef __ARMEB__ -# define __ARM_BIG_ENDIAN -# endif - -/* If we still don't know what the target architecture is, then we're - probably not using GCC. */ -# ifndef __ARM_ARCH -# error Unable to determine architecture version. -# endif - -#endif /* __ARM_ARCH */ - diff --git a/newlib/libc/machine/arm/memchr-stub.c b/newlib/libc/machine/arm/memchr-stub.c index 5c7881b9c8..48451a136c 100644 --- a/newlib/libc/machine/arm/memchr-stub.c +++ b/newlib/libc/machine/arm/memchr-stub.c @@ -27,7 +27,7 @@ /* The structure of the following #if #else #endif conditional chain must match the chain in memchr.S. */ -#include "acle-compat.h" +#include "arm-acle-compat.h" #if defined (__ARM_NEON__) || defined (__ARM_NEON) /* Defined in memchr.S. */ diff --git a/newlib/libc/machine/arm/memchr.S b/newlib/libc/machine/arm/memchr.S index 1a4c6512c8..d13ef8d654 100644 --- a/newlib/libc/machine/arm/memchr.S +++ b/newlib/libc/machine/arm/memchr.S @@ -75,7 +75,8 @@ .syntax unified -#include "acle-compat.h" +#include "arm-acle-compat.h" +#include "arm_asm.h" @ NOTE: This ifdef MUST match the one in memchr-stub.c #if defined (__ARM_NEON__) || defined (__ARM_NEON) @@ -267,10 +268,14 @@ memchr: #elif __ARM_ARCH_ISA_THUMB >= 2 && defined (__ARM_FEATURE_DSP) #if __ARM_ARCH_PROFILE == 'M' - .arch armv7e-m +#if __ARM_ARCH >= 8 + /* keep config inherited from -march=. */ #else - .arch armv6t2 -#endif + .arch armv7e-m +#endif /* __ARM_ARCH >= 8 */ +#else + .arch armv6t2 +#endif /* __ARM_ARCH_PROFILE == 'M' */ @ this lets us check a flag in a 00/ff byte easily in either endianness #ifdef __ARMEB__ @@ -287,11 +292,14 @@ memchr: .p2align 4,,15 .global memchr .type memchr,%function + .fnstart + .cfi_startproc memchr: @ r0 = start of memory to scan @ r1 = character to look for @ r2 = length @ returns r0 = pointer to character or NULL if not found + prologue and r1,r1,#0xff @ Don't trust the caller to pass a char cmp r2,#16 @ If short don't bother with anything clever @@ -313,6 +321,11 @@ memchr: 10: @ We are aligned, we know we have at least 8 bytes to work with push {r4,r5,r6,r7} + .cfi_adjust_cfa_offset 16 + .cfi_rel_offset 4, 0 + .cfi_rel_offset 5, 4 + .cfi_rel_offset 6, 8 + .cfi_rel_offset 7, 12 orr r1, r1, r1, lsl #8 @ expand the match word across all bytes orr r1, r1, r1, lsl #16 bic r4, r2, #7 @ Number of double words to work with * 8 @@ -334,6 +347,11 @@ memchr: bne 15b @ (Flags from the subs above) pop {r4,r5,r6,r7} + .cfi_restore 7 + .cfi_restore 6 + .cfi_restore 5 + .cfi_restore 4 + .cfi_adjust_cfa_offset -16 and r1,r1,#0xff @ r1 back to a single character and r2,r2,#7 @ Leave the count remaining as the number @ after the double words have been done @@ -349,17 +367,29 @@ memchr: bne 21b @ on r2 flags 40: + .cfi_remember_state movs r0,#0 @ not found - bx lr + epilogue 50: + .cfi_restore_state + .cfi_remember_state subs r0,r0,#1 @ found - bx lr + epilogue 60: @ We're here because the fast path found a hit @ now we have to track down exactly which word it was @ r0 points to the start of the double word after the one tested @ r5 has the 00/ff pattern for the first word, r6 has the chained value + @ This point is reached from cbnz midway through label 15 prior to + @ popping r4-r7 off the stack. .cfi_restore_state alone disregards + @ this, so we manually correct this. + .cfi_restore_state @ Standard post-prologue state + .cfi_adjust_cfa_offset 16 + .cfi_rel_offset 4, 0 + .cfi_rel_offset 5, 4 + .cfi_rel_offset 6, 8 + .cfi_rel_offset 7, 12 cmp r5, #0 itte eq moveq r5, r6 @ the end is in the 2nd word @@ -379,8 +409,16 @@ memchr: 61: pop {r4,r5,r6,r7} + .cfi_restore 7 + .cfi_restore 6 + .cfi_restore 5 + .cfi_restore 4 + .cfi_adjust_cfa_offset -16 subs r0,r0,#1 - bx lr + epilogue + .cfi_endproc + .cantunwind + .fnend #else /* Defined in memchr-stub.c. */ #endif diff --git a/newlib/libc/machine/arm/memcpy-armv7m.S b/newlib/libc/machine/arm/memcpy-armv7m.S index c8bff36f60..ec1ad6485e 100644 --- a/newlib/libc/machine/arm/memcpy-armv7m.S +++ b/newlib/libc/machine/arm/memcpy-armv7m.S @@ -46,6 +46,8 @@ __OPT_BIG_BLOCK_SIZE: Size of big block in words. Default to 64. __OPT_MID_BLOCK_SIZE: Size of big block in words. Default to 16. */ +#include "arm_asm.h" + #ifndef __OPT_BIG_BLOCK_SIZE #define __OPT_BIG_BLOCK_SIZE (4 * 16) #endif @@ -85,6 +87,8 @@ .global memcpy .thumb .thumb_func + .fnstart + .cfi_startproc .type memcpy, %function memcpy: @ r0: dst @@ -93,10 +97,11 @@ memcpy: #ifdef __ARM_FEATURE_UNALIGNED /* In case of UNALIGNED access supported, ip is not used in function body. */ + prologue push_ip=HAVE_PAC_LEAF mov ip, r0 #else - push {r0} -#endif + prologue 0 push_ip=HAVE_PAC_LEAF +#endif /* __ARM_FEATURE_UNALIGNED */ orr r3, r1, r0 ands r3, r3, #3 bne .Lmisaligned_copy @@ -178,15 +183,17 @@ memcpy: #endif /* __ARM_FEATURE_UNALIGNED */ .Ldone: + .cfi_remember_state #ifdef __ARM_FEATURE_UNALIGNED mov r0, ip + epilogue push_ip=HAVE_PAC_LEAF #else - pop {r0} -#endif - bx lr + epilogue 0 push_ip=HAVE_PAC_LEAF +#endif /* __ARM_FEATURE_UNALIGNED */ .align 2 .Lmisaligned_copy: + .cfi_restore_state #ifdef __ARM_FEATURE_UNALIGNED /* Define label DST_ALIGNED to BIG_BLOCK. It will go to aligned copy once destination is adjusted to aligned. */ @@ -247,6 +254,9 @@ memcpy: /* dst is aligned, but src isn't. Misaligned copy. */ push {r4, r5} + .cfi_adjust_cfa_offset 8 + .cfi_rel_offset 4, 0 + .cfi_rel_offset 5, 4 subs r2, #4 /* Backward r1 by misaligned bytes, to make r1 aligned. @@ -299,6 +309,9 @@ memcpy: adds r2, #4 subs r1, ip pop {r4, r5} + .cfi_restore 4 + .cfi_restore 5 + .cfi_adjust_cfa_offset -8 #endif /* __ARM_FEATURE_UNALIGNED */ @@ -321,9 +334,11 @@ memcpy: #ifdef __ARM_FEATURE_UNALIGNED mov r0, ip + epilogue push_ip=HAVE_PAC_LEAF #else - pop {r0} -#endif - bx lr - + epilogue 0 push_ip=HAVE_PAC_LEAF +#endif /* __ARM_FEATURE_UNALIGNED */ + .cfi_endproc + .cantunwind + .fnend .size memcpy, .-memcpy diff --git a/newlib/libc/machine/arm/memcpy-stub.c b/newlib/libc/machine/arm/memcpy-stub.c index 6cd0e3b1d4..6f41a85e01 100644 --- a/newlib/libc/machine/arm/memcpy-stub.c +++ b/newlib/libc/machine/arm/memcpy-stub.c @@ -27,7 +27,7 @@ /* The structure of the following #if #else #endif conditional chain must match the chain in memcpy.S. */ -#include "acle-compat.h" +#include "arm-acle-compat.h" #if (defined (__OPTIMIZE_SIZE__) || defined (PREFER_SIZE_OVER_SPEED)) # include "../../string/memcpy.c" diff --git a/newlib/libc/machine/arm/memcpy.S b/newlib/libc/machine/arm/memcpy.S index 77bd2a606e..8416232ec8 100644 --- a/newlib/libc/machine/arm/memcpy.S +++ b/newlib/libc/machine/arm/memcpy.S @@ -29,7 +29,7 @@ /* The structure of the following #if #else #endif conditional chain must match the chain in memcpy-stub.c. */ -#include "acle-compat.h" +#include "arm-acle-compat.h" #if defined (__OPTIMIZE_SIZE__) || defined (PREFER_SIZE_OVER_SPEED) /* Defined in memcpy-stub.c. */ diff --git a/newlib/libc/machine/arm/setjmp.S b/newlib/libc/machine/arm/setjmp.S index 21d6ff9e7f..5e5952296c 100644 --- a/newlib/libc/machine/arm/setjmp.S +++ b/newlib/libc/machine/arm/setjmp.S @@ -2,7 +2,7 @@ Nick Clifton, Cygnus Solutions, 13 June 1997. */ -#include "acle-compat.h" +#include "arm-acle-compat.h" /* ANSI concatenation macros. */ #define CONCAT(a, b) CONCAT2(a, b) @@ -22,43 +22,70 @@ #define SIZE(x) #endif +/* Jump buffer allocation sizes. */ +#define JUMPBUF_CORE_REGS_SIZE (10 * 4) +#define JUMPBUF_FP_REGS_SIZE (8 * 8) +#define JUMPBUF_PAC (JUMPBUF_CORE_REGS_SIZE + JUMPBUF_FP_REGS_SIZE + 0) + /* Arm/Thumb interworking support: The interworking scheme expects functions to use a BX instruction to return control to their parent. Since we need this code to work in both interworked and non-interworked environments as well as with - older processors which do not have the BX instruction we do the + older processors which do not have the BX instruction we do the following: Test the return address. If the bottom bit is clear perform an "old style" function exit. (We know that we are in ARM mode and returning to an ARM mode caller). Otherwise use the BX instruction to perform the function exit. - We know that we will never attempt to perform the BX instruction on - an older processor, because that kind of processor will never be - interworked, and a return address with the bottom bit set will never + We know that we will never attempt to perform the BX instruction on + an older processor, because that kind of processor will never be + interworked, and a return address with the bottom bit set will never be generated. In addition, we do not actually assemble the BX instruction as this would require us to tell the assembler that the processor is an ARM7TDMI and it would store this information in the binary. We want this binary to be able to be linked with binaries compiled for older processors however, so - we do not want such information stored there. + we do not want such information stored there. If we are running using the APCS-26 convention however, then we never - test the bottom bit, because this is part of the processor status. - Instead we just do a normal return, since we know that we cannot be + test the bottom bit, because this is part of the processor status. + Instead we just do a normal return, since we know that we cannot be returning to a Thumb caller - the Thumb does not support APCS-26. - - Function entry is much simpler. If we are compiling for the Thumb we + + Function entry is much simpler. If we are compiling for the Thumb we just switch into ARM mode and then drop through into the rest of the function. The function exit code will take care of the restore to Thumb mode. - + For Thumb-2 do everything in Thumb mode. */ .syntax unified +/* GCC 12.1 and later will tell the assembler exactly which floating + point (or MVE) unit is required and we don't want to override + that. Conversely, older versions of the compiler don't pass this + information so we need to enable the VFP version that is most + appropriate. The choice here should support all suitable VFP + versions that the older toolchains can handle. */ +#if __GNUC__ && __GNUC__ < 12 +/* Ensure that FPU instructions are correctly compiled and, likewise, + the appropriate build attributes are added to the resulting object + file. Check whether the MVE extension is present and whether + we have support for hardware floating point-operations. VFPxd + covers all the cases we need in this file for hardware + floating-point and should be compatible with all required FPUs + that we need to support. */ +# if __ARM_FP + .fpu vfpxd +# endif +# if __ARM_FEATURE_MVE + .arch_extension mve +# endif +#endif + #if __ARM_ARCH_ISA_THUMB == 1 && !__ARM_ARCH_ISA_ARM /* ARMv6-M-like has to be implemented in Thumb mode. */ @@ -115,15 +142,15 @@ SYM (longjmp): #else #define RET tst lr, #1; \ moveq pc, lr ; \ -.word 0xe12fff1e /* bx lr */ +.inst 0xe12fff1e /* bx lr */ #endif #ifdef __thumb2__ -.macro COND where when +.macro COND where when i\where \when .endm #else -.macro COND where when +.macro COND where when .endm #endif @@ -140,7 +167,7 @@ SYM (longjmp): .macro PROLOGUE name .code 16 bx pc - nop + nop .code 32 SYM (.arm_start_of.\name): .endm @@ -149,12 +176,14 @@ SYM (.arm_start_of.\name): .macro PROLOGUE name .endm #endif - + .macro FUNC_START name .text .align 2 MODE .globl SYM (\name) + .fnstart + .cfi_startproc TYPE (\name) SYM (\name): PROLOGUE \name @@ -162,63 +191,91 @@ SYM (\name): .macro FUNC_END name RET + .cfi_endproc + .fnend SIZE (\name) .endm - + /* -------------------------------------------------------------------- - int setjmp (jmp_buf); + int setjmp (jmp_buf); -------------------------------------------------------------------- */ - + FUNC_START setjmp +#if __ARM_FEATURE_PAC_DEFAULT +# if __ARM_FEATURE_BTI_DEFAULT + pacbti ip, lr, sp +# else + pac ip, lr, sp +# endif /* __ARM_FEATURE_BTI_DEFAULT */ + mov r3, ip + str r3, [r0, #JUMPBUF_PAC] + .cfi_register 143, 12 +#else +# if __ARM_FEATURE_BTI_DEFAULT + bti +# endif /* __ARM_FEATURE_BTI_DEFAULT */ +#endif /* __ARM_FEATURE_PAC_DEFAULT */ + /* Save all the callee-preserved registers into the jump buffer. */ #ifdef __thumb2__ mov ip, sp - stmea a1!, { v1-v7, fp, ip, lr } + stmia r0!, { r4-r10, fp, ip, lr } #else - stmea a1!, { v1-v7, fp, ip, sp, lr } + stmia r0!, { r4-r10, fp, sp, lr } #endif - -#if 0 /* Simulator does not cope with FP instructions yet. */ -#ifndef __SOFTFP__ - /* Save the floating point registers. */ - sfmea f4, 4, [a1] +#if defined __ARM_FP || defined __ARM_FEATURE_MVE + vstm r0, { d8-d15 } #endif -#endif + /* When setting up the jump buffer return 0. */ - mov a1, #0 + mov r0, #0 +#if __ARM_FEATURE_PAC_DEFAULT + mov ip, r3 + aut ip, lr, sp +#endif /* __ARM_FEATURE_PAC_DEFAULT */ FUNC_END setjmp - + /* -------------------------------------------------------------------- volatile void longjmp (jmp_buf, int); -------------------------------------------------------------------- */ - + FUNC_START longjmp +#if __ARM_FEATURE_BTI_DEFAULT + bti +#endif /* __ARM_FEATURE_BTI_DEFAULT */ + +#if __ARM_FEATURE_PAC_DEFAULT + /* Keep original jmpbuf address for retrieving pac-code + for authentication. */ + mov r2, r0 +#endif /* __ARM_FEATURE_PAC_DEFAULT */ + /* If we have stack extension code it ought to be handled here. */ - + /* Restore the registers, retrieving the state when setjmp() was called. */ #ifdef __thumb2__ - ldmfd a1!, { v1-v7, fp, ip, lr } + ldmia r0!, { r4-r10, fp, ip, lr } mov sp, ip #else - ldmfd a1!, { v1-v7, fp, ip, sp, lr } + ldmia r0!, { r4-r10, fp, sp, lr } #endif - -#if 0 /* Simulator does not cope with FP instructions yet. */ -#ifndef __SOFTFP__ - /* Restore floating point registers as well. */ - lfmfd f4, 4, [a1] +#if defined __ARM_FP || defined __ARM_FEATURE_MVE + vldm r0, { d8-d15 } #endif -#endif + /* Put the return value into the integer result register. - But if it is zero then return 1 instead. */ - movs a1, a2 -#ifdef __thumb2__ + But if it is zero then return 1 instead. */ + movs r0, r1 it eq -#endif - moveq a1, #1 + moveq r0, #1 + +#if __ARM_FEATURE_PAC_DEFAULT + ldr ip, [r2, #JUMPBUF_PAC] + aut ip, lr, sp +#endif /* __ARM_FEATURE_PAC_DEFAULT */ FUNC_END longjmp #endif diff --git a/newlib/libc/machine/arm/strcmp-arm-tiny.S b/newlib/libc/machine/arm/strcmp-arm-tiny.S index 607a41daf0..0bd2a2e6e7 100644 --- a/newlib/libc/machine/arm/strcmp-arm-tiny.S +++ b/newlib/libc/machine/arm/strcmp-arm-tiny.S @@ -29,10 +29,14 @@ /* Tiny version of strcmp in ARM state. Used only when optimizing for size. Also supports Thumb-2. */ +#include "arm_asm.h" + .syntax unified def_fn strcmp + .fnstart .cfi_sections .debug_frame .cfi_startproc + prologue 1: ldrb r2, [r0], #1 ldrb r3, [r1], #1 @@ -42,6 +46,8 @@ def_fn strcmp beq 1b 2: subs r0, r2, r3 - bx lr + epilogue .cfi_endproc + .cantunwind + .fnend .size strcmp, . - strcmp diff --git a/newlib/libc/machine/arm/strcmp-armv7.S b/newlib/libc/machine/arm/strcmp-armv7.S index 2f93bfb73f..7cafca151b 100644 --- a/newlib/libc/machine/arm/strcmp-armv7.S +++ b/newlib/libc/machine/arm/strcmp-armv7.S @@ -45,6 +45,8 @@ .thumb .syntax unified +#include "arm_asm.h" + /* Parameters and result. */ #define src1 r0 #define src2 r1 @@ -91,8 +93,9 @@ ldrd r4, r5, [sp], #16 .cfi_restore 4 .cfi_restore 5 + .cfi_adjust_cfa_offset -16 sub result, result, r1, lsr #24 - bx lr + epilogue push_ip=HAVE_PAC_LEAF #else /* To use the big-endian trick we'd have to reverse all three words. that's slower than this approach. */ @@ -112,22 +115,21 @@ ldrd r4, r5, [sp], #16 .cfi_restore 4 .cfi_restore 5 + .cfi_adjust_cfa_offset -16 sub result, result, r1 - bx lr + epilogue push_ip=HAVE_PAC_LEAF #endif .endm + .text .p2align 5 -.Lstrcmp_start_addr: -#ifndef STRCMP_NO_PRECHECK -.Lfastpath_exit: - sub r0, r2, r3 - bx lr - nop -#endif def_fn strcmp + .fnstart + .cfi_sections .debug_frame + .cfi_startproc + prologue push_ip=HAVE_PAC_LEAF #ifndef STRCMP_NO_PRECHECK ldrb r2, [src1] ldrb r3, [src2] @@ -136,16 +138,14 @@ def_fn strcmp cmpcs r2, r3 bne .Lfastpath_exit #endif - .cfi_sections .debug_frame - .cfi_startproc strd r4, r5, [sp, #-16]! - .cfi_def_cfa_offset 16 - .cfi_offset 4, -16 - .cfi_offset 5, -12 + .cfi_adjust_cfa_offset 16 + .cfi_rel_offset 4, 0 + .cfi_rel_offset 5, 4 orr tmp1, src1, src2 strd r6, r7, [sp, #8] - .cfi_offset 6, -8 - .cfi_offset 7, -4 + .cfi_rel_offset 6, 8 + .cfi_rel_offset 7, 12 mvn const_m1, #0 lsl r2, tmp1, #29 cbz r2, .Lloop_aligned8 @@ -270,7 +270,6 @@ def_fn strcmp ldr data1, [src1], #4 beq .Laligned_m2 bcs .Laligned_m1 - #ifdef STRCMP_NO_PRECHECK ldrb data2, [src2, #1] uxtb tmp1, data1, ror #BYTE1_OFFSET @@ -314,10 +313,19 @@ def_fn strcmp mov result, tmp1 ldr r4, [sp], #16 .cfi_restore 4 - bx lr + .cfi_adjust_cfa_offset -16 + epilogue push_ip=HAVE_PAC_LEAF #ifndef STRCMP_NO_PRECHECK +.Lfastpath_exit: + .cfi_restore_state + .cfi_remember_state + sub r0, r2, r3 + epilogue push_ip=HAVE_PAC_LEAF + .Laligned_m1: + .cfi_restore_state + .cfi_remember_state add src2, src2, #4 #endif .Lsrc1_aligned: @@ -364,8 +372,9 @@ def_fn strcmp /* R6/7 Not used in this sequence. */ .cfi_restore 6 .cfi_restore 7 + .cfi_adjust_cfa_offset -16 neg result, result - bx lr + epilogue push_ip=HAVE_PAC_LEAF 6: .cfi_restore_state @@ -441,7 +450,8 @@ def_fn strcmp /* R6/7 not used in this sequence. */ .cfi_restore 6 .cfi_restore 7 - bx lr + .cfi_adjust_cfa_offset -16 + epilogue push_ip=HAVE_PAC_LEAF .Lstrcmp_tail: .cfi_restore_state @@ -463,7 +473,10 @@ def_fn strcmp /* R6/7 not used in this sequence. */ .cfi_restore 6 .cfi_restore 7 + .cfi_adjust_cfa_offset -16 sub result, result, data2, lsr #24 - bx lr + epilogue push_ip=HAVE_PAC_LEAF .cfi_endproc - .size strcmp, . - .Lstrcmp_start_addr + .cantunwind + .fnend + .size strcmp, . - strcmp diff --git a/newlib/libc/machine/arm/strcmp-armv7m.S b/newlib/libc/machine/arm/strcmp-armv7m.S index cdb4912df7..825b6e77fd 100644 --- a/newlib/libc/machine/arm/strcmp-armv7m.S +++ b/newlib/libc/machine/arm/strcmp-armv7m.S @@ -29,6 +29,8 @@ /* Very similar to the generic code, but uses Thumb2 as implemented in ARMv7-M. */ +#include "arm_asm.h" + /* Parameters and result. */ #define src1 r0 #define src2 r1 @@ -44,8 +46,10 @@ .thumb .syntax unified def_fn strcmp + .fnstart .cfi_sections .debug_frame .cfi_startproc + prologue push_ip=HAVE_PAC_LEAF eor tmp1, src1, src2 tst tmp1, #3 /* Strings not at same byte offset from a word boundary. */ @@ -82,6 +86,7 @@ def_fn strcmp ldreq data2, [src2], #4 beq 4b 2: + .cfi_remember_state /* There's a zero or a different byte in the word */ S2HI result, data1, #24 S2LO data1, data1, #8 @@ -106,7 +111,7 @@ def_fn strcmp lsrs result, result, #24 subs result, result, data2 #endif - bx lr + epilogue push_ip=HAVE_PAC_LEAF #if 0 @@ -205,8 +210,10 @@ def_fn strcmp /* First of all, compare bytes until src1(sp1) is word-aligned. */ .Lstrcmp_unaligned: + .cfi_restore_state tst src1, #3 beq 2f + .cfi_remember_state ldrb data1, [src1], #1 ldrb data2, [src2], #1 cmp data1, #1 @@ -214,12 +221,13 @@ def_fn strcmp cmpcs data1, data2 beq .Lstrcmp_unaligned sub result, data1, data2 - bx lr + epilogue push_ip=HAVE_PAC_LEAF 2: + .cfi_restore_state stmfd sp!, {r5} - .cfi_def_cfa_offset 4 - .cfi_offset 5, -4 + .cfi_adjust_cfa_offset 4 + .cfi_rel_offset 5, 0 ldr data1, [src1], #4 and tmp2, src2, #3 @@ -355,8 +363,8 @@ def_fn strcmp .cfi_remember_state ldmfd sp!, {r5} .cfi_restore 5 - .cfi_def_cfa_offset 0 - bx lr + .cfi_adjust_cfa_offset -4 + epilogue push_ip=HAVE_PAC_LEAF .Lstrcmp_tail: .cfi_restore_state @@ -372,7 +380,9 @@ def_fn strcmp sub result, r2, result ldmfd sp!, {r5} .cfi_restore 5 - .cfi_def_cfa_offset 0 - bx lr + .cfi_adjust_cfa_offset -4 + epilogue push_ip=HAVE_PAC_LEAF .cfi_endproc + .cantunwind + .fnend .size strcmp, . - strcmp diff --git a/newlib/libc/machine/arm/strcmp.S b/newlib/libc/machine/arm/strcmp.S index 137f449692..ae308cfc74 100644 --- a/newlib/libc/machine/arm/strcmp.S +++ b/newlib/libc/machine/arm/strcmp.S @@ -28,7 +28,7 @@ /* Wrapper for the various implementations of strcmp. */ -#include "acle-compat.h" +#include "arm-acle-compat.h" #ifdef __ARM_BIG_ENDIAN #define S2LO lsl diff --git a/newlib/libc/machine/arm/strlen-armv7.S b/newlib/libc/machine/arm/strlen-armv7.S index f3dda0d60e..6aa122c075 100644 --- a/newlib/libc/machine/arm/strlen-armv7.S +++ b/newlib/libc/machine/arm/strlen-armv7.S @@ -58,7 +58,8 @@ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include "acle-compat.h" +#include "arm-acle-compat.h" +#include "arm_asm.h" .macro def_fn f p2align=0 .text @@ -78,7 +79,11 @@ /* This code requires Thumb. */ #if __ARM_ARCH_PROFILE == 'M' +#if __ARM_ARCH >= 8 + /* keep config inherited from -march=. */ +#else .arch armv7e-m +#endif /* if __ARM_ARCH >= 8 */ #else .arch armv6t2 #endif @@ -100,8 +105,10 @@ #define tmp2 r5 def_fn strlen p2align=6 + .fnstart + .cfi_startproc + prologue 4 5 push_ip=HAVE_PAC_LEAF pld [srcin, #0] - strd r4, r5, [sp, #-8]! bic src, srcin, #7 mvn const_m1, #0 ands tmp1, srcin, #7 /* (8 - bytes) to alignment. */ @@ -151,6 +158,7 @@ def_fn strlen p2align=6 beq .Lloop_aligned .Lnull_found: + .cfi_remember_state cmp data1a, #0 itt eq addeq result, result, #4 @@ -159,11 +167,11 @@ def_fn strlen p2align=6 rev data1a, data1a #endif clz data1a, data1a - ldrd r4, r5, [sp], #8 add result, result, data1a, lsr #3 /* Bits -> Bytes. */ - bx lr + epilogue 4 5 push_ip=HAVE_PAC_LEAF .Lmisaligned8: + .cfi_restore_state ldrd data1a, data1b, [src] and tmp2, tmp1, #3 rsb result, tmp1, #0 @@ -177,4 +185,7 @@ def_fn strlen p2align=6 movne data1a, const_m1 mov const_0, #0 b .Lstart_realigned + .cfi_endproc + .cantunwind + .fnend .size strlen, . - strlen diff --git a/newlib/libc/machine/arm/strlen-thumb2-Os.S b/newlib/libc/machine/arm/strlen-thumb2-Os.S index 961f41a0a2..4adbc61d2e 100644 --- a/newlib/libc/machine/arm/strlen-thumb2-Os.S +++ b/newlib/libc/machine/arm/strlen-thumb2-Os.S @@ -24,7 +24,8 @@ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include "acle-compat.h" +#include "arm-acle-compat.h" +#include "arm_asm.h" .macro def_fn f p2align=0 .text @@ -33,8 +34,9 @@ .type \f, %function \f: .endm - -#if __ARM_ARCH_ISA_THUMB >= 2 && __ARM_ARCH >= 7 +#if __ARM_ARCH_PROFILE == 'M' && __ARM_ARCH >= 8 + /* keep config inherited from -march=. */ +#elif __ARM_ARCH_ISA_THUMB >= 2 && __ARM_ARCH >= 7 .arch armv7 #else .arch armv6t2 @@ -44,11 +46,17 @@ .syntax unified def_fn strlen p2align=1 + .fnstart + .cfi_startproc + prologue mov r3, r0 1: ldrb.w r2, [r3], #1 cmp r2, #0 bne 1b subs r0, r3, r0 subs r0, #1 - bx lr + epilogue + .cfi_endproc + .cantunwind + .fnend .size strlen, . - strlen diff --git a/newlib/libc/machine/arm/strlen.S b/newlib/libc/machine/arm/strlen.S index 0435fb2de8..d85a7eeb5b 100644 --- a/newlib/libc/machine/arm/strlen.S +++ b/newlib/libc/machine/arm/strlen.S @@ -24,7 +24,7 @@ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include "acle-compat.h" +#include "arm-acle-compat.h" #if defined __OPTIMIZE_SIZE__ || defined PREFER_SIZE_OVER_SPEED #if __ARM_ARCH_ISA_THUMB == 2 diff --git a/newlib/libc/machine/cris/sys/signal.h b/newlib/libc/machine/cris/sys/signal.h index 9cb7ba5303..7b6f3fa9bc 100644 --- a/newlib/libc/machine/cris/sys/signal.h +++ b/newlib/libc/machine/cris/sys/signal.h @@ -12,6 +12,8 @@ extern "C" { #endif #include "_ansi.h" +#include +#include typedef unsigned long sigset_t; @@ -32,21 +34,50 @@ struct sigaction { /* Adjusted to glibc; other values. */ #define SA_NOCLDSTOP 1 /* only value supported now for sa_flags */ + +#if __POSIX_VISIBLE #define SIG_SETMASK 2 /* set mask with sigprocmask() */ #define SIG_BLOCK 0 /* set of signals to block */ #define SIG_UNBLOCK 1 /* set of signals to, well, unblock */ +int sigprocmask (int __how, const sigset_t *__a, sigset_t *__b); +#endif /* __POSIX_VISIBLE */ + +#ifdef _LIBC +int _kill (pid_t, int); +#endif + +#if __POSIX_VISIBLE + +int kill (pid_t, int); +int sigaddset (sigset_t *, const int); +int sigdelset (sigset_t *, const int); +int sigismember (const sigset_t *, int); +int sigfillset (sigset_t *); +int sigemptyset (sigset_t *); + /* These depend upon the type of sigset_t, which right now is always a long.. They're in the POSIX namespace, but are not ANSI. */ -#define sigaddset(what,sig) (*(what) |= (1<<(sig))) -#define sigemptyset(what) (*(what) = 0) +#define sigaddset(what,sig) (*(what) |= (1<<(sig)), 0) +#define sigdelset(what,sig) (*(what) &= ~(1<<(sig)), 0) +#define sigemptyset(what) (*(what) = 0, 0) +#define sigfillset(what) (*(what) = ~(0), 0) +#define sigismember(what,sig) (((*(what)) & (1<<(sig))) != 0) -int sigprocmask (int __how, const sigset_t *__a, sigset_t *__b); +#endif /* __POSIX_VISIBLE */ + +/* Using __MISC_VISIBLE until POSIX Issue 8 is officially released */ +#if __MISC_VISIBLE + +/* POSIX Issue 8 adds sig2str() and str2sig() */ + +#define SIG2STR_MAX 17 /* (sizeof("RTMAX+") + sizeof("4294967295") - 1) */ + +int sig2str(int, char *); +int str2sig(const char *__restrict, int *__restrict); -/* The first argument is really a pid_t, but that's just a typedef'd - int, so let's avoid requiring sys/types only for this declaration. */ -int kill (int, int); +#endif /* __MISC_VISIBLE */ #define SIGHUP 1 #define SIGINT 2 diff --git a/newlib/libc/machine/i386/machine/_fpmath.h b/newlib/libc/machine/i386/machine/_fpmath.h new file mode 100644 index 0000000000..874439c34b --- /dev/null +++ b/newlib/libc/machine/i386/machine/_fpmath.h @@ -0,0 +1,56 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2002, 2003 David Schultz + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +union IEEEl2bits { + long double e; + struct { + unsigned int manl :32; + unsigned int manh :32; + unsigned int exp :15; + unsigned int sign :1; + unsigned int junk :16; + } bits; + struct { + unsigned long long man :64; + unsigned int expsign :16; + unsigned int junk :16; + } xbits; +}; + +#define LDBL_NBIT 0x80000000 +#define mask_nbit_l(u) ((u).bits.manh &= ~LDBL_NBIT) + +#define LDBL_MANH_SIZE 32 +#define LDBL_MANL_SIZE 32 + +#define LDBL_TO_ARRAY32(u, a) do { \ + (a)[0] = (uint32_t)(u).bits.manl; \ + (a)[1] = (uint32_t)(u).bits.manh; \ +} while (0) diff --git a/newlib/libc/machine/m68k/memcpy.S b/newlib/libc/machine/m68k/memcpy.S index 2bb6de16c5..464da95efc 100644 --- a/newlib/libc/machine/m68k/memcpy.S +++ b/newlib/libc/machine/m68k/memcpy.S @@ -15,7 +15,7 @@ #include "m68kasm.h" -#if defined (__mcoldfire__) || defined (__mc68010__) || defined (__mc68020__) || defined (__mc68030__) || defined (__mc68040__) || defined (__mc68060__) +#if defined (__mcoldfire__) || defined (__mc68030__) || defined (__mc68040__) || defined (__mc68060__) # define MISALIGNED_OK 1 #else # define MISALIGNED_OK 0 diff --git a/newlib/libc/machine/mips/setjmp.S b/newlib/libc/machine/mips/setjmp.S index 9a8b31d092..cfc1d517a0 100644 --- a/newlib/libc/machine/mips/setjmp.S +++ b/newlib/libc/machine/mips/setjmp.S @@ -68,7 +68,7 @@ #define FPR_LAYOUT \ and $8, $4, 4; \ - bne $8, $0, 1f; \ + beq $8, $0, 1f; \ GPR_OFFSET ($31, 22); \ addiu $4, $4, -4; \ 1: \ diff --git a/newlib/libc/machine/nvptx/Makefile.inc b/newlib/libc/machine/nvptx/Makefile.inc index c4c3a5cb39..9dc50dc34f 100644 --- a/newlib/libc/machine/nvptx/Makefile.inc +++ b/newlib/libc/machine/nvptx/Makefile.inc @@ -1,4 +1,5 @@ libc_a_SOURCES += \ + %D%/_exit.c \ %D%/calloc.c %D%/callocr.c %D%/malloc.c %D%/mallocr.c %D%/realloc.c %D%/reallocr.c \ %D%/free.c %D%/write.c %D%/assert.c %D%/puts.c %D%/putchar.c %D%/printf.c %D%/abort.c \ - %D%/exit.c %D%/misc.c %D%/clock.c + %D%/misc.c %D%/clock.c diff --git a/newlib/libc/machine/nvptx/exit.c b/newlib/libc/machine/nvptx/_exit.c similarity index 78% rename from newlib/libc/machine/nvptx/exit.c rename to newlib/libc/machine/nvptx/_exit.c index de82bf3847..f2253df663 100644 --- a/newlib/libc/machine/nvptx/exit.c +++ b/newlib/libc/machine/nvptx/_exit.c @@ -13,6 +13,7 @@ * they apply. */ +#include #include /* Sadly, PTX doesn't support weak declarations, only weak @@ -23,10 +24,18 @@ int *__attribute((weak)) __exitval_ptr; void __attribute__((noreturn)) -exit (int status) +_exit (int status) { if (__exitval_ptr) - *__exitval_ptr = status; - for (;;) - asm ("exit;" ::: "memory"); + { + *__exitval_ptr = status; + for (;;) + asm ("exit;" ::: "memory"); + } + else /* offloading */ + { + /* Map to 'abort'; see + '[nvptx] "exit" in offloaded region doesn't terminate process'. */ + abort (); + } } diff --git a/newlib/libc/machine/nvptx/misc.c b/newlib/libc/machine/nvptx/misc.c index ef76eaae11..56e66b9f33 100644 --- a/newlib/libc/machine/nvptx/misc.c +++ b/newlib/libc/machine/nvptx/misc.c @@ -16,6 +16,8 @@ #include #include #include +#include + #undef errno extern int errno; @@ -29,11 +31,27 @@ fstat (int fd, struct stat *buf) { return -1; } +int +gettimeofday (struct timeval *tv, void *tz) { + return -1; +} + +int +getpid (void) { + return 0; +} + int isatty (int fd) { return fd == 1; } +int +kill (int pid, int sig) { + errno = ESRCH; + return -1; +} + off_t lseek(int fd, off_t offset, int whence) { return 0; @@ -49,6 +67,12 @@ read(int fd, void *buf, size_t count) { return 0; } +int +stat (const char *file, struct stat *pstat) { + errno = EACCES; + return -1; +} + void sync (void) { } diff --git a/newlib/libc/machine/riscv/ieeefp.c b/newlib/libc/machine/riscv/ieeefp.c index 60ecacfc29..185da648c8 100644 --- a/newlib/libc/machine/riscv/ieeefp.c +++ b/newlib/libc/machine/riscv/ieeefp.c @@ -11,7 +11,7 @@ #include -#ifdef __riscv_flen +#if defined(__riscv_flen) || defined (__riscv_zfinx) static void fssr(unsigned value) { @@ -85,7 +85,7 @@ fpgetmask(void) fp_rnd fpgetround(void) { -#ifdef __riscv_flen +#if defined(__riscv_flen) || defined (__riscv_zfinx) unsigned rm = (frsr () >> 5) & 0x7; return frm_fp_rnd (rm); #else @@ -96,7 +96,7 @@ fpgetround(void) fp_except fpgetsticky(void) { -#ifdef __riscv_flen +#if defined(__riscv_flen) || defined (__riscv_zfinx) return frm_fp_except(frsr ()); #else return 0; @@ -112,7 +112,7 @@ fpsetmask(fp_except mask) fp_rnd fpsetround(fp_rnd rnd_dir) { -#ifdef __riscv_flen +#if defined(__riscv_flen) || defined (__riscv_zfinx) unsigned fsr = frsr (); unsigned rm = (fsr >> 5) & 0x7; unsigned new_rm; @@ -134,7 +134,7 @@ fpsetround(fp_rnd rnd_dir) fp_except fpsetsticky(fp_except sticky) { -#ifdef __riscv_flen +#if defined(__riscv_flen) || defined (__riscv_zfinx) unsigned fsr = frsr (); fssr (frm_except(sticky) | (fsr & ~0x1f)); return frm_fp_except(fsr); diff --git a/newlib/libc/machine/riscv/machine/_fpmath.h b/newlib/libc/machine/riscv/machine/_fpmath.h new file mode 100644 index 0000000000..fa62ae81cf --- /dev/null +++ b/newlib/libc/machine/riscv/machine/_fpmath.h @@ -0,0 +1,64 @@ +/*- + * Copyright (c) 2002, 2003 David Schultz + * Copyright (2) 2014 The FreeBSD Foundation + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +/* + * Change unsigned int/long used by FreeBSD to fixed width types because + * ilp32 has a different size for unsigned long. --joel (20 Aug 2022) + */ +#include + +union IEEEl2bits { + long double e; + struct { + uint64_t manl :64; + uint64_t manh :48; + uint32_t exp :15; + uint32_t sign :1; + } bits; + /* TODO andrew: Check the packing here */ + struct { + uint64_t manl :64; + uint64_t manh :48; + uint32_t expsign :16; + } xbits; +}; + +#define LDBL_NBIT 0 +#define LDBL_IMPLICIT_NBIT +#define mask_nbit_l(u) ((void)0) + +#define LDBL_MANH_SIZE 48 +#define LDBL_MANL_SIZE 64 + +#define LDBL_TO_ARRAY32(u, a) do { \ + (a)[0] = (uint32_t)(u).bits.manl; \ + (a)[1] = (uint32_t)((u).bits.manl >> 32); \ + (a)[2] = (uint32_t)(u).bits.manh; \ + (a)[3] = (uint32_t)((u).bits.manh >> 32); \ +} while(0) diff --git a/newlib/libc/machine/riscv/sys/fenv.h b/newlib/libc/machine/riscv/sys/fenv.h index 6cbd321f34..98387d2205 100644 --- a/newlib/libc/machine/riscv/sys/fenv.h +++ b/newlib/libc/machine/riscv/sys/fenv.h @@ -14,6 +14,8 @@ #include +#if defined(__riscv_flen) || defined(__riscv_zfinx) + /* Per "The RISC-V Instruction Set Manual: Volume I: User-Level ISA: * Version 2.1", Section 8.2, "Floating-Point Control and Status * Register": @@ -69,6 +71,13 @@ * floating-point unit." */ +#else /* !__riscv_flen */ + +#define FE_ALL_EXCEPT 0x00000000 +#define FE_TONEAREST 0x00000000 + +#endif /* !__riscv_flen */ + typedef size_t fenv_t; typedef size_t fexcept_t; extern const fenv_t fe_dfl_env; diff --git a/newlib/libc/machine/sparc/setjmp.S b/newlib/libc/machine/sparc/setjmp.S index 613df2ba20..d7185be4c8 100644 --- a/newlib/libc/machine/sparc/setjmp.S +++ b/newlib/libc/machine/sparc/setjmp.S @@ -110,6 +110,8 @@ ENTRY(setjmp) ENTRY(_setjmp) + ta 0x03 /* Flush registers, just in case another stack + is used after the setjmp(). */ st %sp, [%o0] /* caller's stack pointer */ st %i7, [%o0+4] /* caller's return pc */ st %fp, [%o0+8] /* store caller's frame pointer */ diff --git a/newlib/libc/machine/w65/lshrhi.S b/newlib/libc/machine/w65/lshrhi.S old mode 100755 new mode 100644 diff --git a/newlib/libc/machine/w65/sdivhi3.S b/newlib/libc/machine/w65/sdivhi3.S old mode 100755 new mode 100644 diff --git a/newlib/libc/machine/w65/smulhi3.S b/newlib/libc/machine/w65/smulhi3.S old mode 100755 new mode 100644 diff --git a/newlib/libc/machine/w65/udivhi3.S b/newlib/libc/machine/w65/udivhi3.S old mode 100755 new mode 100644 diff --git a/newlib/libc/machine/w65/umodhi3.S b/newlib/libc/machine/w65/umodhi3.S old mode 100755 new mode 100644 diff --git a/newlib/libc/machine/x86_64/machine/_fpmath.h b/newlib/libc/machine/x86_64/machine/_fpmath.h new file mode 100644 index 0000000000..8be7b7dbaf --- /dev/null +++ b/newlib/libc/machine/x86_64/machine/_fpmath.h @@ -0,0 +1,57 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2002, 2003 David Schultz + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +union IEEEl2bits { + long double e; + struct { + unsigned int manl :32; + unsigned int manh :32; + unsigned int exp :15; + unsigned int sign :1; + unsigned int junkl :16; + unsigned int junkh :32; + } bits; + struct { + unsigned long man :64; + unsigned int expsign :16; + unsigned long junk :48; + } xbits; +}; + +#define LDBL_NBIT 0x80000000 +#define mask_nbit_l(u) ((u).bits.manh &= ~LDBL_NBIT) + +#define LDBL_MANH_SIZE 32 +#define LDBL_MANL_SIZE 32 + +#define LDBL_TO_ARRAY32(u, a) do { \ + (a)[0] = (uint32_t)(u).bits.manl; \ + (a)[1] = (uint32_t)(u).bits.manh; \ +} while (0) diff --git a/newlib/libc/machine/xtensa/Makefile.inc b/newlib/libc/machine/xtensa/Makefile.inc new file mode 100644 index 0000000000..158c2befe4 --- /dev/null +++ b/newlib/libc/machine/xtensa/Makefile.inc @@ -0,0 +1,8 @@ +libc_a_SOURCES += \ + %D%/memcpy.S %D%/memset.S %D%/setjmp.S %D%/strcmp.S %D%/strcpy.S \ + %D%/strlen.S %D%/strncpy.S + +if XTENSA_ESP32_PSRAM_CACHE_FIX +libc_a_CPPFLAGS_%C% = \ + -DXTENSA_ESP32_PSRAM_CACHE_FIX +endif diff --git a/newlib/libc/machine/xtensa/acinclude.m4 b/newlib/libc/machine/xtensa/acinclude.m4 new file mode 100644 index 0000000000..863d7507df --- /dev/null +++ b/newlib/libc/machine/xtensa/acinclude.m4 @@ -0,0 +1 @@ +AM_CONDITIONAL([XTENSA_ESP32_PSRAM_CACHE_FIX], [echo $CC | grep mfix-esp32-psram-cache-issue >/dev/null 2>&1]) diff --git a/newlib/libc/machine/xtensa/memcpy.S b/newlib/libc/machine/xtensa/memcpy.S new file mode 100644 index 0000000000..77b026a453 --- /dev/null +++ b/newlib/libc/machine/xtensa/memcpy.S @@ -0,0 +1,343 @@ +/* ANSI C standard library function memcpy. + + Copyright (c) 2002-2008 Tensilica Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + +#include "xtensa-asm.h" + +/* If the Xtensa Unaligned Load Exception option is not used, this + code can run a few cycles faster by relying on the low address bits + being ignored. However, if the code is then run with an Xtensa ISS + client that checks for unaligned accesses, it will produce a lot of + warning messages. Set this flag to disable the use of unaligned + accesses and keep the ISS happy. */ + +/* #define UNALIGNED_ADDRESSES_CHECKED XCHAL_UNALIGNED_LOAD_EXCEPTION */ +#define UNALIGNED_ADDRESSES_CHECKED 1 + + +/* void *memcpy (void *dst, const void *src, size_t len) + + The algorithm is as follows: + + If the destination is unaligned, align it by conditionally + copying 1- and/or 2-byte pieces. + + If the source is aligned, copy 16 bytes with a loop, and then finish up + with 8, 4, 2, and 1-byte copies conditional on the length. + + Else (if source is unaligned), do the same, but use SRC to align the + source data. + + This code tries to use fall-through branches for the common + case of aligned source and destination and multiple of 4 (or 8) length. */ + + +/* Byte by byte copy. */ + + .text + .begin schedule + .align XCHAL_INST_FETCH_WIDTH + .literal_position +__memcpy_aux: + + /* Skip bytes to get proper alignment for three-byte loop */ +.skip XCHAL_INST_FETCH_WIDTH - 3 + +.Lbytecopy: +#if XCHAL_HAVE_LOOPS + loopnez a4, 2f +#else + beqz a4, 2f + add a7, a3, a4 // a7 = end address for source +#endif +1: l8ui a6, a3, 0 + addi a3, a3, 1 +#if XTENSA_ESP32_PSRAM_CACHE_FIX + nop + nop + nop +#endif + s8i a6, a5, 0 + addi a5, a5, 1 +#if XTENSA_ESP32_PSRAM_CACHE_FIX + memw +#endif +#if !XCHAL_HAVE_LOOPS + bltu a3, a7, 1b +#endif +2: leaf_return + + +/* Destination is unaligned. */ + + .align 4 +.Ldst1mod2: // dst is only byte aligned + + /* Do short copies byte-by-byte. */ + bltui a4, 7, .Lbytecopy + + /* Copy 1 byte. */ + l8ui a6, a3, 0 + addi a3, a3, 1 + addi a4, a4, -1 + s8i a6, a5, 0 +#if XTENSA_ESP32_PSRAM_CACHE_FIX + memw +#endif + addi a5, a5, 1 + + /* Return to main algorithm if dst is now aligned. */ + bbci.l a5, 1, .Ldstaligned + +.Ldst2mod4: // dst has 16-bit alignment + + /* Do short copies byte-by-byte. */ + bltui a4, 6, .Lbytecopy + + /* Copy 2 bytes. */ + l8ui a6, a3, 0 + l8ui a7, a3, 1 + addi a3, a3, 2 + addi a4, a4, -2 + s8i a6, a5, 0 + s8i a7, a5, 1 +#if XTENSA_ESP32_PSRAM_CACHE_FIX + memw +#endif + addi a5, a5, 2 + + /* dst is now aligned; return to main algorithm. */ + j .Ldstaligned + + + .align 4 + .global memcpy + .type memcpy, @function +memcpy: + leaf_entry sp, 16 + /* a2 = dst, a3 = src, a4 = len */ + + mov a5, a2 // copy dst so that a2 is return value + bbsi.l a2, 0, .Ldst1mod2 + bbsi.l a2, 1, .Ldst2mod4 +.Ldstaligned: + + /* Get number of loop iterations with 16B per iteration. */ + srli a7, a4, 4 + + /* Check if source is aligned. */ + slli a8, a3, 30 + bnez a8, .Lsrcunaligned + + /* Destination and source are word-aligned, use word copy. */ +#if XCHAL_HAVE_LOOPS + loopnez a7, 2f +#else + beqz a7, 2f + slli a8, a7, 4 + add a8, a8, a3 // a8 = end of last 16B source chunk +#endif + +#if XTENSA_ESP32_PSRAM_CACHE_FIX + +1: l32i a6, a3, 0 + l32i a7, a3, 4 + s32i a6, a5, 0 + s32i a7, a5, 4 + memw + l32i a6, a3, 8 + l32i a7, a3, 12 + s32i a6, a5, 8 + s32i a7, a5, 12 + memw + + addi a3, a3, 16 + addi a5, a5, 16 + +#else + +1: l32i a6, a3, 0 + l32i a7, a3, 4 + s32i a6, a5, 0 + l32i a6, a3, 8 + s32i a7, a5, 4 + l32i a7, a3, 12 + s32i a6, a5, 8 + addi a3, a3, 16 + s32i a7, a5, 12 + addi a5, a5, 16 + +#endif + + +#if !XCHAL_HAVE_LOOPS + bltu a3, a8, 1b +#endif + + /* Copy any leftover pieces smaller than 16B. */ +2: bbci.l a4, 3, 3f + + /* Copy 8 bytes. */ + l32i a6, a3, 0 + l32i a7, a3, 4 + addi a3, a3, 8 + s32i a6, a5, 0 + s32i a7, a5, 4 + addi a5, a5, 8 + +3: bbsi.l a4, 2, 4f + bbsi.l a4, 1, 5f + bbsi.l a4, 0, 6f +#if XTENSA_ESP32_PSRAM_CACHE_FIX + memw +#endif + leaf_return + + .align 4 + /* Copy 4 bytes. */ +4: l32i a6, a3, 0 + addi a3, a3, 4 + s32i a6, a5, 0 + addi a5, a5, 4 + bbsi.l a4, 1, 5f + bbsi.l a4, 0, 6f +#if XTENSA_ESP32_PSRAM_CACHE_FIX + memw +#endif + leaf_return + + /* Copy 2 bytes. */ +5: l16ui a6, a3, 0 + addi a3, a3, 2 + s16i a6, a5, 0 + addi a5, a5, 2 + bbsi.l a4, 0, 6f +#if XTENSA_ESP32_PSRAM_CACHE_FIX + memw +#endif + leaf_return + + /* Copy 1 byte. */ +6: l8ui a6, a3, 0 + s8i a6, a5, 0 + +.Ldone: +#if XTENSA_ESP32_PSRAM_CACHE_FIX + memw +#endif + leaf_return + + +/* Destination is aligned; source is unaligned. */ + + .align 4 +.Lsrcunaligned: + /* Avoid loading anything for zero-length copies. */ + beqz a4, .Ldone + + /* Copy 16 bytes per iteration for word-aligned dst and + unaligned src. */ + ssa8 a3 // set shift amount from byte offset +#if UNALIGNED_ADDRESSES_CHECKED + srli a11, a8, 30 // save unalignment offset for below + sub a3, a3, a11 // align a3 +#endif + l32i a6, a3, 0 // load first word +#if XCHAL_HAVE_LOOPS + loopnez a7, 2f +#else + beqz a7, 2f + slli a10, a7, 4 + add a10, a10, a3 // a10 = end of last 16B source chunk +#endif +1: l32i a7, a3, 4 + l32i a8, a3, 8 + src_b a6, a6, a7 + s32i a6, a5, 0 + l32i a9, a3, 12 + src_b a7, a7, a8 + s32i a7, a5, 4 + l32i a6, a3, 16 + src_b a8, a8, a9 + s32i a8, a5, 8 + addi a3, a3, 16 + src_b a9, a9, a6 + s32i a9, a5, 12 + addi a5, a5, 16 +#if !XCHAL_HAVE_LOOPS + bltu a3, a10, 1b +#endif + +2: bbci.l a4, 3, 3f + + /* Copy 8 bytes. */ + l32i a7, a3, 4 + l32i a8, a3, 8 + src_b a6, a6, a7 + s32i a6, a5, 0 + addi a3, a3, 8 + src_b a7, a7, a8 + s32i a7, a5, 4 + addi a5, a5, 8 + mov a6, a8 + +3: bbci.l a4, 2, 4f + + /* Copy 4 bytes. */ + l32i a7, a3, 4 + addi a3, a3, 4 + src_b a6, a6, a7 + s32i a6, a5, 0 + addi a5, a5, 4 + mov a6, a7 +4: +#if UNALIGNED_ADDRESSES_CHECKED + add a3, a3, a11 // readjust a3 with correct misalignment +#endif + bbsi.l a4, 1, 5f + bbsi.l a4, 0, 6f + leaf_return + + /* Copy 2 bytes. */ +5: l8ui a6, a3, 0 + l8ui a7, a3, 1 + addi a3, a3, 2 + s8i a6, a5, 0 + s8i a7, a5, 1 + addi a5, a5, 2 + bbsi.l a4, 0, 6f +#if XTENSA_ESP32_PSRAM_CACHE_FIX + memw +#endif + leaf_return + + /* Copy 1 byte. */ +6: l8ui a6, a3, 0 + s8i a6, a5, 0 +#if XTENSA_ESP32_PSRAM_CACHE_FIX + memw +#endif + leaf_return + + .end schedule + + .size memcpy, . - memcpy diff --git a/newlib/libc/machine/xtensa/memset.S b/newlib/libc/machine/xtensa/memset.S new file mode 100644 index 0000000000..48b5829d73 --- /dev/null +++ b/newlib/libc/machine/xtensa/memset.S @@ -0,0 +1,193 @@ +/* ANSI C standard library function memset. + + Copyright (c) 2001-2008 Tensilica Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + +#include "xtensa-asm.h" + +/* void *memset (void *dst, int c, size_t length) + + The algorithm is as follows: + + Create a word with c in all byte positions. + + If the destination is aligned, set 16B chunks with a loop, and then + finish up with 8B, 4B, 2B, and 1B stores conditional on the length. + + If the destination is unaligned, align it by conditionally + setting 1B and/or 2B and then go to aligned case. + + This code tries to use fall-through branches for the common + case of an aligned destination (except for the branches to + the alignment labels). */ + + +/* Byte-by-byte set. */ + + .text + .begin schedule + .align XCHAL_INST_FETCH_WIDTH + .literal_position +__memset_aux: + + /* Skip bytes to get proper alignment for three-byte loop */ +.skip XCHAL_INST_FETCH_WIDTH - 3 + +.Lbyteset: +#if XCHAL_HAVE_LOOPS + loopnez a4, 2f +#else + beqz a4, 2f + add a6, a5, a4 // a6 = ending address +#endif +1: s8i a3, a5, 0 +#if XTENSA_ESP32_PSRAM_CACHE_FIX + memw +#endif + addi a5, a5, 1 +#if !XCHAL_HAVE_LOOPS + bltu a5, a6, 1b +#endif +2: leaf_return + + +/* Destination is unaligned. */ + + .align 4 + +.Ldst1mod2: // dst is only byte aligned + + /* Do short sizes byte-by-byte. */ + bltui a4, 8, .Lbyteset + + /* Set 1 byte. */ + s8i a3, a5, 0 + addi a5, a5, 1 + addi a4, a4, -1 +#if XTENSA_ESP32_PSRAM_CACHE_FIX + memw +#endif + + /* Now retest if dst is aligned. */ + _bbci.l a5, 1, .Ldstaligned + +.Ldst2mod4: // dst has 16-bit alignment + + /* Do short sizes byte-by-byte. */ + bltui a4, 8, .Lbyteset + + /* Set 2 bytes. */ + s16i a3, a5, 0 + addi a5, a5, 2 + addi a4, a4, -2 +#if XTENSA_ESP32_PSRAM_CACHE_FIX + memw +#endif + + /* dst is now aligned; return to main algorithm */ + j .Ldstaligned + + + .align 4 + .global memset + .type memset, @function +memset: + leaf_entry sp, 16 + /* a2 = dst, a3 = c, a4 = length */ + + /* Duplicate character into all bytes of word. */ + extui a3, a3, 0, 8 + slli a7, a3, 8 + or a3, a3, a7 + slli a7, a3, 16 + or a3, a3, a7 + + mov a5, a2 // copy dst so that a2 is return value + + /* Check if dst is unaligned. */ + _bbsi.l a2, 0, .Ldst1mod2 + _bbsi.l a2, 1, .Ldst2mod4 +.Ldstaligned: + + /* Get number of loop iterations with 16B per iteration. */ + srli a7, a4, 4 + +#if XTENSA_ESP32_PSRAM_CACHE_FIX + //do not do this if we have less than one iteration to do + beqz a7, 2f + //this seems to work to prefetch the cache line + s32i a3, a5, 0 + nop +#endif + + /* Destination is word-aligned. */ +#if XCHAL_HAVE_LOOPS + loopnez a7, 2f +#else + beqz a7, 2f + slli a6, a7, 4 + add a6, a6, a5 // a6 = end of last 16B chunk +#endif + /* Set 16 bytes per iteration. */ +1: s32i a3, a5, 0 + s32i a3, a5, 4 + s32i a3, a5, 8 + s32i a3, a5, 12 + addi a5, a5, 16 +#if !XCHAL_HAVE_LOOPS + bltu a5, a6, 1b +#endif + + /* Set any leftover pieces smaller than 16B. */ +2: bbci.l a4, 3, 3f + + /* Set 8 bytes. */ + s32i a3, a5, 0 + s32i a3, a5, 4 + addi a5, a5, 8 + +3: bbci.l a4, 2, 4f + + /* Set 4 bytes. */ + s32i a3, a5, 0 + addi a5, a5, 4 + +4: bbci.l a4, 1, 5f + + /* Set 2 bytes. */ + s16i a3, a5, 0 + addi a5, a5, 2 +#if XTENSA_ESP32_PSRAM_CACHE_FIX + memw +#endif + +5: bbci.l a4, 0, 6f + + /* Set 1 byte. */ + s8i a3, a5, 0 +#if XTENSA_ESP32_PSRAM_CACHE_FIX + memw +#endif +6: leaf_return + + .end schedule + + .size memset, . - memset diff --git a/newlib/libc/machine/xtensa/setjmp.S b/newlib/libc/machine/xtensa/setjmp.S new file mode 100644 index 0000000000..c32d443f2c --- /dev/null +++ b/newlib/libc/machine/xtensa/setjmp.S @@ -0,0 +1,252 @@ +/* setjmp/longjmp functions for Xtensa. + + Copyright (c) 2001-2006 by Tensilica Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + +/* Windowed ABI: + + This implementation relies heavily on the Xtensa register window + mechanism. Setjmp flushes all the windows except its own to the + stack and then copies registers from the save areas on the stack + into the jmp_buf structure, along with the return address of the call + to setjmp. Longjmp invalidates all the windows except its own, and + then sets things up so that it will return to the right place, + using a window underflow to automatically restore the registers. + + Note that it would probably be sufficient to only copy the + registers from setjmp's caller into jmp_buf. However, we also copy + the save area located at the stack pointer of setjmp's caller. + This save area will typically remain intact until the longjmp call. + The one exception is when there is an intervening alloca in + setjmp's caller. This is certainly an unusual situation and is + likely to cause problems in any case (the storage allocated on the + stack cannot be safely accessed following the longjmp). As bad as + it is, on most systems this situation would not necessarily lead to + a catastrophic failure. If we did not preserve the extra save area + on Xtensa, however, it would. When setjmp's caller returns after a + longjmp, there will be a window underflow; an invalid return + address or stack pointer in the save area will almost certainly + lead to a crash. Keeping a copy of the extra save area in the + jmp_buf avoids this with only a small additional cost. If setjmp + and longjmp are ever time-critical, this could be removed. + + + Call0 ABI: + + Much like other ABIs, this version just saves the necessary registers + to the stack and restores them later. Much less needs to be done. */ + +#include "xtensa-asm.h" + +#define SYS_nop 0 + + +#if XCHAL_HAVE_WINDOWED && !__XTENSA_CALL0_ABI__ + +/* int setjmp (jmp_buf env) */ + + .text + .align 4 + .literal_position + .global setjmp + .type setjmp, @function +setjmp: + entry sp, 16 + + /* Flush registers. */ + mov a4, a2 // save a2 (jmp_buf) + movi a2, SYS_nop + syscall + mov a2, a4 // restore a2 + + /* Copy the register save area at (sp - 16). */ + addi a5, a1, -16 + l32i a3, a5, 0 + l32i a4, a5, 4 + s32i a3, a2, 0 + s32i a4, a2, 4 + l32i a3, a5, 8 + l32i a4, a5, 12 + s32i a3, a2, 8 + s32i a4, a2, 12 + + /* Copy 0-8 words from the register overflow area. */ + extui a3, a0, 30, 2 + blti a3, 2, .Lendsj + l32i a7, a1, 4 + slli a4, a3, 4 + sub a5, a7, a4 + addi a6, a2, 16 + addi a7, a7, -16 // a7 = end of register overflow area +.Lsjloop: + l32i a3, a5, 0 + l32i a4, a5, 4 + s32i a3, a6, 0 + s32i a4, a6, 4 + l32i a3, a5, 8 + l32i a4, a5, 12 + s32i a3, a6, 8 + s32i a4, a6, 12 + addi a5, a5, 16 + addi a6, a6, 16 + blt a5, a7, .Lsjloop +.Lendsj: + + /* Copy the register save area at sp. */ + l32i a3, a1, 0 + l32i a4, a1, 4 + s32i a3, a2, 48 + s32i a4, a2, 52 + l32i a3, a1, 8 + l32i a4, a1, 12 + s32i a3, a2, 56 + s32i a4, a2, 60 + + /* Save the return address, including the window size bits. */ + s32i a0, a2, 64 + + movi a2, 0 + retw + .size setjmp, . - setjmp + + +/* void longjmp (jmp_buf env, int val) */ + + .align 4 + .literal_position + .global longjmp + .type longjmp, @function +longjmp: + entry sp, 16 + /* a2 == &env, a3 == val */ + + /* Invalidate all but the current window; + set WindowStart to (1 << WindowBase). */ + rsr a5, WINDOWBASE + movi a4, 1 + ssl a5 + sll a4, a4 + wsr a4, WINDOWSTART + rsync + + /* Return to the return address of the setjmp, using the + window size bits from the setjmp call so that the caller + will be able to find the return value that we put in a2. */ + + l32i a0, a2, 64 + + /* Copy the first 4 saved registers from jmp_buf into the save area + at the current sp so that the values will be restored to registers + when longjmp returns. */ + + addi a7, a1, -16 + l32i a4, a2, 0 + l32i a5, a2, 4 + s32i a4, a7, 0 + s32i a5, a7, 4 + l32i a4, a2, 8 + l32i a5, a2, 12 + s32i a4, a7, 8 + s32i a5, a7, 12 + + /* Copy the remaining 0-8 saved registers. */ + extui a7, a0, 30, 2 + blti a7, 2, .Lendlj + l32i a8, a2, 52 + slli a4, a7, 4 + sub a6, a8, a4 + addi a5, a2, 16 + addi a8, a8, -16 // a8 = end of register overflow area +.Lljloop: + l32i a7, a5, 0 + l32i a4, a5, 4 + s32i a7, a6, 0 + s32i a4, a6, 4 + l32i a7, a5, 8 + l32i a4, a5, 12 + s32i a7, a6, 8 + s32i a4, a6, 12 + addi a5, a5, 16 + addi a6, a6, 16 + blt a6, a8, .Lljloop +.Lendlj: + + /* The 4 words saved from the register save area at the target's + sp are copied back to the target procedure's save area. The + only point of this is to prevent a catastrophic failure in + case the contents were moved by an alloca after calling + setjmp. This is a bit paranoid but it doesn't cost much. */ + + l32i a7, a2, 4 // load the target stack pointer + addi a7, a7, -16 // find the destination save area + l32i a4, a2, 48 + l32i a5, a2, 52 + s32i a4, a7, 0 + s32i a5, a7, 4 + l32i a4, a2, 56 + l32i a5, a2, 60 + s32i a4, a7, 8 + s32i a5, a7, 12 + + /* Return val ? val : 1. */ + movi a2, 1 + movnez a2, a3, a3 + + retw + .size longjmp, . - longjmp + +#else /* CALL0 ABI */ + + .text + .align 4 + .literal_position + .global setjmp + .type setjmp, @function +setjmp: + s32i a0, a2, 0 + s32i a1, a2, 4 + s32i a12, a2, 8 + s32i a13, a2, 12 + s32i a14, a2, 16 + s32i a15, a2, 20 + movi a2, 0 + ret + .size setjmp, . - setjmp + + .align 4 + .literal_position + .global longjmp + .type longjmp, @function +longjmp: + l32i a0, a2, 0 + l32i a12, a2, 8 + l32i a13, a2, 12 + l32i a14, a2, 16 + l32i a15, a2, 20 + l32i a1, a2, 4 + /* Return val ? val : 1. */ + movi a2, 1 + movnez a2, a3, a3 + + ret + .size longjmp, .-longjmp + +#endif /* CALL0 ABI */ diff --git a/newlib/libc/machine/xtensa/strcmp.S b/newlib/libc/machine/xtensa/strcmp.S new file mode 100644 index 0000000000..49cb80581f --- /dev/null +++ b/newlib/libc/machine/xtensa/strcmp.S @@ -0,0 +1,353 @@ +/* ANSI C standard library function strcmp. + + Copyright (c) 2001-20012 Tensilica Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + +#include "xtensa-asm.h" + +#define MASK4 0x40404040 + + +#if XCHAL_HAVE_L32R + .literal .Lmask0, MASK0 + .literal .Lmask1, MASK1 + .literal .Lmask2, MASK2 + .literal .Lmask3, MASK3 + .literal .Lmask4, MASK4 +#endif /* XCHAL_HAVE_L32R */ + + .text + .align 4 + .literal_position + .global strcmp + .type strcmp, @function +strcmp: + + leaf_entry sp, 16 + /* a2 = s1, a3 = s2 */ + + l8ui a8, a2, 0 // byte 0 from s1 + l8ui a9, a3, 0 // byte 0 from s2 + movi a10, 3 // mask + bne a8, a9, .Lretdiff + + or a11, a2, a3 + bnone a11, a10, .Laligned + + xor a11, a2, a3 // compare low two bits of s1 and s2 + bany a11, a10, .Lunaligned // if they have different alignment + + /* s1/s2 are not word-aligned. */ + addi a2, a2, 1 // advance s1 + beqz a8, .Leq // bytes equal, if zero, strings are equal + addi a3, a3, 1 // advance s2 + bnone a2, a10, .Laligned // if s1/s2 now aligned + l8ui a8, a2, 0 // byte 1 from s1 + l8ui a9, a3, 0 // byte 1 from s2 + addi a2, a2, 1 // advance s1 + bne a8, a9, .Lretdiff // if different, return difference + beqz a8, .Leq // bytes equal, if zero, strings are equal + addi a3, a3, 1 // advance s2 + bnone a2, a10, .Laligned // if s1/s2 now aligned + l8ui a8, a2, 0 // byte 2 from s1 + l8ui a9, a3, 0 // byte 2 from s2 + addi a2, a2, 1 // advance s1 + bne a8, a9, .Lretdiff // if different, return difference + beqz a8, .Leq // bytes equal, if zero, strings are equal + addi a3, a3, 1 // advance s2 + j .Laligned + +/* s1 and s2 have different alignment. + + If the zero-overhead loop option is available, use an (almost) + infinite zero-overhead loop with conditional exits so we only pay + for taken branches when exiting the loop. + + Note: It is important for this unaligned case to come before the + code for aligned strings, because otherwise some of the branches + above cannot reach and have to be transformed to branches around + jumps. The unaligned code is smaller and the branches can reach + over it. */ + + .align 4 +#if XCHAL_HAVE_LOOPS +#if XCHAL_HAVE_DENSITY + /* (2 mod 4) alignment for loop instruction */ +#else + /* (1 mod 4) alignment for loop instruction */ + .byte 0 + .byte 0 +#endif +#endif +.Lunaligned: +#if XCHAL_HAVE_LOOPS +#if XCHAL_HAVE_DENSITY + _movi.n a8, 0 // set up for the maximum loop count +#else + _movi a8, 0 // set up for the maximum loop count +#endif + loop a8, .Lretdiff // loop forever (almost anyway) +#endif +.Lnextbyte: + l8ui a8, a2, 0 + l8ui a9, a3, 0 + addi a2, a2, 1 + bne a8, a9, .Lretdiff + addi a3, a3, 1 +#if XCHAL_HAVE_LOOPS + beqz a8, .Lretdiff +#else + bnez a8, .Lnextbyte +#endif +.Lretdiff: + sub a2, a8, a9 + leaf_return + +/* s1 is word-aligned; s2 is word-aligned. + + If the zero-overhead loop option is available, use an (almost) + infinite zero-overhead loop with conditional exits so we only pay + for taken branches when exiting the loop. */ + +/* New algorithm, relying on the fact that all normal ASCII is between + 32 and 127. + + Rather than check all bytes for zero: + Take one word (4 bytes). Call it w1. + Shift w1 left by one into w1'. + Or w1 and w1'. For all normal ASCII bit 6 will be 1; for zero it won't. + Check that all 4 bit 6's (one for each byte) are one: + If they are, we are definitely not done. + If they are not, we are probably done, but need to check for zero. */ + + .align 4 +#if XCHAL_HAVE_LOOPS +#if !XCHAL_HAVE_L32R + /* (2 mod 4) alignment for loop instruction */ + .byte 0 + .byte 0 +#endif +.Laligned: +#if XCHAL_HAVE_L32R + l32r a4, .Lmask0 // mask for byte 0 + l32r a7, .Lmask4 +#else + const16 a4, MASK0@h + const16 a4, MASK0@l + const16 a7, MASK4@h + const16 a7, MASK4@l +#endif + /* Loop forever */ +1: + loop a0, .Laligned_done + + /* First unrolled loop body. */ + l32i a8, a2, 0 // get word from s1 + l32i a9, a3, 0 // get word from s2 + slli a5, a8, 1 + bne a8, a9, .Lwne2 + or a9, a8, a5 + bnall a9, a7, .Lprobeq + + /* Second unrolled loop body. */ + l32i a8, a2, 4 // get word from s1+4 + l32i a9, a3, 4 // get word from s2+4 + slli a5, a8, 1 + bne a8, a9, .Lwne2 + or a9, a8, a5 + bnall a9, a7, .Lprobeq2 + + addi a2, a2, 8 // advance s1 pointer + addi a3, a3, 8 // advance s2 pointer +.Laligned_done: + j 1b + +.Lprobeq2: + /* Adjust pointers to account for the loop unrolling. */ + addi a2, a2, 4 + addi a3, a3, 4 + +#else /* !XCHAL_HAVE_LOOPS */ + +.Laligned: + movi a4, MASK0 // mask for byte 0 + movi a7, MASK4 + j .Lfirstword +.Lnextword: + addi a2, a2, 4 // advance s1 pointer + addi a3, a3, 4 // advance s2 pointer +.Lfirstword: + l32i a8, a2, 0 // get word from s1 + l32i a9, a3, 0 // get word from s2 + slli a5, a8, 1 + bne a8, a9, .Lwne2 + or a9, a8, a5 + ball a9, a7, .Lnextword +#endif /* !XCHAL_HAVE_LOOPS */ + + /* align (0 mod 4) */ +.Lprobeq: + /* Words are probably equal, but check for sure. + If not, loop over the rest of string using normal algorithm. */ + + bnone a8, a4, .Leq // if byte 0 is zero +#if XCHAL_HAVE_L32R + l32r a5, .Lmask1 // mask for byte 1 + l32r a6, .Lmask2 // mask for byte 2 + bnone a8, a5, .Leq // if byte 1 is zero + l32r a7, .Lmask3 // mask for byte 3 + bnone a8, a6, .Leq // if byte 2 is zero + bnone a8, a7, .Leq // if byte 3 is zero + /* align (1 mod 4) */ +#else + const16 a5, MASK1@h // mask for byte 1 + const16 a5, MASK1@l + bnone a8, a5, .Leq // if byte 1 is zero + const16 a6, MASK2@h // mask for byte 2 + const16 a6, MASK2@l + bnone a8, a6, .Leq // if byte 2 is zero + const16 a7, MASK3@h // mask for byte 3 + const16 a7, MASK3@l + bnone a8, a7, .Leq // if byte 3 is zero + /* align (2 mod 4) */ +#endif /* XCHAL_HAVE_L32R */ +#if XCHAL_HAVE_DENSITY + addi.n a2, a2, 4 // advance s1 pointer + addi.n a3, a3, 4 // advance s2 pointer + /* align (1 mod 4) or (2 mod 4) */ +#else + addi a2, a2, 4 // advance s1 pointer + addi a3, a3, 4 // advance s2 pointer + or a1, a1, a1 // nop +#if !XCHAL_HAVE_L32R + or a1, a1, a1 // nop +#endif + /* align (2 mod 4) */ +#endif /* XCHAL_HAVE_DENSITY */ +#if XCHAL_HAVE_LOOPS +1: + loop a0, .Leq // loop forever (a4 is bigger than max iters) + l32i a8, a2, 0 // get word from s1 + l32i a9, a3, 0 // get word from s2 + addi a2, a2, 4 // advance s1 pointer + bne a8, a9, .Lwne + bnone a8, a4, .Leq // if byte 0 is zero + bnone a8, a5, .Leq // if byte 1 is zero + bnone a8, a6, .Leq // if byte 2 is zero + bnone a8, a7, .Leq // if byte 3 is zero + addi a3, a3, 4 // advance s2 pointer + j 1b +#else /* !XCHAL_HAVE_LOOPS */ + + j .Lfirstword2 +.Lnextword2: + addi a3, a3, 4 // advance s2 pointer +.Lfirstword2: + l32i a8, a2, 0 // get word from s1 + l32i a9, a3, 0 // get word from s2 + addi a2, a2, 4 // advance s1 pointer + bne a8, a9, .Lwne + bnone a8, a4, .Leq // if byte 0 is zero + bnone a8, a5, .Leq // if byte 1 is zero + bnone a8, a6, .Leq // if byte 2 is zero + bany a8, a7, .Lnextword2 // if byte 3 is zero +#endif /* !XCHAL_HAVE_LOOPS */ + + /* Words are equal; some byte is zero. */ +.Leq: movi a2, 0 // return equal + leaf_return + +.Lwne2: /* Words are not equal. On big-endian processors, if none of the + bytes are zero, the return value can be determined by a simple + comparison. */ +#ifdef __XTENSA_EB__ + or a10, a8, a5 + bnall a10, a7, .Lsomezero + bgeu a8, a9, .Lposreturn + movi a2, -1 + leaf_return +.Lposreturn: + movi a2, 1 + leaf_return +.Lsomezero: // There is probably some zero byte. +#endif /* __XTENSA_EB__ */ +.Lwne: /* Words are not equal. */ + xor a2, a8, a9 // get word with nonzero in byte that differs + bany a2, a4, .Ldiff0 // if byte 0 differs + movi a5, MASK1 // mask for byte 1 + bnone a8, a4, .Leq // if byte 0 is zero + bany a2, a5, .Ldiff1 // if byte 1 differs + movi a6, MASK2 // mask for byte 2 + bnone a8, a5, .Leq // if byte 1 is zero + bany a2, a6, .Ldiff2 // if byte 2 differs + bnone a8, a6, .Leq // if byte 2 is zero +#ifdef __XTENSA_EB__ +.Ldiff3: +.Ldiff2: +.Ldiff1: + /* Byte 0 is equal (at least) and there is a difference before a zero + byte. Just subtract words to get the return value. + The high order equal bytes cancel, leaving room for the sign. */ + sub a2, a8, a9 + leaf_return + +.Ldiff0: + /* Need to make room for the sign, so can't subtract whole words. */ + extui a10, a8, 24, 8 + extui a11, a9, 24, 8 + sub a2, a10, a11 + leaf_return + +#else /* !__XTENSA_EB__ */ + /* Little-endian is a little more difficult because can't subtract + whole words. */ +.Ldiff3: + /* Bytes 0-2 are equal; byte 3 is different. + For little-endian need to have a sign bit for the difference. */ + extui a10, a8, 24, 8 + extui a11, a9, 24, 8 + sub a2, a10, a11 + leaf_return + +.Ldiff0: + /* Byte 0 is different. */ + extui a10, a8, 0, 8 + extui a11, a9, 0, 8 + sub a2, a10, a11 + leaf_return + +.Ldiff1: + /* Byte 0 is equal; byte 1 is different. */ + extui a10, a8, 8, 8 + extui a11, a9, 8, 8 + sub a2, a10, a11 + leaf_return + +.Ldiff2: + /* Bytes 0-1 are equal; byte 2 is different. */ + extui a10, a8, 16, 8 + extui a11, a9, 16, 8 + sub a2, a10, a11 + leaf_return + +#endif /* !__XTENSA_EB */ + + .size strcmp, . - strcmp diff --git a/newlib/libc/machine/xtensa/strcpy.S b/newlib/libc/machine/xtensa/strcpy.S new file mode 100644 index 0000000000..9ab624b73f --- /dev/null +++ b/newlib/libc/machine/xtensa/strcpy.S @@ -0,0 +1,274 @@ +/* ANSI C standard library function strcpy. + + Copyright (c) 2001-2008 Tensilica Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + +#include "xtensa-asm.h" + + .text + .begin schedule + .align 4 + .literal_position + .global strcpy + .type strcpy, @function +strcpy: + leaf_entry sp, 16 + /* a2 = dst, a3 = src */ + + mov a10, a2 // leave dst in return value register + movi a4, MASK0 + movi a5, MASK1 + movi a6, MASK2 + movi a7, MASK3 + bbsi.l a3, 0, .Lsrc1mod2 + bbsi.l a3, 1, .Lsrc2mod4 +.Lsrcaligned: + + /* Check if the destination is aligned. */ + movi a8, 3 + bnone a10, a8, .Laligned + + j .Ldstunaligned + +.Lsrc1mod2: // src address is odd + l8ui a8, a3, 0 // get byte 0 + addi a3, a3, 1 // advance src pointer + s8i a8, a10, 0 // store byte 0 +#if XTENSA_ESP32_PSRAM_CACHE_FIX + memw +#endif + beqz a8, 1f // if byte 0 is zero + addi a10, a10, 1 // advance dst pointer + bbci.l a3, 1, .Lsrcaligned // if src is now word-aligned + +.Lsrc2mod4: // src address is 2 mod 4 + l8ui a8, a3, 0 // get byte 0 + /* 1-cycle interlock */ + s8i a8, a10, 0 // store byte 0 +#if XTENSA_ESP32_PSRAM_CACHE_FIX + memw +#endif + beqz a8, 1f // if byte 0 is zero + l8ui a8, a3, 1 // get byte 0 + addi a3, a3, 2 // advance src pointer + s8i a8, a10, 1 // store byte 0 + addi a10, a10, 2 // advance dst pointer +#if XTENSA_ESP32_PSRAM_CACHE_FIX + memw +#endif + bnez a8, .Lsrcaligned +1: leaf_return + + +/* dst is word-aligned; src is word-aligned. */ + + .align 4 +#if XCHAL_HAVE_LOOPS +#if XCHAL_HAVE_DENSITY + /* (2 mod 4) alignment for loop instruction */ +#else + /* (1 mod 4) alignment for loop instruction */ + .byte 0 + .byte 0 +#endif +.Laligned: +#if XCHAL_HAVE_DENSITY + _movi.n a8, 0 // set up for the maximum loop count +#else + _movi a8, 0 // set up for the maximum loop count +#endif + loop a8, .Lz3 // loop forever (almost anyway) + l32i a8, a3, 0 // get word from src + addi a3, a3, 4 // advance src pointer + bnone a8, a4, .Lz0 // if byte 0 is zero + bnone a8, a5, .Lz1 // if byte 1 is zero + bnone a8, a6, .Lz2 // if byte 2 is zero + s32i a8, a10, 0 // store word to dst +#if XTENSA_ESP32_PSRAM_CACHE_FIX + l32i a8, a10, 0 + s32i a8, a10, 0 +#endif + bnone a8, a7, .Lz3 // if byte 3 is zero + addi a10, a10, 4 // advance dst pointer + +#else /* !XCHAL_HAVE_LOOPS */ + +1: addi a10, a10, 4 // advance dst pointer +.Laligned: + l32i a8, a3, 0 // get word from src + addi a3, a3, 4 // advance src pointer + bnone a8, a4, .Lz0 // if byte 0 is zero + bnone a8, a5, .Lz1 // if byte 1 is zero + bnone a8, a6, .Lz2 // if byte 2 is zero + s32i a8, a10, 0 // store word to dst +#if XTENSA_ESP32_PSRAM_CACHE_FIX + l32i a8, a10, 0 + s32i a8, a10, 0 +#endif + + bany a8, a7, 1b // if byte 3 is zero +#endif /* !XCHAL_HAVE_LOOPS */ + +.Lz3: /* Byte 3 is zero. */ + leaf_return + +.Lz0: /* Byte 0 is zero. */ +#ifdef __XTENSA_EB__ + movi a8, 0 +#endif + s8i a8, a10, 0 +#if XTENSA_ESP32_PSRAM_CACHE_FIX + memw +#endif + leaf_return + +.Lz1: /* Byte 1 is zero. */ +#ifdef __XTENSA_EB__ + extui a8, a8, 16, 16 +#endif + s16i a8, a10, 0 +#if XTENSA_ESP32_PSRAM_CACHE_FIX + memw +#endif + leaf_return + +.Lz2: /* Byte 2 is zero. */ +#ifdef __XTENSA_EB__ + extui a8, a8, 16, 16 +#endif + s16i a8, a10, 0 + movi a8, 0 + s8i a8, a10, 2 +#if XTENSA_ESP32_PSRAM_CACHE_FIX + memw +#endif + leaf_return + +#if 1 +/* For now just use byte copy loop for the unaligned destination case. */ + + .align 4 +#if XCHAL_HAVE_LOOPS +#if XCHAL_HAVE_DENSITY + /* (2 mod 4) alignment for loop instruction */ +#else + /* (1 mod 4) alignment for loop instruction */ + .byte 0 + .byte 0 +#endif +#endif +.Ldstunaligned: + +#if XCHAL_HAVE_LOOPS +#if XCHAL_HAVE_DENSITY + _movi.n a8, 0 // set up for the maximum loop count +#else + _movi a8, 0 // set up for the maximum loop count +#endif + loop a8, 2f // loop forever (almost anyway) +#endif +1: l8ui a8, a3, 0 + addi a3, a3, 1 + s8i a8, a10, 0 + addi a10, a10, 1 +#if XTENSA_ESP32_PSRAM_CACHE_FIX + memw +#endif +#if XCHAL_HAVE_LOOPS + beqz a8, 2f +#else + bnez a8, 1b +#endif +2: leaf_return + +#else /* 0 */ + +/* This code is not functional yet. */ + +.Ldstunaligned: + l32i a9, a2, 0 // load word from dst +#ifdef __XTENSA_EB__ + ssa8b a9 // rotate by dst alignment so that + src a9, a9, a9 // shift in loop will put back in place + ssa8l a9 // shift left by byte*8 +#else + ssa8l a9 // rotate by dst alignment so that + src a9, a9, a9 // shift in loop will put back in place + ssa8b a9 // shift left by 32-byte*8 +#endif + +/* dst is word-aligned; src is unaligned. */ + +.Ldstunalignedloop: + l32i a8, a3, 0 // get word from src + /* 1-cycle interlock */ + bnone a8, a4, .Lu0 // if byte 0 is zero + bnone a8, a5, .Lu1 // if byte 1 is zero + bnone a8, a6, .Lu2 // if byte 2 is zero + src a9, a8, a9 // combine last word and this word + s32i a9, a10, 0 // store word to dst + bnone a8, a7, .Lu3 // if byte 3 is nonzero, iterate + l32i a9, a3, 4 // get word from src + addi a3, a3, 8 // advance src pointer + bnone a9, a4, .Lu4 // if byte 0 is zero + bnone a9, a5, .Lu5 // if byte 1 is zero + bnone a9, a6, .Lu6 // if byte 2 is zero + src a8, a9, a8 // combine last word and this word + s32i a8, a10, 4 // store word to dst + addi a10, a10, 8 // advance dst pointer + bany a8, a7, .Ldstunalignedloop // if byte 3 is nonzero, iterate + + /* Byte 7 is zero. */ +.Lu7: leaf_return + +.Lu0: /* Byte 0 is zero. */ +#ifdef __XTENSA_EB__ + movi a8, 0 +#endif + s8i a8, a10, 0 +#if XTENSA_ESP32_PSRAM_CACHE_FIX + memw +#endif + leaf_return + +.Lu1: /* Byte 1 is zero. */ +#ifdef __XTENSA_EB__ + extui a8, a8, 16, 16 +#endif + s16i a8, a10, 0 +#if XTENSA_ESP32_PSRAM_CACHE_FIX + memw +#endif + leaf_return + +.Lu2: /* Byte 2 is zero. */ + s16i a8, a10, 0 + movi a8, 0 + s8i a8, a10, 2 +#if XTENSA_ESP32_PSRAM_CACHE_FIX + memw +#endif + leaf_return + +#endif /* 0 */ + .end schedule + + .size strcpy, . - strcpy diff --git a/newlib/libc/machine/xtensa/strlen.S b/newlib/libc/machine/xtensa/strlen.S new file mode 100644 index 0000000000..6560a3185d --- /dev/null +++ b/newlib/libc/machine/xtensa/strlen.S @@ -0,0 +1,115 @@ +/* ANSI C standard library function strlen. + + Copyright (c) 2001-2008 Tensilica Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + +#include "xtensa-asm.h" + + .text + .begin schedule + .align 4 + .literal_position + .global strlen + .type strlen, @function +strlen: + leaf_entry sp, 16 + /* a2 = s */ + + addi a3, a2, -4 // because we overincrement at the end + movi a4, MASK0 + movi a5, MASK1 + movi a6, MASK2 + movi a7, MASK3 + bbsi.l a2, 0, .L1mod2 + bbsi.l a2, 1, .L2mod4 + j .Laligned + +.L1mod2: // address is odd + l8ui a8, a3, 4 // get byte 0 + addi a3, a3, 1 // advance string pointer + beqz a8, .Lz3 // if byte 0 is zero + bbci.l a3, 1, .Laligned // if string pointer is now word-aligned + +.L2mod4: // address is 2 mod 4 + addi a3, a3, 2 // advance ptr for aligned access + l32i a8, a3, 0 // get word with first two bytes of string + bnone a8, a6, .Lz2 // if byte 2 (of word, not string) is zero + bany a8, a7, .Laligned // if byte 3 (of word, not string) is nonzero + + /* Byte 3 is zero. */ + addi a3, a3, 3 // point to zero byte + sub a2, a3, a2 // subtract to get length + leaf_return + + +/* String is word-aligned. */ + + .align 4 +#if XCHAL_HAVE_LOOPS +#if XCHAL_HAVE_DENSITY + /* (2 mod 4) alignment for loop instruction */ +#else + /* (1 mod 4) alignment for loop instruction */ + .byte 0 + .byte 0 +#endif +#endif +.Laligned: +#if XCHAL_HAVE_LOOPS +#if XCHAL_HAVE_DENSITY + _movi.n a8, 0 // set up for the maximum loop count +#else + _movi a8, 0 // set up for the maximum loop count +#endif + loop a8, .Lz3 // loop forever (almost anyway) +#endif +1: l32i a8, a3, 4 // get next word of string + addi a3, a3, 4 // advance string pointer + bnone a8, a4, .Lz0 // if byte 0 is zero + bnone a8, a5, .Lz1 // if byte 1 is zero + bnone a8, a6, .Lz2 // if byte 2 is zero +#if XCHAL_HAVE_LOOPS + bnone a8, a7, .Lz3 // if byte 3 is zero +#else + bany a8, a7, 1b // repeat if byte 3 is non-zero +#endif + +.Lz3: /* Byte 3 is zero. */ + addi a3, a3, 3 // point to zero byte + /* Fall through.... */ + +.Lz0: /* Byte 0 is zero. */ + sub a2, a3, a2 // subtract to get length + leaf_return + +.Lz1: /* Byte 1 is zero. */ + addi a3, a3, 1 // point to zero byte + sub a2, a3, a2 // subtract to get length + leaf_return + +.Lz2: /* Byte 2 is zero. */ + addi a3, a3, 2 // point to zero byte + sub a2, a3, a2 // subtract to get length + leaf_return + + .end schedule + + .size strlen, . - strlen diff --git a/newlib/libc/machine/xtensa/strncpy.S b/newlib/libc/machine/xtensa/strncpy.S new file mode 100644 index 0000000000..faa7c7b256 --- /dev/null +++ b/newlib/libc/machine/xtensa/strncpy.S @@ -0,0 +1,274 @@ +/* ANSI C standard library function strncpy. + + Copyright (c) 2001-2008 Tensilica Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + +#include "xtensa-asm.h" + + .text +.begin schedule + .align 4 + .literal_position +__strncpy_aux: + +.Lsrc1mod2: // src address is odd + l8ui a8, a3, 0 // get byte 0 + addi a3, a3, 1 // advance src pointer + s8i a8, a10, 0 // store byte 0 + addi a4, a4, -1 // decrement n + beqz a4, .Lret // if n is zero + addi a10, a10, 1 // advance dst pointer + beqz a8, .Lfill // if byte 0 is zero + bbci.l a3, 1, .Lsrcaligned // if src is now word-aligned + +.Lsrc2mod4: // src address is 2 mod 4 + l8ui a8, a3, 0 // get byte 0 + addi a4, a4, -1 // decrement n + s8i a8, a10, 0 // store byte 0 + beqz a4, .Lret // if n is zero + addi a10, a10, 1 // advance dst pointer + beqz a8, .Lfill // if byte 0 is zero + l8ui a8, a3, 1 // get byte 0 + addi a3, a3, 2 // advance src pointer + s8i a8, a10, 0 // store byte 0 + addi a4, a4, -1 // decrement n + beqz a4, .Lret // if n is zero + addi a10, a10, 1 // advance dst pointer + bnez a8, .Lsrcaligned + j .Lfill + +.Lret: +#if XTENSA_ESP32_PSRAM_CACHE_FIX + memw +#endif + leaf_return + + + .align 4 + .global strncpy + .type strncpy, @function +strncpy: + leaf_entry sp, 16 + /* a2 = dst, a3 = src */ + + mov a10, a2 // leave dst in return value register + beqz a4, .Lret // if n is zero + + movi a11, MASK0 + movi a5, MASK1 + movi a6, MASK2 + movi a7, MASK3 + bbsi.l a3, 0, .Lsrc1mod2 + bbsi.l a3, 1, .Lsrc2mod4 +.Lsrcaligned: + + /* Check if the destination is aligned. */ + movi a8, 3 + bnone a10, a8, .Laligned + + j .Ldstunaligned + + +/* Fill the dst with zeros -- n is at least 1. */ + +.Lfill: + movi a9, 0 + bbsi.l a10, 0, .Lfill1mod2 + bbsi.l a10, 1, .Lfill2mod4 +.Lfillaligned: + blti a4, 4, .Lfillcleanup + + /* Loop filling complete words with zero. */ +#if XCHAL_HAVE_LOOPS + + srai a8, a4, 2 + loop a8, 1f + s32i a9, a10, 0 + addi a10, a10, 4 + +1: slli a8, a8, 2 + sub a4, a4, a8 + +#else /* !XCHAL_HAVE_LOOPS */ + +1: s32i a9, a10, 0 + addi a10, a10, 4 + addi a4, a4, -4 + bgei a4, 4, 1b + +#endif /* !XCHAL_HAVE_LOOPS */ + + beqz a4, 2f + +.Lfillcleanup: + /* Fill leftover (1 to 3) bytes with zero. */ + s8i a9, a10, 0 // store byte 0 + addi a4, a4, -1 // decrement n + addi a10, a10, 1 + bnez a4, .Lfillcleanup + +2: +#if XTENSA_ESP32_PSRAM_CACHE_FIX + memw +#endif + leaf_return + +.Lfill1mod2: // dst address is odd + s8i a9, a10, 0 // store byte 0 + addi a4, a4, -1 // decrement n + beqz a4, 2b // if n is zero + addi a10, a10, 1 // advance dst pointer + bbci.l a10, 1, .Lfillaligned // if dst is now word-aligned + +.Lfill2mod4: // dst address is 2 mod 4 + s8i a9, a10, 0 // store byte 0 + addi a4, a4, -1 // decrement n + beqz a4, 2b // if n is zero + s8i a9, a10, 1 // store byte 1 + addi a4, a4, -1 // decrement n + beqz a4, 2b // if n is zero + addi a10, a10, 2 // advance dst pointer + j .Lfillaligned + + +/* dst is word-aligned; src is word-aligned; n is at least 1. */ + + .align 4 +#if XCHAL_HAVE_LOOPS +#if XCHAL_HAVE_DENSITY + /* (2 mod 4) alignment for loop instruction */ +#else + /* (1 mod 4) alignment for loop instruction */ + .byte 0 + .byte 0 +#endif +#endif +.Laligned: +#if XCHAL_HAVE_LOOPS +#if XCHAL_HAVE_DENSITY + _movi.n a8, 0 // set up for the maximum loop count +#else + _movi a8, 0 // set up for the maximum loop count +#endif + loop a8, 1f // loop forever (almost anyway) + blti a4, 5, .Ldstunaligned // n is near limit; do one at a time + l32i a8, a3, 0 // get word from src + addi a3, a3, 4 // advance src pointer + bnone a8, a11, .Lz0 // if byte 0 is zero + bnone a8, a5, .Lz1 // if byte 1 is zero + bnone a8, a6, .Lz2 // if byte 2 is zero + s32i a8, a10, 0 // store word to dst + addi a4, a4, -4 // decrement n + addi a10, a10, 4 // advance dst pointer + bnone a8, a7, .Lfill // if byte 3 is zero +1: + +#else /* !XCHAL_HAVE_LOOPS */ + +1: blti a4, 5, .Ldstunaligned // n is near limit; do one at a time + l32i a8, a3, 0 // get word from src + addi a3, a3, 4 // advance src pointer + bnone a8, a11, .Lz0 // if byte 0 is zero + bnone a8, a5, .Lz1 // if byte 1 is zero + bnone a8, a6, .Lz2 // if byte 2 is zero + s32i a8, a10, 0 // store word to dst + addi a4, a4, -4 // decrement n + addi a10, a10, 4 // advance dst pointer + bany a8, a7, 1b // no zeroes +#endif /* !XCHAL_HAVE_LOOPS */ + + j .Lfill + +.Lz0: /* Byte 0 is zero. */ +#ifdef __XTENSA_EB__ + movi a8, 0 +#endif + s8i a8, a10, 0 + addi a4, a4, -1 // decrement n + addi a10, a10, 1 // advance dst pointer + j .Lfill + +.Lz1: /* Byte 1 is zero. */ +#ifdef __XTENSA_EB__ + extui a8, a8, 16, 16 +#endif + s16i a8, a10, 0 + addi a4, a4, -2 // decrement n + addi a10, a10, 2 // advance dst pointer + j .Lfill + +.Lz2: /* Byte 2 is zero. */ +#ifdef __XTENSA_EB__ + extui a8, a8, 16, 16 +#endif + s16i a8, a10, 0 + movi a8, 0 + s8i a8, a10, 2 + addi a4, a4, -3 // decrement n + addi a10, a10, 3 // advance dst pointer + j .Lfill + + .align 4 +#if XCHAL_HAVE_LOOPS +#if XCHAL_HAVE_DENSITY + /* (2 mod 4) alignment for loop instruction */ +#else + /* (1 mod 4) alignment for loop instruction */ + .byte 0 + .byte 0 +#endif +#endif +.Ldstunaligned: + +#if XCHAL_HAVE_LOOPS +#if XCHAL_HAVE_DENSITY + _movi.n a8, 0 // set up for the maximum loop count +#else + _movi a8, 0 // set up for the maximum loop count +#endif + loop a8, 2f // loop forever (almost anyway) +#endif +1: l8ui a8, a3, 0 + addi a3, a3, 1 +#if XTENSA_ESP32_PSRAM_CACHE_FIX + nop + nop + nop +#endif + s8i a8, a10, 0 + addi a4, a4, -1 + beqz a4, 3f + addi a10, a10, 1 +#if XCHAL_HAVE_LOOPS + beqz a8, 2f +#else + bnez a8, 1b +#endif +2: j .Lfill + +3: +#if XTENSA_ESP32_PSRAM_CACHE_FIX + memw +#endif + leaf_return +.end schedule + + .size strncpy, . - strncpy diff --git a/newlib/libc/machine/xtensa/xtensa-asm.h b/newlib/libc/machine/xtensa/xtensa-asm.h new file mode 100644 index 0000000000..926f3e4991 --- /dev/null +++ b/newlib/libc/machine/xtensa/xtensa-asm.h @@ -0,0 +1,72 @@ +/* Copyright (c) 2006 Tensilica Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + +/* Define macros for leaf function entry and return, supporting either the + * standard register windowed ABI or the non-windowed call0 ABI. These + * macros do not allocate any extra stack space, so they only work for + * leaf functions that do not need to spill anything to the stack. */ + +#include + + .macro leaf_entry reg, size +#if XCHAL_HAVE_WINDOWED && !__XTENSA_CALL0_ABI__ + entry \reg, \size +#else + /* do nothing */ +#endif + .endm + + .macro leaf_return +#if XCHAL_HAVE_WINDOWED && !__XTENSA_CALL0_ABI__ + retw +#else + ret +#endif + .endm + + .macro src_b r, w0, w1 +#ifdef __XTENSA_EB__ + src \r, \w0, \w1 +#else + src \r, \w1, \w0 +#endif + .endm + + .macro ssa8 r +#ifdef __XTENSA_EB__ + ssa8b \r +#else + ssa8l \r +#endif + .endm + +#if XCHAL_HAVE_BE +#define MASK0 0xff000000 +#define MASK1 0x00ff0000 +#define MASK2 0x0000ff00 +#define MASK3 0x000000ff +#else +#define MASK0 0x000000ff +#define MASK1 0x0000ff00 +#define MASK2 0x00ff0000 +#define MASK3 0xff000000 +#endif + diff --git a/newlib/libc/machine/xtensa/xtensa.tex b/newlib/libc/machine/xtensa/xtensa.tex new file mode 100644 index 0000000000..cb167826f1 --- /dev/null +++ b/newlib/libc/machine/xtensa/xtensa.tex @@ -0,0 +1,72 @@ +@node Xtensa +@chapter Functions for Xtensa Processors + +This chapter describes machine-dependent functions that are included +in the C library when it is built for Xtensa processors. + +@menu +* Function setjmp:: Save stack environment +* Function longjmp:: Non-local goto +@end menu + +@page +@node Function setjmp +@section @code{setjmp}---save stack environment +@findex setjmp +@strong{Synopsis} +@example +#include +int setjmp(jmp_buf env); + +@end example +@strong{Description}@* +@code{setjmp} and @code{longjmp} are useful for dealing with errors +and interrupts encountered in a low-level subroutine of a program. +@code{setjmp} saves the stack context/environment in @code{env} for +later use by @code{longjmp}. The stack context will be invalidated if +the function which called @code{setjmp} returns. + +@* +@strong{Returns}@* +@code{setjmp} returns 0 if returning directly, and non-zero when +returning from @code{longjmp} using the saved context. + +@* +@strong{Portability}@* +@code{setjmp} is ANSI C and POSIX.1. + +setjmp requires no supporting OS subroutines. + +@* +@page +@node Function longjmp +@section @code{longjmp}---non-local goto +@findex longjmp +@strong{Synopsis} +@example +#include +void longjmp(jmp_buf env, int val); + +@end example +@strong{Description}@* +@code{longjmp} and @code{setjmp} are useful for dealing with errors +and interrupts encountered in a low-level subroutine of a program. +@code{longjmp} restores the environment saved by the last call of +@code{setjmp} with the corresponding @code{env} argument. After +@code{longjmp} is completed, program execution continues as if the +corresponding call of @code{setjmp} had just returned the value +@code{val}. @code{longjmp} cannot cause 0 to be returned. If +@code{longjmp} is invoked with a second argument of 0, 1 will be +returned instead. + +@* +@strong{Returns}@* +This function never returns. + +@* +@strong{Portability}@* +@code{longjmp} is ANSI C and POSIX.1. + +longjmp requires no supporting OS subroutines. + +@* diff --git a/newlib/libc/misc/misc.tex b/newlib/libc/misc/misc.tex index 248243b53e..938b407a9a 100644 --- a/newlib/libc/misc/misc.tex +++ b/newlib/libc/misc/misc.tex @@ -3,9 +3,9 @@ This chapter describes miscellaneous routines not covered elsewhere. @menu -* ffs:: Return first bit set in a word -* __retarget_lock_init:: Retargetable locking routines -* unctrl:: Return printable representation of a character +* Function ffs:: Return first bit set in a word +* Function __retarget_lock_init:: Retargetable locking routines +* Function unctrl:: Return printable representation of a character @end menu @page diff --git a/newlib/libc/posix/ftw.c b/newlib/libc/posix/ftw.c index 18cfc24cbf..79e63582ce 100644 --- a/newlib/libc/posix/ftw.c +++ b/newlib/libc/posix/ftw.c @@ -1,3 +1,5 @@ +#ifndef HAVE_OPENDIR + /* * Copyright © 2005-2020 Rich Felker, et al. * @@ -31,3 +33,4 @@ int ftw(const char *path, int (*fn)(const char *, const struct stat *, int), int return nftw(path, (int (*)())fn, fd_limit, FTW_PHYS); } +#endif /* ! HAVE_OPENDIR */ diff --git a/newlib/libc/posix/nftw.c b/newlib/libc/posix/nftw.c index c45cc8f172..17c5bfd1e3 100644 --- a/newlib/libc/posix/nftw.c +++ b/newlib/libc/posix/nftw.c @@ -1,3 +1,5 @@ +#ifndef HAVE_OPENDIR + /* * Copyright © 2005-2020 Rich Felker, et al. * @@ -154,3 +156,4 @@ int nftw(const char *path, int (*fn)(const char *, const struct stat *, int, str return r; } +#endif /* ! HAVE_OPENDIR */ diff --git a/newlib/libc/posix/posix.tex b/newlib/libc/posix/posix.tex index 6fb662bdc5..02de223c0f 100644 --- a/newlib/libc/posix/posix.tex +++ b/newlib/libc/posix/posix.tex @@ -5,8 +5,8 @@ not by C. Each function documents which header to use. @menu -* popen:: Create a stream tied to a child process -* posix_spawn:: Spawn a process +* Function popen:: Create a stream tied to a child process +* Function posix_spawn:: Spawn a process @end menu @page diff --git a/newlib/libc/posix/posix_spawn.c b/newlib/libc/posix/posix_spawn.c index 85bfa6477e..6fd6159d05 100644 --- a/newlib/libc/posix/posix_spawn.c +++ b/newlib/libc/posix/posix_spawn.c @@ -123,7 +123,13 @@ struct __posix_spawn_file_actions { typedef struct __posix_spawn_file_actions_entry { STAILQ_ENTRY(__posix_spawn_file_actions_entry) fae_list; - enum { FAE_OPEN, FAE_DUP2, FAE_CLOSE } fae_action; + enum { + FAE_OPEN, + FAE_DUP2, + FAE_CLOSE, + FAE_CHDIR, + FAE_FCHDIR + } fae_action; int fae_fildes; union { @@ -139,6 +145,10 @@ typedef struct __posix_spawn_file_actions_entry { int newfildes; #define fae_newfildes fae_data.dup2.newfildes } dup2; + char *dir; +#define fae_dir fae_data.dir + int dirfd; +#define fae_dirfd fae_data.dirfd } fae_data; } posix_spawn_file_actions_entry_t; @@ -235,7 +245,21 @@ process_file_actions_entry(posix_spawn_file_actions_entry_t *fae) /* Perform a close(), do not fail if already closed */ (void)_close(fae->fae_fildes); break; +#ifdef HAVE_CHDIR + case FAE_CHDIR: + /* Perform a chdir. */ + if (chdir (fae->fae_dir) == -1) + return (errno); + break; +#endif +#ifdef HAVE_FCHDIR + case FAE_FCHDIR: + /* Perform a chdir. */ + if (fchdir (fae->fae_dirfd) == -1) + return (errno); + break; } +#endif return (0); } @@ -407,8 +431,18 @@ posix_spawn_file_actions_destroy (posix_spawn_file_actions_t *fa) STAILQ_REMOVE_HEAD(&(*fa)->fa_list, fae_list); /* Deallocate file action entry */ - if (fae->fae_action == FAE_OPEN) + switch (fae->fae_action) { + case FAE_OPEN: free(fae->fae_path); + break; +#ifdef HAVE_CHDIR + case FAE_CHDIR: + free(fae->fae_dir); + break; +#endif + default: + break; + } free(fae); } @@ -496,6 +530,62 @@ posix_spawn_file_actions_addclose (posix_spawn_file_actions_t *fa, return (0); } +#ifdef HAVE_CHDIR +int +posix_spawn_file_actions_addchdir_np ( + posix_spawn_file_actions_t * __restrict fa, + const char * __restrict path) +{ + posix_spawn_file_actions_entry_t *fae; + int error; + + /* Allocate object */ + fae = malloc(sizeof(posix_spawn_file_actions_entry_t)); + if (fae == NULL) + return (errno); + + /* Set values and store in queue */ + fae->fae_action = FAE_CHDIR; + fae->fae_dir = strdup(path); + if (fae->fae_dir == NULL) { + error = errno; + free(fae); + return (error); + } + + STAILQ_INSERT_TAIL(&(*fa)->fa_list, fae, fae_list); + return (0); +} +#endif + +#ifdef HAVE_FCHDIR +int +posix_spawn_file_actions_addfchdir_np ( + posix_spawn_file_actions_t * __restrict fa, + int fd) +{ + posix_spawn_file_actions_entry_t *fae; + + /* POSIX proposal documents it as implemented in FreeBSD and Musl. + Return EBADF if fd is negative. + https://www.austingroupbugs.net/view.php?id=1208 */ + if (fd < 0) + return EBADF; + + /* Allocate object */ + fae = malloc(sizeof(posix_spawn_file_actions_entry_t)); + if (fae == NULL) + return (errno); + + /* Set values and store in queue */ + fae->fae_action = FAE_FCHDIR; + fae->fae_dirfd = fd; + + STAILQ_INSERT_TAIL(&(*fa)->fa_list, fae, fae_list); + return (0); +} +#endif + /* * Spawn attributes */ diff --git a/newlib/libc/posix/regcomp.c b/newlib/libc/posix/regcomp.c index 002f978cd0..c789746755 100644 --- a/newlib/libc/posix/regcomp.c +++ b/newlib/libc/posix/regcomp.c @@ -2001,8 +2001,10 @@ struct re_guts *g; } g->matchjump = (int*) malloc(g->mlen * sizeof(unsigned int)); - if (g->matchjump == NULL) /* Not a fatal error */ + if (g->matchjump == NULL) { /* Not a fatal error */ + free(pmatches); return; + } /* Set maximum possible jump for each character in the pattern */ for (mindex = 0; mindex < g->mlen; mindex++) @@ -2035,16 +2037,16 @@ struct re_guts *g; g->matchjump[mindex] = MIN(g->matchjump[mindex], g->mlen + suffix - mindex); - ssuffix = pmatches[suffix]; - while (suffix < g->mlen) { - while (suffix <= ssuffix && suffix < g->mlen) { - g->matchjump[suffix] = MIN(g->matchjump[suffix], + ssuffix = pmatches[suffix]; + while (suffix < g->mlen) { + while (suffix <= ssuffix && suffix < g->mlen) { + g->matchjump[suffix] = MIN(g->matchjump[suffix], g->mlen + ssuffix - suffix); - suffix++; - } + suffix++; + } if (suffix < g->mlen) - ssuffix = pmatches[ssuffix]; - } + ssuffix = pmatches[ssuffix]; + } free(pmatches); } diff --git a/newlib/libc/reent/Makefile.inc b/newlib/libc/reent/Makefile.inc index b4b7f75960..26f952bfa9 100644 --- a/newlib/libc/reent/Makefile.inc +++ b/newlib/libc/reent/Makefile.inc @@ -4,6 +4,7 @@ libc_a_SOURCES += \ %D%/impure.c \ %D%/fcntlr.c \ %D%/fstatr.c \ + %D%/getentropyr.c \ %D%/getreent.c \ %D%/gettimeofdayr.c \ %D%/isattyr.c \ @@ -14,7 +15,6 @@ libc_a_SOURCES += \ %D%/readr.c \ %D%/renamer.c \ %D%/signalr.c \ - %D%/signgam.c \ %D%/sbrkr.c \ %D%/statr.c \ %D%/timesr.c \ @@ -47,6 +47,7 @@ LIBC_CHEWOUT_FILES += \ %D%/execr.def \ %D%/fcntlr.def \ %D%/fstatr.def \ + %D%/getentropyr.def \ %D%/gettimeofdayr.def \ %D%/linkr.def \ %D%/lseekr.def \ diff --git a/newlib/libc/reent/getentropyr.c b/newlib/libc/reent/getentropyr.c new file mode 100644 index 0000000000..e3f85e41b3 --- /dev/null +++ b/newlib/libc/reent/getentropyr.c @@ -0,0 +1,53 @@ +/* Reentrant version of getentropy system call. */ + +#include +#include +#include <_syslist.h> + +/* Some targets provides their own versions of these functions. Those + targets should define REENTRANT_SYSCALLS_PROVIDED in TARGET_CFLAGS. */ + +#ifdef _REENT_ONLY +#ifndef REENTRANT_SYSCALLS_PROVIDED +#define REENTRANT_SYSCALLS_PROVIDED +#endif +#endif + +#ifndef REENTRANT_SYSCALLS_PROVIDED + +/* We use the errno variable used by the system dependent layer. */ +#undef errno +extern int errno; + +/* +FUNCTION + <<_getentropy_r>>---Reentrant version of getentropy + +INDEX + _getentropy_r + +SYNOPSIS + #include + int _getentropy_r(struct _reent *<[ptr]>, + void *<[buf]>, size_t <[buflen]>); + +DESCRIPTION + This is a reentrant version of <>. It + takes a pointer to the global data block, which holds + <>. +*/ + +int +_getentropy_r (struct _reent *ptr, + void *buf, + size_t buflen) +{ + int ret; + + errno = 0; + if ((ret = _getentropy (buf, buflen)) == -1 && errno != 0) + _REENT_ERRNO(ptr) = errno; + return ret; +} + +#endif /* ! defined (REENTRANT_SYSCALLS_PROVIDED) */ diff --git a/newlib/libc/reent/getreent.c b/newlib/libc/reent/getreent.c index 5fa98e96bd..86bb04fb94 100644 --- a/newlib/libc/reent/getreent.c +++ b/newlib/libc/reent/getreent.c @@ -9,6 +9,8 @@ int _dummy_getreent; #include <_ansi.h> #include +#ifndef _REENT_THREAD_LOCAL + #ifdef __getreent #undef __getreent #endif @@ -19,4 +21,6 @@ __getreent (void) return _impure_ptr; } +#endif /* !_REENT_THREAD_LOCAL */ + #endif diff --git a/newlib/libc/reent/reent.c b/newlib/libc/reent/reent.c index db80ca06e3..74503fa592 100644 --- a/newlib/libc/reent/reent.c +++ b/newlib/libc/reent/reent.c @@ -59,6 +59,17 @@ _reclaim_reent (struct _reent *ptr) } if (_REENT_MP_RESULT(ptr)) _free_r (ptr, _REENT_MP_RESULT(ptr)); + if (_REENT_MP_P5S(ptr)) + { + struct _Bigint *thisone, *nextone; + nextone = _REENT_MP_P5S(ptr); + while (nextone) + { + thisone = nextone; + nextone = nextone->_next; + _free_r (ptr, thisone); + } + } #ifdef _REENT_SMALL } #endif diff --git a/newlib/libc/signal/signal.tex b/newlib/libc/signal/signal.tex index f7dbf9d88e..7349cd7a3b 100644 --- a/newlib/libc/signal/signal.tex +++ b/newlib/libc/signal/signal.tex @@ -59,10 +59,10 @@ reliable from signal handlers.) @menu -* psignal:: Print a signal message to standard error -* raise:: Send a signal -* sig2str:: Translate between signal number and name -* signal:: Specify handler subroutine for a signal +* Function psignal:: Print a signal message to standard error +* Function raise:: Send a signal +* Function sig2str:: Translate between signal number and name +* Function signal:: Specify handler subroutine for a signal @end menu @page diff --git a/newlib/libc/ssp/stack_protector.c b/newlib/libc/ssp/stack_protector.c index cd51543f0e..5e9d75f0f3 100644 --- a/newlib/libc/ssp/stack_protector.c +++ b/newlib/libc/ssp/stack_protector.c @@ -5,8 +5,8 @@ #include #include -#if defined(__AMDGCN__) -/* GCN does not support constructors, yet. */ +#if defined(__AMDGCN__) || defined(__nvptx__) +/* Global constructors not supported on this target, yet. */ uintptr_t __stack_chk_guard = 0x00000aff; /* 0, 0, '\n', 255 */ #else diff --git a/newlib/libc/stdio/Makefile.inc b/newlib/libc/stdio/Makefile.inc index 2126ceaf59..e25680212a 100644 --- a/newlib/libc/stdio/Makefile.inc +++ b/newlib/libc/stdio/Makefile.inc @@ -33,7 +33,15 @@ libc_a_SOURCES += \ %D%/viscanf.c \ %D%/vsiprintf.c \ %D%/vsiscanf.c \ - %D%/vsniprintf.c + %D%/vsniprintf.c \ + %D%/sfputs_r.c \ + %D%/sfputws_r.c \ + %D%/sprint_r.c \ + %D%/swprint_r.c \ + %D%/ssputs_r.c \ + %D%/ssputws_r.c \ + %D%/ssprint_r.c \ + %D%/sswprint_r.c endif libc_a_SOURCES += \ @@ -109,6 +117,7 @@ libc_a_SOURCES += \ %D%/vsprintf.c \ %D%/vsscanf.c \ %D%/wbuf.c \ + %D%/wbufw.c \ %D%/wsetup.c ## The following are EL/IX level 2 interfaces diff --git a/newlib/libc/stdio/asiprintf.c b/newlib/libc/stdio/asiprintf.c index af25e9a57a..dedb7fbfab 100644 --- a/newlib/libc/stdio/asiprintf.c +++ b/newlib/libc/stdio/asiprintf.c @@ -35,6 +35,7 @@ _asiprintf_r (struct _reent *ptr, /* mark a zero-length reallocatable buffer */ f._flags = __SWR | __SSTR | __SMBF; + f._flags2 = 0; f._bf._base = f._p = NULL; f._bf._size = f._w = 0; f._file = -1; /* No file. */ @@ -61,6 +62,7 @@ asiprintf (char **strp, /* mark a zero-length reallocatable buffer */ f._flags = __SWR | __SSTR | __SMBF; + f._flags2 = 0; f._bf._base = f._p = NULL; f._bf._size = f._w = 0; f._file = -1; /* No file. */ diff --git a/newlib/libc/stdio/asniprintf.c b/newlib/libc/stdio/asniprintf.c index 97e77748e7..e930c8d69f 100644 --- a/newlib/libc/stdio/asniprintf.c +++ b/newlib/libc/stdio/asniprintf.c @@ -36,6 +36,7 @@ _asniprintf_r (struct _reent *ptr, len = 0; buf = NULL; } + f._flags2 = 0; f._bf._base = f._p = (unsigned char *) buf; /* For now, inherit the 32-bit signed limit of FILE._bf._size. FIXME - it would be nice to rewrite sys/reent.h to support size_t @@ -82,6 +83,7 @@ asniprintf (char *buf, len = 0; buf = NULL; } + f._flags2 = 0; f._bf._base = f._p = (unsigned char *) buf; /* For now, inherit the 32-bit signed limit of FILE._bf._size. FIXME - it would be nice to rewrite sys/reent.h to support size_t diff --git a/newlib/libc/stdio/asnprintf.c b/newlib/libc/stdio/asnprintf.c index f82556143e..4c9ad58602 100644 --- a/newlib/libc/stdio/asnprintf.c +++ b/newlib/libc/stdio/asnprintf.c @@ -36,6 +36,7 @@ _asnprintf_r (struct _reent *__restrict ptr, len = 0; buf = NULL; } + f._flags2 = 0; f._bf._base = f._p = (unsigned char *) buf; /* For now, inherit the 32-bit signed limit of FILE._bf._size. FIXME - it would be nice to rewrite sys/reent.h to support size_t @@ -88,6 +89,7 @@ asnprintf (char *__restrict buf, len = 0; buf = NULL; } + f._flags2 = 0; f._bf._base = f._p = (unsigned char *) buf; /* For now, inherit the 32-bit signed limit of FILE._bf._size. FIXME - it would be nice to rewrite sys/reent.h to support size_t diff --git a/newlib/libc/stdio/asprintf.c b/newlib/libc/stdio/asprintf.c index 542e70e4c3..511d0e0f3f 100644 --- a/newlib/libc/stdio/asprintf.c +++ b/newlib/libc/stdio/asprintf.c @@ -35,6 +35,7 @@ _asprintf_r (struct _reent *ptr, /* mark a zero-length reallocatable buffer */ f._flags = __SWR | __SSTR | __SMBF; + f._flags2 = 0; f._bf._base = f._p = NULL; f._bf._size = f._w = 0; f._file = -1; /* No file. */ @@ -67,6 +68,7 @@ asprintf (char **__restrict strp, /* mark a zero-length reallocatable buffer */ f._flags = __SWR | __SSTR | __SMBF; + f._flags2 = 0; f._bf._base = f._p = NULL; f._bf._size = f._w = 0; f._file = -1; /* No file. */ diff --git a/newlib/libc/stdio/fgetwc.c b/newlib/libc/stdio/fgetwc.c index 522697e9b0..38e2db8977 100644 --- a/newlib/libc/stdio/fgetwc.c +++ b/newlib/libc/stdio/fgetwc.c @@ -177,8 +177,10 @@ _fgetwc_r (struct _reent *ptr, wint_t r; _newlib_flockfile_start (fp); - ORIENT(fp, 1); - r = __fgetwc (ptr, fp); + if (ORIENT(fp, 1) != 1) + r = WEOF; + else + r = __fgetwc (ptr, fp); _newlib_flockfile_end (fp); return r; } diff --git a/newlib/libc/stdio/fgetwc_u.c b/newlib/libc/stdio/fgetwc_u.c index cbb97360b2..007f9c8445 100644 --- a/newlib/libc/stdio/fgetwc_u.c +++ b/newlib/libc/stdio/fgetwc_u.c @@ -33,7 +33,8 @@ wint_t _fgetwc_unlocked_r (struct _reent *ptr, register FILE *fp) { - ORIENT(fp, 1); + if (ORIENT(fp, 1) != 1) + return WEOF; return __fgetwc (ptr, fp); } diff --git a/newlib/libc/stdio/fgetws.c b/newlib/libc/stdio/fgetws.c index c942806c68..3b7fa95165 100644 --- a/newlib/libc/stdio/fgetws.c +++ b/newlib/libc/stdio/fgetws.c @@ -110,7 +110,8 @@ _fgetws_r (struct _reent *ptr, unsigned char *nl; _newlib_flockfile_start (fp); - ORIENT (fp, 1); + if (ORIENT (fp, 1) != 1) + goto error; if (n <= 0) { diff --git a/newlib/libc/stdio/fputs.c b/newlib/libc/stdio/fputs.c index 4e9cb75475..7437949433 100644 --- a/newlib/libc/stdio/fputs.c +++ b/newlib/libc/stdio/fputs.c @@ -103,8 +103,10 @@ _fputs_r (struct _reent * ptr, CHECK_INIT(ptr, fp); _newlib_flockfile_start (fp); - ORIENT (fp, -1); - result = __sfvwrite_r (ptr, fp, &uio); + if (ORIENT (fp, -1) != -1) + result = EOF; + else + result = __sfvwrite_r (ptr, fp, &uio); _newlib_flockfile_end (fp); return result; #else @@ -113,7 +115,6 @@ _fputs_r (struct _reent * ptr, CHECK_INIT(ptr, fp); _newlib_flockfile_start (fp); - ORIENT (fp, -1); /* Make sure we can write. */ if (cantwrite (ptr, fp)) goto error; diff --git a/newlib/libc/stdio/fputwc.c b/newlib/libc/stdio/fputwc.c index 9a4e80d527..e2aadefd53 100644 --- a/newlib/libc/stdio/fputwc.c +++ b/newlib/libc/stdio/fputwc.c @@ -155,7 +155,7 @@ __fputwc (struct _reent *ptr, } for (i = 0; i < len; i++) - if (__sputc_r (ptr, (unsigned char) buf[i], fp) == EOF) + if (__swputc_r (ptr, (unsigned char) buf[i], fp) == EOF) return WEOF; return (wint_t) wc; @@ -169,7 +169,6 @@ _fputwc_r (struct _reent *ptr, wint_t r; _newlib_flockfile_start (fp); - ORIENT(fp, 1); r = __fputwc(ptr, wc, fp); _newlib_flockfile_end (fp); return r; @@ -182,5 +181,10 @@ fputwc (wchar_t wc, struct _reent *reent = _REENT; CHECK_INIT(reent, fp); - return _fputwc_r (reent, wc, fp); + wint_t r; + + _newlib_flockfile_start (fp); + r = __fputwc(reent, wc, fp); + _newlib_flockfile_end (fp); + return r; } diff --git a/newlib/libc/stdio/fputwc_u.c b/newlib/libc/stdio/fputwc_u.c index d4e51532a8..f54bcf30f7 100644 --- a/newlib/libc/stdio/fputwc_u.c +++ b/newlib/libc/stdio/fputwc_u.c @@ -34,7 +34,6 @@ _fputwc_unlocked_r (struct _reent *ptr, wchar_t wc, FILE *fp) { - ORIENT(fp, 1); return __fputwc(ptr, wc, fp); } @@ -45,5 +44,5 @@ fputwc_unlocked (wchar_t wc, struct _reent *reent = _REENT; CHECK_INIT(reent, fp); - return _fputwc_unlocked_r (reent, wc, fp); + return __fputwc(reent, wc, fp); } diff --git a/newlib/libc/stdio/fputws.c b/newlib/libc/stdio/fputws.c index 92f2cbf6a7..f9fe4a4b32 100644 --- a/newlib/libc/stdio/fputws.c +++ b/newlib/libc/stdio/fputws.c @@ -105,7 +105,8 @@ _fputws_r (struct _reent *ptr, struct __siov iov; _newlib_flockfile_start (fp); - ORIENT (fp, 1); + if (ORIENT (fp, 1) != 1) + goto error; if (cantwrite (ptr, fp) != 0) goto error; uio.uio_iov = &iov; @@ -129,7 +130,6 @@ _fputws_r (struct _reent *ptr, return (-1); #else _newlib_flockfile_start (fp); - ORIENT (fp, 1); if (cantwrite (ptr, fp) != 0) goto error; @@ -141,7 +141,7 @@ _fputws_r (struct _reent *ptr, goto error; while (i < nbytes) { - if (__sputc_r (ptr, buf[i], fp) == EOF) + if (__swputc_r (ptr, buf[i], fp) == EOF) goto error; i++; } diff --git a/newlib/libc/stdio/fread.c b/newlib/libc/stdio/fread.c index df8321461e..8664dc3e5e 100644 --- a/newlib/libc/stdio/fread.c +++ b/newlib/libc/stdio/fread.c @@ -158,7 +158,11 @@ _fread_r (struct _reent * ptr, CHECK_INIT(ptr, fp); _newlib_flockfile_start (fp); - ORIENT (fp, -1); + if (ORIENT (fp, -1) != -1) + { + count = 0; + goto ret; + } if (fp->_r < 0) fp->_r = 0; total = resid; @@ -252,6 +256,7 @@ _fread_r (struct _reent * ptr, return crlf_r(ptr, fp, buf, total, 0) / size; } #endif +ret: _newlib_flockfile_end (fp); return count; } diff --git a/newlib/libc/stdio/fvwrite.c b/newlib/libc/stdio/fvwrite.c index 34361cb8d1..add48ba99c 100644 --- a/newlib/libc/stdio/fvwrite.c +++ b/newlib/libc/stdio/fvwrite.c @@ -40,6 +40,9 @@ /* * Write some memory regions. Return zero on success, EOF on error. * + * On systems supporting threads, this function *must* be called under + * _newlib_flockfile_start locking. + * * This routine is large and unsightly, but most of the ugliness due * to the three different kinds of output buffering is handled here. */ @@ -67,21 +70,43 @@ __sfvwrite_r (struct _reent *ptr, len = 0; #ifdef __SCLE + /* This only affects Cygwin, so calling __sputc_r *and* __swputc_r + * from here doesn't matter. + */ if (fp->_flags & __SCLE) /* text mode */ { - do - { - GETIOV (;); - while (len > 0) - { - if (putc (*p, fp) == EOF) - return EOF; - p++; - len--; - uio->uio_resid--; - } - } - while (uio->uio_resid > 0); + if (fp->_flags2 & __SWID) + { + do + { + GETIOV (;); + while (len > 0) + { + if (__swputc_r (ptr, *p, fp) == EOF) + return EOF; + p++; + len--; + uio->uio_resid--; + } + } + while (uio->uio_resid > 0); + } + else + { + do + { + GETIOV (;); + while (len > 0) + { + if (__sputc_r (ptr, *p, fp) == EOF) + return EOF; + p++; + len--; + uio->uio_resid--; + } + } + while (uio->uio_resid > 0); + } return 0; } #endif diff --git a/newlib/libc/stdio/fwide.c b/newlib/libc/stdio/fwide.c index 9b5a3d12a7..1d24304681 100644 --- a/newlib/libc/stdio/fwide.c +++ b/newlib/libc/stdio/fwide.c @@ -58,7 +58,7 @@ _fwide_r (struct _reent *ptr, _newlib_flockfile_start (fp); if (mode != 0) { - ORIENT (fp, mode); + (void) ORIENT (fp, mode); } if (!(fp->_flags & __SORD)) ret = 0; diff --git a/newlib/libc/stdio/fwrite.c b/newlib/libc/stdio/fwrite.c index d499f6f599..9241ea2cd9 100644 --- a/newlib/libc/stdio/fwrite.c +++ b/newlib/libc/stdio/fwrite.c @@ -133,7 +133,11 @@ _fwrite_r (struct _reent * ptr, CHECK_INIT(ptr, fp); _newlib_flockfile_start (fp); - ORIENT (fp, -1); + if (ORIENT (fp, -1) != -1) + { + _newlib_flockfile_exit (fp); + return 0; + } if (__sfvwrite_r (ptr, fp, &uio) == 0) { _newlib_flockfile_exit (fp); @@ -148,7 +152,6 @@ _fwrite_r (struct _reent * ptr, CHECK_INIT (ptr, fp); _newlib_flockfile_start (fp); - ORIENT (fp, -1); /* Make sure we can write. */ if (cantwrite (ptr, fp)) goto ret; diff --git a/newlib/libc/stdio/local.h b/newlib/libc/stdio/local.h index b34c7c9d82..63c0618f1b 100644 --- a/newlib/libc/stdio/local.h +++ b/newlib/libc/stdio/local.h @@ -231,21 +231,57 @@ extern _READ_WRITE_RETURN_TYPE __swrite64 (struct _reent *, void *, * Set the orientation for a stream. If o > 0, the stream has wide- * orientation. If o < 0, the stream has byte-orientation. */ -#define ORIENT(fp,ori) \ - do \ - { \ - if (!((fp)->_flags & __SORD)) \ - { \ - (fp)->_flags |= __SORD; \ - if (ori > 0) \ - (fp)->_flags2 |= __SWID; \ - else \ - (fp)->_flags2 &= ~__SWID; \ - } \ - } \ - while (0) +#define ORIENT(fp,ori) \ + ( \ + ( \ + ((fp)->_flags & __SORD) ? \ + 0 \ + : \ + ( \ + ((fp)->_flags |= __SORD), \ + (ori > 0) ? \ + ((fp)->_flags2 |= __SWID) \ + : \ + ((fp)->_flags2 &= ~__SWID) \ + ) \ + ), \ + ((fp)->_flags2 & __SWID) ? 1 : -1 \ + ) +#else +#define ORIENT(fp,ori) (-1) +#endif + +/* Same thing as the functions in stdio.h, but these are to be called + from inside the wide-char functions. */ +int __swbufw_r (struct _reent *, int, FILE *); +#ifdef __GNUC__ +_ELIDABLE_INLINE int __swputc_r(struct _reent *_ptr, int _c, FILE *_p) { +#ifdef __SCLE + if ((_p->_flags & __SCLE) && _c == '\n') + __swputc_r (_ptr, '\r', _p); +#endif + if (--_p->_w >= 0 || (_p->_w >= _p->_lbfsize && (char)_c != '\n')) + return (*_p->_p++ = _c); + else + return (__swbufw_r(_ptr, _c, _p)); +} #else -#define ORIENT(fp,ori) +#define __swputc_raw_r(__ptr, __c, __p) \ + (--(__p)->_w < 0 ? \ + (__p)->_w >= (__p)->_lbfsize ? \ + (*(__p)->_p = (__c)), *(__p)->_p != '\n' ? \ + (int)*(__p)->_p++ : \ + __swbufw_r(__ptr, '\n', __p) : \ + __swbufw_r(__ptr, (int)(__c), __p) : \ + (*(__p)->_p = (__c), (int)*(__p)->_p++)) +#ifdef __SCLE +#define __swputc_r(__ptr, __c, __p) \ + ((((__p)->_flags & __SCLE) && ((__c) == '\n')) \ + ? __swputc_raw_r(__ptr, '\r', (__p)) : 0 , \ + __swputc_raw_r((__ptr), (__c), (__p))) +#else +#define __swputc_r(__ptr, __c, __p) __swputc_raw_r(__ptr, __c, __p) +#endif #endif /* WARNING: _dcvt is defined in the stdlib directory, not here! */ diff --git a/newlib/libc/stdio/open_memstream.c b/newlib/libc/stdio/open_memstream.c index e3a52ed33d..97b13b7bfc 100644 --- a/newlib/libc/stdio/open_memstream.c +++ b/newlib/libc/stdio/open_memstream.c @@ -367,7 +367,7 @@ internal_open_memstream_r (struct _reent *ptr, fp->_flags |= __SL64; #endif fp->_close = memcloser; - ORIENT (fp, wide); + (void) ORIENT (fp, wide); _newlib_flockfile_end (fp); return fp; } diff --git a/newlib/libc/stdio/puts.c b/newlib/libc/stdio/puts.c index d4d7b7ffb0..d24022b4b3 100644 --- a/newlib/libc/stdio/puts.c +++ b/newlib/libc/stdio/puts.c @@ -87,8 +87,10 @@ _puts_r (struct _reent *ptr, fp = _stdout_r (ptr); CHECK_INIT (ptr, fp); _newlib_flockfile_start (fp); - ORIENT (fp, -1); - result = (__sfvwrite_r (ptr, fp, &uio) ? EOF : '\n'); + if (ORIENT (fp, -1) != -1) + result = EOF; + else + result = (__sfvwrite_r (ptr, fp, &uio) ? EOF : '\n'); _newlib_flockfile_end (fp); return result; #else @@ -100,7 +102,6 @@ _puts_r (struct _reent *ptr, fp = _stdout_r (ptr); CHECK_INIT (ptr, fp); _newlib_flockfile_start (fp); - ORIENT (fp, -1); /* Make sure we can write. */ if (cantwrite (ptr, fp)) goto err; diff --git a/newlib/libc/stdio/refill.c b/newlib/libc/stdio/refill.c index 7bd38806ca..cd71ed1529 100644 --- a/newlib/libc/stdio/refill.c +++ b/newlib/libc/stdio/refill.c @@ -43,8 +43,6 @@ __srefill_r (struct _reent * ptr, CHECK_INIT (ptr, fp); - ORIENT (fp, -1); - fp->_r = 0; /* largely a convenience for callers */ /* SysV does not make this test; take it out for compatibility */ diff --git a/newlib/libc/stdio/rget.c b/newlib/libc/stdio/rget.c index a9a0d2f2f2..38e8b5dd19 100644 --- a/newlib/libc/stdio/rget.c +++ b/newlib/libc/stdio/rget.c @@ -39,6 +39,11 @@ __srget_r (struct _reent *ptr, we call __srefill_r so we may access the true read buffer. */ CHECK_INIT(ptr, fp); + /* Have to set and check orientation here, otherwise the macros in + stdio.h never set it. */ + if (ORIENT (fp, -1) != -1) + return EOF; + if (__srefill_r (ptr, fp) == 0) { fp->_r--; diff --git a/newlib/libc/stdio/sfputs_r.c b/newlib/libc/stdio/sfputs_r.c new file mode 100644 index 0000000000..8e5fc067f3 --- /dev/null +++ b/newlib/libc/stdio/sfputs_r.c @@ -0,0 +1,23 @@ +#include + +#ifndef _FVWRITE_IN_STREAMIO + +#include +#include + +int +__sfputs_r (struct _reent *ptr, + FILE *fp, + const char *buf, + size_t len) +{ + register int i; + + for (i = 0; i < len; i++) { + if (_fputc_r (ptr, buf[i], fp) == EOF) + return -1; + } + return (0); +} + +#endif diff --git a/newlib/libc/stdio/sfputws_r.c b/newlib/libc/stdio/sfputws_r.c new file mode 100644 index 0000000000..94b04348ed --- /dev/null +++ b/newlib/libc/stdio/sfputws_r.c @@ -0,0 +1,24 @@ +#include + +#ifndef _FVWRITE_IN_STREAMIO + +#include +#include +#include + +int +__sfputws_r (struct _reent *ptr, + FILE *fp, + const wchar_t *buf, + size_t len) +{ + register int i; + + for (i = 0; i < len; i++) { + if (_fputwc_r (ptr, buf[i], fp) == WEOF) + return -1; + } + return (0); +} + +#endif diff --git a/newlib/libc/stdio/siprintf.c b/newlib/libc/stdio/siprintf.c index bd29edd881..b337925979 100644 --- a/newlib/libc/stdio/siprintf.c +++ b/newlib/libc/stdio/siprintf.c @@ -108,6 +108,7 @@ _siprintf_r (struct _reent *ptr, FILE f; f._flags = __SWR | __SSTR; + f._flags2 = 0; f._bf._base = f._p = (unsigned char *) str; f._bf._size = f._w = INT_MAX; f._file = -1; /* No file. */ @@ -129,6 +130,7 @@ siprintf (char *str, FILE f; f._flags = __SWR | __SSTR; + f._flags2 = 0; f._bf._base = f._p = (unsigned char *) str; f._bf._size = f._w = INT_MAX; f._file = -1; /* No file. */ diff --git a/newlib/libc/stdio/siscanf.c b/newlib/libc/stdio/siscanf.c index b88b810888..4c1363d0a7 100644 --- a/newlib/libc/stdio/siscanf.c +++ b/newlib/libc/stdio/siscanf.c @@ -90,6 +90,7 @@ siscanf (const char *str, FILE f; f._flags = __SRD | __SSTR; + f._flags2 = 0; f._bf._base = f._p = (unsigned char *) str; f._bf._size = f._r = strlen (str); f._read = __seofread; @@ -114,6 +115,7 @@ _siscanf_r (struct _reent *ptr, FILE f; f._flags = __SRD | __SSTR; + f._flags2 = 0; f._bf._base = f._p = (unsigned char *) str; f._bf._size = f._r = strlen (str); f._read = __seofread; diff --git a/newlib/libc/stdio/sniprintf.c b/newlib/libc/stdio/sniprintf.c index b05ffcb12d..852713f1ff 100644 --- a/newlib/libc/stdio/sniprintf.c +++ b/newlib/libc/stdio/sniprintf.c @@ -42,6 +42,7 @@ _sniprintf_r (struct _reent *ptr, return EOF; } f._flags = __SWR | __SSTR; + f._flags2 = 0; f._bf._base = f._p = (unsigned char *) str; f._bf._size = f._w = (size > 0 ? size - 1 : 0); f._file = -1; /* No file. */ @@ -73,6 +74,7 @@ sniprintf (char *str, return EOF; } f._flags = __SWR | __SSTR; + f._flags2 = 0; f._bf._base = f._p = (unsigned char *) str; f._bf._size = f._w = (size > 0 ? size - 1 : 0); f._file = -1; /* No file. */ diff --git a/newlib/libc/stdio/snprintf.c b/newlib/libc/stdio/snprintf.c index 4a3084beac..b6130b9983 100644 --- a/newlib/libc/stdio/snprintf.c +++ b/newlib/libc/stdio/snprintf.c @@ -41,6 +41,7 @@ _snprintf_r (struct _reent *ptr, return EOF; } f._flags = __SWR | __SSTR; + f._flags2 = 0; f._bf._base = f._p = (unsigned char *) str; f._bf._size = f._w = (size > 0 ? size - 1 : 0); f._file = -1; /* No file. */ @@ -78,6 +79,7 @@ snprintf (char *__restrict str, return EOF; } f._flags = __SWR | __SSTR; + f._flags2 = 0; f._bf._base = f._p = (unsigned char *) str; f._bf._size = f._w = (size > 0 ? size - 1 : 0); f._file = -1; /* No file. */ diff --git a/newlib/libc/stdio/sprint_r.c b/newlib/libc/stdio/sprint_r.c new file mode 100644 index 0000000000..81c7b7f236 --- /dev/null +++ b/newlib/libc/stdio/sprint_r.c @@ -0,0 +1,30 @@ +#include + +#ifdef _FVWRITE_IN_STREAMIO + +#include +#include +#include "fvwrite.h" + +/* + * Flush out all the vectors defined by the given uio, + * then reset it so that it can be reused. + */ +int +__sprint_r (struct _reent *ptr, + FILE *fp, + register struct __suio *uio) +{ + register int err = 0; + + if (uio->uio_resid == 0) { + uio->uio_iovcnt = 0; + return (0); + } + err = __sfvwrite_r(ptr, fp, uio); + uio->uio_resid = 0; + uio->uio_iovcnt = 0; + return (err); +} + +#endif diff --git a/newlib/libc/stdio/sprintf.c b/newlib/libc/stdio/sprintf.c index be66ec6f5d..92cae46189 100644 --- a/newlib/libc/stdio/sprintf.c +++ b/newlib/libc/stdio/sprintf.c @@ -584,6 +584,7 @@ _sprintf_r (struct _reent *ptr, FILE f; f._flags = __SWR | __SSTR; + f._flags2 = 0; f._bf._base = f._p = (unsigned char *) str; f._bf._size = f._w = INT_MAX; f._file = -1; /* No file. */ @@ -611,6 +612,7 @@ sprintf (char *__restrict str, FILE f; f._flags = __SWR | __SSTR; + f._flags2 = 0; f._bf._base = f._p = (unsigned char *) str; f._bf._size = f._w = INT_MAX; f._file = -1; /* No file. */ diff --git a/newlib/libc/stdio/sscanf.c b/newlib/libc/stdio/sscanf.c index 9c50361bc0..52145fc46c 100644 --- a/newlib/libc/stdio/sscanf.c +++ b/newlib/libc/stdio/sscanf.c @@ -429,6 +429,7 @@ sscanf (const char *__restrict str, FILE f; f._flags = __SRD | __SSTR; + f._flags2 = 0; f._bf._base = f._p = (unsigned char *) str; f._bf._size = f._r = strlen (str); f._read = __seofread; @@ -459,6 +460,7 @@ _sscanf_r (struct _reent *ptr, FILE f; f._flags = __SRD | __SSTR; + f._flags2 = 0; f._bf._base = f._p = (unsigned char *) str; f._bf._size = f._r = strlen (str); f._read = __seofread; diff --git a/newlib/libc/stdio/ssprint_r.c b/newlib/libc/stdio/ssprint_r.c new file mode 100644 index 0000000000..eedbd6a939 --- /dev/null +++ b/newlib/libc/stdio/ssprint_r.c @@ -0,0 +1,36 @@ +#include + +#ifdef _FVWRITE_IN_STREAMIO + +#include +#include +#include "fvwrite.h" + +extern int __ssputs_r (struct _reent *ptr, FILE *fp, const char *buf, + size_t len); + +int +__ssprint_r (struct _reent *ptr, + FILE *fp, + register struct __suio *uio) +{ + register struct __siov *iov = uio->uio_iov; + register size_t len; + int ret = 0; + + while (uio->uio_resid > 0 && uio->uio_iovcnt-- > 0) { + if ((len = iov->iov_len) > 0) { + if (__ssputs_r (ptr, fp, iov->iov_base, len) == EOF) { + ret = EOF; + break; + } + uio->uio_resid -= len; /* pretend we copied all */ + } + iov++; + } + uio->uio_resid = 0; + uio->uio_iovcnt = 0; + return ret; +} + +#endif diff --git a/newlib/libc/stdio/ssputs_r.c b/newlib/libc/stdio/ssputs_r.c new file mode 100644 index 0000000000..abd18ef4bf --- /dev/null +++ b/newlib/libc/stdio/ssputs_r.c @@ -0,0 +1,69 @@ +#include + +#include +#include +#include +#include +#include + +int +__ssputs_r (struct _reent *ptr, + FILE *fp, + const char *buf, + size_t len) +{ + register int w; + + w = fp->_w; + if (len >= w && fp->_flags & (__SMBF | __SOPT)) { + /* must be asprintf family */ + unsigned char *str; + int curpos = (fp->_p - fp->_bf._base); + /* Choose a geometric growth factor to avoid + * quadratic realloc behavior, but use a rate less + * than (1+sqrt(5))/2 to accomodate malloc + * overhead. asprintf EXPECTS us to overallocate, so + * that it can add a trailing \0 without + * reallocating. The new allocation should thus be + * max(prev_size*1.5, curpos+len+1). */ + int newsize = fp->_bf._size * 3 / 2; + if (newsize < curpos + len + 1) + newsize = curpos + len + 1; + if (fp->_flags & __SOPT) + { + /* asnprintf leaves original buffer alone. */ + str = (unsigned char *)_malloc_r (ptr, newsize); + if (!str) + goto err; + memcpy (str, fp->_bf._base, curpos); + fp->_flags = (fp->_flags & ~__SOPT) | __SMBF; + } + else + { + str = (unsigned char *)_realloc_r (ptr, fp->_bf._base, + newsize); + if (!str) { + /* Free unneeded buffer. */ + _free_r (ptr, fp->_bf._base); + goto err; + } + } + fp->_bf._base = str; + fp->_p = str + curpos; + fp->_bf._size = newsize; + w = len; + fp->_w = newsize - curpos; + } + if (len < w) + w = len; + memmove ((void *) fp->_p, (void *) buf, (size_t) (w)); + fp->_w -= w; + fp->_p += w; + + return 0; + +err: + _REENT_ERRNO(ptr) = ENOMEM; + fp->_flags |= __SERR; + return EOF; +} diff --git a/newlib/libc/stdio/ssputws_r.c b/newlib/libc/stdio/ssputws_r.c new file mode 100644 index 0000000000..07ceba800e --- /dev/null +++ b/newlib/libc/stdio/ssputws_r.c @@ -0,0 +1,21 @@ +#include + +#ifndef _FVWRITE_IN_STREAMIO + +#include +#include +#include + +extern int __ssputs_r (struct _reent *ptr, FILE *fp, const char *buf, + size_t len); + +int +__ssputws_r (struct _reent *ptr, + FILE *fp, + const wchar_t *buf, + size_t len) +{ + return __ssputs_r (ptr, fp, (const char *) buf, len * sizeof (wchar_t)); +} + +#endif diff --git a/newlib/libc/stdio/sswprint_r.c b/newlib/libc/stdio/sswprint_r.c new file mode 100644 index 0000000000..963e31df38 --- /dev/null +++ b/newlib/libc/stdio/sswprint_r.c @@ -0,0 +1,38 @@ +#include + +#ifdef _FVWRITE_IN_STREAMIO + +#include +#include +#include +#include "fvwrite.h" + +extern int __ssputs_r (struct _reent *ptr, FILE *fp, const char *buf, + size_t len); + +int +__sswprint_r (struct _reent *ptr, + FILE *fp, + register struct __suio *uio) +{ + register struct __siov *iov = uio->uio_iov; + register size_t len; + int ret = 0; + + while (uio->uio_resid > 0 && uio->uio_iovcnt-- > 0) { + if ((len = iov->iov_len) > 0) { + if (__ssputs_r (ptr, fp, iov->iov_base, + len * sizeof (wchar_t)) == EOF) { + ret = -1; + break; + } + uio->uio_resid -= len; /* pretend we copied all */ + } + iov++; + } + uio->uio_resid = 0; + uio->uio_iovcnt = 0; + return ret; +} + +#endif diff --git a/newlib/libc/stdio/stdio.tex b/newlib/libc/stdio/stdio.tex index 5352c5491f..9bb9cf6c2d 100644 --- a/newlib/libc/stdio/stdio.tex +++ b/newlib/libc/stdio/stdio.tex @@ -24,81 +24,81 @@ structure. @menu -* clearerr:: Clear file or stream error indicator -* diprintf:: Print to a file descriptor (integer only) -* dprintf:: Print to a file descriptor -* fclose:: Close a file -* fcloseall:: Close all files -* fdopen:: Turn an open file into a stream -* feof:: Test for end of file -* ferror:: Test whether read/write error has occurred -* fflush:: Flush buffered file output -* fgetc:: Get a character from a file or stream -* fgetpos:: Record position in a stream or file -* fgets:: Get character string from a file or stream -* fgetwc:: Get a wide character from a file or stream -* fgetws:: Get a wide character string from a file or stream -* fileno:: Get file descriptor associated with stream -* fmemopen:: Open a stream around a fixed-length buffer -* fopen:: Open a file -* fopencookie:: Open a stream with custom callbacks -* fpurge:: Discard all pending I/O on a stream -* fputc:: Write a character on a stream or file -* fputs:: Write a character string in a file or stream -* fputwc:: Write a wide character to a file or stream -* fputws:: Write a wide character string to a file or stream -* fread:: Read array elements from a file -* freopen:: Open a file using an existing file descriptor -* fseek:: Set file position -* __fsetlocking:: Set or query locking mode on FILE stream -* fsetpos:: Restore position of a stream or file -* ftell:: Return position in a stream or file -* funopen:: Open a stream with custom callbacks -* fwide:: Set and determine the orientation of a FILE stream -* fwrite:: Write array elements from memory to a file or stream -* getc:: Get a character from a file or stream (macro) -* getc_unlocked:: Get a character from a file or stream (macro) -* getchar:: Get a character from standard input (macro) -* getchar_unlocked:: Get a character from standard input (macro) -* getdelim:: Get character string from a file or stream -* getline:: Get character string from a file or stream -* gets:: Get character string from standard input (obsolete) -* getw:: Get a word (int) from a file or stream -* getwchar:: Get a wide character from standard input -* mktemp:: Generate unused file name -* open_memstream:: Open a write stream around an arbitrary-length buffer -* perror:: Print an error message on standard error -* putc:: Write a character on a stream or file (macro) -* putc_unlocked:: Write a character on a stream or file (macro) -* putchar:: Write a character on standard output (macro) -* putchar_unlocked:: Write a character on standard output (macro) -* puts:: Write a character string on standard output -* putw:: Write a word (int) to a file or stream -* putwchar:: Write a wide character to standard output -* remove:: Delete a file's name -* rename:: Rename a file -* rewind:: Reinitialize a file or stream -* setbuf:: Specify full buffering for a file or stream -* setbuffer:: Specify full buffering for a file or stream with size -* setlinebuf:: Specify line buffering for a file or stream -* setvbuf:: Specify buffering for a file or stream -* siprintf:: Write formatted output (integer only) -* siscanf:: Scan and format input (integer only) -* sprintf:: Write formatted output -* sscanf:: Scan and format input -* stdio_ext:: Access internals of FILE structure -* swprintf:: Write formatted wide character output -* swscanf:: Scan and format wide character input -* tmpfile:: Create a temporary file -* tmpnam:: Generate name for a temporary file -* ungetc:: Push data back into a stream -* ungetwc:: Push wide character data back into a stream -* vfprintf:: Format variable argument list -* vfscanf:: Scan variable argument list -* vfwprintf:: Format variable wide character argument list -* vfwscanf:: Scan and format argument list from wide character input -* viprintf:: Format variable argument list (integer only) -* viscanf:: Scan variable format list (integer only) +* Function clearerr:: Clear file or stream error indicator +* Function diprintf:: Print to a file descriptor (integer only) +* Function dprintf:: Print to a file descriptor +* Function fclose:: Close a file +* Function fcloseall:: Close all files +* Function fdopen:: Turn an open file into a stream +* Function feof:: Test for end of file +* Function ferror:: Test whether read/write error has occurred +* Function fflush:: Flush buffered file output +* Function fgetc:: Get a character from a file or stream +* Function fgetpos:: Record position in a stream or file +* Function fgets:: Get character string from a file or stream +* Function fgetwc:: Get a wide character from a file or stream +* Function fgetws:: Get a wide character string from a file or stream +* Function fileno:: Get file descriptor associated with stream +* Function fmemopen:: Open a stream around a fixed-length buffer +* Function fopen:: Open a file +* Function fopencookie:: Open a stream with custom callbacks +* Function fpurge:: Discard all pending I/O on a stream +* Function fputc:: Write a character on a stream or file +* Function fputs:: Write a character string in a file or stream +* Function fputwc:: Write a wide character to a file or stream +* Function fputws:: Write a wide character string to a file or stream +* Function fread:: Read array elements from a file +* Function freopen:: Open a file using an existing file descriptor +* Function fseek:: Set file position +* Function __fsetlocking:: Set or query locking mode on FILE stream +* Function fsetpos:: Restore position of a stream or file +* Function ftell:: Return position in a stream or file +* Function funopen:: Open a stream with custom callbacks +* Function fwide:: Set and determine the orientation of a FILE stream +* Function fwrite:: Write array elements from memory to a file or stream +* Function getc:: Get a character from a file or stream (macro) +* Function getc_unlocked:: Get a character from a file or stream (macro) +* Function getchar:: Get a character from standard input (macro) +* Function getchar_unlocked:: Get a character from standard input (macro) +* Function getdelim:: Get character string from a file or stream +* Function getline:: Get character string from a file or stream +* Function gets:: Get character string from standard input (obsolete) +* Function getw:: Get a word (int) from a file or stream +* Function getwchar:: Get a wide character from standard input +* Function mktemp:: Generate unused file name +* Function open_memstream:: Open a write stream around an arbitrary-length buffer +* Function perror:: Print an error message on standard error +* Function putc:: Write a character on a stream or file (macro) +* Function putc_unlocked:: Write a character on a stream or file (macro) +* Function putchar:: Write a character on standard output (macro) +* Function putchar_unlocked:: Write a character on standard output (macro) +* Function puts:: Write a character string on standard output +* Function putw:: Write a word (int) to a file or stream +* Function putwchar:: Write a wide character to standard output +* Function remove:: Delete a file's name +* Function rename:: Rename a file +* Function rewind:: Reinitialize a file or stream +* Function setbuf:: Specify full buffering for a file or stream +* Function setbuffer:: Specify full buffering for a file or stream with size +* Function setlinebuf:: Specify line buffering for a file or stream +* Function setvbuf:: Specify buffering for a file or stream +* Function siprintf:: Write formatted output (integer only) +* Function siscanf:: Scan and format input (integer only) +* Function sprintf:: Write formatted output +* Function sscanf:: Scan and format input +* Function stdio_ext:: Access internals of FILE structure +* Function swprintf:: Write formatted wide character output +* Function swscanf:: Scan and format wide character input +* Function tmpfile:: Create a temporary file +* Function tmpnam:: Generate name for a temporary file +* Function ungetc:: Push data back into a stream +* Function ungetwc:: Push wide character data back into a stream +* Function vfprintf:: Format variable argument list +* Function vfscanf:: Scan variable argument list +* Function vfwprintf:: Format variable wide character argument list +* Function vfwscanf:: Scan and format argument list from wide character input +* Function viprintf:: Format variable argument list (integer only) +* Function viscanf:: Scan variable format list (integer only) @end menu @page diff --git a/newlib/libc/stdio/swprint_r.c b/newlib/libc/stdio/swprint_r.c new file mode 100644 index 0000000000..e4be0c839a --- /dev/null +++ b/newlib/libc/stdio/swprint_r.c @@ -0,0 +1,46 @@ +#include + +#ifdef _FVWRITE_IN_STREAMIO + +#include +#include +#include +#include "fvwrite.h" + +/* + * Flush out all the vectors defined by the given uio, + * then reset it so that it can be reused. + */ +int +__swprint_r (struct _reent *ptr, + FILE *fp, + register struct __suio *uio) +{ + register int err = 0; + struct __siov *iov; + wchar_t *p; + int i, len; + + if (uio->uio_resid == 0) { + uio->uio_iovcnt = 0; + return (0); + } + iov = uio->uio_iov; + for (; uio->uio_resid != 0; + uio->uio_resid -= len, iov++) { + p = (wchar_t *) iov->iov_base; + len = iov->iov_len; + for (i = 0; i < len; i++) { + if (_fputwc_r (ptr, p[i], fp) == WEOF) { + err = -1; + goto out; + } + } + } +out: + uio->uio_resid = 0; + uio->uio_iovcnt = 0; + return (err); +} + +#endif diff --git a/newlib/libc/stdio/swprintf.c b/newlib/libc/stdio/swprintf.c index 634b22beb9..e590b522ce 100644 --- a/newlib/libc/stdio/swprintf.c +++ b/newlib/libc/stdio/swprintf.c @@ -568,6 +568,7 @@ _swprintf_r (struct _reent *ptr, return EOF; } f._flags = __SWR | __SSTR; + f._flags2 = 0; f._bf._base = f._p = (unsigned char *) str; f._bf._size = f._w = (size > 0 ? (size - 1) * sizeof (wchar_t) : 0); f._file = -1; /* No file. */ @@ -608,6 +609,7 @@ swprintf (wchar_t *__restrict str, return EOF; } f._flags = __SWR | __SSTR; + f._flags2 = 0; f._bf._base = f._p = (unsigned char *) str; f._bf._size = f._w = (size > 0 ? (size - 1) * sizeof (wchar_t) : 0); f._file = -1; /* No file. */ diff --git a/newlib/libc/stdio/swscanf.c b/newlib/libc/stdio/swscanf.c index 578ac3c93f..0ef4d0ebde 100644 --- a/newlib/libc/stdio/swscanf.c +++ b/newlib/libc/stdio/swscanf.c @@ -422,6 +422,7 @@ swscanf (const wchar_t *__restrict str, const wchar_t *__restrict fmt, ...) FILE f; f._flags = __SRD | __SSTR; + f._flags2 = 0; f._bf._base = f._p = (unsigned char *) str; f._bf._size = f._r = wcslen (str) * sizeof (wchar_t); f._read = __seofread; @@ -446,6 +447,7 @@ _swscanf_r (struct _reent *ptr, const wchar_t *str, const wchar_t *fmt, ...) FILE f; f._flags = __SRD | __SSTR; + f._flags2 = 0; f._bf._base = f._p = (unsigned char *) str; f._bf._size = f._r = wcslen (str) * sizeof (wchar_t); f._read = __seofread; diff --git a/newlib/libc/stdio/tmpnam.c b/newlib/libc/stdio/tmpnam.c index 51dfd1cea6..dc04cf3f6c 100644 --- a/newlib/libc/stdio/tmpnam.c +++ b/newlib/libc/stdio/tmpnam.c @@ -84,7 +84,7 @@ The global pointer <> is also required. #ifdef _REENT_THREAD_LOCAL _Thread_local int _tls_inc; -_Thread_local char _tls_emergency; +_Thread_local char _tls_emergency[_REENT_EMERGENCY_SIZE]; #endif /* Try to open the file specified, if it can't be opened then try diff --git a/newlib/libc/stdio/ungetc.c b/newlib/libc/stdio/ungetc.c index 533c28eac4..8b10c82186 100644 --- a/newlib/libc/stdio/ungetc.c +++ b/newlib/libc/stdio/ungetc.c @@ -125,8 +125,6 @@ _ungetc_r (struct _reent *rptr, _newlib_flockfile_start (fp); - ORIENT (fp, -1); - /* After ungetc, we won't be at eof anymore */ fp->_flags &= ~__SEOF; diff --git a/newlib/libc/stdio/ungetwc.c b/newlib/libc/stdio/ungetwc.c index 16d37f2d17..a04ca3467d 100644 --- a/newlib/libc/stdio/ungetwc.c +++ b/newlib/libc/stdio/ungetwc.c @@ -82,7 +82,7 @@ _ungetwc_r (struct _reent *ptr, size_t len; _newlib_flockfile_start (fp); - ORIENT (fp, 1); + (void) ORIENT (fp, 1); if (wc == WEOF) wc = WEOF; else if ((len = _wcrtomb_r(ptr, buf, wc, &fp->_mbstate)) == (size_t)-1) diff --git a/newlib/libc/stdio/vasiprintf.c b/newlib/libc/stdio/vasiprintf.c index 1deb2dbcf3..d9c11eaf50 100644 --- a/newlib/libc/stdio/vasiprintf.c +++ b/newlib/libc/stdio/vasiprintf.c @@ -50,6 +50,7 @@ _vasiprintf_r (struct _reent *ptr, FILE f; f._flags = __SWR | __SSTR | __SMBF ; + f._flags2 = 0; f._bf._base = f._p = NULL; f._bf._size = f._w = 0; f._file = -1; /* No file. */ diff --git a/newlib/libc/stdio/vasniprintf.c b/newlib/libc/stdio/vasniprintf.c index b24cd96fb6..c85ca06e8c 100644 --- a/newlib/libc/stdio/vasniprintf.c +++ b/newlib/libc/stdio/vasniprintf.c @@ -36,6 +36,7 @@ _vasniprintf_r (struct _reent *ptr, len = 0; buf = NULL; } + f._flags2 = 0; f._bf._base = f._p = (unsigned char *) buf; /* For now, inherit the 32-bit signed limit of FILE._bf._size. FIXME - it would be nice to rewrite sys/reent.h to support size_t diff --git a/newlib/libc/stdio/vasnprintf.c b/newlib/libc/stdio/vasnprintf.c index b3787ec7a1..02f55caa9a 100644 --- a/newlib/libc/stdio/vasnprintf.c +++ b/newlib/libc/stdio/vasnprintf.c @@ -36,6 +36,7 @@ _vasnprintf_r (struct _reent *ptr, len = 0; buf = NULL; } + f._flags2 = 0; f._bf._base = f._p = (unsigned char *) buf; /* For now, inherit the 32-bit signed limit of FILE._bf._size. FIXME - it would be nice to rewrite sys/reent.h to support size_t diff --git a/newlib/libc/stdio/vasprintf.c b/newlib/libc/stdio/vasprintf.c index d7ec9c8400..b466936bd9 100644 --- a/newlib/libc/stdio/vasprintf.c +++ b/newlib/libc/stdio/vasprintf.c @@ -56,6 +56,7 @@ _vasprintf_r (struct _reent *ptr, FILE f; f._flags = __SWR | __SSTR | __SMBF ; + f._flags2 = 0; f._bf._base = f._p = NULL; f._bf._size = f._w = 0; f._file = -1; /* No file. */ diff --git a/newlib/libc/stdio/vfprintf.c b/newlib/libc/stdio/vfprintf.c index 6a198e2c65..feb1fab560 100644 --- a/newlib/libc/stdio/vfprintf.c +++ b/newlib/libc/stdio/vfprintf.c @@ -174,270 +174,24 @@ static char *rcsid = "$Id$"; #endif #ifdef STRING_ONLY + # ifdef _FVWRITE_IN_STREAMIO # define __SPRINT __ssprint_r + int __ssprint_r (struct _reent *, FILE *, register struct __suio *); # else # define __SPRINT __ssputs_r + int __ssputs_r (struct _reent *, FILE *, const char *, size_t); # endif -#else + +#else /* !STRING_ONLY */ + # ifdef _FVWRITE_IN_STREAMIO # define __SPRINT __sprint_r + int __sprint_r (struct _reent *, FILE *, register struct __suio *); # else # define __SPRINT __sfputs_r + int __sfputs_r (struct _reent *, FILE *, const char *buf, size_t); # endif -#endif - -/* The __sprint_r/__ssprint_r functions are shared between all versions of - vfprintf and vfwprintf. They must only be defined once, which we do in - the INTEGER_ONLY versions here. */ -#ifdef STRING_ONLY -#ifdef INTEGER_ONLY -#ifndef _FVWRITE_IN_STREAMIO -int -__ssputs_r (struct _reent *ptr, - FILE *fp, - const char *buf, - size_t len) -{ - register int w; - - w = fp->_w; - if (len >= w && fp->_flags & (__SMBF | __SOPT)) { - /* must be asprintf family */ - unsigned char *str; - int curpos = (fp->_p - fp->_bf._base); - /* Choose a geometric growth factor to avoid - * quadratic realloc behavior, but use a rate less - * than (1+sqrt(5))/2 to accomodate malloc - * overhead. asprintf EXPECTS us to overallocate, so - * that it can add a trailing \0 without - * reallocating. The new allocation should thus be - * max(prev_size*1.5, curpos+len+1). */ - int newsize = fp->_bf._size * 3 / 2; - if (newsize < curpos + len + 1) - newsize = curpos + len + 1; - if (fp->_flags & __SOPT) - { - /* asnprintf leaves original buffer alone. */ - str = (unsigned char *)_malloc_r (ptr, newsize); - if (!str) - { - _REENT_ERRNO(ptr) = ENOMEM; - goto err; - } - memcpy (str, fp->_bf._base, curpos); - fp->_flags = (fp->_flags & ~__SOPT) | __SMBF; - } - else - { - str = (unsigned char *)_realloc_r (ptr, fp->_bf._base, - newsize); - if (!str) { - /* Free unneeded buffer. */ - _free_r (ptr, fp->_bf._base); - /* Ensure correct errno, even if free - * changed it. */ - _REENT_ERRNO(ptr) = ENOMEM; - goto err; - } - } - fp->_bf._base = str; - fp->_p = str + curpos; - fp->_bf._size = newsize; - w = len; - fp->_w = newsize - curpos; - } - if (len < w) - w = len; - (void)memmove ((void *) fp->_p, (void *) buf, (size_t) (w)); - fp->_w -= w; - fp->_p += w; - - return 0; - -err: - fp->_flags |= __SERR; - return EOF; -} -#endif - -int -__ssprint_r (struct _reent *ptr, - FILE *fp, - register struct __suio *uio) -{ - register size_t len; - register int w; - register struct __siov *iov; - register const char *p = NULL; - - iov = uio->uio_iov; - len = 0; - - if (uio->uio_resid == 0) { - uio->uio_iovcnt = 0; - return (0); - } - - do { - while (len == 0) { - p = iov->iov_base; - len = iov->iov_len; - iov++; - } - w = fp->_w; - if (len >= w && fp->_flags & (__SMBF | __SOPT)) { - /* must be asprintf family */ - unsigned char *str; - int curpos = (fp->_p - fp->_bf._base); - /* Choose a geometric growth factor to avoid - * quadratic realloc behavior, but use a rate less - * than (1+sqrt(5))/2 to accomodate malloc - * overhead. asprintf EXPECTS us to overallocate, so - * that it can add a trailing \0 without - * reallocating. The new allocation should thus be - * max(prev_size*1.5, curpos+len+1). */ - int newsize = fp->_bf._size * 3 / 2; - if (newsize < curpos + len + 1) - newsize = curpos + len + 1; - if (fp->_flags & __SOPT) - { - /* asnprintf leaves original buffer alone. */ - str = (unsigned char *)_malloc_r (ptr, newsize); - if (!str) - { - _REENT_ERRNO(ptr) = ENOMEM; - goto err; - } - memcpy (str, fp->_bf._base, curpos); - fp->_flags = (fp->_flags & ~__SOPT) | __SMBF; - } - else - { - str = (unsigned char *)_realloc_r (ptr, fp->_bf._base, - newsize); - if (!str) { - /* Free unneeded buffer. */ - _free_r (ptr, fp->_bf._base); - /* Ensure correct errno, even if free - * changed it. */ - _REENT_ERRNO(ptr) = ENOMEM; - goto err; - } - } - fp->_bf._base = str; - fp->_p = str + curpos; - fp->_bf._size = newsize; - w = len; - fp->_w = newsize - curpos; - } - if (len < w) - w = len; - (void)memmove ((void *) fp->_p, (void *) p, (size_t) (w)); - fp->_w -= w; - fp->_p += w; - w = len; /* pretend we copied all */ - p += w; - len -= w; - } while ((uio->uio_resid -= w) != 0); - - uio->uio_resid = 0; - uio->uio_iovcnt = 0; - return 0; - -err: - fp->_flags |= __SERR; - uio->uio_resid = 0; - uio->uio_iovcnt = 0; - return EOF; -} -#else /* !INTEGER_ONLY */ -#ifndef _FVWRITE_IN_STREAMIO -int __ssputs_r (struct _reent *, FILE *, const char *, size_t); -#endif -int __ssprint_r (struct _reent *, FILE *, register struct __suio *); -#endif /* !INTEGER_ONLY */ - -#else /* !STRING_ONLY */ -#ifdef INTEGER_ONLY - -#ifndef _FVWRITE_IN_STREAMIO -int -__sfputs_r (struct _reent *ptr, - FILE *fp, - const char *buf, - size_t len) -{ - register int i; - -#if defined _WIDE_ORIENT && (!defined _ELIX_LEVEL || _ELIX_LEVEL >= 4) - if (fp->_flags2 & __SWID) { - wchar_t *p; - - p = (wchar_t *) buf; - for (i = 0; i < (len / sizeof (wchar_t)); i++) { - if (_fputwc_r (ptr, p[i], fp) == WEOF) - return -1; - } - } else { -#else - { -#endif - for (i = 0; i < len; i++) { - if (_fputc_r (ptr, buf[i], fp) == EOF) - return -1; - } - } - return (0); -} -#endif -/* - * Flush out all the vectors defined by the given uio, - * then reset it so that it can be reused. - */ -int -__sprint_r (struct _reent *ptr, - FILE *fp, - register struct __suio *uio) -{ - register int err = 0; - - if (uio->uio_resid == 0) { - uio->uio_iovcnt = 0; - return (0); - } -#if defined _WIDE_ORIENT && (!defined _ELIX_LEVEL || _ELIX_LEVEL >= 4) - if (fp->_flags2 & __SWID) { - struct __siov *iov; - wchar_t *p; - int i, len; - - iov = uio->uio_iov; - for (; uio->uio_resid != 0; - uio->uio_resid -= len * sizeof (wchar_t), iov++) { - p = (wchar_t *) iov->iov_base; - len = iov->iov_len / sizeof (wchar_t); - for (i = 0; i < len; i++) { - if (_fputwc_r (ptr, p[i], fp) == WEOF) { - err = -1; - goto out; - } - } - } - } else -#endif - err = __sfvwrite_r(ptr, fp, uio); -out: - uio->uio_resid = 0; - uio->uio_iovcnt = 0; - return (err); -} -#else /* !INTEGER_ONLY */ -#ifndef _FVWRITE_IN_STREAMIO -int __sfputs_r (struct _reent *, FILE *, const char *buf, size_t); -#endif -int __sprint_r (struct _reent *, FILE *, register struct __suio *); -#endif /* !INTEGER_ONLY */ #ifdef _UNBUF_STREAM_OPT /* @@ -845,7 +599,10 @@ _VFPRINTF_R (struct _reent *data, CHECK_INIT (data, fp); _newlib_flockfile_start (fp); - ORIENT(fp, -1); + if (ORIENT(fp, -1) != -1) { + _newlib_flockfile_exit (fp); + return (EOF); + } /* sorry, fprintf(read_only_file, "") returns EOF, not 0 */ if (cantwrite (data, fp)) { diff --git a/newlib/libc/stdio/vfscanf.c b/newlib/libc/stdio/vfscanf.c index cfeea98762..71e2c3e222 100644 --- a/newlib/libc/stdio/vfscanf.c +++ b/newlib/libc/stdio/vfscanf.c @@ -589,7 +589,11 @@ __SVFSCANF_R (struct _reent *rptr, _newlib_flockfile_start (fp); - ORIENT (fp, -1); + if (ORIENT (fp, -1) != -1) + { + nassigned = EOF; + goto all_done; + } nassigned = 0; nread = 0; diff --git a/newlib/libc/stdio/vfwprintf.c b/newlib/libc/stdio/vfwprintf.c index 7807a1229a..5a5c368298 100644 --- a/newlib/libc/stdio/vfwprintf.c +++ b/newlib/libc/stdio/vfwprintf.c @@ -153,18 +153,18 @@ int _VFWPRINTF_R (struct _reent *, FILE *, const wchar_t *, va_list); /* Defined in vfprintf.c. */ #ifdef _FVWRITE_IN_STREAMIO # ifdef STRING_ONLY -# define __SPRINT __ssprint_r +# define __SPRINT __sswprint_r # else -# define __SPRINT __sprint_r +# define __SPRINT __swprint_r # endif int __SPRINT (struct _reent *, FILE *, register struct __suio *); #else # ifdef STRING_ONLY -# define __SPRINT __ssputs_r +# define __SPRINT __ssputws_r # else -# define __SPRINT __sfputs_r +# define __SPRINT __sfputws_r # endif -int __SPRINT (struct _reent *, FILE *, const char *, size_t); +int __SPRINT (struct _reent *, FILE *, const wchar_t *, size_t); #endif #ifndef STRING_ONLY #ifdef _UNBUF_STREAM_OPT @@ -479,8 +479,8 @@ _VFWPRINTF_R (struct _reent *data, #ifdef _FVWRITE_IN_STREAMIO #define PRINT(ptr, len) { \ iovp->iov_base = (char *) (ptr); \ - iovp->iov_len = (len) * sizeof (wchar_t); \ - uio.uio_resid += (len) * sizeof (wchar_t); \ + iovp->iov_len = (len); \ + uio.uio_resid += iovp->iov_len; \ iovp++; \ if (++uio.uio_iovcnt >= NIOV) { \ if (__SPRINT(data, fp, &uio)) \ @@ -513,7 +513,7 @@ _VFWPRINTF_R (struct _reent *data, } #else #define PRINT(ptr, len) { \ - if (__SPRINT (data, fp, (const char *)(ptr), (len) * sizeof (wchar_t)) == EOF) \ + if (__SPRINT (data, fp, (ptr), (len)) == EOF) \ goto error; \ } #define PAD(howmany, with) { \ @@ -588,7 +588,10 @@ _VFWPRINTF_R (struct _reent *data, CHECK_INIT (data, fp); _newlib_flockfile_start (fp); - ORIENT(fp, 1); + if (ORIENT(fp, 1) != 1) { + _newlib_flockfile_exit (fp); + return (EOF); + } /* sorry, fwprintf(read_only_file, "") returns EOF, not 0 */ if (cantwrite (data, fp)) { diff --git a/newlib/libc/stdio/vfwscanf.c b/newlib/libc/stdio/vfwscanf.c index df966f9292..d2f91dde2b 100644 --- a/newlib/libc/stdio/vfwscanf.c +++ b/newlib/libc/stdio/vfwscanf.c @@ -516,7 +516,11 @@ __SVFWSCANF_R (struct _reent *rptr, _newlib_flockfile_start (fp); - ORIENT (fp, 1); + if (ORIENT (fp, 1) != 1) + { + nassigned = EOF; + goto all_done; + } nassigned = 0; nread = 0; diff --git a/newlib/libc/stdio/vsiprintf.c b/newlib/libc/stdio/vsiprintf.c index 8128cb7726..af07ad85e8 100644 --- a/newlib/libc/stdio/vsiprintf.c +++ b/newlib/libc/stdio/vsiprintf.c @@ -50,6 +50,7 @@ _vsiprintf_r (struct _reent *ptr, FILE f; f._flags = __SWR | __SSTR; + f._flags2 = 0; f._bf._base = f._p = (unsigned char *) str; f._bf._size = f._w = INT_MAX; f._file = -1; /* No file. */ diff --git a/newlib/libc/stdio/vsiscanf.c b/newlib/libc/stdio/vsiscanf.c index d7135ef712..4e28d10793 100644 --- a/newlib/libc/stdio/vsiscanf.c +++ b/newlib/libc/stdio/vsiscanf.c @@ -49,6 +49,7 @@ _vsiscanf_r (struct _reent *ptr, FILE f; f._flags = __SRD | __SSTR; + f._flags2 = 0; f._bf._base = f._p = (unsigned char *) str; f._bf._size = f._r = strlen (str); f._read = __seofread; diff --git a/newlib/libc/stdio/vsniprintf.c b/newlib/libc/stdio/vsniprintf.c index e7625ffd53..a50a0a9931 100644 --- a/newlib/libc/stdio/vsniprintf.c +++ b/newlib/libc/stdio/vsniprintf.c @@ -58,6 +58,7 @@ _vsniprintf_r (struct _reent *ptr, return EOF; } f._flags = __SWR | __SSTR; + f._flags2 = 0; f._bf._base = f._p = (unsigned char *) str; f._bf._size = f._w = (size > 0 ? size - 1 : 0); f._file = -1; /* No file. */ diff --git a/newlib/libc/stdio/vsnprintf.c b/newlib/libc/stdio/vsnprintf.c index ecf82eaeff..d9c72b526b 100644 --- a/newlib/libc/stdio/vsnprintf.c +++ b/newlib/libc/stdio/vsnprintf.c @@ -64,6 +64,7 @@ _vsnprintf_r (struct _reent *ptr, return EOF; } f._flags = __SWR | __SSTR; + f._flags2 = 0; f._bf._base = f._p = (unsigned char *) str; f._bf._size = f._w = (size > 0 ? size - 1 : 0); f._file = -1; /* No file. */ diff --git a/newlib/libc/stdio/vsprintf.c b/newlib/libc/stdio/vsprintf.c index 4d51fd0dc0..4d4619fd03 100644 --- a/newlib/libc/stdio/vsprintf.c +++ b/newlib/libc/stdio/vsprintf.c @@ -56,6 +56,7 @@ _vsprintf_r (struct _reent *ptr, FILE f; f._flags = __SWR | __SSTR; + f._flags2 = 0; f._bf._base = f._p = (unsigned char *) str; f._bf._size = f._w = INT_MAX; f._file = -1; /* No file. */ diff --git a/newlib/libc/stdio/vsscanf.c b/newlib/libc/stdio/vsscanf.c index e9e84088f7..6150f541bb 100644 --- a/newlib/libc/stdio/vsscanf.c +++ b/newlib/libc/stdio/vsscanf.c @@ -55,6 +55,7 @@ _vsscanf_r (struct _reent *ptr, FILE f; f._flags = __SRD | __SSTR; + f._flags2 = 0; f._bf._base = f._p = (unsigned char *) str; f._bf._size = f._r = strlen (str); f._read = __seofread; diff --git a/newlib/libc/stdio/vswprintf.c b/newlib/libc/stdio/vswprintf.c index 08a8545bae..ab2e52ff49 100644 --- a/newlib/libc/stdio/vswprintf.c +++ b/newlib/libc/stdio/vswprintf.c @@ -46,6 +46,7 @@ _vswprintf_r (struct _reent *ptr, return EOF; } f._flags = __SWR | __SSTR; + f._flags2 = 0; f._bf._base = f._p = (unsigned char *) str; f._bf._size = f._w = (size > 0 ? (size - 1) * sizeof (wchar_t) : 0); f._file = -1; /* No file. */ diff --git a/newlib/libc/stdio/wbuf.c b/newlib/libc/stdio/wbuf.c index 2474903037..2e742e255b 100644 --- a/newlib/libc/stdio/wbuf.c +++ b/newlib/libc/stdio/wbuf.c @@ -56,7 +56,8 @@ __swbuf_r (struct _reent *ptr, return EOF; c = (unsigned char) c; - ORIENT (fp, -1); + if (ORIENT (fp, -1) != -1) + return EOF; /* * If it is completely full, flush it out. Then, in any case, diff --git a/newlib/libc/stdio/wbufw.c b/newlib/libc/stdio/wbufw.c new file mode 100644 index 0000000000..01639df696 --- /dev/null +++ b/newlib/libc/stdio/wbufw.c @@ -0,0 +1,66 @@ +/* + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * Redistribution and use in source and binary forms are permitted + * provided that the above copyright notice and this paragraph are + * duplicated in all such forms and that any documentation, + * and/or other materials related to such + * distribution and use acknowledge that the software was developed + * by the University of California, Berkeley. The name of the + * University may not be used to endorse or promote products derived + * from this software without specific prior written permission. + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. + */ +/* No user fns here. Pesch 15apr92. */ + +#if defined(LIBC_SCCS) && !defined(lint) +static char sccsid[] = "%W% (Berkeley) %G%"; +#endif /* LIBC_SCCS and not lint */ + +#include <_ansi.h> +#include +#include +#include "local.h" +#include "fvwrite.h" + +/* + * Note that this is the same function as __swbuf_r, just to be called + * from wide-char functions! + * + * The only difference is that we set and test the orientation differently. + */ + +int +__swbufw_r (struct _reent *ptr, + register int c, + register FILE *fp) +{ + register int n; + + CHECK_INIT (ptr, fp); + + fp->_w = fp->_lbfsize; + if (cantwrite (ptr, fp)) + return EOF; + c = (unsigned char) c; + + if (ORIENT (fp, 1) != 1) + return EOF; + + n = fp->_p - fp->_bf._base; + if (n >= fp->_bf._size) + { + if (_fflush_r (ptr, fp)) + return EOF; + n = 0; + } + fp->_w--; + *fp->_p++ = c; + if (++n == fp->_bf._size || (fp->_flags & __SLBF && c == '\n')) + if (_fflush_r (ptr, fp)) + return EOF; + return c; +} diff --git a/newlib/libc/stdio64/stdio64.tex b/newlib/libc/stdio64/stdio64.tex index 95f898f3d9..1c84d89fc6 100644 --- a/newlib/libc/stdio64/stdio64.tex +++ b/newlib/libc/stdio64/stdio64.tex @@ -10,14 +10,14 @@ The corresponding declarations are in @file{stdio.h}. @menu -* fdopen64:: Turn open large file into a stream -* fopen64:: Open a large file -* freopen64:: Open a large file using an existing file descriptor -* fsetpos64:: Restore position of a large stream or file -* fgetpos64:: Get position of a large stream or file -* ftello64:: Return position in a large stream or file -* fseeko64:: Set large file position -* tmpfile64:: Create a temporary large file +* Function fdopen64:: Turn open large file into a stream +* Function fopen64:: Open a large file +* Function freopen64:: Open a large file using an existing file descriptor +* Function fsetpos64:: Restore position of a large stream or file +* Function fgetpos64:: Get position of a large stream or file +* Function ftello64:: Return position in a large stream or file +* Function fseeko64:: Set large file position +* Function tmpfile64:: Create a temporary large file @end menu @page diff --git a/newlib/libc/stdlib/_mallocr.c b/newlib/libc/stdlib/_mallocr.c index 1997b6db15..c73982c185 100644 --- a/newlib/libc/stdlib/_mallocr.c +++ b/newlib/libc/stdlib/_mallocr.c @@ -346,7 +346,7 @@ extern void __malloc_unlock(); #define RDECL struct _reent *reent_ptr; #endif -#define RERRNO reent_ptr->_errno +#define RERRNO _REENT_ERRNO(reent_ptr) #define RCALL reent_ptr, #define RONECALL reent_ptr diff --git a/newlib/libc/stdlib/local.h b/newlib/libc/stdlib/local.h index a96ed2cc4d..26fd4f05dc 100644 --- a/newlib/libc/stdlib/local.h +++ b/newlib/libc/stdlib/local.h @@ -24,6 +24,7 @@ wctomb_p __iso_wctomb (int val); wctomb_p __cp_wctomb (int val); #ifdef __CYGWIN__ wctomb_f __gbk_wctomb; +wctomb_f __gb18030_wctomb; wctomb_f __kr_wctomb; wctomb_f __big5_wctomb; #endif @@ -45,6 +46,7 @@ mbtowc_p __iso_mbtowc (int val); mbtowc_p __cp_mbtowc (int val); #ifdef __CYGWIN__ mbtowc_f __gbk_mbtowc; +mbtowc_f __gb18030_mbtowc; mbtowc_f __kr_mbtowc; mbtowc_f __big5_mbtowc; #endif diff --git a/newlib/libc/stdlib/mbtowc_r.c b/newlib/libc/stdlib/mbtowc_r.c index ee43736378..cab8333d70 100644 --- a/newlib/libc/stdlib/mbtowc_r.c +++ b/newlib/libc/stdlib/mbtowc_r.c @@ -36,14 +36,6 @@ __ascii_mbtowc (struct _reent *r, if (n == 0) return -2; -#ifdef STRICTLY_7BIT_ASCII - if ((wchar_t)*t >= 0x80) - { - _REENT_ERRNO(r) = EILSEQ; - return -1; - } -#endif - *pwc = (wchar_t)*t; if (*t == '\0') @@ -487,7 +479,14 @@ __cp_102_mbtowc (struct _reent *r, wchar_t *pwc, const char *s, size_t n, return ___cp_mbtowc (r, pwc, s, n, 25, state); } -static mbtowc_p __cp_xxx_mbtowc[26] = { +static int +__cp_103_mbtowc (struct _reent *r, wchar_t *pwc, const char *s, size_t n, + mbstate_t *state) +{ + return ___cp_mbtowc (r, pwc, s, n, 26, state); +} + +static mbtowc_p __cp_xxx_mbtowc[27] = { __cp_437_mbtowc, __cp_720_mbtowc, __cp_737_mbtowc, @@ -513,7 +512,8 @@ static mbtowc_p __cp_xxx_mbtowc[26] = { __cp_20866_mbtowc, __cp_21866_mbtowc, __cp_101_mbtowc, - __cp_102_mbtowc + __cp_102_mbtowc, + __cp_103_mbtowc, }; /* val *MUST* be valid! All checks for validity are supposed to be diff --git a/newlib/libc/stdlib/nano-mallocr.c b/newlib/libc/stdlib/nano-mallocr.c index b2273ba609..030be44add 100644 --- a/newlib/libc/stdlib/nano-mallocr.c +++ b/newlib/libc/stdlib/nano-mallocr.c @@ -64,7 +64,7 @@ #define MALLOC_LOCK __malloc_lock(reent_ptr) #define MALLOC_UNLOCK __malloc_unlock(reent_ptr) -#define RERRNO reent_ptr->_errno +#define RERRNO _REENT_ERRNO(reent_ptr) #define nano_malloc _malloc_r #define nano_free _free_r @@ -333,14 +333,23 @@ void * nano_malloc(RARG malloc_size_t s) { p->size += alloc_size; - /* Remove chunk from free_list */ + /* Remove chunk from free_list. Since p != NULL there is + at least one chunk */ r = free_list; - while (r && p != r->next) + if (r->next == NULL) { - r = r->next; + /* There is only a single chunk, remove it */ + free_list = NULL; + } + else + { + /* Search for the chunk before the one to be removed */ + while (p != r->next) + { + r = r->next; + } + r->next = NULL; } - r->next = NULL; - r = p; } else @@ -387,7 +396,7 @@ void * nano_malloc(RARG malloc_size_t s) *(long *)((char *)r + offset) = -offset; } - assert(align_ptr + size <= (char *)r + alloc_size); + assert(align_ptr + s <= (char *)r + alloc_size); return align_ptr; } #endif /* DEFINE_MALLOC */ diff --git a/newlib/libc/stdlib/sb_charsets.c b/newlib/libc/stdlib/sb_charsets.c index 961eb15736..4984a2fe35 100644 --- a/newlib/libc/stdlib/sb_charsets.c +++ b/newlib/libc/stdlib/sb_charsets.c @@ -196,12 +196,12 @@ wchar_t __iso_8859_conv[14][0x60] = { #endif /* _MB_EXTENDED_CHARSETS_ISO */ #ifdef _MB_EXTENDED_CHARSETS_WINDOWS -/* Tables for the Windows default singlebyte ANSI codepage conversion. +/* Tables for the Windows default singlebyte ANSI codepage conversion. The first index into the table is a value computed from the codepage value (function __cp_index), the second index is the value of the incoming character - 0x80. Values < 0x80 don't have to be converted anyway. */ -wchar_t __cp_conv[26][0x80] = { +wchar_t __cp_conv[27][0x80] = { /* CP437 */ { 0xc7, 0xfc, 0xe9, 0xe2, 0xe4, 0xe0, 0xe5, 0xe7, 0xea, 0xeb, 0xe8, 0xef, 0xee, 0xec, 0xc4, 0xc5, @@ -619,37 +619,54 @@ wchar_t __cp_conv[26][0x80] = { { 0x80, 0x81, 0x201a, 0x192, 0x201e, 0x2026, 0x2020, 0x2021, 0x2c6, 0x2030, 0x160, 0x2039, 0x152, 0x8d, 0x8e, 0x8f, 0x90, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, - 0x2dc, 0x2122, 0x161, 0x203a, 0x153, 0x9d, 0x9e, 0x178, - 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, - 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, - 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, - 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, + 0x2dc, 0x2122, 0x161, 0x203a, 0x153, 0x9d, 0x9e, 0x178, + 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7, + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, + 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7, + 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf, 0x10d0, 0x10d1, 0x10d2, 0x10d3, 0x10d4, 0x10d5, 0x10d6, 0x10f1, 0x10d7, 0x10d8, 0x10d9, 0x10da, 0x10db, 0x10dc, 0x10f2, 0x10dd, 0x10de, 0x10df, 0x10e0, 0x10e1, 0x10e2, 0x10f3, 0x10e3, 0x10e4, 0x10e5, 0x10e6, 0x10e7, 0x10e8, 0x10e9, 0x10ea, 0x10eb, 0x10ec, 0x10ed, 0x10ee, 0x10f4, 0x10ef, 0x10f0, 0x10f5, 0xe6, 0xe7, - 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, - 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, + 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef, + 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff }, /* CP102 (PT154) Cyrillic-Asian charset, used as the default charset in the kk_KZ locale (Kazakh, Kazakhstan). */ { 0x496, 0x492, 0x4ee, 0x493, 0x201e, 0x2026, 0x4b6, 0x4ae, - 0x4b2, 0x4af, 0x4a0, 0x4e2, 0x4a2, 0x49a, 0x4ba, 0x4b8, + 0x4b2, 0x4af, 0x4a0, 0x4e2, 0x4a2, 0x49a, 0x4ba, 0x4b8, 0x497, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, - 0x4b3, 0x4b7, 0x4a1, 0x4e3, 0x4a3, 0x49b, 0x4bb, 0x4b9, + 0x4b3, 0x4b7, 0x4a1, 0x4e3, 0x4a3, 0x49b, 0x4bb, 0x4b9, 0xa0, 0x40e, 0x45e, 0x408, 0x4e8, 0x498, 0x4b0, 0xa7, 0x401, 0xa9, 0x4d8, 0xab, 0xac, 0x4ef, 0xae, 0x49c, 0xb0, 0x4b1, 0x406, 0x456, 0x499, 0x4e9, 0xb6, 0xb7, - 0x451, 0x2116, 0x4d9, 0xbb, 0x458, 0x4aa, 0x4ab, 0x49d, - 0x410, 0x411, 0x412, 0x413, 0x414, 0x415, 0x416, 0x417, - 0x418, 0x419, 0x41a, 0x41b, 0x41c, 0x41d, 0x41e, 0x41f, - 0x420, 0x421, 0x422, 0x423, 0x424, 0x425, 0x426, 0x427, - 0x428, 0x429, 0x42a, 0x42b, 0x42c, 0x42d, 0x42e, 0x42f, - 0x430, 0x431, 0x432, 0x433, 0x434, 0x435, 0x436, 0x437, - 0x438, 0x439, 0x43a, 0x43b, 0x43c, 0x43d, 0x43e, 0x43f, - 0x440, 0x441, 0x442, 0x443, 0x444, 0x445, 0x446, 0x447, - 0x448, 0x449, 0x44a, 0x44b, 0x44c, 0x44d, 0x44e, 0x44f } + 0x451, 0x2116, 0x4d9, 0xbb, 0x458, 0x4aa, 0x4ab, 0x49d, + 0x410, 0x411, 0x412, 0x413, 0x414, 0x415, 0x416, 0x417, + 0x418, 0x419, 0x41a, 0x41b, 0x41c, 0x41d, 0x41e, 0x41f, + 0x420, 0x421, 0x422, 0x423, 0x424, 0x425, 0x426, 0x427, + 0x428, 0x429, 0x42a, 0x42b, 0x42c, 0x42d, 0x42e, 0x42f, + 0x430, 0x431, 0x432, 0x433, 0x434, 0x435, 0x436, 0x437, + 0x438, 0x439, 0x43a, 0x43b, 0x43c, 0x43d, 0x43e, 0x43f, + 0x440, 0x441, 0x442, 0x443, 0x444, 0x445, 0x446, 0x447, + 0x448, 0x449, 0x44a, 0x44b, 0x44c, 0x44d, 0x44e, 0x44f }, + /* CP103 (KOI8-T) */ + { 0x049b, 0x0493, 0x201a, 0x0492, 0x201e, 0x2026, 0x2020, 0x2021, + 0x88, 0x2030, 0x04b3, 0x2039, 0x04b2, 0x04b7, 0x04b6, 0x8f, + 0x049a, 0x2018, 0x2019, 0x201c, 0x201d, 0x2022, 0x2013, 0x2014, + 0x98, 0x2122, 0x9a, 0x203a, 0x9c, 0x9d, 0x9e, 0x9f, + 0xa0, 0x04ef, 0x04ee, 0x0451, 0xa4, 0x04e3, 0xa6, 0xa7, + 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf, + 0xb0, 0xb1, 0xb2, 0x401, 0xb4, 0x04e2, 0xb6, 0xb7, + 0xb8, 0x2116, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xa9, + 0x44e, 0x430, 0x431, 0x446, 0x434, 0x435, 0x444, 0x433, + 0x445, 0x438, 0x439, 0x43a, 0x43b, 0x43c, 0x43d, 0x43e, + 0x43f, 0x44f, 0x440, 0x441, 0x442, 0x443, 0x436, 0x432, + 0x44c, 0x44b, 0x437, 0x448, 0x44d, 0x449, 0x447, 0x44a, + 0x42e, 0x410, 0x411, 0x426, 0x414, 0x415, 0x424, 0x413, + 0x425, 0x418, 0x419, 0x41a, 0x41b, 0x41c, 0x41d, 0x41e, + 0x41f, 0x42f, 0x420, 0x421, 0x422, 0x423, 0x416, 0x412, + 0x42c, 0x42b, 0x417, 0x428, 0x42d, 0x429, 0x427, 0x42a }, }; #endif /* _MB_EXTENDED_CHARSETS_WINDOWS */ @@ -776,6 +793,9 @@ __cp_val_index (int val) case 102: cp_idx = 25; break; + case 103: + cp_idx = 26; + break; default: cp_idx = -1; break; diff --git a/newlib/libc/stdlib/stdlib.tex b/newlib/libc/stdlib/stdlib.tex index 75d80f4d6b..4da8fcfe8c 100644 --- a/newlib/libc/stdlib/stdlib.tex +++ b/newlib/libc/stdlib/stdlib.tex @@ -5,57 +5,57 @@ The corresponding declarations are in the header file @file{stdlib.h}. @menu -* _Exit:: End program execution without cleaning up -* a64l:: String to long long -* abort:: Abnormal termination of a program -* abs:: Integer absolute value (magnitude) -* assert:: Macro for Debugging Diagnostics -* atexit:: Request execution of functions at program exit -* atof:: String to double or float -* atoi:: String to integer -* atoll:: String to long long -* bsearch:: Binary search -* calloc:: Allocate space for arrays -* div:: Divide two integers -* ecvtbuf:: Double or float to string of digits -* ecvt:: Double or float to string of digits (malloc result) -* __env_lock:: Lock environment list for getenv and setenv -* gcvt:: Format double or float as string -* exit:: End program execution -* getenv:: Look up environment variable -* itoa:: Integer to string -* labs:: Long integer absolute value (magnitude) -* ldiv:: Divide two long integers -* llabs:: Long long integer absolute value (magnitude) -* lldiv:: Divide two long long integers -* malloc:: Allocate and manage memory (malloc, realloc, free) -* mallinfo:: Get information about allocated memory -* __malloc_lock:: Lock memory pool for malloc and free -* mbsrtowcs:: Convert a character string to a wide-character string -* mbstowcs:: Minimal multibyte string to wide string converter -* mblen:: Minimal multibyte length -* mbtowc:: Minimal multibyte to wide character converter -* on_exit:: Request execution of functions at program exit -* qsort:: Array sort -* rand:: Pseudo-random numbers -* random:: Pseudo-random numbers -* rand48:: Uniformly distributed pseudo-random numbers -* rpmatch:: Determine whether response is affirmative or negative -* strtod:: String to double or float -* strtol:: String to long -* strtoll:: String to long long -* strtoul:: String to unsigned long -* strtoull:: String to unsigned long long -* wcsrtombs:: Convert a wide-character string to a character string -* wcstod:: Wide string to double or float -* wcstol:: Wide string to long -* wcstoll:: Wide string to long long -* wcstoul:: Wide string to unsigned long -* wcstoull:: Wide string to unsigned long long -* system:: Execute command string -* utoa:: Unsigned integer to string -* wcstombs:: Minimal wide string to multibyte string converter -* wctomb:: Minimal wide character to multibyte converter +* Function _Exit:: End program execution without cleaning up +* Function a64l:: String to long long +* Function abort:: Abnormal termination of a program +* Function abs:: Integer absolute value (magnitude) +* Function assert:: Macro for Debugging Diagnostics +* Function atexit:: Request execution of functions at program exit +* Function atof:: String to double or float +* Function atoi:: String to integer +* Function atoll:: String to long long +* Function bsearch:: Binary search +* Function calloc:: Allocate space for arrays +* Function div:: Divide two integers +* Function ecvtbuf:: Double or float to string of digits +* Function ecvt:: Double or float to string of digits (malloc result) +* Function __env_lock:: Lock environment list for getenv and setenv +* Function gcvt:: Format double or float as string +* Function exit:: End program execution +* Function getenv:: Look up environment variable +* Function itoa:: Integer to string +* Function labs:: Long integer absolute value (magnitude) +* Function ldiv:: Divide two long integers +* Function llabs:: Long long integer absolute value (magnitude) +* Function lldiv:: Divide two long long integers +* Function malloc:: Allocate and manage memory (malloc, realloc, free) +* Function mallinfo:: Get information about allocated memory +* Function __malloc_lock:: Lock memory pool for malloc and free +* Function mbsrtowcs:: Convert a character string to a wide-character string +* Function mbstowcs:: Minimal multibyte string to wide string converter +* Function mblen:: Minimal multibyte length +* Function mbtowc:: Minimal multibyte to wide character converter +* Function on_exit:: Request execution of functions at program exit +* Function qsort:: Array sort +* Function rand:: Pseudo-random numbers +* Function random:: Pseudo-random numbers +* Function rand48:: Uniformly distributed pseudo-random numbers +* Function rpmatch:: Determine whether response is affirmative or negative +* Function strtod:: String to double or float +* Function strtol:: String to long +* Function strtoll:: String to long long +* Function strtoul:: String to unsigned long +* Function strtoull:: String to unsigned long long +* Function wcsrtombs:: Convert a wide-character string to a character string +* Function wcstod:: Wide string to double or float +* Function wcstol:: Wide string to long +* Function wcstoll:: Wide string to long long +* Function wcstoul:: Wide string to unsigned long +* Function wcstoull:: Wide string to unsigned long long +* Function system:: Execute command string +* Function utoa:: Unsigned integer to string +* Function wcstombs:: Minimal wide string to multibyte string converter +* Function wctomb:: Minimal wide character to multibyte converter @end menu @page diff --git a/newlib/libc/stdlib/wctomb_r.c b/newlib/libc/stdlib/wctomb_r.c index 2c536cec0e..5ea1e13e48 100644 --- a/newlib/libc/stdlib/wctomb_r.c +++ b/newlib/libc/stdlib/wctomb_r.c @@ -29,11 +29,7 @@ __ascii_wctomb (struct _reent *r, if (s == NULL) return 0; -#ifdef STRICTLY_7BIT_ASCII - if ((size_t)wchar >= 0x80) -#else if ((size_t)wchar >= 0x100) -#endif { _REENT_ERRNO(r) = EILSEQ; return -1; @@ -611,7 +607,13 @@ __cp_102_wctomb (struct _reent *r, char *s, wchar_t _wchar, mbstate_t *state) return ___cp_wctomb (r, s, _wchar, 25, state); } -static wctomb_p __cp_xxx_wctomb[26] = { +static int +__cp_103_wctomb (struct _reent *r, char *s, wchar_t _wchar, mbstate_t *state) +{ + return ___cp_wctomb (r, s, _wchar, 26, state); +} + +static wctomb_p __cp_xxx_wctomb[27] = { __cp_437_wctomb, __cp_720_wctomb, __cp_737_wctomb, @@ -637,7 +639,8 @@ static wctomb_p __cp_xxx_wctomb[26] = { __cp_20866_wctomb, __cp_21866_wctomb, __cp_101_wctomb, - __cp_102_wctomb + __cp_102_wctomb, + __cp_103_wctomb, }; /* val *MUST* be valid! All checks for validity are supposed to be diff --git a/newlib/libc/string/combining.t b/newlib/libc/string/combining.t index da856bd74e..0d7345c49a 100644 --- a/newlib/libc/string/combining.t +++ b/newlib/libc/string/combining.t @@ -30,7 +30,7 @@ { 0x0D4D, 0x0D4D }, { 0x0D62, 0x0D63 }, { 0x0D81, 0x0D81 }, { 0x0DCA, 0x0DCA }, { 0x0DD2, 0x0DD4 }, { 0x0DD6, 0x0DD6 }, { 0x0E31, 0x0E31 }, { 0x0E34, 0x0E3A }, { 0x0E47, 0x0E4E }, - { 0x0EB1, 0x0EB1 }, { 0x0EB4, 0x0EBC }, { 0x0EC8, 0x0ECD }, + { 0x0EB1, 0x0EB1 }, { 0x0EB4, 0x0EBC }, { 0x0EC8, 0x0ECE }, { 0x0F18, 0x0F19 }, { 0x0F35, 0x0F35 }, { 0x0F37, 0x0F37 }, { 0x0F39, 0x0F39 }, { 0x0F71, 0x0F7E }, { 0x0F80, 0x0F84 }, { 0x0F86, 0x0F87 }, { 0x0F8D, 0x0F97 }, { 0x0F99, 0x0FBC }, @@ -76,44 +76,47 @@ { 0x10376, 0x1037A }, { 0x10A01, 0x10A03 }, { 0x10A05, 0x10A06 }, { 0x10A0C, 0x10A0F }, { 0x10A38, 0x10A3A }, { 0x10A3F, 0x10A3F }, { 0x10AE5, 0x10AE6 }, { 0x10D24, 0x10D27 }, { 0x10EAB, 0x10EAC }, - { 0x10F46, 0x10F50 }, { 0x10F82, 0x10F85 }, { 0x11001, 0x11001 }, - { 0x11038, 0x11046 }, { 0x11070, 0x11070 }, { 0x11073, 0x11074 }, - { 0x1107F, 0x11081 }, { 0x110B3, 0x110B6 }, { 0x110B9, 0x110BA }, - { 0x110BD, 0x110BD }, { 0x110C2, 0x110C2 }, { 0x110CD, 0x110CD }, - { 0x11100, 0x11102 }, { 0x11127, 0x1112B }, { 0x1112D, 0x11134 }, - { 0x11173, 0x11173 }, { 0x11180, 0x11181 }, { 0x111B6, 0x111BE }, - { 0x111C9, 0x111CC }, { 0x111CF, 0x111CF }, { 0x1122F, 0x11231 }, - { 0x11234, 0x11234 }, { 0x11236, 0x11237 }, { 0x1123E, 0x1123E }, - { 0x112DF, 0x112DF }, { 0x112E3, 0x112EA }, { 0x11300, 0x11301 }, - { 0x1133B, 0x1133C }, { 0x11340, 0x11340 }, { 0x11366, 0x1136C }, - { 0x11370, 0x11374 }, { 0x11438, 0x1143F }, { 0x11442, 0x11444 }, - { 0x11446, 0x11446 }, { 0x1145E, 0x1145E }, { 0x114B3, 0x114B8 }, - { 0x114BA, 0x114BA }, { 0x114BF, 0x114C0 }, { 0x114C2, 0x114C3 }, - { 0x115B2, 0x115B5 }, { 0x115BC, 0x115BD }, { 0x115BF, 0x115C0 }, - { 0x115DC, 0x115DD }, { 0x11633, 0x1163A }, { 0x1163D, 0x1163D }, - { 0x1163F, 0x11640 }, { 0x116AB, 0x116AB }, { 0x116AD, 0x116AD }, - { 0x116B0, 0x116B5 }, { 0x116B7, 0x116B7 }, { 0x1171D, 0x1171F }, - { 0x11722, 0x11725 }, { 0x11727, 0x1172B }, { 0x1182F, 0x11837 }, - { 0x11839, 0x1183A }, { 0x1193B, 0x1193C }, { 0x1193E, 0x1193E }, - { 0x11943, 0x11943 }, { 0x119D4, 0x119D7 }, { 0x119DA, 0x119DB }, - { 0x119E0, 0x119E0 }, { 0x11A01, 0x11A0A }, { 0x11A33, 0x11A38 }, - { 0x11A3B, 0x11A3E }, { 0x11A47, 0x11A47 }, { 0x11A51, 0x11A56 }, - { 0x11A59, 0x11A5B }, { 0x11A8A, 0x11A96 }, { 0x11A98, 0x11A99 }, - { 0x11C30, 0x11C36 }, { 0x11C38, 0x11C3D }, { 0x11C3F, 0x11C3F }, - { 0x11C92, 0x11CA7 }, { 0x11CAA, 0x11CB0 }, { 0x11CB2, 0x11CB3 }, - { 0x11CB5, 0x11CB6 }, { 0x11D31, 0x11D36 }, { 0x11D3A, 0x11D3A }, - { 0x11D3C, 0x11D3D }, { 0x11D3F, 0x11D45 }, { 0x11D47, 0x11D47 }, - { 0x11D90, 0x11D91 }, { 0x11D95, 0x11D95 }, { 0x11D97, 0x11D97 }, - { 0x11EF3, 0x11EF4 }, { 0x13430, 0x13438 }, { 0x16AF0, 0x16AF4 }, - { 0x16B30, 0x16B36 }, { 0x16F4F, 0x16F4F }, { 0x16F8F, 0x16F92 }, - { 0x16FE4, 0x16FE4 }, { 0x1BC9D, 0x1BC9E }, { 0x1BCA0, 0x1BCA3 }, - { 0x1CF00, 0x1CF2D }, { 0x1CF30, 0x1CF46 }, { 0x1D167, 0x1D169 }, - { 0x1D173, 0x1D182 }, { 0x1D185, 0x1D18B }, { 0x1D1AA, 0x1D1AD }, - { 0x1D242, 0x1D244 }, { 0x1DA00, 0x1DA36 }, { 0x1DA3B, 0x1DA6C }, - { 0x1DA75, 0x1DA75 }, { 0x1DA84, 0x1DA84 }, { 0x1DA9B, 0x1DA9F }, - { 0x1DAA1, 0x1DAAF }, { 0x1E000, 0x1E006 }, { 0x1E008, 0x1E018 }, - { 0x1E01B, 0x1E021 }, { 0x1E023, 0x1E024 }, { 0x1E026, 0x1E02A }, - { 0x1E130, 0x1E136 }, { 0x1E2AE, 0x1E2AE }, { 0x1E2EC, 0x1E2EF }, + { 0x10EFD, 0x10EFF }, { 0x10F46, 0x10F50 }, { 0x10F82, 0x10F85 }, + { 0x11001, 0x11001 }, { 0x11038, 0x11046 }, { 0x11070, 0x11070 }, + { 0x11073, 0x11074 }, { 0x1107F, 0x11081 }, { 0x110B3, 0x110B6 }, + { 0x110B9, 0x110BA }, { 0x110BD, 0x110BD }, { 0x110C2, 0x110C2 }, + { 0x110CD, 0x110CD }, { 0x11100, 0x11102 }, { 0x11127, 0x1112B }, + { 0x1112D, 0x11134 }, { 0x11173, 0x11173 }, { 0x11180, 0x11181 }, + { 0x111B6, 0x111BE }, { 0x111C9, 0x111CC }, { 0x111CF, 0x111CF }, + { 0x1122F, 0x11231 }, { 0x11234, 0x11234 }, { 0x11236, 0x11237 }, + { 0x1123E, 0x1123E }, { 0x11241, 0x11241 }, { 0x112DF, 0x112DF }, + { 0x112E3, 0x112EA }, { 0x11300, 0x11301 }, { 0x1133B, 0x1133C }, + { 0x11340, 0x11340 }, { 0x11366, 0x1136C }, { 0x11370, 0x11374 }, + { 0x11438, 0x1143F }, { 0x11442, 0x11444 }, { 0x11446, 0x11446 }, + { 0x1145E, 0x1145E }, { 0x114B3, 0x114B8 }, { 0x114BA, 0x114BA }, + { 0x114BF, 0x114C0 }, { 0x114C2, 0x114C3 }, { 0x115B2, 0x115B5 }, + { 0x115BC, 0x115BD }, { 0x115BF, 0x115C0 }, { 0x115DC, 0x115DD }, + { 0x11633, 0x1163A }, { 0x1163D, 0x1163D }, { 0x1163F, 0x11640 }, + { 0x116AB, 0x116AB }, { 0x116AD, 0x116AD }, { 0x116B0, 0x116B5 }, + { 0x116B7, 0x116B7 }, { 0x1171D, 0x1171F }, { 0x11722, 0x11725 }, + { 0x11727, 0x1172B }, { 0x1182F, 0x11837 }, { 0x11839, 0x1183A }, + { 0x1193B, 0x1193C }, { 0x1193E, 0x1193E }, { 0x11943, 0x11943 }, + { 0x119D4, 0x119D7 }, { 0x119DA, 0x119DB }, { 0x119E0, 0x119E0 }, + { 0x11A01, 0x11A0A }, { 0x11A33, 0x11A38 }, { 0x11A3B, 0x11A3E }, + { 0x11A47, 0x11A47 }, { 0x11A51, 0x11A56 }, { 0x11A59, 0x11A5B }, + { 0x11A8A, 0x11A96 }, { 0x11A98, 0x11A99 }, { 0x11C30, 0x11C36 }, + { 0x11C38, 0x11C3D }, { 0x11C3F, 0x11C3F }, { 0x11C92, 0x11CA7 }, + { 0x11CAA, 0x11CB0 }, { 0x11CB2, 0x11CB3 }, { 0x11CB5, 0x11CB6 }, + { 0x11D31, 0x11D36 }, { 0x11D3A, 0x11D3A }, { 0x11D3C, 0x11D3D }, + { 0x11D3F, 0x11D45 }, { 0x11D47, 0x11D47 }, { 0x11D90, 0x11D91 }, + { 0x11D95, 0x11D95 }, { 0x11D97, 0x11D97 }, { 0x11EF3, 0x11EF4 }, + { 0x11F00, 0x11F01 }, { 0x11F36, 0x11F3A }, { 0x11F40, 0x11F40 }, + { 0x11F42, 0x11F42 }, { 0x13430, 0x13440 }, { 0x13447, 0x13455 }, + { 0x16AF0, 0x16AF4 }, { 0x16B30, 0x16B36 }, { 0x16F4F, 0x16F4F }, + { 0x16F8F, 0x16F92 }, { 0x16FE4, 0x16FE4 }, { 0x1BC9D, 0x1BC9E }, + { 0x1BCA0, 0x1BCA3 }, { 0x1CF00, 0x1CF2D }, { 0x1CF30, 0x1CF46 }, + { 0x1D167, 0x1D169 }, { 0x1D173, 0x1D182 }, { 0x1D185, 0x1D18B }, + { 0x1D1AA, 0x1D1AD }, { 0x1D242, 0x1D244 }, { 0x1DA00, 0x1DA36 }, + { 0x1DA3B, 0x1DA6C }, { 0x1DA75, 0x1DA75 }, { 0x1DA84, 0x1DA84 }, + { 0x1DA9B, 0x1DA9F }, { 0x1DAA1, 0x1DAAF }, { 0x1E000, 0x1E006 }, + { 0x1E008, 0x1E018 }, { 0x1E01B, 0x1E021 }, { 0x1E023, 0x1E024 }, + { 0x1E026, 0x1E02A }, { 0x1E08F, 0x1E08F }, { 0x1E130, 0x1E136 }, + { 0x1E2AE, 0x1E2AE }, { 0x1E2EC, 0x1E2EF }, { 0x1E4EC, 0x1E4EF }, { 0x1E8D0, 0x1E8D6 }, { 0x1E944, 0x1E94A }, { 0xE0001, 0xE0001 }, { 0xE0020, 0xE007F }, { 0xE0100, 0xE01EF } }; diff --git a/newlib/libc/string/memccpy.c b/newlib/libc/string/memccpy.c index 1f5f55c505..d6b2f8beab 100644 --- a/newlib/libc/string/memccpy.c +++ b/newlib/libc/string/memccpy.c @@ -80,11 +80,11 @@ memccpy (void *__restrict dst0, return ptr; #else void *ptr = NULL; - char *dst = dst0; - const char *src = src0; + unsigned char *dst = dst0; + const unsigned char *src = src0; long *aligned_dst; const long *aligned_src; - char endchar = endchar0 & 0xff; + unsigned char endchar = endchar0 & 0xff; /* If the size is small, or either SRC or DST is unaligned, then punt into the byte copy loop. This should be rare. */ @@ -118,8 +118,8 @@ memccpy (void *__restrict dst0, } /* Pick up any residual with a byte copier. */ - dst = (char*)aligned_dst; - src = (char*)aligned_src; + dst = (unsigned char*)aligned_dst; + src = (unsigned char*)aligned_src; } while (len0--) diff --git a/newlib/libc/string/strcspn.c b/newlib/libc/string/strcspn.c index abaa93ad67..8ac0bf10cf 100644 --- a/newlib/libc/string/strcspn.c +++ b/newlib/libc/string/strcspn.c @@ -37,12 +37,10 @@ strcspn (const char *s1, for (c = s2; *c; c++) { if (*s1 == *c) - break; + goto end; } - if (*c) - break; s1++; } - +end: return s1 - s; } diff --git a/newlib/libc/string/strings.tex b/newlib/libc/string/strings.tex index 6aec5fe0ed..a04d46ddb7 100644 --- a/newlib/libc/string/strings.tex +++ b/newlib/libc/string/strings.tex @@ -6,55 +6,55 @@ @file{string.h}. @menu -* bcmp:: Compare two memory areas -* bcopy:: Copy memory regions -* bzero:: Initialize memory to zero -* index:: Search for character in string -* memccpy:: Copy memory regions up to end-token -* memchr:: Find character in memory -* memcmp:: Compare two memory areas -* memcpy:: Copy memory regions -* memmem:: Find memory segment -* memmove:: Move possibly overlapping memory -* mempcpy:: Copy memory regions and locate end -* memrchr:: Reverse search for character in memory -* memset:: Set an area of memory -* rawmemchr:: Find character in memory -* rindex:: Reverse search for character in string -* stpcpy:: Copy string returning a pointer to its end -* stpncpy:: Counted copy string returning a pointer to its end -* strcasecmp:: Compare strings ignoring case -* strcasestr:: Find string segment ignoring case -* strcat:: Concatenate strings -* strchr:: Search for character in string -* strchrnul:: Search for character in string -* strcmp:: Character string compare -* strcoll:: Locale-specific character string compare -* strcpy:: Copy string -* strcspn:: Count chars not in string -* strerror:: Convert error number to string (strerror, strerror_l) -* strerror_r:: Convert error number to string -* strlen:: Character string length -* strlwr:: Convert string to lowercase -* strncasecmp:: Compare strings ignoring case -* strncat:: Concatenate strings -* strncmp:: Character string compare -* strncpy:: Counted copy string -* strnstr:: Find string segment -* strnlen:: Character string length -* strpbrk:: Find chars in string -* strrchr:: Reverse search for character in string -* strsignal:: Return signal message string -* strspn:: Find initial match -* strstr:: Find string segment -* strtok:: Get next token from a string -* strupr:: Convert string to upper case -* strverscmp:: Compare version strings -* strxfrm:: Transform string -* swab:: Swap adjacent bytes -* wcscasecmp:: Compare wide character strings ignoring case -* wcsdup:: Wide character string duplicate -* wcsncasecmp:: Compare wide character strings ignoring case +* Function bcmp:: Compare two memory areas +* Function bcopy:: Copy memory regions +* Function bzero:: Initialize memory to zero +* Function index:: Search for character in string +* Function memccpy:: Copy memory regions up to end-token +* Function memchr:: Find character in memory +* Function memcmp:: Compare two memory areas +* Function memcpy:: Copy memory regions +* Function memmem:: Find memory segment +* Function memmove:: Move possibly overlapping memory +* Function mempcpy:: Copy memory regions and locate end +* Function memrchr:: Reverse search for character in memory +* Function memset:: Set an area of memory +* Function rawmemchr:: Find character in memory +* Function rindex:: Reverse search for character in string +* Function stpcpy:: Copy string returning a pointer to its end +* Function stpncpy:: Counted copy string returning a pointer to its end +* Function strcasecmp:: Compare strings ignoring case +* Function strcasestr:: Find string segment ignoring case +* Function strcat:: Concatenate strings +* Function strchr:: Search for character in string +* Function strchrnul:: Search for character in string +* Function strcmp:: Character string compare +* Function strcoll:: Locale-specific character string compare +* Function strcpy:: Copy string +* Function strcspn:: Count chars not in string +* Function strerror:: Convert error number to string (strerror, strerror_l) +* Function strerror_r:: Convert error number to string +* Function strlen:: Character string length +* Function strlwr:: Convert string to lowercase +* Function strncasecmp:: Compare strings ignoring case +* Function strncat:: Concatenate strings +* Function strncmp:: Character string compare +* Function strncpy:: Counted copy string +* Function strnstr:: Find string segment +* Function strnlen:: Character string length +* Function strpbrk:: Find chars in string +* Function strrchr:: Reverse search for character in string +* Function strsignal:: Return signal message string +* Function strspn:: Find initial match +* Function strstr:: Find string segment +* Function strtok:: Get next token from a string +* Function strupr:: Convert string to upper case +* Function strverscmp:: Compare version strings +* Function strxfrm:: Transform string +* Function swab:: Swap adjacent bytes +* Function wcscasecmp:: Compare wide character strings ignoring case +* Function wcsdup:: Wide character string duplicate +* Function wcsncasecmp:: Compare wide character strings ignoring case @end menu @page diff --git a/newlib/libc/string/strpbrk.c b/newlib/libc/string/strpbrk.c index 774db1e6d8..d984745643 100644 --- a/newlib/libc/string/strpbrk.c +++ b/newlib/libc/string/strpbrk.c @@ -29,23 +29,16 @@ strpbrk (const char *s1, const char *s2) { const char *c = s2; - if (!*s1) - return (char *) NULL; while (*s1) { for (c = s2; *c; c++) { if (*s1 == *c) - break; + return (char *) s1; } - if (*c) - break; s1++; } - if (*c == '\0') - s1 = NULL; - - return (char *) s1; + return (char *) NULL; } diff --git a/newlib/libc/string/strspn.c b/newlib/libc/string/strspn.c index baf2399478..bfa3331cd4 100644 --- a/newlib/libc/string/strspn.c +++ b/newlib/libc/string/strspn.c @@ -41,10 +41,11 @@ strspn (const char *s1, for (c = s2; *c; c++) { if (*s1 == *c) - break; + goto found; } if (*c == '\0') break; +found: s1++; } diff --git a/newlib/libc/string/strverscmp.c b/newlib/libc/string/strverscmp.c index 04aa7213ad..0117421c9e 100644 --- a/newlib/libc/string/strverscmp.c +++ b/newlib/libc/string/strverscmp.c @@ -76,9 +76,9 @@ int strverscmp(const char *l0, const char *r0) else if (c!='0') z=0; } - if (l[dp]!='0' && r[dp]!='0') { - /* If we're not looking at a digit sequence that began - * with a zero, longest digit string is greater. */ + if (l[dp]-'1'<9U && r[dp]-'1'<9U) { + /* If we're looking at non-degenerate digit sequences starting + * with nonzero digits, longest digit string is greater. */ for (j=i; isdigit(l[j]); j++) if (!isdigit(r[j])) return 1; if (isdigit(r[j])) return -1; diff --git a/newlib/libc/string/wcstrings.tex b/newlib/libc/string/wcstrings.tex index 161b35cb59..cf10088936 100644 --- a/newlib/libc/string/wcstrings.tex +++ b/newlib/libc/string/wcstrings.tex @@ -6,36 +6,36 @@ declarations are in @file{wchar.h}. @menu -* wmemchr:: Find wide character in memory -* wmemcmp:: Compare two wide-character memory areas -* wmemcpy:: Copy wide-character memory regions -* wmemmove:: Move possibly overlapping wide-character memory -* wmempcpy:: Copy wide-character memory regions and locate end -* wmemset:: Set an area of memory to a specified wide character -* wcscat:: Concatenate wide-character strings -* wcschr:: Search for wide character in string -* wcscmp:: Wide-character string compare -* wcscoll:: Locale-specific wide-character string compare -* wcscpy:: Copy wide-character string -* wcpcpy:: Copy a wide-character string returning a pointer to its end -* wcscspn:: Count wide characters not in string -* wcsftime:: Convert date and time to a formatted wide-character string -* wcslcat:: Concatenate wide-character strings to specified length -* wcslcpy:: Copy wide-character string to specified length -* wcslen:: Wide-character string length -* wcsncat:: Concatenate wide-character strings -* wcsncmp:: Wide-character string compare -* wcsncpy:: Counted copy wide-character string -* wcpncpy:: Copy part of a wide-character string returning a pointer to its end -* wcsnlen:: Wide-character string length with maximum limit -* wcspbrk:: Find wide characters in string -* wcsrchr:: Reverse search for wide character in string -* wcsspn:: Find initial match in wide-character string -* wcsstr:: Find wide-character string segment -* wcstok:: Tokenize wide-character string -* wcswidth:: Number of column positions of a wide-character string -* wcsxfrm:: Locale-specific wide-character string transformation -* wcwidth:: Number of column positions of a wide-character code +* Function wmemchr:: Find wide character in memory +* Function wmemcmp:: Compare two wide-character memory areas +* Function wmemcpy:: Copy wide-character memory regions +* Function wmemmove:: Move possibly overlapping wide-character memory +* Function wmempcpy:: Copy wide-character memory regions and locate end +* Function wmemset:: Set an area of memory to a specified wide character +* Function wcscat:: Concatenate wide-character strings +* Function wcschr:: Search for wide character in string +* Function wcscmp:: Wide-character string compare +* Function wcscoll:: Locale-specific wide-character string compare +* Function wcscpy:: Copy wide-character string +* Function wcpcpy:: Copy a wide-character string returning a pointer to its end +* Function wcscspn:: Count wide characters not in string +* Function wcsftime:: Convert date and time to a formatted wide-character string +* Function wcslcat:: Concatenate wide-character strings to specified length +* Function wcslcpy:: Copy wide-character string to specified length +* Function wcslen:: Wide-character string length +* Function wcsncat:: Concatenate wide-character strings +* Function wcsncmp:: Wide-character string compare +* Function wcsncpy:: Counted copy wide-character string +* Function wcpncpy:: Copy part of a wide-character string returning a pointer to its end +* Function wcsnlen:: Wide-character string length with maximum limit +* Function wcspbrk:: Find wide characters in string +* Function wcsrchr:: Reverse search for wide character in string +* Function wcsspn:: Find initial match in wide-character string +* Function wcsstr:: Find wide-character string segment +* Function wcstok:: Tokenize wide-character string +* Function wcswidth:: Number of column positions of a wide-character string +* Function wcsxfrm:: Locale-specific wide-character string transformation +* Function wcwidth:: Number of column positions of a wide-character code @end menu @page diff --git a/newlib/libc/string/wide.t b/newlib/libc/string/wide.t index e2ee66d6f2..11dd15f203 100644 --- a/newlib/libc/string/wide.t +++ b/newlib/libc/string/wide.t @@ -1,5 +1,5 @@ -//# EastAsianWidth-14.0.0.txt -//# Blocks-14.0.0.txt +//# EastAsianWidth-15.0.0.txt +//# Blocks-15.0.0.txt { { 0x1100, 0x115F }, { 0x231A, 0x231B }, { 0x2329, 0x232A }, { 0x23E9, 0x23EC }, { 0x23F0, 0x23F0 }, { 0x23F3, 0x23F3 }, @@ -26,7 +26,7 @@ { 0x1F550, 0x1F567 }, { 0x1F57A, 0x1F57A }, { 0x1F595, 0x1F596 }, { 0x1F5A4, 0x1F5A4 }, { 0x1F5FB, 0x1F64F }, { 0x1F680, 0x1F6C5 }, { 0x1F6CC, 0x1F6CC }, { 0x1F6D0, 0x1F6D2 }, { 0x1F6D5, 0x1F6D7 }, - { 0x1F6DD, 0x1F6DF }, { 0x1F6EB, 0x1F6EC }, { 0x1F6F4, 0x1F6FC }, + { 0x1F6DC, 0x1F6DF }, { 0x1F6EB, 0x1F6EC }, { 0x1F6F4, 0x1F6FC }, { 0x1F7E0, 0x1F7EB }, { 0x1F7F0, 0x1F7F0 }, { 0x1F90C, 0x1F93A }, { 0x1F93C, 0x1F945 }, { 0x1F947, 0x1F9FF }, { 0x1FA70, 0x1FAFF }, { 0x20000, 0x2FFFD }, { 0x30000, 0x3FFFD } diff --git a/newlib/libc/sys.tex b/newlib/libc/sys.tex index a88b09816a..9c3d854527 100644 --- a/newlib/libc/sys.tex +++ b/newlib/libc/sys.tex @@ -307,34 +307,34 @@ (@pxref{Reentrancy,,Reentrancy}). @menu -* _close_r:: Reentrant version of close -* _execve_r:: Reentrant version of execve -* _fork_r:: Reentrant version of fork +* Function _close_r:: Reentrant version of close +* Function _execve_r:: Reentrant version of execve +* Function _fork_r:: Reentrant version of fork @ifset STDIO64 -* _fstat64_r:: Reentrant version of fstat64 +* Function _fstat64_r:: Reentrant version of fstat64 @end ifset -* _fstat_r:: Reentrant version of fstat -* _getpid_r:: Reentrant version of getpid -* _kill_r:: Reentrant version of kill -* _link_r:: Reentrant version of link +* Function _fstat_r:: Reentrant version of fstat +* Function _getpid_r:: Reentrant version of getpid +* Function _kill_r:: Reentrant version of kill +* Function _link_r:: Reentrant version of link @ifset STDIO64 -* _lseek64_r:: Reentrant version of lseek64 +* Function _lseek64_r:: Reentrant version of lseek64 @end ifset -* _lseek_r:: Reentrant version of lseek +* Function _lseek_r:: Reentrant version of lseek @ifset STDIO64 -* _open64_r:: Reentrant version of open64 +* Function _open64_r:: Reentrant version of open64 @end ifset -* _open_r:: Reentrant version of open -* _read_r:: Reentrant version of read -* _sbrk_r:: Reentrant version of sbrk +* Function _open_r:: Reentrant version of open +* Function _read_r:: Reentrant version of read +* Function _sbrk_r:: Reentrant version of sbrk @ifset STDIO64 -* _stat64_r:: Reentrant version of stat64 +* Function _stat64_r:: Reentrant version of stat64 @end ifset -* _stat_r:: Reentrant version of stat -* _times_r:: Reentrant version of times -* _unlink_r:: Reentrant version of unlink -* _wait_r:: Reentrant version of wait -* _write_r:: Reentrant version of write +* Function _stat_r:: Reentrant version of stat +* Function _times_r:: Reentrant version of times +* Function _unlink_r:: Reentrant version of unlink +* Function _wait_r:: Reentrant version of wait +* Function _write_r:: Reentrant version of write @end menu @lowersections diff --git a/newlib/libc/sys/Makefile.inc b/newlib/libc/sys/Makefile.inc index 9f8758934e..24d8407d5f 100644 --- a/newlib/libc/sys/Makefile.inc +++ b/newlib/libc/sys/Makefile.inc @@ -64,6 +64,9 @@ endif if HAVE_LIBC_SYS_W65_DIR include %D%/w65/Makefile.inc endif +if HAVE_LIBC_SYS_XTENSA_DIR +include %D%/xtensa/Makefile.inc +endif if HAVE_LIBC_SYS_Z8KSIM_DIR include %D%/z8ksim/Makefile.inc endif diff --git a/newlib/libc/sys/arm/arm.h b/newlib/libc/sys/arm/arm.h index 10e5b0509c..f3cd49308f 100644 --- a/newlib/libc/sys/arm/arm.h +++ b/newlib/libc/sys/arm/arm.h @@ -29,7 +29,7 @@ #ifndef _LIBGLOSS_ARM_H #define _LIBGLOSS_ARM_H -#include "acle-compat.h" +#include "arm-acle-compat.h" /* Checking for targets supporting only Thumb instructions (eg. ARMv6-M) or supporting Thumb-2 instructions, whether ARM instructions are available or diff --git a/newlib/libc/sys/arm/crt0.S b/newlib/libc/sys/arm/crt0.S index 6b01d8a88b..90d5be393d 100644 --- a/newlib/libc/sys/arm/crt0.S +++ b/newlib/libc/sys/arm/crt0.S @@ -122,10 +122,10 @@ * +-----+ <- SP_svc of getting in and out of secure state are not as * | | simple as writing to the CPSR mode bits. * | IRQ | -= 0x2000 - Mode switch via CPSR is not allowed once in -* | | non-privileged mode, so we take care not to enter -* ^ +-----+ <- SP_und "User" to set up its SP, and also skip most -* s | | operations if already in that mode. -* t | UND | -= 0x1000 +* | | non-privileged mode or in hypervisor mode, so we +* ^ +-----+ <- SP_und take care not to enter "User" or "Hypervisor" mode +* s | | to set up its SP, and also skip most operations if +* t | UND | -= 0x1000 already in these modes. * a | | Input parameters: * c +-----+ <- SP_und - sp - Initialized SP * k | | - r2 - May contain SL value from semihosting @@ -149,12 +149,11 @@ #if (__ARM_ARCH_PROFILE != 'M') /* Following code is compatible for both ARM and Thumb ISA. */ mrs r4, CPSR - /* Test mode bits - in User of all are 0. */ - tst r4, #(CPSR_M_MASK) - /* "eq" means r4 AND #0x0F is 0. */ - beq .Lskip_cpu_modes - mov r3, sp /* Save input SP value. */ + ands r1, r4, #(CPSR_M_MASK) + beq .Lskip_cpu_modes + cmp r1, #(CPSR_M_HYP) + beq .Lskip_cpu_modes /* FIQ mode, interrupts disabled. */ mov r1, #(CPSR_M_FIQ|CPSR_M_32BIT|CPSR_I_MASK|CPSR_F_MASK) diff --git a/newlib/libc/sys/h8300hms/crt0.S b/newlib/libc/sys/h8300hms/crt0.S index 6394f6841f..05634113cc 100644 --- a/newlib/libc/sys/h8300hms/crt0.S +++ b/newlib/libc/sys/h8300hms/crt0.S @@ -9,12 +9,10 @@ _start: mov.w #_stack,sp mov.w #_edata,r0 - mov.w #_end,r1 - sub.w r2,r2 -.Loop: mov.w r2,@r0 - adds #2,r0 - cmp r1,r0 - blo .Loop + mov.w #_end,r2 + sub.w r1,r1 + sub.w r0,r2 + jsr @_memset #ifdef __ELF__ mov.l #__fini,r0 jsr @_atexit @@ -43,12 +41,10 @@ _stack: .word 1 _start: mov.l #_stack,sp mov.l #_edata,er0 - mov.l #_end,er1 - sub.w r2,r2 ; not sure about alignment requirements -.Loop: mov.w r2,@er0 ; playing it safe for now - adds #2,er0 - cmp.l er1,er0 - blo .Loop + mov.l #_end,er2 + sub.w r1,r1 + sub.l er0,er2 + jsr @_memset #ifdef __ELF__ mov.l #__fini,er0 jsr @_atexit @@ -77,12 +73,10 @@ _stack: .long 1 _start: mov.l #_stack,sp mov.l #_edata,er0 - mov.l #_end,er1 - sub.w r2,r2 ; not sure about alignment requirements -.Loop: mov.w r2,@er0 ; playing it safe for now - adds #2,er0 - cmp.l er1,er0 - blo .Loop + mov.l #_end,er2 + sub.w r1,r1 + sub.l er0,er2 + jsr @_memset #ifdef __ELF__ mov.l #__fini,er0 jsr @_atexit diff --git a/newlib/libc/sys/h8300hms/sbrk.c b/newlib/libc/sys/h8300hms/sbrk.c index 1456a67eb8..a99ae29048 100644 --- a/newlib/libc/sys/h8300hms/sbrk.c +++ b/newlib/libc/sys/h8300hms/sbrk.c @@ -1,8 +1,10 @@ #include <_ansi.h> #include #include +#include register char *stack_ptr asm ("sp"); +extern int _write (int, char *, int); caddr_t _sbrk(incr) diff --git a/newlib/libc/sys/mmixware/_exit.c b/newlib/libc/sys/mmixware/_exit.c index 2f70154f29..9ac62c743a 100644 --- a/newlib/libc/sys/mmixware/_exit.c +++ b/newlib/libc/sys/mmixware/_exit.c @@ -1,6 +1,6 @@ /* _exit for MMIXware. - Copyright (C) 2001 Hans-Peter Nilsson + Copyright (C) 2001, 2023 Hans-Peter Nilsson Permission to use, copy, modify, and distribute this software is freely granted, provided that the above copyright notice, this notice @@ -27,4 +27,5 @@ void _exit (int n) : /* No outputs. */ : "r" (n) : "memory"); + __unreachable (); } diff --git a/newlib/libc/sys/mmixware/chown.c b/newlib/libc/sys/mmixware/chown.c index f4fc49cac9..646504b32a 100644 --- a/newlib/libc/sys/mmixware/chown.c +++ b/newlib/libc/sys/mmixware/chown.c @@ -1,6 +1,6 @@ /* chown stub for MMIXware. - Copyright (C) 2001 Hans-Peter Nilsson + Copyright (C) 2001, 2023 Hans-Peter Nilsson Permission to use, copy, modify, and distribute this software is freely granted, provided that the above copyright notice, this notice @@ -18,7 +18,7 @@ #include int -chown (const char *path, short owner, short group) +chown (const char *path, uid_t owner, gid_t group) { UNIMPLEMENTED (("path: %s, owner: %d, group: %d", path, owner, group)); errno = ENOSYS; diff --git a/newlib/libc/sys/mmixware/getpid.c b/newlib/libc/sys/mmixware/getpid.c index 5190726bf5..723317f17d 100644 --- a/newlib/libc/sys/mmixware/getpid.c +++ b/newlib/libc/sys/mmixware/getpid.c @@ -1,6 +1,6 @@ /* getpid stub for MMIXware. - Copyright (C) 2001 Hans-Peter Nilsson + Copyright (C) 2001, 2023 Hans-Peter Nilsson Permission to use, copy, modify, and distribute this software is freely granted, provided that the above copyright notice, this notice @@ -16,7 +16,8 @@ #include #include "sys/syscall.h" -_getpid (n) +pid_t +_getpid (void) { return 1; } diff --git a/newlib/libc/sys/mmixware/kill.c b/newlib/libc/sys/mmixware/kill.c index c01f53c81a..ed9d92bb10 100644 --- a/newlib/libc/sys/mmixware/kill.c +++ b/newlib/libc/sys/mmixware/kill.c @@ -1,6 +1,6 @@ /* kill for MMIXware. - Copyright (C) 2001 Hans-Peter Nilsson + Copyright (C) 2001, 2023 Hans-Peter Nilsson Permission to use, copy, modify, and distribute this software is freely granted, provided that the above copyright notice, this notice @@ -17,7 +17,8 @@ #include "sys/syscall.h" #include -_kill (n, m) +int +_kill (pid_t n, int m __unused) { if (n == 1) return TRAP1i (SYS_halt, 0); diff --git a/newlib/libc/sys/mmixware/link.c b/newlib/libc/sys/mmixware/link.c index 0629163b38..cbcf7ee448 100644 --- a/newlib/libc/sys/mmixware/link.c +++ b/newlib/libc/sys/mmixware/link.c @@ -1,6 +1,6 @@ /* link stub for MMIXware. - Copyright (C) 2002 Hans-Peter Nilsson + Copyright (C) 2002, 2023 Hans-Peter Nilsson Permission to use, copy, modify, and distribute this software is freely granted, provided that the above copyright notice, this notice @@ -18,7 +18,7 @@ #include int -_link () +_link (const char *p1 __unused, const char *p2 __unused) { errno = EMLINK; return -1; diff --git a/newlib/libc/sys/mmixware/read.c b/newlib/libc/sys/mmixware/read.c index f0f5e22f97..3f34ca4876 100644 --- a/newlib/libc/sys/mmixware/read.c +++ b/newlib/libc/sys/mmixware/read.c @@ -1,6 +1,6 @@ /* read for MMIXware. - Copyright (C) 2001 Hans-Peter Nilsson + Copyright (C) 2001, 2023 Hans-Peter Nilsson Permission to use, copy, modify, and distribute this software is freely granted, provided that the above copyright notice, this notice @@ -19,7 +19,7 @@ int _read (int file, - char *ptr, + void *ptr, size_t len) { long ret; diff --git a/newlib/libc/sys/mmixware/sbrk.c b/newlib/libc/sys/mmixware/sbrk.c index f50886df86..621169fc8a 100644 --- a/newlib/libc/sys/mmixware/sbrk.c +++ b/newlib/libc/sys/mmixware/sbrk.c @@ -1,6 +1,6 @@ /* sbrk for MMIXware. - Copyright (C) 2001, 2012 Hans-Peter Nilsson + Copyright (C) 2001, 2012, 2023 Hans-Peter Nilsson Permission to use, copy, modify, and distribute this software is freely granted, provided that the above copyright notice, this notice @@ -31,10 +31,10 @@ __asm__ (" .global _Sbrk_high\n" "_Sbrk_high IS Pool_Segment\n" "Pool_Segment IS 0x40<<56"); -caddr_t -_sbrk (size_t incr) +void * +_sbrk (ptrdiff_t incr) { - char *prev_heap_end; + void *prev_heap_end; prev_heap_end = _Sbrk_high; @@ -55,5 +55,5 @@ _sbrk (size_t incr) } _Sbrk_high += incr; - return (caddr_t) prev_heap_end; + return prev_heap_end; } diff --git a/newlib/libc/sys/mmixware/sys/syscall.h b/newlib/libc/sys/mmixware/sys/syscall.h index 4b4419cc0e..b5e40cc12b 100644 --- a/newlib/libc/sys/mmixware/sys/syscall.h +++ b/newlib/libc/sys/mmixware/sys/syscall.h @@ -1,6 +1,6 @@ /* syscall defines for MMIXware. - Copyright (C) 2001, 2002, 2007 Hans-Peter Nilsson + Copyright (C) 2001, 2002, 2007, 2023 Hans-Peter Nilsson Permission to use, copy, modify, and distribute this software is freely granted, provided that the above copyright notice, this notice @@ -11,6 +11,12 @@ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. */ +/* The standard-library calls in UNIMPLEMENTED, defined below, need to + be declared. Don't push the #include requirements to the caller. */ +#include +#include +#include + /* These are the mmixware simulator calls that are of use in newlib. */ #define SYS_halt 0 diff --git a/newlib/libc/sys/mmixware/unlink.c b/newlib/libc/sys/mmixware/unlink.c index b70df2dc3f..dfc92c6223 100644 --- a/newlib/libc/sys/mmixware/unlink.c +++ b/newlib/libc/sys/mmixware/unlink.c @@ -1,6 +1,6 @@ /* unlink stub for MMIXware. - Copyright (C) 2001 Hans-Peter Nilsson + Copyright (C) 2001, 2023 Hans-Peter Nilsson Permission to use, copy, modify, and distribute this software is freely granted, provided that the above copyright notice, this notice @@ -17,7 +17,7 @@ #include "sys/syscall.h" int -_unlink () +_unlink (const char *p __unused) { return -1; } diff --git a/newlib/libc/sys/mmixware/write.c b/newlib/libc/sys/mmixware/write.c index 74d5fcaa71..89247895ea 100644 --- a/newlib/libc/sys/mmixware/write.c +++ b/newlib/libc/sys/mmixware/write.c @@ -1,6 +1,6 @@ /* write for MMIXware. - Copyright (C) 2001 Hans-Peter Nilsson + Copyright (C) 2001, 2023 Hans-Peter Nilsson Permission to use, copy, modify, and distribute this software is freely granted, provided that the above copyright notice, this notice @@ -19,7 +19,7 @@ int _write ( int file, - char *ptr, + const void *ptr, size_t len) { long ret; diff --git a/newlib/libc/sys/rdos/chown.c b/newlib/libc/sys/rdos/chown.c old mode 100755 new mode 100644 diff --git a/newlib/libc/sys/rdos/fork.c b/newlib/libc/sys/rdos/fork.c old mode 100755 new mode 100644 diff --git a/newlib/libc/sys/rdos/fstat.c b/newlib/libc/sys/rdos/fstat.c old mode 100755 new mode 100644 diff --git a/newlib/libc/sys/rdos/lseek.c b/newlib/libc/sys/rdos/lseek.c old mode 100755 new mode 100644 diff --git a/newlib/libc/sys/rdos/open.c b/newlib/libc/sys/rdos/open.c old mode 100755 new mode 100644 diff --git a/newlib/libc/sys/rdos/rdos.h b/newlib/libc/sys/rdos/rdos.h old mode 100755 new mode 100644 diff --git a/newlib/libc/sys/rdos/readlink.c b/newlib/libc/sys/rdos/readlink.c old mode 100755 new mode 100644 diff --git a/newlib/libc/sys/rdos/stat.c b/newlib/libc/sys/rdos/stat.c old mode 100755 new mode 100644 diff --git a/newlib/libc/sys/rdos/symlink.c b/newlib/libc/sys/rdos/symlink.c old mode 100755 new mode 100644 diff --git a/newlib/libc/sys/rtems/crt0.c b/newlib/libc/sys/rtems/crt0.c index 3b131d9c49..67f9d73024 100644 --- a/newlib/libc/sys/rtems/crt0.c +++ b/newlib/libc/sys/rtems/crt0.c @@ -230,3 +230,7 @@ int __EH_FRAME_BEGIN__; */ const char* __stack ; #endif + +#if defined(__m68k__) +RTEMS_STUB(void, __m68k_read_tp(void), { }) +#endif diff --git a/newlib/libc/sys/sysnecv850/_exit.c b/newlib/libc/sys/sysnecv850/_exit.c index 44d4132bd7..7e1b09262e 100644 --- a/newlib/libc/sys/sysnecv850/_exit.c +++ b/newlib/libc/sys/sysnecv850/_exit.c @@ -23,7 +23,7 @@ static void _do_dtors() } -void _exit (n) +void _exit (int n) { /* Destructors should be done earlier because they need to be done before the files are closed, but here is better than nowhere (and this balances the diff --git a/newlib/libc/sys/sysnecv850/getpid.c b/newlib/libc/sys/sysnecv850/getpid.c index 32ac7fbfb8..f0fc4d8951 100644 --- a/newlib/libc/sys/sysnecv850/getpid.c +++ b/newlib/libc/sys/sysnecv850/getpid.c @@ -9,7 +9,8 @@ int __trap0 (int function, int p1, int p2, int p3); #define TRAP0(f, p1, p2, p3) __trap0(f, (int)(p1), (int)(p2), (int)(p3)) -_getpid (n) +int +_getpid (int n) { return 1; } diff --git a/newlib/libc/sys/sysnecv850/isatty.c b/newlib/libc/sys/sysnecv850/isatty.c index 248ab5248f..6e4f205f0f 100644 --- a/newlib/libc/sys/sysnecv850/isatty.c +++ b/newlib/libc/sys/sysnecv850/isatty.c @@ -9,8 +9,8 @@ int __trap0 (int function, int p1, int p2, int p3); #define TRAP0(f, p1, p2, p3) __trap0(f, (int)(p1), (int)(p2), (int)(p3)) -_isatty (fd) - int fd; +int +_isatty (int fd) { return 1; } diff --git a/newlib/libc/sys/sysnecv850/kill.c b/newlib/libc/sys/sysnecv850/kill.c index 34e5db793c..562eaf6c70 100644 --- a/newlib/libc/sys/sysnecv850/kill.c +++ b/newlib/libc/sys/sysnecv850/kill.c @@ -10,9 +10,8 @@ int __trap0 (int function, int p1, int p2, int p3); #define TRAP0(f, p1, p2, p3) __trap0(f, (int)(p1), (int)(p2), (int)(p3)) -_kill (pid, sig) - pid_t pid; - int sig; +int +_kill (pid_t pid, int sig) { return TRAP0 (SYS_exit, 0xdead0000 | sig, 0, 0); } diff --git a/newlib/libc/sys/sysnecv850/read.c b/newlib/libc/sys/sysnecv850/read.c index b55d1cb9e7..5ae2c97998 100644 --- a/newlib/libc/sys/sysnecv850/read.c +++ b/newlib/libc/sys/sysnecv850/read.c @@ -9,6 +9,7 @@ int __trap0 (int function, int p1, int p2, int p3); #define TRAP0(f, p1, p2, p3) __trap0(f, (int)(p1), (int)(p2), (int)(p3)) +int _read (int file, char *ptr, int len) diff --git a/newlib/libc/sys/sysnecv850/sbrk.c b/newlib/libc/sys/sysnecv850/sbrk.c index 2893c322fd..b5673d467d 100644 --- a/newlib/libc/sys/sysnecv850/sbrk.c +++ b/newlib/libc/sys/sysnecv850/sbrk.c @@ -2,7 +2,9 @@ #include #include #include "sys/syscall.h" +#include +extern int _write (int, char *, int); caddr_t _sbrk (int incr) { diff --git a/newlib/libc/sys/xtensa/Makefile.inc b/newlib/libc/sys/xtensa/Makefile.inc new file mode 100644 index 0000000000..ddee58ae1b --- /dev/null +++ b/newlib/libc/sys/xtensa/Makefile.inc @@ -0,0 +1 @@ +libc_a_SOURCES += %D%/creat.c %D%/isatty.c %D%/clibrary_init.c diff --git a/newlib/libc/sys/xtensa/clibrary_init.c b/newlib/libc/sys/xtensa/clibrary_init.c new file mode 100644 index 0000000000..24d4cf94ca --- /dev/null +++ b/newlib/libc/sys/xtensa/clibrary_init.c @@ -0,0 +1,42 @@ +/* Copyright (c) 2003-2006 Tensilica Inc. ALL RIGHTS RESERVED. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL TENSILICA + INCORPORATED BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + +#include +#include + +const char * __progname = 0; + +void +__clibrary_init (int argc, char **argv, char **envp, + void (*init)(void), + void (*fini)(void)) +{ + if (argv != 0) + __progname = *argv; + environ = envp; + if (init) + init (); + if (fini) + atexit (fini); +} diff --git a/newlib/libc/sys/xtensa/creat.c b/newlib/libc/sys/xtensa/creat.c new file mode 100644 index 0000000000..21e6a1874c --- /dev/null +++ b/newlib/libc/sys/xtensa/creat.c @@ -0,0 +1,9 @@ +/* creat() "system call" (copied from libc/posix/creat.c) */ + +#include + +int +creat (const char *path, mode_t mode) +{ + return open (path, O_WRONLY | O_CREAT | O_TRUNC, mode); +} diff --git a/newlib/libc/sys/xtensa/crt0.c b/newlib/libc/sys/xtensa/crt0.c new file mode 100644 index 0000000000..11725dca58 --- /dev/null +++ b/newlib/libc/sys/xtensa/crt0.c @@ -0,0 +1,16 @@ +/* Dummy crt0 code. */ + +/* Copyright (c) 2003 by Tensilica Inc. ALL RIGHTS RESERVED. + These coded instructions, statements, and computer programs are the + copyrighted works and confidential proprietary information of Tensilica Inc. + They may not be modified, copied, reproduced, distributed, or disclosed to + third parties in any manner, medium, or form, in whole or in part, without + the prior written consent of Tensilica Inc. */ + +/* Xtensa systems normally use a crt1 file associated with a particular + linker support package (LSP). There is no need for this crt0 file, + except that the newlib makefiles require it to exist if there is a + sys/xtensa directory. The directory exists only to hold the header + files for the Xtensa ISS semihosting "platform". */ + +void crt0_unused (void) {} diff --git a/newlib/libc/sys/xtensa/include/fenv.h b/newlib/libc/sys/xtensa/include/fenv.h new file mode 100644 index 0000000000..2fa76f758d --- /dev/null +++ b/newlib/libc/sys/xtensa/include/fenv.h @@ -0,0 +1,88 @@ +/* Copyright (c) 2011 Tensilica Inc. ALL RIGHTS RESERVED. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + TENSILICA INCORPORATED BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + OF THE POSSIBILITY OF SUCH DAMAGE. */ + + +#ifndef _FENV_H +#define _FENV_H + +#ifdef __cplusplus +extern "C" { +#endif + +typedef unsigned long fenv_t; +typedef unsigned long fexcept_t; + +#define FE_DIVBYZERO 0x08 +#define FE_INEXACT 0x01 +#define FE_INVALID 0x10 +#define FE_OVERFLOW 0x04 +#define FE_UNDERFLOW 0x02 + +#define FE_ALL_EXCEPT \ + (FE_DIVBYZERO | \ + FE_INEXACT | \ + FE_INVALID | \ + FE_OVERFLOW | \ + FE_UNDERFLOW) + +#define FE_DOWNWARD 0x3 +#define FE_TONEAREST 0x0 +#define FE_TOWARDZERO 0x1 +#define FE_UPWARD 0x2 + +#define FE_DFL_ENV ((const fenv_t *) 0) + +int feclearexcept(int); +int fegetexceptflag(fexcept_t *, int); +int feraiseexcept(int); +int fesetexceptflag(const fexcept_t *, int); +int fetestexcept(int); +int fegetround(void); +int fesetround(int); +int fegetenv(fenv_t *); +int feholdexcept(fenv_t *); +int fesetenv(const fenv_t *); +int feupdateenv(const fenv_t *); + +/* glibc extensions */ +int feenableexcept(int excepts); +int fedisableexcept(int excepts); +int fegetexcept(void); + +#define _FE_EXCEPTION_FLAGS_OFFSET 7 +#define _FE_EXCEPTION_FLAG_MASK (FE_ALL_EXCEPT << _FE_EXCEPTION_FLAGS_OFFSET) +#define _FE_EXCEPTION_ENABLE_OFFSET 2 +#define _FE_EXCEPTION_ENABLE_MASK (FE_ALL_EXCEPT << _FE_EXCEPTION_ENABLE_OFFSET) +#define _FE_ROUND_MODE_OFFSET 0 +#define _FE_ROUND_MODE_MASK (0x3 << _FE_ROUND_MODE_OFFSET) +#define _FE_FLOATING_ENV_MASK (_FE_EXCEPTION_FLAG_MASK | _FE_EXCEPTION_ENABLE_MASK | _FE_ROUND_MODE_MASK) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/newlib/libc/sys/xtensa/include/unistd.h b/newlib/libc/sys/xtensa/include/unistd.h new file mode 100644 index 0000000000..4f6fd29a4d --- /dev/null +++ b/newlib/libc/sys/xtensa/include/unistd.h @@ -0,0 +1,13 @@ +#ifndef _UNISTD_H_ +#define _UNISTD_H_ + +# include + +#ifndef L_SET +/* Old BSD names for the same constants; just for compatibility. */ +#define L_SET SEEK_SET +#define L_INCR SEEK_CUR +#define L_XTND SEEK_END +#endif + +#endif /* _UNISTD_H_ */ diff --git a/newlib/libc/sys/xtensa/include/xtensa/config/core-isa.h b/newlib/libc/sys/xtensa/include/xtensa/config/core-isa.h new file mode 100644 index 0000000000..2accd411f9 --- /dev/null +++ b/newlib/libc/sys/xtensa/include/xtensa/config/core-isa.h @@ -0,0 +1,115 @@ +/* + * xtensa/config/core-isa.h -- minimum required HAL definitions that are + * dependent on Xtensa processor CORE configuration + * + * See , which includes this file, for more details. + */ + +/* Xtensa processor core configuration information. + + Copyright (c) 1999-2023 Tensilica Inc. + + Permission is hereby granted, free of charge, to any person obtaining + a copy of this software and associated documentation files (the + "Software"), to deal in the Software without restriction, including + without limitation the rights to use, copy, modify, merge, publish, + distribute, sublicense, and/or sell copies of the Software, and to + permit persons to whom the Software is furnished to do so, subject to + the following conditions: + + The above copyright notice and this permission notice shall be included + in all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY + CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, + TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE + SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ + +#ifndef _XTENSA_CORE_CONFIGURATION_H +#define _XTENSA_CORE_CONFIGURATION_H + +#if defined(_LIBC) || defined(_LIBM) || defined(_LIBGLOSS) + +/* Macros used to build newlib and libgloss */ + +#undef XCHAL_HAVE_BE +#ifdef __XCHAL_HAVE_BE +#define XCHAL_HAVE_BE __XCHAL_HAVE_BE +#else +#define XCHAL_HAVE_BE 0 /* big-endian byte ordering */ +#endif + +#undef XCHAL_HAVE_WINDOWED +#ifdef __XCHAL_HAVE_WINDOWED +#define XCHAL_HAVE_WINDOWED __XCHAL_HAVE_WINDOWED +#else +#define XCHAL_HAVE_WINDOWED 1 /* windowed registers option */ +#endif + +#undef XCHAL_NUM_AREGS +#ifdef __XCHAL_NUM_AREGS +#define XCHAL_NUM_AREGS __XCHAL_NUM_AREGS +#else +#define XCHAL_NUM_AREGS 64 /* num of physical addr regs */ +#endif + +#undef XCHAL_HAVE_DENSITY +#ifdef __XCHAL_HAVE_DENSITY +#define XCHAL_HAVE_DENSITY __XCHAL_HAVE_DENSITY +#else +#define XCHAL_HAVE_DENSITY 1 /* 16-bit instructions */ +#endif + +#undef XCHAL_HAVE_LOOPS +#ifdef __XCHAL_HAVE_LOOPS +#define XCHAL_HAVE_LOOPS __XCHAL_HAVE_LOOPS +#else +#define XCHAL_HAVE_LOOPS 1 /* zero-overhead loops */ +#endif + +#undef XCHAL_HAVE_L32R +#ifdef __XCHAL_HAVE_L32R +#define XCHAL_HAVE_L32R __XCHAL_HAVE_L32R +#else +#define XCHAL_HAVE_L32R 1 /* L32R instruction */ +#endif + +#undef XCHAL_HAVE_FP +#ifdef __XCHAL_HAVE_FP +#define XCHAL_HAVE_FP __XCHAL_HAVE_FP +#else +#define XCHAL_HAVE_FP 1 /* single prec floating point */ +#endif + +#undef XCHAL_HAVE_FP_SQRT +#ifdef __XCHAL_HAVE_FP_SQRT +#define XCHAL_HAVE_FP_SQRT __XCHAL_HAVE_FP_SQRT +#else +#define XCHAL_HAVE_FP_SQRT 1 /* FP with SQRT instructions */ +#endif + +#undef XCHAL_HAVE_DFP +#ifdef __XCHAL_HAVE_DFP +#define XCHAL_HAVE_DFP __XCHAL_HAVE_DFP +#else +#define XCHAL_HAVE_DFP 0 /* double precision FP pkg */ +#endif + +#undef XCHAL_INST_FETCH_WIDTH +#ifdef __XCHAL_INST_FETCH_WIDTH +#define XCHAL_INST_FETCH_WIDTH __XCHAL_INST_FETCH_WIDTH +#else +#define XCHAL_INST_FETCH_WIDTH 4 /* instr-fetch width in bytes */ +#endif + +#else /* defined(_LIBC) || defined(_LIBM) || defined(_LIBGLOSS) */ + +/* Expect that core-isa.h exists in OS/baremetal port */ +#include_next + +#endif /* defined(_LIBC) || defined(_LIBM) || defined(_LIBGLOSS) */ + +#endif /* _XTENSA_CORE_CONFIGURATION_H */ diff --git a/newlib/libc/sys/xtensa/isatty.c b/newlib/libc/sys/xtensa/isatty.c new file mode 100644 index 0000000000..fe64209b94 --- /dev/null +++ b/newlib/libc/sys/xtensa/isatty.c @@ -0,0 +1,18 @@ +/* isatty.c */ + +/* Dumb implementation so programs will at least run. */ + +#include +#include + +int +_isatty_r (struct _reent *ptr, int fd) +{ + struct stat buf; + + if (_fstat_r (ptr, fd, &buf) < 0) + return 0; + if (S_ISCHR (buf.st_mode)) + return 1; + return 0; +} diff --git a/newlib/libc/sys/xtensa/sys/file.h b/newlib/libc/sys/xtensa/sys/file.h new file mode 100644 index 0000000000..48a2ca06de --- /dev/null +++ b/newlib/libc/sys/xtensa/sys/file.h @@ -0,0 +1,33 @@ +/* Copyright (c) 2005-2006 Tensilica Inc. ALL RIGHTS RESERVED. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS + IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A + PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL TENSILICA + INCORPORATED BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + +#include + +/* Alternate names for values for the WHENCE argument to `lseek'. + These are the same as SEEK_SET, SEEK_CUR, and SEEK_END, respectively. */ +#ifndef L_SET +#define L_SET 0 /* Seek from beginning of file. */ +#define L_INCR 1 /* Seek from current position. */ +#define L_XTND 2 /* Seek from end of file. */ +#endif diff --git a/newlib/libc/syscalls/Makefile.inc b/newlib/libc/syscalls/Makefile.inc index 627a4dfd2f..7f7bbbddb6 100644 --- a/newlib/libc/syscalls/Makefile.inc +++ b/newlib/libc/syscalls/Makefile.inc @@ -4,6 +4,7 @@ libc_a_SOURCES += \ %D%/sysclose.c \ %D%/sysfcntl.c \ %D%/sysfstat.c \ + %D%/sysgetentropy.c \ %D%/sysgetpid.c \ %D%/sysgettod.c \ %D%/sysisatty.c \ diff --git a/newlib/libc/syscalls/sysgetentropy.c b/newlib/libc/syscalls/sysgetentropy.c new file mode 100644 index 0000000000..d68ccbc72a --- /dev/null +++ b/newlib/libc/syscalls/sysgetentropy.c @@ -0,0 +1,12 @@ +/* connector for getentropy */ + +#include +#include +#include + +int +getentropy (void *buf, + size_t buflen) +{ + return _getentropy_r (_REENT, buf, buflen); +} diff --git a/newlib/libc/time/time.tex b/newlib/libc/time/time.tex index cecd0f5f5e..a664eefb46 100644 --- a/newlib/libc/time/time.tex +++ b/newlib/libc/time/time.tex @@ -49,17 +49,17 @@ @end table @menu -* asctime:: Format time as string -* clock:: Cumulative processor time -* ctime:: Convert time to local and format as string -* difftime:: Subtract two times -* gmtime:: Convert time to UTC (GMT) traditional representation -* localtime:: Convert time to local representation -* mktime:: Convert time to arithmetic representation -* strftime:: Convert date and time to a user-formatted string -* time:: Get current calendar time (as single number) -* __tz_lock:: Lock time zone global variables -* tzset:: Set timezone info +* Function asctime:: Format time as string +* Function clock:: Cumulative processor time +* Function ctime:: Convert time to local and format as string +* Function difftime:: Subtract two times +* Function gmtime:: Convert time to UTC (GMT) traditional representation +* Function localtime:: Convert time to local representation +* Function mktime:: Convert time to arithmetic representation +* Function strftime:: Convert date and time to a user-formatted string +* Function time:: Get current calendar time (as single number) +* Function __tz_lock:: Lock time zone global variables +* Function tzset:: Set timezone info @end menu @page diff --git a/newlib/libc/unix/getlogin.c b/newlib/libc/unix/getlogin.c index da4f47a95c..e646bcb089 100644 --- a/newlib/libc/unix/getlogin.c +++ b/newlib/libc/unix/getlogin.c @@ -16,9 +16,7 @@ getlogin () extern char *ttyname (); char *tty; - if (((tty = ttyname (0)) == 0) - || ((tty = ttyname (1)) == 0) - || ((tty = ttyname (2)) == 0)) + if ((tty = ttyname (0)) == 0) return 0; if ((utmp_fd = open (UTMP_FILE, O_RDONLY)) == -1) diff --git a/newlib/libm/Makefile.inc b/newlib/libm/Makefile.inc index 7fda120e53..bf31b1be78 100644 --- a/newlib/libm/Makefile.inc +++ b/newlib/libm/Makefile.inc @@ -44,18 +44,28 @@ else include %D%/math/Makefile.inc endif include %D%/common/Makefile.inc + +if HAVE_FPMATH_H +include %D%/ld/Makefile.inc +endif # HAVE_FPMATH_H + include %D%/complex/Makefile.inc include %D%/fenv/Makefile.inc include %D%/test/Makefile.inc if HAVE_LIBM_MACHINE_AARCH64 include %D%/machine/aarch64/Makefile.inc +include %D%/ld128/Makefile.inc +endif +if HAVE_LIBM_MACHINE_AMDGCN +include %D%/machine/amdgcn/Makefile.inc endif if HAVE_LIBM_MACHINE_ARM include %D%/machine/arm/Makefile.inc endif if HAVE_LIBM_MACHINE_I386 include %D%/machine/i386/Makefile.inc +include %D%/ld80/Makefile.inc endif if HAVE_LIBM_MACHINE_MIPS include %D%/machine/mips/Makefile.inc @@ -77,9 +87,14 @@ include %D%/machine/spu/Makefile.inc endif if HAVE_LIBM_MACHINE_RISCV include %D%/machine/riscv/Makefile.inc +include %D%/ld128/Makefile.inc endif if HAVE_LIBM_MACHINE_X86_64 include %D%/machine/x86_64/Makefile.inc +include %D%/ld80/Makefile.inc +endif +if HAVE_LIBM_MACHINE_XTENSA +include %D%/machine/xtensa/Makefile.inc endif CLEANFILES += \ diff --git a/newlib/libm/acinclude.m4 b/newlib/libm/acinclude.m4 index 0be95a3b29..f6d88d4110 100644 --- a/newlib/libm/acinclude.m4 +++ b/newlib/libm/acinclude.m4 @@ -1,10 +1,11 @@ dnl We have to include these unconditionally since machines might want to use dnl AM_CONDITIONAL in their subdirs. m4_include([libm/machine/nds32/acinclude.m4]) +m4_include([libm/machine/xtensa/acinclude.m4]) dnl Define HAVE_LIBM_MACHINE_ automake conditionals. m4_foreach_w([MACHINE], [ - aarch64 arm i386 mips nds32 powerpc pru sparc spu riscv x86_64 + aarch64 amdgcn arm i386 mips nds32 powerpc pru sparc spu riscv x86_64 xtensa ], [dnl AM_CONDITIONAL([HAVE_LIBM_MACHINE_]m4_toupper(MACHINE), test "${libm_machine_dir}" = "MACHINE") ]) diff --git a/newlib/libm/common/math_config.h b/newlib/libm/common/math_config.h index 0f78b5c09b..bf881e81b8 100644 --- a/newlib/libm/common/math_config.h +++ b/newlib/libm/common/math_config.h @@ -72,7 +72,8 @@ /* Compiler can inline fma as a single instruction. */ #ifndef HAVE_FAST_FMA -# if __aarch64__ || (__ARM_FEATURE_FMA && (__ARM_FP & 8)) || __riscv_flen >= 64 +# if __aarch64__ || (__ARM_FEATURE_FMA && (__ARM_FP & 8)) \ + || __riscv_flen >= 64 || defined (__riscv_zdinx) # define HAVE_FAST_FMA 1 # else # define HAVE_FAST_FMA 0 @@ -80,7 +81,8 @@ #endif #ifndef HAVE_FAST_FMAF -# if HAVE_FAST_FMA || (__ARM_FEATURE_FMA && (__ARM_FP & 4)) || __riscv_flen >= 32 +# if HAVE_FAST_FMA || (__ARM_FEATURE_FMA && (__ARM_FP & 4)) \ + || __riscv_flen >= 32 || defined (__riscv_zfinx) # define HAVE_FAST_FMAF 1 # else # define HAVE_FAST_FMAF 0 diff --git a/newlib/libm/common/s_expm1.c b/newlib/libm/common/s_expm1.c index 10b0c8efb4..51cdd2188a 100644 --- a/newlib/libm/common/s_expm1.c +++ b/newlib/libm/common/s_expm1.c @@ -68,7 +68,7 @@ PORTABILITY * R1(r**2) = 6/r *((exp(r)+1)/(exp(r)-1) - 2/r) * = 6/r * ( 1 + 2.0*(1/(exp(r)-1) - 1/r)) * = 1 - r^2/60 + r^4/2520 - r^6/100800 + ... - * We use a special Reme algorithm on [0,0.347] to generate + * We use a special Remez algorithm on [0,0.347] to generate * a polynomial of degree 5 in r*r to approximate R1. The * maximum error of this polynomial approximation is bounded * by 2**-61. In other words, diff --git a/newlib/libm/common/s_llrint.c b/newlib/libm/common/s_llrint.c index 72452dbe93..f2c48766e4 100644 --- a/newlib/libm/common/s_llrint.c +++ b/newlib/libm/common/s_llrint.c @@ -66,26 +66,17 @@ long long int if(j0 < 20) { /* j0 in [-1023,19] */ - if(j0 < -1) - return 0; - else - { - /* j0 in [0,19] */ - /* shift amt in [0,19] */ - w = TWO52[sx] + x; - t = w - TWO52[sx]; - GET_HIGH_WORD(i0, t); - /* Detect the all-zeros representation of plus and - minus zero, which fails the calculation below. */ - if ((i0 & ~((__int32_t)1 << 31)) == 0) - return 0; - /* After round: j0 in [0,20] */ - j0 = ((i0 & 0x7ff00000) >> 20) - 1023; - i0 &= 0x000fffff; - i0 |= 0x00100000; - /* shift amt in [20,0] */ - result = i0 >> (20 - j0); - } + w = TWO52[sx] + x; + t = w - TWO52[sx]; + GET_HIGH_WORD(i0, t); + /* Detect the all-zeros representation of plus and + minus zero, which fails the calculation below. */ + if ((i0 & ~((__int32_t)1 << 31)) == 0) + return 0; + j0 = ((i0 & 0x7ff00000) >> 20) - 1023; + i0 &= 0x000fffff; + i0 |= 0x00100000; + result = (j0 < 0 ? 0 : i0 >> (20 - j0)); } else if (j0 < (int)(8 * sizeof (long long int)) - 1) { diff --git a/newlib/libm/common/s_log1p.c b/newlib/libm/common/s_log1p.c index c44461e8d5..e3a3d9d9cd 100644 --- a/newlib/libm/common/s_log1p.c +++ b/newlib/libm/common/s_log1p.c @@ -65,7 +65,7 @@ Interface Definition (Issue 2). * Let s = f/(2+f) ; based on log(1+f) = log(1+s) - log(1-s) * = 2s + 2/3 s**3 + 2/5 s**5 + ....., * = 2s + s*R - * We use a special Reme algorithm on [0,0.1716] to generate + * We use a special Remez algorithm on [0,0.1716] to generate * a polynomial of degree 14 to approximate R The maximum error * of this polynomial approximation is bounded by 2**-58.45. In * other words, diff --git a/newlib/libm/common/s_lrint.c b/newlib/libm/common/s_lrint.c index b37f50fd4d..b37b93affa 100644 --- a/newlib/libm/common/s_lrint.c +++ b/newlib/libm/common/s_lrint.c @@ -103,26 +103,17 @@ TWO52[2]={ if(j0 < 20) { /* j0 in [-1023,19] */ - if(j0 < -1) - return 0; - else - { - /* j0 in [0,19] */ - /* shift amt in [0,19] */ - w = TWO52[sx] + x; - t = w - TWO52[sx]; - GET_HIGH_WORD(i0, t); - /* Detect the all-zeros representation of plus and - minus zero, which fails the calculation below. */ - if ((i0 & ~(1L << 31)) == 0) - return 0; - /* After round: j0 in [0,20] */ - j0 = ((i0 & 0x7ff00000) >> 20) - 1023; - i0 &= 0x000fffff; - i0 |= 0x00100000; - /* shift amt in [20,0] */ - result = i0 >> (20 - j0); - } + w = TWO52[sx] + x; + t = w - TWO52[sx]; + GET_HIGH_WORD(i0, t); + /* Detect the all-zeros representation of plus and + minus zero, which fails the calculation below. */ + if ((i0 & ~(1L << 31)) == 0) + return 0; + j0 = ((i0 & 0x7ff00000) >> 20) - 1023; + i0 &= 0x000fffff; + i0 |= 0x00100000; + result = (j0 < 0 ? 0 : i0 >> (20 - j0)); } else if (j0 < (int)(8 * sizeof (long int)) - 1) { diff --git a/newlib/libm/common/sf_llrint.c b/newlib/libm/common/sf_llrint.c index 7558e89acd..905a5b21d0 100644 --- a/newlib/libm/common/sf_llrint.c +++ b/newlib/libm/common/sf_llrint.c @@ -60,9 +60,7 @@ TWO23[2]={ if (j0 < (int)(sizeof (long long int) * 8) - 1) { - if (j0 < -1) - return 0; - else if (j0 >= 23) + if (j0 >= 23) result = (long long int) ((i0 & 0x7fffff) | 0x800000) << (j0 - 23); else { @@ -76,7 +74,7 @@ TWO23[2]={ j0 = ((i0 >> 23) & 0xff) - 0x7f; i0 &= 0x7fffff; i0 |= 0x800000; - result = i0 >> (23 - j0); + result = (j0 < 0 ? 0 : i0 >> (23 - j0)); } } else diff --git a/newlib/libm/common/sf_lrint.c b/newlib/libm/common/sf_lrint.c index 3c58c5d101..7fe47aefb2 100644 --- a/newlib/libm/common/sf_lrint.c +++ b/newlib/libm/common/sf_lrint.c @@ -60,9 +60,7 @@ TWO23[2]={ if (j0 < (int)(sizeof (long int) * 8) - 1) { - if (j0 < -1) - return 0; - else if (j0 >= 23) + if (j0 >= 23) result = (long int) ((i0 & 0x7fffff) | 0x800000) << (j0 - 23); else { @@ -76,7 +74,7 @@ TWO23[2]={ j0 = ((i0 >> 23) & 0xff) - 0x7f; i0 &= 0x7fffff; i0 |= 0x800000; - result = i0 >> (23 - j0); + result = (j0 < 0 ? 0 : i0 >> (23 - j0)); } } else diff --git a/newlib/libm/complex/catan.c b/newlib/libm/complex/catan.c index 77510ec2f5..34d75b8499 100644 --- a/newlib/libm/complex/catan.c +++ b/newlib/libm/complex/catan.c @@ -105,8 +105,6 @@ catan(double complex z) x2 = x * x; a = 1.0 - x2 - (y * y); - if (a == 0.0) - goto ovrf; t = 0.5 * atan2(2.0 * x, a); w = _redupi(t); diff --git a/newlib/libm/complex/catanf.c b/newlib/libm/complex/catanf.c index ac1a65c08c..9dc2fb23f1 100644 --- a/newlib/libm/complex/catanf.c +++ b/newlib/libm/complex/catanf.c @@ -54,8 +54,6 @@ catanf(float complex z) x2 = x * x; a = 1.0f - x2 - (y * y); - if (a == 0.0f) - goto ovrf; t = 0.5f * atan2f(2.0f * x, a); w = _redupif(t); diff --git a/newlib/libm/complex/catanl.c b/newlib/libm/complex/catanl.c index ee2a259307..13839ac73b 100644 --- a/newlib/libm/complex/catanl.c +++ b/newlib/libm/complex/catanl.c @@ -51,8 +51,6 @@ catanl(long double complex z) x2 = x * x; a = 1.0L - x2 - (y * y); - if (a == 0.0) - goto ovrf; t = 0.5L * atan2l(2.0L * x, a); w = _redupil(t); diff --git a/newlib/libm/complex/complex.tex b/newlib/libm/complex/complex.tex index e91937aa22..4af4d02ddb 100644 --- a/newlib/libm/complex/complex.tex +++ b/newlib/libm/complex/complex.tex @@ -6,29 +6,29 @@ Functions and documentations are taken from NetBSD. @menu -* cabs:: Complex absolute value -* cacos:: Complex arc cosine -* cacosh:: Complex arc hyperbolic cosine -* carg:: Argument (also called phase angle) -* casin:: Complex arc sine -* casinh:: Complex arc hyperbolic sine -* catan:: Complex arc tangent -* catanh:: Complex arc hyperbolic tangent -* ccos:: Complex cosine -* ccosh:: Complex hyperbolic cosine -* cexp:: Complex exponent -* cimag:: Imaginary part -* clog:: Complex natural (base e) logarithm -* clog10:: Complex base 10 logarithm -* conj:: Complex conjugate -* cpow:: Complex power function -* cproj:: Compute a projection on the Riemann sphere -* creal:: Real part -* csin:: Complex sine -* csinh:: Complex hyperbolic sine -* csqrt:: Complex square root -* ctan:: Complex tangent -* ctanh:: Complex hyperbolic tangent +* Function cabs:: Complex absolute value +* Function cacos:: Complex arc cosine +* Function cacosh:: Complex arc hyperbolic cosine +* Function carg:: Argument (also called phase angle) +* Function casin:: Complex arc sine +* Function casinh:: Complex arc hyperbolic sine +* Function catan:: Complex arc tangent +* Function catanh:: Complex arc hyperbolic tangent +* Function ccos:: Complex cosine +* Function ccosh:: Complex hyperbolic cosine +* Function cexp:: Complex exponent +* Function cimag:: Imaginary part +* Function clog:: Complex natural (base e) logarithm +* Function clog10:: Complex base 10 logarithm +* Function conj:: Complex conjugate +* Function cpow:: Complex power function +* Function cproj:: Compute a projection on the Riemann sphere +* Function creal:: Real part +* Function csin:: Complex sine +* Function csinh:: Complex hyperbolic sine +* Function csqrt:: Complex square root +* Function ctan:: Complex tangent +* Function ctanh:: Complex hyperbolic tangent @end menu @page diff --git a/newlib/libm/fenv/fenv.tex b/newlib/libm/fenv/fenv.tex index 3b76003d35..567a6e90b0 100644 --- a/newlib/libm/fenv/fenv.tex +++ b/newlib/libm/fenv/fenv.tex @@ -8,17 +8,17 @@ The implementation of these methods is architecture specific. @menu -* feclearexcept:: Clear floating-point exception -* fegetenv:: Get current floating-point environment -* fegetexceptflag:: Get floating-point status flags -* fegetround:: Get current rounding direction -* feholdexcept:: Save current floating-point environment -* feraiseexcept:: Raise floating-point exception -* fesetenv:: Set current floating-point environment -* fesetexceptflag:: Set floating-point status flags -* fesetround:: Set current rounding direction -* fetestexcept:: Test floating-point exception flags -* feupdateenv:: Update current floating-point environment +* Function feclearexcept:: Clear floating-point exception +* Function fegetenv:: Get current floating-point environment +* Function fegetexceptflag:: Get floating-point status flags +* Function fegetround:: Get current rounding direction +* Function feholdexcept:: Save current floating-point environment +* Function feraiseexcept:: Raise floating-point exception +* Function fesetenv:: Set current floating-point environment +* Function fesetexceptflag:: Set floating-point status flags +* Function fesetround:: Set current rounding direction +* Function fetestexcept:: Test floating-point exception flags +* Function feupdateenv:: Update current floating-point environment @end menu @page diff --git a/newlib/libm/ld/Makefile.inc b/newlib/libm/ld/Makefile.inc new file mode 100644 index 0000000000..fef3db4a69 --- /dev/null +++ b/newlib/libm/ld/Makefile.inc @@ -0,0 +1,56 @@ +%C%_lsrc = \ + %D%/e_acoshl.c \ + %D%/e_acosl.c \ + %D%/e_asinl.c \ + %D%/e_atan2l.c \ + %D%/e_atanhl.c \ + %D%/e_coshl.c \ + %D%/e_fmodl.c \ + %D%/e_lgammal.c \ + %D%/e_remainderl.c \ + %D%/e_sinhl.c \ + %D%/s_asinhl.c \ + %D%/s_atanl.c \ + %D%/s_cbrtl.c \ + %D%/s_ceill.c \ + %D%/s_copysignl.c \ + %D%/s_cosl.c \ + %D%/s_fabsl.c \ + %D%/fdiml.c \ + %D%/s_floorl.c \ + %D%/s_fmal.c \ + %D%/s_fmaxl.c \ + %D%/s_fminl.c \ + %D%/s_frexpl.c \ + %D%/s_ilogbl.c \ + %D%/s_llrintl.c \ + %D%/s_llroundl.c \ + %D%/s_logbl.c \ + %D%/s_lrint.c \ + %D%/s_lrintl.c \ + %D%/s_lround.c \ + %D%/s_lroundl.c \ + %D%/s_modfl.c \ + %D%/s_nearbyintl.c \ + %D%/s_nextafterl.c \ + %D%/s_nexttoward.c \ + %D%/s_nexttowardf.c \ + %D%/s_remquol.c \ + %D%/s_rintl.c \ + %D%/s_roundl.c \ + %D%/scalblnl.c \ + %D%/s_scalbnl.c \ + %D%/s_sinl.c \ + %D%/s_tanhl.c \ + %D%/s_tanl.c \ + %D%/s_truncl.c + +libm_a_CFLAGS_%C% = -fbuiltin -fno-math-errno + +if HAVE_LONG_DOUBLE +libm_a_SOURCES += $(%C%_lsrc) +endif # HAVE_LONG_DOUBLE + +LIBM_CHEWOUT_FILES += + +LIBM_CHAPTERS += diff --git a/newlib/libm/ld/e_acoshl.c b/newlib/libm/ld/e_acoshl.c new file mode 100644 index 0000000000..59faeb0fb8 --- /dev/null +++ b/newlib/libm/ld/e_acoshl.c @@ -0,0 +1,89 @@ +/* from: FreeBSD: head/lib/msun/src/e_acosh.c 176451 2008-02-22 02:30:36Z das */ + +/* @(#)e_acosh.c 1.3 95/01/18 */ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunSoft, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + * + */ + +#include +__FBSDID("$FreeBSD$"); + +/* + * See e_acosh.c for complete comments. + * + * Converted to long double by David Schultz and + * Bruce D. Evans. + */ + +#include +#ifdef __i386__ +#include +#endif + +#include "fpmath.h" +#include "math.h" +#include "math_private.h" + +/* EXP_LARGE is the threshold above which we use acosh(x) ~= log(2x). */ +#if LDBL_MANT_DIG == 64 +#define EXP_LARGE 34 +#elif LDBL_MANT_DIG == 113 +#define EXP_LARGE 58 +#else +#error "Unsupported long double format" +#endif + +#if LDBL_MAX_EXP != 0x4000 +/* We also require the usual expsign encoding. */ +#error "Unsupported long double format" +#endif + +#define BIAS (LDBL_MAX_EXP - 1) + +static const double +one = 1.0; + +#if LDBL_MANT_DIG == 64 +static const union IEEEl2bits +u_ln2 = LD80C(0xb17217f7d1cf79ac, -1, 6.93147180559945309417e-1L); +#define ln2 u_ln2.e +#elif LDBL_MANT_DIG == 113 +static const long double +ln2 = 6.93147180559945309417232121458176568e-1L; /* 0x162e42fefa39ef35793c7673007e6.0p-113 */ +#else +#error "Unsupported long double format" +#endif + +long double +acoshl(long double x) +{ + long double t; + int16_t hx; + + ENTERI(); + GET_LDBL_EXPSIGN(hx, x); + if (hx < 0x3fff) { /* x < 1, or misnormal */ + RETURNI((x-x)/(x-x)); + } else if (hx >= BIAS + EXP_LARGE) { /* x >= LARGE */ + if (hx >= 0x7fff) { /* x is inf, NaN or misnormal */ + RETURNI(x+x); + } else + RETURNI(logl(x)+ln2); /* acosh(huge)=log(2x), or misnormal */ + } else if (hx == 0x3fff && x == 1) { + RETURNI(0.0); /* acosh(1) = 0 */ + } else if (hx >= 0x4000) { /* LARGE > x >= 2, or misnormal */ + t=x*x; + RETURNI(logl(2.0*x-one/(x+sqrtl(t-one)))); + } else { /* 1 +__FBSDID("$FreeBSD$"); + +/* + * See comments in e_acos.c. + * Converted to long double by David Schultz . + */ + +#include + +#include "invtrig.h" +#include "math.h" +#include "math_private.h" + +static const long double +one= 1.00000000000000000000e+00; + +#ifdef __i386__ +/* XXX Work around the fact that gcc truncates long double constants on i386 */ +static volatile double +pi1 = 3.14159265358979311600e+00, /* 0x1.921fb54442d18p+1 */ +pi2 = 1.22514845490862001043e-16; /* 0x1.1a80000000000p-53 */ +#define pi ((long double)pi1 + pi2) +#else +static const long double +pi = 3.14159265358979323846264338327950280e+00L; +#endif + +long double +acosl(long double x) +{ + union IEEEl2bits u; + long double z,p,q,r,w,s,c,df; + int16_t expsign, expt; + u.e = x; + expsign = u.xbits.expsign; + expt = expsign & 0x7fff; + if(expt >= BIAS) { /* |x| >= 1 */ + if(expt==BIAS && ((u.bits.manh&~LDBL_NBIT)|u.bits.manl)==0) { + if (expsign>0) return 0.0; /* acos(1) = 0 */ + else return pi+2.0*pio2_lo; /* acos(-1)= pi */ + } + return (x-x)/(x-x); /* acos(|x|>1) is NaN */ + } + if(expt 0.5 */ + z = (one-x)*0.5; + s = sqrtl(z); + u.e = s; + u.bits.manl = 0; + df = u.e; + c = (z-df*df)/(s+df); + p = P(z); + q = Q(z); + r = p/q; + w = r*s+c; + return 2.0*(df+w); + } +} diff --git a/newlib/libm/ld/e_asinl.c b/newlib/libm/ld/e_asinl.c new file mode 100644 index 0000000000..066a591f40 --- /dev/null +++ b/newlib/libm/ld/e_asinl.c @@ -0,0 +1,77 @@ + +/* @(#)e_asin.c 1.3 95/01/18 */ +/* FreeBSD: head/lib/msun/src/e_asin.c 176451 2008-02-22 02:30:36Z das */ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunSoft, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#include +__FBSDID("$FreeBSD$"); + +/* + * See comments in e_asin.c. + * Converted to long double by David Schultz . + */ + +#include + +#include "invtrig.h" +#include "math.h" +#include "math_private.h" + +static const long double +one = 1.00000000000000000000e+00, +huge = 1.000e+300; + +long double +asinl(long double x) +{ + union IEEEl2bits u; + long double t=0.0,w,p,q,c,r,s; + int16_t expsign, expt; + u.e = x; + expsign = u.xbits.expsign; + expt = expsign & 0x7fff; + if(expt >= BIAS) { /* |x|>= 1 */ + if(expt==BIAS && ((u.bits.manh&~LDBL_NBIT)|u.bits.manl)==0) + /* asin(1)=+-pi/2 with inexact */ + return x*pio2_hi+x*pio2_lo; + return (x-x)/(x-x); /* asin(|x|>1) is NaN */ + } else if (exptone) return x;/* return x with inexact if x!=0*/ + } + t = x*x; + p = P(t); + q = Q(t); + w = p/q; + return x+x*w; + } + /* 1> |x|>= 0.5 */ + w = one-fabsl(x); + t = w*0.5; + p = P(t); + q = Q(t); + s = sqrtl(t); + if(u.bits.manh>=THRESH) { /* if |x| is close to 1 */ + w = p/q; + t = pio2_hi-(2.0*(s+s*w)-pio2_lo); + } else { + u.e = s; + u.bits.manl = 0; + w = u.e; + c = (t-w*w)/(s+w); + r = p/q; + p = 2.0*s*r-(pio2_lo-2.0*c); + q = pio4_hi-2.0*w; + t = pio4_hi-(p-q); + } + if(expsign>0) return t; else return -t; +} diff --git a/newlib/libm/ld/e_atan2l.c b/newlib/libm/ld/e_atan2l.c new file mode 100644 index 0000000000..619bfb5958 --- /dev/null +++ b/newlib/libm/ld/e_atan2l.c @@ -0,0 +1,120 @@ + +/* @(#)e_atan2.c 1.3 95/01/18 */ +/* FreeBSD: head/lib/msun/src/e_atan2.c 176451 2008-02-22 02:30:36Z das */ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunSoft, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + * + */ + +#include +__FBSDID("$FreeBSD$"); + +/* + * See comments in e_atan2.c. + * Converted to long double by David Schultz . + */ + +#include + +#include "invtrig.h" +#include "math.h" +#include "math_private.h" + +static volatile long double +tiny = 1.0e-300; +static const long double +zero = 0.0; + +#ifdef __i386__ +/* XXX Work around the fact that gcc truncates long double constants on i386 */ +static volatile double +pi1 = 3.14159265358979311600e+00, /* 0x1.921fb54442d18p+1 */ +pi2 = 1.22514845490862001043e-16; /* 0x1.1a80000000000p-53 */ +#define pi ((long double)pi1 + pi2) +#else +static const long double +pi = 3.14159265358979323846264338327950280e+00L; +#endif + +long double +atan2l(long double y, long double x) +{ + union IEEEl2bits ux, uy; + long double z; + int32_t k,m; + int16_t exptx, expsignx, expty, expsigny; + + uy.e = y; + expsigny = uy.xbits.expsign; + expty = expsigny & 0x7fff; + ux.e = x; + expsignx = ux.xbits.expsign; + exptx = expsignx & 0x7fff; + + if ((exptx==BIAS+LDBL_MAX_EXP && + ((ux.bits.manh&~LDBL_NBIT)|ux.bits.manl)!=0) || /* x is NaN */ + (expty==BIAS+LDBL_MAX_EXP && + ((uy.bits.manh&~LDBL_NBIT)|uy.bits.manl)!=0)) /* y is NaN */ + return nan_mix(x, y); + if (expsignx==BIAS && ((ux.bits.manh&~LDBL_NBIT)|ux.bits.manl)==0) + return atanl(y); /* x=1.0 */ + m = ((expsigny>>15)&1)|((expsignx>>14)&2); /* 2*sign(x)+sign(y) */ + + /* when y = 0 */ + if(expty==0 && ((uy.bits.manh&~LDBL_NBIT)|uy.bits.manl)==0) { + switch(m) { + case 0: + case 1: return y; /* atan(+-0,+anything)=+-0 */ + case 2: return pi+tiny;/* atan(+0,-anything) = pi */ + case 3: return -pi-tiny;/* atan(-0,-anything) =-pi */ + } + } + /* when x = 0 */ + if(exptx==0 && ((ux.bits.manh&~LDBL_NBIT)|ux.bits.manl)==0) + return (expsigny<0)? -pio2_hi-tiny: pio2_hi+tiny; + + /* when x is INF */ + if(exptx==BIAS+LDBL_MAX_EXP) { + if(expty==BIAS+LDBL_MAX_EXP) { + switch(m) { + case 0: return pio2_hi*0.5+tiny;/* atan(+INF,+INF) */ + case 1: return -pio2_hi*0.5-tiny;/* atan(-INF,+INF) */ + case 2: return 1.5*pio2_hi+tiny;/*atan(+INF,-INF)*/ + case 3: return -1.5*pio2_hi-tiny;/*atan(-INF,-INF)*/ + } + } else { + switch(m) { + case 0: return zero ; /* atan(+...,+INF) */ + case 1: return -zero ; /* atan(-...,+INF) */ + case 2: return pi+tiny ; /* atan(+...,-INF) */ + case 3: return -pi-tiny ; /* atan(-...,-INF) */ + } + } + } + /* when y is INF */ + if(expty==BIAS+LDBL_MAX_EXP) + return (expsigny<0)? -pio2_hi-tiny: pio2_hi+tiny; + + /* compute y/x */ + k = expty-exptx; + if(k > LDBL_MANT_DIG+2) { /* |y/x| huge */ + z=pio2_hi+pio2_lo; + m&=1; + } + else if(expsignx<0&&k<-LDBL_MANT_DIG-2) z=0.0; /* |y/x| tiny, x<0 */ + else z=atanl(fabsl(y/x)); /* safe to do y/x */ + switch (m) { + case 0: return z ; /* atan(+,+) */ + case 1: return -z ; /* atan(-,+) */ + case 2: return pi-(z-pi_lo);/* atan(+,-) */ + default: /* case 3 */ + return (z-pi_lo)-pi;/* atan(-,-) */ + } +} diff --git a/newlib/libm/ld/e_atanhl.c b/newlib/libm/ld/e_atanhl.c new file mode 100644 index 0000000000..a888426d00 --- /dev/null +++ b/newlib/libm/ld/e_atanhl.c @@ -0,0 +1,74 @@ +/* from: FreeBSD: head/lib/msun/src/e_atanh.c 176451 2008-02-22 02:30:36Z das */ + +/* @(#)e_atanh.c 1.3 95/01/18 */ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunSoft, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + * + */ + +#include +__FBSDID("$FreeBSD$"); + +/* + * See e_atanh.c for complete comments. + * + * Converted to long double by David Schultz and + * Bruce D. Evans. + */ + +#include +#ifdef __i386__ +#include +#endif + +#include "fpmath.h" +#include "math.h" +#include "math_private.h" + +/* EXP_TINY is the threshold below which we use atanh(x) ~= x. */ +#if LDBL_MANT_DIG == 64 +#define EXP_TINY -34 +#elif LDBL_MANT_DIG == 113 +#define EXP_TINY -58 +#else +#error "Unsupported long double format" +#endif + +#if LDBL_MAX_EXP != 0x4000 +/* We also require the usual expsign encoding. */ +#error "Unsupported long double format" +#endif + +#define BIAS (LDBL_MAX_EXP - 1) + +static const double one = 1.0, huge = 1e300; +static const double zero = 0.0; + +long double +atanhl(long double x) +{ + long double t; + uint16_t hx, ix; + + ENTERI(); + GET_LDBL_EXPSIGN(hx, x); + ix = hx & 0x7fff; + if (ix >= 0x3fff) /* |x| >= 1, or NaN or misnormal */ + RETURNI(fabsl(x) == 1 ? x / zero : (x - x) / (x - x)); + if (ix < BIAS + EXP_TINY && (huge + x) > zero) + RETURNI(x); /* x is tiny */ + SET_LDBL_EXPSIGN(x, ix); + if (ix < 0x3ffe) { /* |x| < 0.5, or misnormal */ + t = x+x; + t = 0.5*log1pl(t+t*x/(one-x)); + } else + t = 0.5*log1pl((x+x)/(one-x)); + RETURNI((hx & 0x8000) == 0 ? t : -t); +} diff --git a/newlib/libm/ld/e_coshl.c b/newlib/libm/ld/e_coshl.c new file mode 100644 index 0000000000..4e3b28311e --- /dev/null +++ b/newlib/libm/ld/e_coshl.c @@ -0,0 +1,132 @@ +/* from: FreeBSD: head/lib/msun/src/e_coshl.c XXX */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#include +__FBSDID("$FreeBSD$"); + +/* + * See e_cosh.c for complete comments. + * + * Converted to long double by Bruce D. Evans. + */ + +#include +#ifdef __i386__ +#include +#endif + +#include "fpmath.h" +#include "math.h" +#include "math_private.h" +#include "k_expl.h" + +#if LDBL_MAX_EXP != 0x4000 +/* We also require the usual expsign encoding. */ +#error "Unsupported long double format" +#endif + +#define BIAS (LDBL_MAX_EXP - 1) + +static const volatile long double huge = 0x1p10000L, tiny = 0x1p-10000L; +#if LDBL_MANT_DIG == 64 +/* + * Domain [-1, 1], range ~[-1.8211e-21, 1.8211e-21]: + * |cosh(x) - c(x)| < 2**-68.8 + */ +static const union IEEEl2bits +C4u = LD80C(0xaaaaaaaaaaaaac78, -5, 4.16666666666666682297e-2L); +#define C4 C4u.e +static const double +C2 = 0.5, +C6 = 1.3888888888888616e-3, /* 0x16c16c16c16b99.0p-62 */ +C8 = 2.4801587301767953e-5, /* 0x1a01a01a027061.0p-68 */ +C10 = 2.7557319163300398e-7, /* 0x127e4fb6c9b55f.0p-74 */ +C12 = 2.0876768371393075e-9, /* 0x11eed99406a3f4.0p-81 */ +C14 = 1.1469537039374480e-11, /* 0x1938c67cd18c48.0p-89 */ +C16 = 4.8473490896852041e-14; /* 0x1b49c429701e45.0p-97 */ +#elif LDBL_MANT_DIG == 113 +/* + * Domain [-1, 1], range ~[-2.3194e-37, 2.3194e-37]: + * |cosh(x) - c(x)| < 2**-121.69 + */ +static const long double +C4 = 4.16666666666666666666666666666666225e-2L, /* 0x1555555555555555555555555554e.0p-117L */ +C6 = 1.38888888888888888888888888889434831e-3L, /* 0x16c16c16c16c16c16c16c16c1dd7a.0p-122L */ +C8 = 2.48015873015873015873015871870962089e-5L, /* 0x1a01a01a01a01a01a01a017af2756.0p-128L */ +C10 = 2.75573192239858906525574318600800201e-7L, /* 0x127e4fb7789f5c72ef01c8a040640.0p-134L */ +C12 = 2.08767569878680989791444691755468269e-9L, /* 0x11eed8eff8d897b543d0679607399.0p-141L */ +C14= 1.14707455977297247387801189650495351e-11L, /* 0x193974a8c07c9d24ae169a7fa9b54.0p-149L */ +C16 = 4.77947733238737883626416876486279985e-14L; /* 0x1ae7f3e733b814d4e1b90f5727fe4.0p-157L */ +static const double +C2 = 0.5, +C18 = 1.5619206968597871e-16, /* 0x16827863b9900b.0p-105 */ +C20 = 4.1103176218528049e-19, /* 0x1e542ba3d3c269.0p-114 */ +C22 = 8.8967926401641701e-22, /* 0x10ce399542a014.0p-122 */ +C24 = 1.6116681626523904e-24, /* 0x1f2c981d1f0cb7.0p-132 */ +C26 = 2.5022374732804632e-27; /* 0x18c7ecf8b2c4a0.0p-141 */ +#else +#error "Unsupported long double format" +#endif /* LDBL_MANT_DIG == 64 */ + +/* log(2**16385 - 0.5) rounded up: */ +static const float +o_threshold = 1.13572168e4; /* 0xb174de.0p-10 */ + +long double +coshl(long double x) +{ + long double hi,lo,x2,x4; +#if LDBL_MANT_DIG == 113 + double dx2; +#endif + uint16_t ix; + + GET_LDBL_EXPSIGN(ix,x); + ix &= 0x7fff; + + /* x is INF or NaN */ + if(ix>=0x7fff) return x*x; + + ENTERI(); + + /* |x| < 1, return 1 or c(x) */ + if(ix<0x3fff) { + if (ix o_threshold, cosh(x) overflow */ + RETURNI(huge*huge); +} diff --git a/newlib/libm/ld/e_fmodl.c b/newlib/libm/ld/e_fmodl.c new file mode 100644 index 0000000000..c7689b9ad8 --- /dev/null +++ b/newlib/libm/ld/e_fmodl.c @@ -0,0 +1,149 @@ +/* @(#)e_fmod.c 1.3 95/01/18 */ +/*- + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunSoft, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include + +#include "fpmath.h" +#include "math.h" +#include "math_private.h" + +#define BIAS (LDBL_MAX_EXP - 1) + +#if LDBL_MANL_SIZE > 32 +typedef uint64_t manl_t; +#else +typedef uint32_t manl_t; +#endif + +#if LDBL_MANH_SIZE > 32 +typedef uint64_t manh_t; +#else +typedef uint32_t manh_t; +#endif + +/* + * These macros add and remove an explicit integer bit in front of the + * fractional mantissa, if the architecture doesn't have such a bit by + * default already. + */ +#ifdef LDBL_IMPLICIT_NBIT +#define SET_NBIT(hx) ((hx) | (1ULL << LDBL_MANH_SIZE)) +#define HFRAC_BITS LDBL_MANH_SIZE +#else +#define SET_NBIT(hx) (hx) +#define HFRAC_BITS (LDBL_MANH_SIZE - 1) +#endif + +#define MANL_SHIFT (LDBL_MANL_SIZE - 1) + +static const long double one = 1.0, Zero[] = {0.0, -0.0,}; + +/* + * fmodl(x,y) + * Return x mod y in exact arithmetic + * Method: shift and subtract + * + * Assumptions: + * - The low part of the mantissa fits in a manl_t exactly. + * - The high part of the mantissa fits in an int64_t with enough room + * for an explicit integer bit in front of the fractional bits. + */ +long double +fmodl(long double x, long double y) +{ + union IEEEl2bits ux, uy; + int64_t hx,hz; /* We need a carry bit even if LDBL_MANH_SIZE is 32. */ + manh_t hy; + manl_t lx,ly,lz; + int ix,iy,n,sx; + + ux.e = x; + uy.e = y; + sx = ux.bits.sign; + + /* purge off exception values */ + if((uy.bits.exp|uy.bits.manh|uy.bits.manl)==0 || /* y=0 */ + (ux.bits.exp == BIAS + LDBL_MAX_EXP) || /* or x not finite */ + (uy.bits.exp == BIAS + LDBL_MAX_EXP && + ((uy.bits.manh&~LDBL_NBIT)|uy.bits.manl)!=0)) /* or y is NaN */ + return nan_mix_op(x, y, *)/nan_mix_op(x, y, *); + if(ux.bits.exp<=uy.bits.exp) { + if((ux.bits.exp>MANL_SHIFT); lx = lx+lx;} + else { + if ((hz|lz)==0) /* return sign(x)*0 */ + return Zero[sx]; + hx = hz+hz+(lz>>MANL_SHIFT); lx = lz+lz; + } + } + hz=hx-hy;lz=lx-ly; if(lx=0) {hx=hz;lx=lz;} + + /* convert back to floating value and restore the sign */ + if((hx|lx)==0) /* return sign(x)*0 */ + return Zero[sx]; + while(hx<(1ULL<>MANL_SHIFT); lx = lx+lx; + iy -= 1; + } + ux.bits.manh = hx; /* The mantissa is truncated here if needed. */ + ux.bits.manl = lx; + if (iy < LDBL_MIN_EXP) { + ux.bits.exp = iy + (BIAS + 512); + ux.e *= 0x1p-512; + } else { + ux.bits.exp = iy + BIAS; + } + x = ux.e * one; /* create necessary signal */ + return x; /* exact output */ +} diff --git a/newlib/libm/ld/e_lgammal.c b/newlib/libm/ld/e_lgammal.c new file mode 100644 index 0000000000..0e6a0c39b7 --- /dev/null +++ b/newlib/libm/ld/e_lgammal.c @@ -0,0 +1,27 @@ +/* @(#)e_lgamma.c 1.3 95/01/18 */ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunSoft, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#include +__FBSDID("$FreeBSD$"); + +#include "math.h" +#include "math_private.h" + +long double lgammal_r(long double x, int *signp); + +extern int signgam; + +long double +lgammal(long double x) +{ + return lgammal_r(x,&signgam); +} diff --git a/newlib/libm/ld/e_remainderl.c b/newlib/libm/ld/e_remainderl.c new file mode 100644 index 0000000000..4a6786309f --- /dev/null +++ b/newlib/libm/ld/e_remainderl.c @@ -0,0 +1,40 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2008 David Schultz + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include + +long double +remainderl(long double x, long double y) +{ + int quo; + + return (remquol(x, y, &quo)); +} diff --git a/newlib/libm/ld/e_sinhl.c b/newlib/libm/ld/e_sinhl.c new file mode 100644 index 0000000000..38d3df1959 --- /dev/null +++ b/newlib/libm/ld/e_sinhl.c @@ -0,0 +1,134 @@ +/* from: FreeBSD: head/lib/msun/src/e_sinhl.c XXX */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#include +__FBSDID("$FreeBSD$"); + +/* + * See e_sinh.c for complete comments. + * + * Converted to long double by Bruce D. Evans. + */ + +#include +#ifdef __i386__ +#include +#endif + +#include "fpmath.h" +#include "math.h" +#include "math_private.h" +#include "k_expl.h" + +#if LDBL_MAX_EXP != 0x4000 +/* We also require the usual expsign encoding. */ +#error "Unsupported long double format" +#endif + +#define BIAS (LDBL_MAX_EXP - 1) + +static const long double shuge = 0x1p16383L; +#if LDBL_MANT_DIG == 64 +/* + * Domain [-1, 1], range ~[-6.6749e-22, 6.6749e-22]: + * |sinh(x)/x - s(x)| < 2**-70.3 + */ +static const union IEEEl2bits +S3u = LD80C(0xaaaaaaaaaaaaaaaa, -3, 1.66666666666666666658e-1L); +#define S3 S3u.e +static const double +S5 = 8.3333333333333332e-3, /* 0x11111111111111.0p-59 */ +S7 = 1.9841269841270074e-4, /* 0x1a01a01a01a070.0p-65 */ +S9 = 2.7557319223873889e-6, /* 0x171de3a5565fe6.0p-71 */ +S11 = 2.5052108406704084e-8, /* 0x1ae6456857530f.0p-78 */ +S13 = 1.6059042748655297e-10, /* 0x161245fa910697.0p-85 */ +S15 = 7.6470006914396920e-13, /* 0x1ae7ce4eff2792.0p-93 */ +S17 = 2.8346142308424267e-15; /* 0x19882ce789ffc6.0p-101 */ +#elif LDBL_MANT_DIG == 113 +/* + * Domain [-1, 1], range ~[-2.9673e-36, 2.9673e-36]: + * |sinh(x)/x - s(x)| < 2**-118.0 + */ +static const long double +S3 = 1.66666666666666666666666666666666033e-1L, /* 0x1555555555555555555555555553b.0p-115L */ +S5 = 8.33333333333333333333333333337643193e-3L, /* 0x111111111111111111111111180f5.0p-119L */ +S7 = 1.98412698412698412698412697391263199e-4L, /* 0x1a01a01a01a01a01a01a0176aad11.0p-125L */ +S9 = 2.75573192239858906525574406205464218e-6L, /* 0x171de3a556c7338faac243aaa9592.0p-131L */ +S11 = 2.50521083854417187749675637460977997e-8L, /* 0x1ae64567f544e38fe59b3380d7413.0p-138L */ +S13 = 1.60590438368216146368737762431552702e-10L, /* 0x16124613a86d098059c7620850fc2.0p-145L */ +S15 = 7.64716373181980539786802470969096440e-13L, /* 0x1ae7f3e733b814193af09ce723043.0p-153L */ +S17 = 2.81145725434775409870584280722701574e-15L; /* 0x1952c77030c36898c3fd0b6dfc562.0p-161L */ +static const double +S19= 8.2206352435411005e-18, /* 0x12f49b4662b86d.0p-109 */ +S21= 1.9572943931418891e-20, /* 0x171b8f2fab9628.0p-118 */ +S23 = 3.8679983530666939e-23, /* 0x17617002b73afc.0p-127 */ +S25 = 6.5067867911512749e-26; /* 0x1423352626048a.0p-136 */ +#else +#error "Unsupported long double format" +#endif /* LDBL_MANT_DIG == 64 */ + +/* log(2**16385 - 0.5) rounded up: */ +static const float +o_threshold = 1.13572168e4; /* 0xb174de.0p-10 */ + +long double +sinhl(long double x) +{ + long double hi,lo,x2,x4; +#if LDBL_MANT_DIG == 113 + double dx2; +#endif + double s; + int16_t ix,jx; + + GET_LDBL_EXPSIGN(jx,x); + ix = jx&0x7fff; + + /* x is INF or NaN */ + if(ix>=0x7fff) return x+x; + + ENTERI(); + + s = 1; + if (jx<0) s = -1; + + /* |x| < 64, return x, s(x), or accurate s*(exp(|x|)/2-1/exp(|x|)/2) */ + if (ix<0x4005) { /* |x|<64 */ + if (ix1) RETURNI(x); /* sinh(tiny) = tiny with inexact */ + if (ix<0x3fff) { /* |x|<1 */ + x2 = x*x; +#if LDBL_MANT_DIG == 64 + x4 = x2*x2; + RETURNI(((S17*x2 + S15)*x4 + (S13*x2 + S11))*(x2*x*x4*x4) + + ((S9*x2 + S7)*x2 + S5)*(x2*x*x2) + S3*(x2*x) + x); +#elif LDBL_MANT_DIG == 113 + dx2 = x2; + RETURNI(((((((((((S25*dx2 + S23)*dx2 + + S21)*x2 + S19)*x2 + + S17)*x2 + S15)*x2 + S13)*x2 + S11)*x2 + S9)*x2 + S7)*x2 + + S5)* (x2*x*x2) + + S3*(x2*x) + x); +#endif + } + k_hexpl(fabsl(x), &hi, &lo); + RETURNI(s*(lo - 0.25/(hi + lo) + hi)); + } + + /* |x| in [64, o_threshold], return correctly-overflowing s*exp(|x|)/2 */ + if (fabsl(x) <= o_threshold) + RETURNI(s*hexpl(fabsl(x))); + + /* |x| > o_threshold, sinh(x) overflow */ + return x*shuge; +} diff --git a/newlib/libm/ld/fdiml.c b/newlib/libm/ld/fdiml.c new file mode 100644 index 0000000000..dfdb4e63d3 --- /dev/null +++ b/newlib/libm/ld/fdiml.c @@ -0,0 +1,55 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2004 David Schultz + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include + +#define DECL(type, fn) \ +type \ +fn(type x, type y) \ +{ \ + \ + if (isnan(x)) \ + return (x); \ + if (isnan(y)) \ + return (y); \ + return (x > y ? x - y : 0.0); \ +} + +/* + * fdim and fdimf are defined elsewhere in + * newlib. Ignore the freebsd versions and only compile + * fdiml. + */ +#if 0 +DECL(double, fdim) +DECL(float, fdimf) +#endif +DECL(long double, fdiml) diff --git a/newlib/libm/ld/fpmath.h b/newlib/libm/ld/fpmath.h new file mode 100644 index 0000000000..323fbe5fcd --- /dev/null +++ b/newlib/libm/ld/fpmath.h @@ -0,0 +1,82 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2003 Mike Barcroft + * Copyright (c) 2002 David Schultz + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#ifndef _FPMATH_H_ +#define _FPMATH_H_ + +#include +#include "machine/_fpmath.h" /* changed to machine for newlib */ + +#ifndef _IEEE_WORD_ORDER +#define _IEEE_WORD_ORDER _BYTE_ORDER +#endif + +union IEEEf2bits { + float f; + struct { +#if _BYTE_ORDER == _LITTLE_ENDIAN + unsigned int man :23; + unsigned int exp :8; + unsigned int sign :1; +#else /* _BIG_ENDIAN */ + unsigned int sign :1; + unsigned int exp :8; + unsigned int man :23; +#endif + } bits; +}; + +#define DBL_MANH_SIZE 20 +#define DBL_MANL_SIZE 32 + +union IEEEd2bits { + double d; + struct { +#if _BYTE_ORDER == _LITTLE_ENDIAN +#if _IEEE_WORD_ORDER == _LITTLE_ENDIAN + unsigned int manl :32; +#endif + unsigned int manh :20; + unsigned int exp :11; + unsigned int sign :1; +#if _IEEE_WORD_ORDER == _BIG_ENDIAN + unsigned int manl :32; +#endif +#else /* _BIG_ENDIAN */ + unsigned int sign :1; + unsigned int exp :11; + unsigned int manh :20; + unsigned int manl :32; +#endif + } bits; +}; + +#endif /* !_FPMATH_H */ diff --git a/newlib/libm/ld/invtrig.h b/newlib/libm/ld/invtrig.h new file mode 100644 index 0000000000..e8d97d3b6c --- /dev/null +++ b/newlib/libm/ld/invtrig.h @@ -0,0 +1,33 @@ +/* + * COPYRIGHT (c) 1989-1999. + * On-Line Applications Research Corporation (OAR). + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#if LDBL_MANT_DIG == 64 +#include "../ld80/invtrig.h" +#elif LDBL_MANT_DIG == 113 +#include "../ld128/invtrig.h" +#else +#error "Unsupported long double format" +#endif diff --git a/newlib/libm/ld/k_expl.h b/newlib/libm/ld/k_expl.h new file mode 100644 index 0000000000..721a912801 --- /dev/null +++ b/newlib/libm/ld/k_expl.h @@ -0,0 +1,33 @@ +/* + * COPYRIGHT (c) 1989-1999. + * On-Line Applications Research Corporation (OAR). + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#if LDBL_MANT_DIG == 64 +#include "../ld80/k_expl.h" +#elif LDBL_MANT_DIG == 113 +#include "../ld128/k_expl.h" +#else +#error "Unsupported long double format" +#endif diff --git a/newlib/libm/ld/math_private.h b/newlib/libm/ld/math_private.h new file mode 100644 index 0000000000..c5b88f65e9 --- /dev/null +++ b/newlib/libm/ld/math_private.h @@ -0,0 +1,941 @@ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* + * from: @(#)fdlibm.h 5.1 93/09/24 + * $FreeBSD$ + */ + +#ifndef _MATH_PRIVATE_H_ +#define _MATH_PRIVATE_H_ + +#include +#include + +/* + * __double_t and __float_t are defined elsewhere in + * freebsd and used to define double_t and float_t. + * Newlib has already went through the process of + * defining double_t and float_t so we should be able + * to use them to define __double_t and __float_t for + * this file. + */ +typedef double_t __double_t; +typedef float_t __float_t; + +/* + * Necessary to disable Protection Enabled specific + * Free-bsd source. + */ +#define NO_FPSETPREC + +/* + * The original fdlibm code used statements like: + * n0 = ((*(int*)&one)>>29)^1; * index of high word * + * ix0 = *(n0+(int*)&x); * high word of x * + * ix1 = *((1-n0)+(int*)&x); * low word of x * + * to dig two 32 bit words out of the 64 bit IEEE floating point + * value. That is non-ANSI, and, moreover, the gcc instruction + * scheduler gets it wrong. We instead use the following macros. + * Unlike the original code, we determine the endianness at compile + * time, not at run time; I don't see much benefit to selecting + * endianness at run time. + */ + +/* + * A union which permits us to convert between a double and two 32 bit + * ints. + */ + +#ifdef __arm__ +#if defined(__VFP_FP__) || defined(__ARM_EABI__) +#define IEEE_WORD_ORDER BYTE_ORDER +#else +#define IEEE_WORD_ORDER BIG_ENDIAN +#endif +#else /* __arm__ */ +#define IEEE_WORD_ORDER BYTE_ORDER +#endif + +/* A union which permits us to convert between a long double and + four 32 bit ints. */ + +#if IEEE_WORD_ORDER == BIG_ENDIAN + +typedef union +{ + long double value; + struct { + u_int32_t mswhi; + u_int32_t mswlo; + u_int32_t lswhi; + u_int32_t lswlo; + } parts32; + struct { + u_int64_t msw; + u_int64_t lsw; + } parts64; +} ieee_quad_shape_type; + +#endif + +#if IEEE_WORD_ORDER == LITTLE_ENDIAN + +typedef union +{ + long double value; + struct { + u_int32_t lswlo; + u_int32_t lswhi; + u_int32_t mswlo; + u_int32_t mswhi; + } parts32; + struct { + u_int64_t lsw; + u_int64_t msw; + } parts64; +} ieee_quad_shape_type; + +#endif + +#if IEEE_WORD_ORDER == BIG_ENDIAN + +typedef union +{ + double value; + struct + { + u_int32_t msw; + u_int32_t lsw; + } parts; + struct + { + u_int64_t w; + } xparts; +} ieee_double_shape_type; + +#endif + +#if IEEE_WORD_ORDER == LITTLE_ENDIAN + +typedef union +{ + double value; + struct + { + u_int32_t lsw; + u_int32_t msw; + } parts; + struct + { + u_int64_t w; + } xparts; +} ieee_double_shape_type; + +#endif + +/* Get two 32 bit ints from a double. */ + +#define EXTRACT_WORDS(ix0,ix1,d) \ +do { \ + ieee_double_shape_type ew_u; \ + ew_u.value = (d); \ + (ix0) = ew_u.parts.msw; \ + (ix1) = ew_u.parts.lsw; \ +} while (0) + +/* Get a 64-bit int from a double. */ +#define EXTRACT_WORD64(ix,d) \ +do { \ + ieee_double_shape_type ew_u; \ + ew_u.value = (d); \ + (ix) = ew_u.xparts.w; \ +} while (0) + +/* Get the more significant 32 bit int from a double. */ + +#define GET_HIGH_WORD(i,d) \ +do { \ + ieee_double_shape_type gh_u; \ + gh_u.value = (d); \ + (i) = gh_u.parts.msw; \ +} while (0) + +/* Get the less significant 32 bit int from a double. */ + +#define GET_LOW_WORD(i,d) \ +do { \ + ieee_double_shape_type gl_u; \ + gl_u.value = (d); \ + (i) = gl_u.parts.lsw; \ +} while (0) + +/* Set a double from two 32 bit ints. */ + +#define INSERT_WORDS(d,ix0,ix1) \ +do { \ + ieee_double_shape_type iw_u; \ + iw_u.parts.msw = (ix0); \ + iw_u.parts.lsw = (ix1); \ + (d) = iw_u.value; \ +} while (0) + +/* Set a double from a 64-bit int. */ +#define INSERT_WORD64(d,ix) \ +do { \ + ieee_double_shape_type iw_u; \ + iw_u.xparts.w = (ix); \ + (d) = iw_u.value; \ +} while (0) + +/* Set the more significant 32 bits of a double from an int. */ + +#define SET_HIGH_WORD(d,v) \ +do { \ + ieee_double_shape_type sh_u; \ + sh_u.value = (d); \ + sh_u.parts.msw = (v); \ + (d) = sh_u.value; \ +} while (0) + +/* Set the less significant 32 bits of a double from an int. */ + +#define SET_LOW_WORD(d,v) \ +do { \ + ieee_double_shape_type sl_u; \ + sl_u.value = (d); \ + sl_u.parts.lsw = (v); \ + (d) = sl_u.value; \ +} while (0) + +/* + * A union which permits us to convert between a float and a 32 bit + * int. + */ + +typedef union +{ + float value; + /* FIXME: Assumes 32 bit int. */ + unsigned int word; +} ieee_float_shape_type; + +/* Get a 32 bit int from a float. */ + +#define GET_FLOAT_WORD(i,d) \ +do { \ + ieee_float_shape_type gf_u; \ + gf_u.value = (d); \ + (i) = gf_u.word; \ +} while (0) + +/* Set a float from a 32 bit int. */ + +#define SET_FLOAT_WORD(d,i) \ +do { \ + ieee_float_shape_type sf_u; \ + sf_u.word = (i); \ + (d) = sf_u.value; \ +} while (0) + +/* + * Get expsign and mantissa as 16 bit and 64 bit ints from an 80 bit long + * double. + */ + +#define EXTRACT_LDBL80_WORDS(ix0,ix1,d) \ +do { \ + union IEEEl2bits ew_u; \ + ew_u.e = (d); \ + (ix0) = ew_u.xbits.expsign; \ + (ix1) = ew_u.xbits.man; \ +} while (0) + +/* + * Get expsign and mantissa as one 16 bit and two 64 bit ints from a 128 bit + * long double. + */ + +#define EXTRACT_LDBL128_WORDS(ix0,ix1,ix2,d) \ +do { \ + union IEEEl2bits ew_u; \ + ew_u.e = (d); \ + (ix0) = ew_u.xbits.expsign; \ + (ix1) = ew_u.xbits.manh; \ + (ix2) = ew_u.xbits.manl; \ +} while (0) + +/* Get expsign as a 16 bit int from a long double. */ + +#define GET_LDBL_EXPSIGN(i,d) \ +do { \ + union IEEEl2bits ge_u; \ + ge_u.e = (d); \ + (i) = ge_u.xbits.expsign; \ +} while (0) + +/* + * Set an 80 bit long double from a 16 bit int expsign and a 64 bit int + * mantissa. + */ + +#define INSERT_LDBL80_WORDS(d,ix0,ix1) \ +do { \ + union IEEEl2bits iw_u; \ + iw_u.xbits.expsign = (ix0); \ + iw_u.xbits.man = (ix1); \ + (d) = iw_u.e; \ +} while (0) + +/* + * Set a 128 bit long double from a 16 bit int expsign and two 64 bit ints + * comprising the mantissa. + */ + +#define INSERT_LDBL128_WORDS(d,ix0,ix1,ix2) \ +do { \ + union IEEEl2bits iw_u; \ + iw_u.xbits.expsign = (ix0); \ + iw_u.xbits.manh = (ix1); \ + iw_u.xbits.manl = (ix2); \ + (d) = iw_u.e; \ +} while (0) + +/* Set expsign of a long double from a 16 bit int. */ + +#define SET_LDBL_EXPSIGN(d,v) \ +do { \ + union IEEEl2bits se_u; \ + se_u.e = (d); \ + se_u.xbits.expsign = (v); \ + (d) = se_u.e; \ +} while (0) + +#ifdef __i386__ +/* Long double constants are broken on i386. */ +#define LD80C(m, ex, v) { \ + .xbits.man = __CONCAT(m, ULL), \ + .xbits.expsign = (0x3fff + (ex)) | ((v) < 0 ? 0x8000 : 0), \ +} +#else +/* The above works on non-i386 too, but we use this to check v. */ +#define LD80C(m, ex, v) { .e = (v), } +#endif + +#ifdef FLT_EVAL_METHOD +/* + * Attempt to get strict C99 semantics for assignment with non-C99 compilers. + */ +#if FLT_EVAL_METHOD == 0 || __GNUC__ == 0 +#define STRICT_ASSIGN(type, lval, rval) ((lval) = (rval)) +#else +#define STRICT_ASSIGN(type, lval, rval) do { \ + volatile type __lval; \ + \ + if (sizeof(type) >= sizeof(long double)) \ + (lval) = (rval); \ + else { \ + __lval = (rval); \ + (lval) = __lval; \ + } \ +} while (0) +#endif +#endif /* FLT_EVAL_METHOD */ + +/* Support switching the mode to FP_PE if necessary. */ +#if defined(__i386__) && !defined(NO_FPSETPREC) +#define ENTERI() ENTERIT(long double) +#define ENTERIT(returntype) \ + returntype __retval; \ + fp_prec_t __oprec; \ + \ + if ((__oprec = fpgetprec()) != FP_PE) \ + fpsetprec(FP_PE) +#define RETURNI(x) do { \ + __retval = (x); \ + if (__oprec != FP_PE) \ + fpsetprec(__oprec); \ + RETURNF(__retval); \ +} while (0) +#define ENTERV() \ + fp_prec_t __oprec; \ + \ + if ((__oprec = fpgetprec()) != FP_PE) \ + fpsetprec(FP_PE) +#define RETURNV() do { \ + if (__oprec != FP_PE) \ + fpsetprec(__oprec); \ + return; \ +} while (0) +#else +#define ENTERI() +#define ENTERIT(x) +#define RETURNI(x) RETURNF(x) +#define ENTERV() +#define RETURNV() return +#endif + +/* Default return statement if hack*_t() is not used. */ +#define RETURNF(v) return (v) + +/* + * 2sum gives the same result as 2sumF without requiring |a| >= |b| or + * a == 0, but is slower. + */ +#define _2sum(a, b) do { \ + __typeof(a) __s, __w; \ + \ + __w = (a) + (b); \ + __s = __w - (a); \ + (b) = ((a) - (__w - __s)) + ((b) - __s); \ + (a) = __w; \ +} while (0) + +/* + * 2sumF algorithm. + * + * "Normalize" the terms in the infinite-precision expression a + b for + * the sum of 2 floating point values so that b is as small as possible + * relative to 'a'. (The resulting 'a' is the value of the expression in + * the same precision as 'a' and the resulting b is the rounding error.) + * |a| must be >= |b| or 0, b's type must be no larger than 'a's type, and + * exponent overflow or underflow must not occur. This uses a Theorem of + * Dekker (1971). See Knuth (1981) 4.2.2 Theorem C. The name "TwoSum" + * is apparently due to Skewchuk (1997). + * + * For this to always work, assignment of a + b to 'a' must not retain any + * extra precision in a + b. This is required by C standards but broken + * in many compilers. The brokenness cannot be worked around using + * STRICT_ASSIGN() like we do elsewhere, since the efficiency of this + * algorithm would be destroyed by non-null strict assignments. (The + * compilers are correct to be broken -- the efficiency of all floating + * point code calculations would be destroyed similarly if they forced the + * conversions.) + * + * Fortunately, a case that works well can usually be arranged by building + * any extra precision into the type of 'a' -- 'a' should have type float_t, + * double_t or long double. b's type should be no larger than 'a's type. + * Callers should use these types with scopes as large as possible, to + * reduce their own extra-precision and efficiciency problems. In + * particular, they shouldn't convert back and forth just to call here. + */ +#ifdef DEBUG +#define _2sumF(a, b) do { \ + __typeof(a) __w; \ + volatile __typeof(a) __ia, __ib, __r, __vw; \ + \ + __ia = (a); \ + __ib = (b); \ + assert(__ia == 0 || fabsl(__ia) >= fabsl(__ib)); \ + \ + __w = (a) + (b); \ + (b) = ((a) - __w) + (b); \ + (a) = __w; \ + \ + /* The next 2 assertions are weak if (a) is already long double. */ \ + assert((long double)__ia + __ib == (long double)(a) + (b)); \ + __vw = __ia + __ib; \ + __r = __ia - __vw; \ + __r += __ib; \ + assert(__vw == (a) && __r == (b)); \ +} while (0) +#else /* !DEBUG */ +#define _2sumF(a, b) do { \ + __typeof(a) __w; \ + \ + __w = (a) + (b); \ + (b) = ((a) - __w) + (b); \ + (a) = __w; \ +} while (0) +#endif /* DEBUG */ + +/* + * Set x += c, where x is represented in extra precision as a + b. + * x must be sufficiently normalized and sufficiently larger than c, + * and the result is then sufficiently normalized. + * + * The details of ordering are that |a| must be >= |c| (so that (a, c) + * can be normalized without extra work to swap 'a' with c). The details of + * the normalization are that b must be small relative to the normalized 'a'. + * Normalization of (a, c) makes the normalized c tiny relative to the + * normalized a, so b remains small relative to 'a' in the result. However, + * b need not ever be tiny relative to 'a'. For example, b might be about + * 2**20 times smaller than 'a' to give about 20 extra bits of precision. + * That is usually enough, and adding c (which by normalization is about + * 2**53 times smaller than a) cannot change b significantly. However, + * cancellation of 'a' with c in normalization of (a, c) may reduce 'a' + * significantly relative to b. The caller must ensure that significant + * cancellation doesn't occur, either by having c of the same sign as 'a', + * or by having |c| a few percent smaller than |a|. Pre-normalization of + * (a, b) may help. + * + * This is a variant of an algorithm of Kahan (see Knuth (1981) 4.2.2 + * exercise 19). We gain considerable efficiency by requiring the terms to + * be sufficiently normalized and sufficiently increasing. + */ +#define _3sumF(a, b, c) do { \ + __typeof(a) __tmp; \ + \ + __tmp = (c); \ + _2sumF(__tmp, (a)); \ + (b) += (a); \ + (a) = __tmp; \ +} while (0) + +/* + * Common routine to process the arguments to nan(), nanf(), and nanl(). + */ +void _scan_nan(uint32_t *__words, int __num_words, const char *__s); + +/* + * Mix 0, 1 or 2 NaNs. First add 0 to each arg. This normally just turns + * signaling NaNs into quiet NaNs by setting a quiet bit. We do this + * because we want to never return a signaling NaN, and also because we + * don't want the quiet bit to affect the result. Then mix the converted + * args using the specified operation. + * + * When one arg is NaN, the result is typically that arg quieted. When both + * args are NaNs, the result is typically the quietening of the arg whose + * mantissa is largest after quietening. When neither arg is NaN, the + * result may be NaN because it is indeterminate, or finite for subsequent + * construction of a NaN as the indeterminate 0.0L/0.0L. + * + * Technical complications: the result in bits after rounding to the final + * precision might depend on the runtime precision and/or on compiler + * optimizations, especially when different register sets are used for + * different precisions. Try to make the result not depend on at least the + * runtime precision by always doing the main mixing step in long double + * precision. Try to reduce dependencies on optimizations by adding the + * the 0's in different precisions (unless everything is in long double + * precision). + */ +#define nan_mix(x, y) (nan_mix_op((x), (y), +)) +#define nan_mix_op(x, y, op) (((x) + 0.0L) op ((y) + 0)) + +#ifdef _COMPLEX_H + +/* + * C99 specifies that complex numbers have the same representation as + * an array of two elements, where the first element is the real part + * and the second element is the imaginary part. + */ +typedef union { + float complex f; + float a[2]; +} float_complex; +typedef union { + double complex f; + double a[2]; +} double_complex; +typedef union { + long double complex f; + long double a[2]; +} long_double_complex; +#define REALPART(z) ((z).a[0]) +#define IMAGPART(z) ((z).a[1]) + +/* + * Inline functions that can be used to construct complex values. + * + * The C99 standard intends x+I*y to be used for this, but x+I*y is + * currently unusable in general since gcc introduces many overflow, + * underflow, sign and efficiency bugs by rewriting I*y as + * (0.0+I)*(y+0.0*I) and laboriously computing the full complex product. + * In particular, I*Inf is corrupted to NaN+I*Inf, and I*-0 is corrupted + * to -0.0+I*0.0. + * + * The C11 standard introduced the macros CMPLX(), CMPLXF() and CMPLXL() + * to construct complex values. Compilers that conform to the C99 + * standard require the following functions to avoid the above issues. + */ + +#ifndef CMPLXF +static __inline float complex +CMPLXF(float x, float y) +{ + float_complex z; + + REALPART(z) = x; + IMAGPART(z) = y; + return (z.f); +} +#endif + +#ifndef CMPLX +static __inline double complex +CMPLX(double x, double y) +{ + double_complex z; + + REALPART(z) = x; + IMAGPART(z) = y; + return (z.f); +} +#endif + +#ifndef CMPLXL +static __inline long double complex +CMPLXL(long double x, long double y) +{ + long_double_complex z; + + REALPART(z) = x; + IMAGPART(z) = y; + return (z.f); +} +#endif + +#endif /* _COMPLEX_H */ + +/* + * The rnint() family rounds to the nearest integer for a restricted range + * range of args (up to about 2**MANT_DIG). We assume that the current + * rounding mode is FE_TONEAREST so that this can be done efficiently. + * Extra precision causes more problems in practice, and we only centralize + * this here to reduce those problems, and have not solved the efficiency + * problems. The exp2() family uses a more delicate version of this that + * requires extracting bits from the intermediate value, so it is not + * centralized here and should copy any solution of the efficiency problems. + */ + +static inline double +rnint(__double_t x) +{ + /* + * This casts to double to kill any extra precision. This depends + * on the cast being applied to a double_t to avoid compiler bugs + * (this is a cleaner version of STRICT_ASSIGN()). This is + * inefficient if there actually is extra precision, but is hard + * to improve on. We use double_t in the API to minimise conversions + * for just calling here. Note that we cannot easily change the + * magic number to the one that works directly with double_t, since + * the rounding precision is variable at runtime on x86 so the + * magic number would need to be variable. Assuming that the + * rounding precision is always the default is too fragile. This + * and many other complications will move when the default is + * changed to FP_PE. + */ + return ((double)(x + 0x1.8p52) - 0x1.8p52); +} + +static inline float +rnintf(__float_t x) +{ + /* + * As for rnint(), except we could just call that to handle the + * extra precision case, usually without losing efficiency. + */ + return ((float)(x + 0x1.8p23F) - 0x1.8p23F); +} + +#ifdef LDBL_MANT_DIG +/* + * The complications for extra precision are smaller for rnintl() since it + * can safely assume that the rounding precision has been increased from + * its default to FP_PE on x86. We don't exploit that here to get small + * optimizations from limiting the rangle to double. We just need it for + * the magic number to work with long doubles. ld128 callers should use + * rnint() instead of this if possible. ld80 callers should prefer + * rnintl() since for amd64 this avoids swapping the register set, while + * for i386 it makes no difference (assuming FP_PE), and for other arches + * it makes little difference. + */ +static inline long double +rnintl(long double x) +{ + return (x + __CONCAT(0x1.8p, LDBL_MANT_DIG) / 2 - + __CONCAT(0x1.8p, LDBL_MANT_DIG) / 2); +} +#endif /* LDBL_MANT_DIG */ + +/* + * irint() and i64rint() give the same result as casting to their integer + * return type provided their arg is a floating point integer. They can + * sometimes be more efficient because no rounding is required. + */ +#if defined(amd64) || (defined(__i386__) && (!defined _SOFT_FLOAT)) +#define irint(x) \ + (sizeof(x) == sizeof(float) && \ + sizeof(__float_t) == sizeof(long double) ? irintf(x) : \ + sizeof(x) == sizeof(double) && \ + sizeof(__double_t) == sizeof(long double) ? irintd(x) : \ + sizeof(x) == sizeof(long double) ? irintl(x) : (int)(x)) +#else +#define irint(x) ((int)(x)) +#endif + +#define i64rint(x) ((int64_t)(x)) /* only needed for ld128 so not opt. */ + +#if defined(__i386__) +static __inline int +irintf(float x) +{ + int n; + + __asm("fistl %0" : "=m" (n) : "t" (x)); + return (n); +} + +static __inline int +irintd(double x) +{ + int n; + + __asm("fistl %0" : "=m" (n) : "t" (x)); + return (n); +} +#endif + +#if defined(__amd64__) || (defined(__i386__) && (!defined _SOFT_FLOAT)) +static __inline int +irintl(long double x) +{ + int n; + + __asm("fistl %0" : "=m" (n) : "t" (x)); + return (n); +} +#endif + +#ifdef DEBUG +#if defined(__amd64__) || defined(__i386__) +#define breakpoint() asm("int $3") +#else +#include + +#define breakpoint() raise(SIGTRAP) +#endif +#endif + +/* Write a pari script to test things externally. */ +#ifdef DOPRINT +#include + +#ifndef DOPRINT_SWIZZLE +#define DOPRINT_SWIZZLE 0 +#endif + +#ifdef DOPRINT_LD80 + +#define DOPRINT_START(xp) do { \ + uint64_t __lx; \ + uint16_t __hx; \ + \ + /* Hack to give more-problematic args. */ \ + EXTRACT_LDBL80_WORDS(__hx, __lx, *xp); \ + __lx ^= DOPRINT_SWIZZLE; \ + INSERT_LDBL80_WORDS(*xp, __hx, __lx); \ + printf("x = %.21Lg; ", (long double)*xp); \ +} while (0) +#define DOPRINT_END1(v) \ + printf("y = %.21Lg; z = 0; show(x, y, z);\n", (long double)(v)) +#define DOPRINT_END2(hi, lo) \ + printf("y = %.21Lg; z = %.21Lg; show(x, y, z);\n", \ + (long double)(hi), (long double)(lo)) + +#elif defined(DOPRINT_D64) + +#define DOPRINT_START(xp) do { \ + uint32_t __hx, __lx; \ + \ + EXTRACT_WORDS(__hx, __lx, *xp); \ + __lx ^= DOPRINT_SWIZZLE; \ + INSERT_WORDS(*xp, __hx, __lx); \ + printf("x = %.21Lg; ", (long double)*xp); \ +} while (0) +#define DOPRINT_END1(v) \ + printf("y = %.21Lg; z = 0; show(x, y, z);\n", (long double)(v)) +#define DOPRINT_END2(hi, lo) \ + printf("y = %.21Lg; z = %.21Lg; show(x, y, z);\n", \ + (long double)(hi), (long double)(lo)) + +#elif defined(DOPRINT_F32) + +#define DOPRINT_START(xp) do { \ + uint32_t __hx; \ + \ + GET_FLOAT_WORD(__hx, *xp); \ + __hx ^= DOPRINT_SWIZZLE; \ + SET_FLOAT_WORD(*xp, __hx); \ + printf("x = %.21Lg; ", (long double)*xp); \ +} while (0) +#define DOPRINT_END1(v) \ + printf("y = %.21Lg; z = 0; show(x, y, z);\n", (long double)(v)) +#define DOPRINT_END2(hi, lo) \ + printf("y = %.21Lg; z = %.21Lg; show(x, y, z);\n", \ + (long double)(hi), (long double)(lo)) + +#else /* !DOPRINT_LD80 && !DOPRINT_D64 (LD128 only) */ + +#ifndef DOPRINT_SWIZZLE_HIGH +#define DOPRINT_SWIZZLE_HIGH 0 +#endif + +#define DOPRINT_START(xp) do { \ + uint64_t __lx, __llx; \ + uint16_t __hx; \ + \ + EXTRACT_LDBL128_WORDS(__hx, __lx, __llx, *xp); \ + __llx ^= DOPRINT_SWIZZLE; \ + __lx ^= DOPRINT_SWIZZLE_HIGH; \ + INSERT_LDBL128_WORDS(*xp, __hx, __lx, __llx); \ + printf("x = %.36Lg; ", (long double)*xp); \ +} while (0) +#define DOPRINT_END1(v) \ + printf("y = %.36Lg; z = 0; show(x, y, z);\n", (long double)(v)) +#define DOPRINT_END2(hi, lo) \ + printf("y = %.36Lg; z = %.36Lg; show(x, y, z);\n", \ + (long double)(hi), (long double)(lo)) + +#endif /* DOPRINT_LD80 */ + +#else /* !DOPRINT */ +#define DOPRINT_START(xp) +#define DOPRINT_END1(v) +#define DOPRINT_END2(hi, lo) +#endif /* DOPRINT */ + +#define RETURNP(x) do { \ + DOPRINT_END1(x); \ + RETURNF(x); \ +} while (0) +#define RETURNPI(x) do { \ + DOPRINT_END1(x); \ + RETURNI(x); \ +} while (0) +#define RETURN2P(x, y) do { \ + DOPRINT_END2((x), (y)); \ + RETURNF((x) + (y)); \ +} while (0) +#define RETURN2PI(x, y) do { \ + DOPRINT_END2((x), (y)); \ + RETURNI((x) + (y)); \ +} while (0) +#ifdef STRUCT_RETURN +#define RETURNSP(rp) do { \ + if (!(rp)->lo_set) \ + RETURNP((rp)->hi); \ + RETURN2P((rp)->hi, (rp)->lo); \ +} while (0) +#define RETURNSPI(rp) do { \ + if (!(rp)->lo_set) \ + RETURNPI((rp)->hi); \ + RETURN2PI((rp)->hi, (rp)->lo); \ +} while (0) +#endif +#define SUM2P(x, y) ({ \ + const __typeof (x) __x = (x); \ + const __typeof (y) __y = (y); \ + \ + DOPRINT_END2(__x, __y); \ + __x + __y; \ +}) + +/* + * ieee style elementary functions + * + * We rename functions here to improve other sources' diffability + * against fdlibm. + */ +#define __ieee754_sqrt sqrt +#define __ieee754_acos acos +#define __ieee754_acosh acosh +#define __ieee754_log log +#define __ieee754_log2 log2 +#define __ieee754_atanh atanh +#define __ieee754_asin asin +#define __ieee754_atan2 atan2 +#define __ieee754_exp exp +#define __ieee754_cosh cosh +#define __ieee754_fmod fmod +#define __ieee754_pow pow +#define __ieee754_lgamma lgamma +#define __ieee754_gamma gamma +#define __ieee754_lgamma_r lgamma_r +#define __ieee754_gamma_r gamma_r +#define __ieee754_log10 log10 +#define __ieee754_sinh sinh +#define __ieee754_hypot hypot +#define __ieee754_j0 j0 +#define __ieee754_j1 j1 +#define __ieee754_y0 y0 +#define __ieee754_y1 y1 +#define __ieee754_jn jn +#define __ieee754_yn yn +#define __ieee754_remainder remainder +#define __ieee754_scalb scalb +#define __ieee754_sqrtf sqrtf +#define __ieee754_acosf acosf +#define __ieee754_acoshf acoshf +#define __ieee754_logf logf +#define __ieee754_atanhf atanhf +#define __ieee754_asinf asinf +#define __ieee754_atan2f atan2f +#define __ieee754_expf expf +#define __ieee754_coshf coshf +#define __ieee754_fmodf fmodf +#define __ieee754_powf powf +#define __ieee754_lgammaf lgammaf +#define __ieee754_gammaf gammaf +#define __ieee754_lgammaf_r lgammaf_r +#define __ieee754_gammaf_r gammaf_r +#define __ieee754_log10f log10f +#define __ieee754_log2f log2f +#define __ieee754_sinhf sinhf +#define __ieee754_hypotf hypotf +#define __ieee754_j0f j0f +#define __ieee754_j1f j1f +#define __ieee754_y0f y0f +#define __ieee754_y1f y1f +#define __ieee754_jnf jnf +#define __ieee754_ynf ynf +#define __ieee754_remainderf remainderf +#define __ieee754_scalbf scalbf + +/* fdlibm kernel function */ +int __kernel_rem_pio2(double*,double*,int,int,int); + +/* double precision kernel functions */ +#ifndef INLINE_REM_PIO2 +int __ieee754_rem_pio2(double,double*); +#endif +double __kernel_sin(double,double,int); +double __kernel_cos(double,double); +double __kernel_tan(double,double,int); +double __ldexp_exp(double,int); +#ifdef _COMPLEX_H +double complex __ldexp_cexp(double complex,int); +#endif + +/* float precision kernel functions */ +#ifndef INLINE_REM_PIO2F +int __ieee754_rem_pio2f(float,double*); +#endif +#ifndef INLINE_KERNEL_SINDF +float __kernel_sindf(double); +#endif +#ifndef INLINE_KERNEL_COSDF +float __kernel_cosdf(double); +#endif +#ifndef INLINE_KERNEL_TANDF +float __kernel_tandf(double,int); +#endif +float __ldexp_expf(float,int); +#ifdef _COMPLEX_H +float complex __ldexp_cexpf(float complex,int); +#endif + +/* long double precision kernel functions */ +long double __kernel_sinl(long double, long double, int); +long double __kernel_cosl(long double, long double); +long double __kernel_tanl(long double, long double, int); + +#endif /* !_MATH_PRIVATE_H_ */ diff --git a/newlib/libm/ld/s_asinhl.c b/newlib/libm/ld/s_asinhl.c new file mode 100644 index 0000000000..ba28f599c3 --- /dev/null +++ b/newlib/libm/ld/s_asinhl.c @@ -0,0 +1,91 @@ +/* from: FreeBSD: head/lib/msun/src/e_acosh.c 176451 2008-02-22 02:30:36Z das */ + +/* @(#)s_asinh.c 5.1 93/09/24 */ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#include +__FBSDID("$FreeBSD$"); + +/* + * See s_asinh.c for complete comments. + * + * Converted to long double by David Schultz and + * Bruce D. Evans. + */ + +#include +#ifdef __i386__ +#include +#endif + +#include "fpmath.h" +#include "math.h" +#include "math_private.h" + +/* EXP_LARGE is the threshold above which we use asinh(x) ~= log(2x). */ +/* EXP_TINY is the threshold below which we use asinh(x) ~= x. */ +#if LDBL_MANT_DIG == 64 +#define EXP_LARGE 34 +#define EXP_TINY -34 +#elif LDBL_MANT_DIG == 113 +#define EXP_LARGE 58 +#define EXP_TINY -58 +#else +#error "Unsupported long double format" +#endif + +#if LDBL_MAX_EXP != 0x4000 +/* We also require the usual expsign encoding. */ +#error "Unsupported long double format" +#endif + +#define BIAS (LDBL_MAX_EXP - 1) + +static const double +one = 1.00000000000000000000e+00, /* 0x3FF00000, 0x00000000 */ +huge= 1.00000000000000000000e+300; + +#if LDBL_MANT_DIG == 64 +static const union IEEEl2bits +u_ln2 = LD80C(0xb17217f7d1cf79ac, -1, 6.93147180559945309417e-1L); +#define ln2 u_ln2.e +#elif LDBL_MANT_DIG == 113 +static const long double +ln2 = 6.93147180559945309417232121458176568e-1L; /* 0x162e42fefa39ef35793c7673007e6.0p-113 */ +#else +#error "Unsupported long double format" +#endif + +long double +asinhl(long double x) +{ + long double t, w; + uint16_t hx, ix; + + ENTERI(); + GET_LDBL_EXPSIGN(hx, x); + ix = hx & 0x7fff; + if (ix >= 0x7fff) RETURNI(x+x); /* x is inf, NaN or misnormal */ + if (ix < BIAS + EXP_TINY) { /* |x| < TINY, or misnormal */ + if (huge + x > one) RETURNI(x); /* return x inexact except 0 */ + } + if (ix >= BIAS + EXP_LARGE) { /* |x| >= LARGE, or misnormal */ + w = logl(fabsl(x))+ln2; + } else if (ix >= 0x4000) { /* LARGE > |x| >= 2.0, or misnormal */ + t = fabsl(x); + w = logl(2.0*t+one/(sqrtl(x*x+one)+t)); + } else { /* 2.0 > |x| >= TINY, or misnormal */ + t = x*x; + w =log1pl(fabsl(x)+t/(one+sqrtl(one+t))); + } + RETURNI((hx & 0x8000) == 0 ? w : -w); +} diff --git a/newlib/libm/ld/s_atanl.c b/newlib/libm/ld/s_atanl.c new file mode 100644 index 0000000000..ff29c3ce8a --- /dev/null +++ b/newlib/libm/ld/s_atanl.c @@ -0,0 +1,85 @@ +/* @(#)s_atan.c 5.1 93/09/24 */ +/* FreeBSD: head/lib/msun/src/s_atan.c 176451 2008-02-22 02:30:36Z das */ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#include +__FBSDID("$FreeBSD$"); + +/* + * See comments in s_atan.c. + * Converted to long double by David Schultz . + */ + +#include + +#include "invtrig.h" +#include "math.h" +#include "math_private.h" + +static const long double +one = 1.0, +huge = 1.0e300; + +long double +atanl(long double x) +{ + union IEEEl2bits u; + long double w,s1,s2,z; + int id; + int16_t expsign, expt; + int32_t expman; + + u.e = x; + expsign = u.xbits.expsign; + expt = expsign & 0x7fff; + if(expt >= ATAN_CONST) { /* if |x| is large, atan(x)~=pi/2 */ + if(expt == BIAS + LDBL_MAX_EXP && + ((u.bits.manh&~LDBL_NBIT)|u.bits.manl)!=0) + return x+x; /* NaN */ + if(expsign>0) return atanhi[3]+atanlo[3]; + else return -atanhi[3]-atanlo[3]; + } + /* Extract the exponent and the first few bits of the mantissa. */ + /* XXX There should be a more convenient way to do this. */ + expman = (expt << 8) | ((u.bits.manh >> (MANH_SIZE - 9)) & 0xff); + if (expman < ((BIAS - 2) << 8) + 0xc0) { /* |x| < 0.4375 */ + if (expt < ATAN_LINEAR) { /* if |x| is small, atanl(x)~=x */ + if(huge+x>one) return x; /* raise inexact */ + } + id = -1; + } else { + x = fabsl(x); + if (expman < (BIAS << 8) + 0x30) { /* |x| < 1.1875 */ + if (expman < ((BIAS - 1) << 8) + 0x60) { /* 7/16 <=|x|<11/16 */ + id = 0; x = (2.0*x-one)/(2.0+x); + } else { /* 11/16<=|x|< 19/16 */ + id = 1; x = (x-one)/(x+one); + } + } else { + if (expman < ((BIAS + 1) << 8) + 0x38) { /* |x| < 2.4375 */ + id = 2; x = (x-1.5)/(one+1.5*x); + } else { /* 2.4375 <= |x| < 2^ATAN_CONST */ + id = 3; x = -1.0/x; + } + }} + /* end of argument reduction */ + z = x*x; + w = z*z; + /* break sum aT[i]z**(i+1) into odd and even poly */ + s1 = z*T_even(w); + s2 = w*T_odd(w); + if (id<0) return x - x*(s1+s2); + else { + z = atanhi[id] - ((x*(s1+s2) - atanlo[id]) - x); + return (expsign<0)? -z:z; + } +} diff --git a/newlib/libm/ld/s_cbrtl.c b/newlib/libm/ld/s_cbrtl.c new file mode 100644 index 0000000000..5c4a98a874 --- /dev/null +++ b/newlib/libm/ld/s_cbrtl.c @@ -0,0 +1,143 @@ +/*- + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * Copyright (c) 2009-2011, Bruce D. Evans, Steven G. Kargl, David Schultz. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + * + * The argument reduction and testing for exceptional cases was + * written by Steven G. Kargl with input from Bruce D. Evans + * and David A. Schultz. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#ifdef __i386__ +#include +#endif + +#include "fpmath.h" +#include "math.h" +#include "math_private.h" + +#define BIAS (LDBL_MAX_EXP - 1) + +static const unsigned + B1 = 709958130; /* B1 = (127-127.0/3-0.03306235651)*2**23 */ + +long double +cbrtl(long double x) +{ + union IEEEl2bits u, v; + long double r, s, t, w; + double dr, dt, dx; + float ft, fx; + uint32_t hx; + uint16_t expsign; + int k; + + u.e = x; + expsign = u.xbits.expsign; + k = expsign & 0x7fff; + + /* + * If x = +-Inf, then cbrt(x) = +-Inf. + * If x = NaN, then cbrt(x) = NaN. + */ + if (k == BIAS + LDBL_MAX_EXP) + return (x + x); + + ENTERI(); + if (k == 0) { + /* If x = +-0, then cbrt(x) = +-0. */ + if ((u.bits.manh | u.bits.manl) == 0) + RETURNI(x); + /* Adjust subnormal numbers. */ + u.e *= 0x1.0p514; + k = u.bits.exp; + k -= BIAS + 514; + } else + k -= BIAS; + u.xbits.expsign = BIAS; + v.e = 1; + + x = u.e; + switch (k % 3) { + case 1: + case -2: + x = 2*x; + k--; + break; + case 2: + case -1: + x = 4*x; + k -= 2; + break; + } + v.xbits.expsign = (expsign & 0x8000) | (BIAS + k / 3); + + /* + * The following is the guts of s_cbrtf, with the handling of + * special values removed and extra care for accuracy not taken, + * but with most of the extra accuracy not discarded. + */ + + /* ~5-bit estimate: */ + fx = x; + GET_FLOAT_WORD(hx, fx); + SET_FLOAT_WORD(ft, ((hx & 0x7fffffff) / 3 + B1)); + + /* ~16-bit estimate: */ + dx = x; + dt = ft; + dr = dt * dt * dt; + dt = dt * (dx + dx + dr) / (dx + dr + dr); + + /* ~47-bit estimate: */ + dr = dt * dt * dt; + dt = dt * (dx + dx + dr) / (dx + dr + dr); + +#if LDBL_MANT_DIG == 64 + /* + * dt is cbrtl(x) to ~47 bits (after x has been reduced to 1 <= x < 8). + * Round it away from zero to 32 bits (32 so that t*t is exact, and + * away from zero for technical reasons). + */ + volatile double vd2 = 0x1.0p32; + volatile double vd1 = 0x1.0p-31; + #define vd ((long double)vd2 + vd1) + + t = dt + vd - 0x1.0p32; +#elif LDBL_MANT_DIG == 113 + /* + * Round dt away from zero to 47 bits. Since we don't trust the 47, + * add 2 47-bit ulps instead of 1 to round up. Rounding is slow and + * might be avoidable in this case, since on most machines dt will + * have been evaluated in 53-bit precision and the technical reasons + * for rounding up might not apply to either case in cbrtl() since + * dt is much more accurate than needed. + */ + t = dt + 0x2.0p-46 + 0x1.0p60L - 0x1.0p60; +#else +#error "Unsupported long double format" +#endif + + /* + * Final step Newton iteration to 64 or 113 bits with + * error < 0.667 ulps + */ + s=t*t; /* t*t is exact */ + r=x/s; /* error <= 0.5 ulps; |r| < |t| */ + w=t+t; /* t+t is exact */ + r=(r-t)/(w+r); /* r-t is exact; w+r ~= 3*t */ + t=t+t*r; /* error <= (0.5 + 0.5/3) * ulp */ + + t *= v.e; + RETURNI(t); +} diff --git a/newlib/libm/ld/s_ceill.c b/newlib/libm/ld/s_ceill.c new file mode 100644 index 0000000000..2d1045fe60 --- /dev/null +++ b/newlib/libm/ld/s_ceill.c @@ -0,0 +1,101 @@ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + * + * From: @(#)s_ceil.c 5.1 93/09/24 + */ + +#include +__FBSDID("$FreeBSD$"); + +/* + * ceill(x) + * Return x rounded toward -inf to integral value + * Method: + * Bit twiddling. + * Exception: + * Inexact flag raised if x not equal to ceill(x). + */ + +#include +#include +#include + +#include "fpmath.h" + +#ifdef LDBL_IMPLICIT_NBIT +#define MANH_SIZE (LDBL_MANH_SIZE + 1) +#define INC_MANH(u, c) do { \ + uint64_t o = u.bits.manh; \ + u.bits.manh += (c); \ + if (u.bits.manh < o) \ + u.bits.exp++; \ +} while (0) +#else +#define MANH_SIZE LDBL_MANH_SIZE +#define INC_MANH(u, c) do { \ + uint64_t o = u.bits.manh; \ + u.bits.manh += (c); \ + if (u.bits.manh < o) { \ + u.bits.exp++; \ + u.bits.manh |= 1llu << (LDBL_MANH_SIZE - 1); \ + } \ +} while (0) +#endif + +static const long double huge = 1.0e300; + +long double +ceill(long double x) +{ + union IEEEl2bits u = { .e = x }; + int e = u.bits.exp - LDBL_MAX_EXP + 1; + + if (e < MANH_SIZE - 1) { + if (e < 0) { /* raise inexact if x != 0 */ + if (huge + x > 0.0) + if (u.bits.exp > 0 || + (u.bits.manh | u.bits.manl) != 0) + u.e = u.bits.sign ? -0.0 : 1.0; + } else { + uint64_t m = ((1llu << MANH_SIZE) - 1) >> (e + 1); + if (((u.bits.manh & m) | u.bits.manl) == 0) + return (x); /* x is integral */ + if (!u.bits.sign) { +#ifdef LDBL_IMPLICIT_NBIT + if (e == 0) + u.bits.exp++; + else +#endif + INC_MANH(u, 1llu << (MANH_SIZE - e - 1)); + } + if (huge + x > 0.0) { /* raise inexact flag */ + u.bits.manh &= ~m; + u.bits.manl = 0; + } + } + } else if (e < LDBL_MANT_DIG - 1) { + uint64_t m = (uint64_t)-1 >> (64 - LDBL_MANT_DIG + e + 1); + if ((u.bits.manl & m) == 0) + return (x); /* x is integral */ + if (!u.bits.sign) { + if (e == MANH_SIZE - 1) + INC_MANH(u, 1); + else { + uint64_t o = u.bits.manl; + u.bits.manl += 1llu << (LDBL_MANT_DIG - e - 1); + if (u.bits.manl < o) /* got a carry */ + INC_MANH(u, 1); + } + } + if (huge + x > 0.0) /* raise inexact flag */ + u.bits.manl &= ~m; + } + return (u.e); +} diff --git a/newlib/libm/ld/s_copysignl.c b/newlib/libm/ld/s_copysignl.c new file mode 100644 index 0000000000..bd67447055 --- /dev/null +++ b/newlib/libm/ld/s_copysignl.c @@ -0,0 +1,44 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2004 Stefan Farfeleder + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#include + +#include "fpmath.h" + +long double +copysignl(long double x, long double y) +{ + union IEEEl2bits ux, uy; + + ux.e = x; + uy.e = y; + ux.bits.sign = uy.bits.sign; + return (ux.e); +} diff --git a/newlib/libm/ld/s_cosl.c b/newlib/libm/ld/s_cosl.c new file mode 100644 index 0000000000..061de295a7 --- /dev/null +++ b/newlib/libm/ld/s_cosl.c @@ -0,0 +1,102 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2007 Steven G. Kargl + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice unmodified, this list of conditions, and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +/* + * Limited testing on pseudorandom numbers drawn within [-2e8:4e8] shows + * an accuracy of <= 0.7412 ULP. + */ + +#include +#ifdef __i386__ +#include +#endif + +#include "fpmath.h" +#include "math.h" +#include "math_private.h" +#if LDBL_MANT_DIG == 64 +#include "../ld80/e_rem_pio2l.h" +static const union IEEEl2bits +pio4u = LD80C(0xc90fdaa22168c235, -00001, 7.85398163397448309628e-01L); +#define pio4 (pio4u.e) +#elif LDBL_MANT_DIG == 113 +#include "../ld128/e_rem_pio2l.h" +long double pio4 = 7.85398163397448309615660845819875721e-1L; +#else +#error "Unsupported long double format" +#endif + +long double +cosl(long double x) +{ + union IEEEl2bits z; + int e0; + long double y[2]; + long double hi, lo; + + z.e = x; + z.bits.sign = 0; + + /* If x = +-0 or x is a subnormal number, then cos(x) = 1 */ + if (z.bits.exp == 0) + return (1.0); + + /* If x = NaN or Inf, then cos(x) = NaN. */ + if (z.bits.exp == 32767) + return ((x - x) / (x - x)); + + ENTERI(); + + /* Optimize the case where x is already within range. */ + if (z.e < pio4) + RETURNI(__kernel_cosl(z.e, 0)); + + e0 = __ieee754_rem_pio2l(x, y); + hi = y[0]; + lo = y[1]; + + switch (e0 & 3) { + case 0: + hi = __kernel_cosl(hi, lo); + break; + case 1: + hi = - __kernel_sinl(hi, lo, 1); + break; + case 2: + hi = - __kernel_cosl(hi, lo); + break; + case 3: + hi = __kernel_sinl(hi, lo, 1); + break; + } + + RETURNI(hi); +} diff --git a/newlib/libm/ld/s_fabsl.c b/newlib/libm/ld/s_fabsl.c new file mode 100644 index 0000000000..5076d8a9b4 --- /dev/null +++ b/newlib/libm/ld/s_fabsl.c @@ -0,0 +1,45 @@ +/*- + * SPDX-License-Identifier: BSD-3-Clause + * + * Copyright (c) 2003 Dag-Erling Smørgrav + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer + * in this position and unchanged. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#include + +#include "fpmath.h" + +long double +fabsl(long double x) +{ + union IEEEl2bits u; + + u.e = x; + u.bits.sign = 0; + return (u.e); +} diff --git a/newlib/libm/ld/s_floorl.c b/newlib/libm/ld/s_floorl.c new file mode 100644 index 0000000000..6cec3e781c --- /dev/null +++ b/newlib/libm/ld/s_floorl.c @@ -0,0 +1,101 @@ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + * + * From: @(#)s_floor.c 5.1 93/09/24 + */ + +#include +__FBSDID("$FreeBSD$"); + +/* + * floorl(x) + * Return x rounded toward -inf to integral value + * Method: + * Bit twiddling. + * Exception: + * Inexact flag raised if x not equal to floorl(x). + */ + +#include +#include +#include + +#include "fpmath.h" + +#ifdef LDBL_IMPLICIT_NBIT +#define MANH_SIZE (LDBL_MANH_SIZE + 1) +#define INC_MANH(u, c) do { \ + uint64_t o = u.bits.manh; \ + u.bits.manh += (c); \ + if (u.bits.manh < o) \ + u.bits.exp++; \ +} while (0) +#else +#define MANH_SIZE LDBL_MANH_SIZE +#define INC_MANH(u, c) do { \ + uint64_t o = u.bits.manh; \ + u.bits.manh += (c); \ + if (u.bits.manh < o) { \ + u.bits.exp++; \ + u.bits.manh |= 1llu << (LDBL_MANH_SIZE - 1); \ + } \ +} while (0) +#endif + +static const long double huge = 1.0e300; + +long double +floorl(long double x) +{ + union IEEEl2bits u = { .e = x }; + int e = u.bits.exp - LDBL_MAX_EXP + 1; + + if (e < MANH_SIZE - 1) { + if (e < 0) { /* raise inexact if x != 0 */ + if (huge + x > 0.0) + if (u.bits.exp > 0 || + (u.bits.manh | u.bits.manl) != 0) + u.e = u.bits.sign ? -1.0 : 0.0; + } else { + uint64_t m = ((1llu << MANH_SIZE) - 1) >> (e + 1); + if (((u.bits.manh & m) | u.bits.manl) == 0) + return (x); /* x is integral */ + if (u.bits.sign) { +#ifdef LDBL_IMPLICIT_NBIT + if (e == 0) + u.bits.exp++; + else +#endif + INC_MANH(u, 1llu << (MANH_SIZE - e - 1)); + } + if (huge + x > 0.0) { /* raise inexact flag */ + u.bits.manh &= ~m; + u.bits.manl = 0; + } + } + } else if (e < LDBL_MANT_DIG - 1) { + uint64_t m = (uint64_t)-1 >> (64 - LDBL_MANT_DIG + e + 1); + if ((u.bits.manl & m) == 0) + return (x); /* x is integral */ + if (u.bits.sign) { + if (e == MANH_SIZE - 1) + INC_MANH(u, 1); + else { + uint64_t o = u.bits.manl; + u.bits.manl += 1llu << (LDBL_MANT_DIG - e - 1); + if (u.bits.manl < o) /* got a carry */ + INC_MANH(u, 1); + } + } + if (huge + x > 0.0) /* raise inexact flag */ + u.bits.manl &= ~m; + } + return (u.e); +} diff --git a/newlib/libm/ld/s_fmal.c b/newlib/libm/ld/s_fmal.c new file mode 100644 index 0000000000..281dd685b3 --- /dev/null +++ b/newlib/libm/ld/s_fmal.c @@ -0,0 +1,284 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2005-2011 David Schultz + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include + +#include "fpmath.h" + +/* + * A struct dd represents a floating-point number with twice the precision + * of a long double. We maintain the invariant that "hi" stores the high-order + * bits of the result. + */ +struct dd { + long double hi; + long double lo; +}; + +/* + * Compute a+b exactly, returning the exact result in a struct dd. We assume + * that both a and b are finite, but make no assumptions about their relative + * magnitudes. + */ +static inline struct dd +dd_add(long double a, long double b) +{ + struct dd ret; + long double s; + + ret.hi = a + b; + s = ret.hi - a; + ret.lo = (a - (ret.hi - s)) + (b - s); + return (ret); +} + +/* + * Compute a+b, with a small tweak: The least significant bit of the + * result is adjusted into a sticky bit summarizing all the bits that + * were lost to rounding. This adjustment negates the effects of double + * rounding when the result is added to another number with a higher + * exponent. For an explanation of round and sticky bits, see any reference + * on FPU design, e.g., + * + * J. Coonen. An Implementation Guide to a Proposed Standard for + * Floating-Point Arithmetic. Computer, vol. 13, no. 1, Jan 1980. + */ +static inline long double +add_adjusted(long double a, long double b) +{ + struct dd sum; + union IEEEl2bits u; + + sum = dd_add(a, b); + if (sum.lo != 0) { + u.e = sum.hi; + if ((u.bits.manl & 1) == 0) + sum.hi = nextafterl(sum.hi, INFINITY * sum.lo); + } + return (sum.hi); +} + +/* + * Compute ldexp(a+b, scale) with a single rounding error. It is assumed + * that the result will be subnormal, and care is taken to ensure that + * double rounding does not occur. + */ +static inline long double +add_and_denormalize(long double a, long double b, int scale) +{ + struct dd sum; + int bits_lost; + union IEEEl2bits u; + + sum = dd_add(a, b); + + /* + * If we are losing at least two bits of accuracy to denormalization, + * then the first lost bit becomes a round bit, and we adjust the + * lowest bit of sum.hi to make it a sticky bit summarizing all the + * bits in sum.lo. With the sticky bit adjusted, the hardware will + * break any ties in the correct direction. + * + * If we are losing only one bit to denormalization, however, we must + * break the ties manually. + */ + if (sum.lo != 0) { + u.e = sum.hi; + bits_lost = -u.bits.exp - scale + 1; + if ((bits_lost != 1) ^ (int)(u.bits.manl & 1)) + sum.hi = nextafterl(sum.hi, INFINITY * sum.lo); + } + return (ldexp(sum.hi, scale)); +} + +/* + * Compute a*b exactly, returning the exact result in a struct dd. We assume + * that both a and b are normalized, so no underflow or overflow will occur. + * The current rounding mode must be round-to-nearest. + */ +static inline struct dd +dd_mul(long double a, long double b) +{ +#if LDBL_MANT_DIG == 64 + static const long double split = 0x1p32L + 1.0; +#elif LDBL_MANT_DIG == 113 + static const long double split = 0x1p57L + 1.0; +#endif + struct dd ret; + long double ha, hb, la, lb, p, q; + + p = a * split; + ha = a - p; + ha += p; + la = a - ha; + + p = b * split; + hb = b - p; + hb += p; + lb = b - hb; + + p = ha * hb; + q = ha * lb + la * hb; + + ret.hi = p + q; + ret.lo = p - ret.hi + q + la * lb; + return (ret); +} + +/* + * Fused multiply-add: Compute x * y + z with a single rounding error. + * + * We use scaling to avoid overflow/underflow, along with the + * canonical precision-doubling technique adapted from: + * + * Dekker, T. A Floating-Point Technique for Extending the + * Available Precision. Numer. Math. 18, 224-242 (1971). + */ +long double +fmal(long double x, long double y, long double z) +{ + long double xs, ys, zs, adj; + struct dd xy, r; + int oround; + int ex, ey, ez; + int spread; + + /* + * Handle special cases. The order of operations and the particular + * return values here are crucial in handling special cases involving + * infinities, NaNs, overflows, and signed zeroes correctly. + */ + if (x == 0.0 || y == 0.0) + return (x * y + z); + if (z == 0.0) + return (x * y); + if (!isfinite(x) || !isfinite(y)) + return (x * y + z); + if (!isfinite(z)) + return (z); + + xs = frexpl(x, &ex); + ys = frexpl(y, &ey); + zs = frexpl(z, &ez); + oround = fegetround(); + spread = ex + ey - ez; + + /* + * If x * y and z are many orders of magnitude apart, the scaling + * will overflow, so we handle these cases specially. Rounding + * modes other than FE_TONEAREST are painful. + */ + if (spread < -LDBL_MANT_DIG) { +#ifdef FE_INEXACT + feraiseexcept(FE_INEXACT); +#endif +#ifdef FE_UNDERFLOW + if (!isnormal(z)) + feraiseexcept(FE_UNDERFLOW); +#endif + switch (oround) { + default: /* FE_TONEAREST */ + return (z); +#ifdef FE_TOWARDZERO + case FE_TOWARDZERO: + if (x > 0.0 ^ y < 0.0 ^ z < 0.0) + return (z); + else + return (nextafterl(z, 0)); +#endif +#ifdef FE_DOWNWARD + case FE_DOWNWARD: + if (x > 0.0 ^ y < 0.0) + return (z); + else + return (nextafterl(z, -INFINITY)); +#endif +#ifdef FE_UPWARD + case FE_UPWARD: + if (x > 0.0 ^ y < 0.0) + return (nextafterl(z, INFINITY)); + else + return (z); +#endif + } + } + if (spread <= LDBL_MANT_DIG * 2) + zs = ldexpl(zs, -spread); + else + zs = copysignl(LDBL_MIN, zs); + + fesetround(FE_TONEAREST); + /* work around clang bug 8100 */ + volatile long double vxs = xs; + + /* + * Basic approach for round-to-nearest: + * + * (xy.hi, xy.lo) = x * y (exact) + * (r.hi, r.lo) = xy.hi + z (exact) + * adj = xy.lo + r.lo (inexact; low bit is sticky) + * result = r.hi + adj (correctly rounded) + */ + xy = dd_mul(vxs, ys); + r = dd_add(xy.hi, zs); + + spread = ex + ey; + + if (r.hi == 0.0) { + /* + * When the addends cancel to 0, ensure that the result has + * the correct sign. + */ + fesetround(oround); + volatile long double vzs = zs; /* XXX gcc CSE bug workaround */ + return (xy.hi + vzs + ldexpl(xy.lo, spread)); + } + + if (oround != FE_TONEAREST) { + /* + * There is no need to worry about double rounding in directed + * rounding modes. + */ + fesetround(oround); + /* work around clang bug 8100 */ + volatile long double vrlo = r.lo; + adj = vrlo + xy.lo; + return (ldexpl(r.hi + adj, spread)); + } + + adj = add_adjusted(r.lo, xy.lo); + if (spread + ilogbl(r.hi) > -16383) + return (ldexpl(r.hi + adj, spread)); + else + return (add_and_denormalize(r.hi, adj, spread)); +} diff --git a/newlib/libm/ld/s_fmaxl.c b/newlib/libm/ld/s_fmaxl.c new file mode 100644 index 0000000000..c0d7c88325 --- /dev/null +++ b/newlib/libm/ld/s_fmaxl.c @@ -0,0 +1,57 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2004 David Schultz + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include + +#include "fpmath.h" + +long double +fmaxl(long double x, long double y) +{ + union IEEEl2bits u[2]; + + u[0].e = x; + mask_nbit_l(u[0]); + u[1].e = y; + mask_nbit_l(u[1]); + + /* Check for NaNs to avoid raising spurious exceptions. */ + if (u[0].bits.exp == 32767 && (u[0].bits.manh | u[0].bits.manl) != 0) + return (y); + if (u[1].bits.exp == 32767 && (u[1].bits.manh | u[1].bits.manl) != 0) + return (x); + + /* Handle comparisons of signed zeroes. */ + if (u[0].bits.sign != u[1].bits.sign) + return (u[0].bits.sign ? y : x); + + return (x > y ? x : y); +} diff --git a/newlib/libm/ld/s_fminl.c b/newlib/libm/ld/s_fminl.c new file mode 100644 index 0000000000..97604b38b4 --- /dev/null +++ b/newlib/libm/ld/s_fminl.c @@ -0,0 +1,57 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2004 David Schultz + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include + +#include "fpmath.h" + +long double +fminl(long double x, long double y) +{ + union IEEEl2bits u[2]; + + u[0].e = x; + mask_nbit_l(u[0]); + u[1].e = y; + mask_nbit_l(u[1]); + + /* Check for NaNs to avoid raising spurious exceptions. */ + if (u[0].bits.exp == 32767 && (u[0].bits.manh | u[0].bits.manl) != 0) + return (y); + if (u[1].bits.exp == 32767 && (u[1].bits.manh | u[1].bits.manl) != 0) + return (x); + + /* Handle comparisons of signed zeroes. */ + if (u[0].bits.sign != u[1].bits.sign) + return (u[1].bits.sign ? y : x); + + return (x < y ? x : y); +} diff --git a/newlib/libm/ld/s_frexpl.c b/newlib/libm/ld/s_frexpl.c new file mode 100644 index 0000000000..66e284fdd0 --- /dev/null +++ b/newlib/libm/ld/s_frexpl.c @@ -0,0 +1,64 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2004-2005 David Schultz + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#include +#include + +#include "fpmath.h" + +#if LDBL_MAX_EXP != 0x4000 +#error "Unsupported long double format" +#endif + +long double +frexpl(long double x, int *ex) +{ + union IEEEl2bits u; + + u.e = x; + switch (u.bits.exp) { + case 0: /* 0 or subnormal */ + if ((u.bits.manl | u.bits.manh) == 0) { + *ex = 0; + } else { + u.e *= 0x1.0p514; + *ex = u.bits.exp - 0x4200; + u.bits.exp = 0x3ffe; + } + break; + case 0x7fff: /* infinity or NaN; value of *ex is unspecified */ + break; + default: /* normal */ + *ex = u.bits.exp - 0x3ffe; + u.bits.exp = 0x3ffe; + break; + } + return (u.e); +} diff --git a/newlib/libm/ld/s_ilogbl.c b/newlib/libm/ld/s_ilogbl.c new file mode 100644 index 0000000000..14c632796f --- /dev/null +++ b/newlib/libm/ld/s_ilogbl.c @@ -0,0 +1,54 @@ +/* + * From: @(#)s_ilogb.c 5.1 93/09/24 + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include + +#include "fpmath.h" + +int +ilogbl(long double x) +{ + union IEEEl2bits u; + uint64_t m; + int b; + + u.e = x; + if (u.bits.exp == 0) { + if ((u.bits.manl | u.bits.manh) == 0) + return (FP_ILOGB0); + /* denormalized */ + if (u.bits.manh == 0) { + m = 1llu << (LDBL_MANL_SIZE - 1); + for (b = LDBL_MANH_SIZE; !(u.bits.manl & m); m >>= 1) + b++; + } else { + m = 1llu << (LDBL_MANH_SIZE - 1); + for (b = 0; !(u.bits.manh & m); m >>= 1) + b++; + } +#ifdef LDBL_IMPLICIT_NBIT + b++; +#endif + return (LDBL_MIN_EXP - b - 1); + } else if (u.bits.exp < (LDBL_MAX_EXP << 1) - 1) + return (u.bits.exp - LDBL_MAX_EXP + 1); + else if (u.bits.manl != 0 || u.bits.manh != 0) + return (FP_ILOGBNAN); + else + return (INT_MAX); +} diff --git a/newlib/libm/ld/s_llrintl.c b/newlib/libm/ld/s_llrintl.c new file mode 100644 index 0000000000..6ef83759c3 --- /dev/null +++ b/newlib/libm/ld/s_llrintl.c @@ -0,0 +1,9 @@ +#include +__FBSDID("$FreeBSD$"); + +#define type long double +#define roundit rintl +#define dtype long long +#define fn llrintl + +#include "s_lrint.c" diff --git a/newlib/libm/ld/s_llroundl.c b/newlib/libm/ld/s_llroundl.c new file mode 100644 index 0000000000..02c44eb4bd --- /dev/null +++ b/newlib/libm/ld/s_llroundl.c @@ -0,0 +1,11 @@ +#include +__FBSDID("$FreeBSD$"); + +#define type long double +#define roundit roundl +#define dtype long long +#define DTYPE_MIN LLONG_MIN +#define DTYPE_MAX LLONG_MAX +#define fn llroundl + +#include "s_lround.c" diff --git a/newlib/libm/ld/s_logbl.c b/newlib/libm/ld/s_logbl.c new file mode 100644 index 0000000000..357a738827 --- /dev/null +++ b/newlib/libm/ld/s_logbl.c @@ -0,0 +1,55 @@ +/* + * From: @(#)s_ilogb.c 5.1 93/09/24 + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include +#include + +#include "fpmath.h" + +long double +logbl(long double x) +{ + union IEEEl2bits u; + uint64_t m; + int b; + + u.e = x; + if (u.bits.exp == 0) { + if ((u.bits.manl | u.bits.manh) == 0) { /* x == 0 */ + u.bits.sign = 1; + return (1.0L / u.e); + } + /* denormalized */ + if (u.bits.manh == 0) { + m = 1llu << (LDBL_MANL_SIZE - 1); + for (b = LDBL_MANH_SIZE; !(u.bits.manl & m); m >>= 1) + b++; + } else { + m = 1llu << (LDBL_MANH_SIZE - 1); + for (b = 0; !(u.bits.manh & m); m >>= 1) + b++; + } +#ifdef LDBL_IMPLICIT_NBIT + b++; +#endif + return ((long double)(LDBL_MIN_EXP - b - 1)); + } + if (u.bits.exp < (LDBL_MAX_EXP << 1) - 1) /* normal */ + return ((long double)(u.bits.exp - LDBL_MAX_EXP + 1)); + else /* +/- inf or nan */ + return (x * x); +} diff --git a/newlib/libm/ld/s_lrint.c b/newlib/libm/ld/s_lrint.c new file mode 100644 index 0000000000..dde3cc4346 --- /dev/null +++ b/newlib/libm/ld/s_lrint.c @@ -0,0 +1,62 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2005 David Schultz + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +#include +#include + +#ifndef type +__FBSDID("$FreeBSD$"); +#define type double +#define roundit rint +#define dtype long +#define fn lrint +#endif + +/* + * C99 says we should not raise a spurious inexact exception when an + * invalid exception is raised. Unfortunately, the set of inputs + * that overflows depends on the rounding mode when 'dtype' has more + * significant bits than 'type'. Hence, we bend over backwards for the + * sake of correctness; an MD implementation could be more efficient. + */ +dtype +fn(type x) +{ + fenv_t env; + dtype d; + + feholdexcept(&env); + d = (dtype)roundit(x); +#if defined(FE_INVALID) && defined(FE_INEXACT) + if (fetestexcept(FE_INVALID)) + feclearexcept(FE_INEXACT); +#endif + feupdateenv(&env); + return (d); +} diff --git a/newlib/libm/ld/s_lrintl.c b/newlib/libm/ld/s_lrintl.c new file mode 100644 index 0000000000..497b442f32 --- /dev/null +++ b/newlib/libm/ld/s_lrintl.c @@ -0,0 +1,9 @@ +#include +__FBSDID("$FreeBSD$"); + +#define type long double +#define roundit rintl +#define dtype long +#define fn lrintl + +#include "s_lrint.c" diff --git a/newlib/libm/ld/s_lround.c b/newlib/libm/ld/s_lround.c new file mode 100644 index 0000000000..fefafa877d --- /dev/null +++ b/newlib/libm/ld/s_lround.c @@ -0,0 +1,72 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2005 David Schultz + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +#include +#include +#include + +#ifndef type +__FBSDID("$FreeBSD$"); +#define type double +#define roundit round +#define dtype long +#define DTYPE_MIN LONG_MIN +#define DTYPE_MAX LONG_MAX +#define fn lround +#endif + +/* + * If type has more precision than dtype, the endpoints dtype_(min|max) are + * of the form xxx.5; they are "out of range" because lround() rounds away + * from 0. On the other hand, if type has less precision than dtype, then + * all values that are out of range are integral, so we might as well assume + * that everything is in range. At compile time, INRANGE(x) should reduce to + * two floating-point comparisons in the former case, or TRUE otherwise. + */ +static const type type_min = (type)DTYPE_MIN; +static const type type_max = (type)DTYPE_MAX; +static const type dtype_min = (type)DTYPE_MIN - 0.5; +static const type dtype_max = (type)DTYPE_MAX + 0.5; +#define INRANGE(x) (dtype_max - type_max != 0.5 || \ + ((x) > dtype_min && (x) < dtype_max)) + +dtype +fn(type x) +{ + + if (INRANGE(x)) { + x = roundit(x); + return ((dtype)x); + } else { +#ifdef FE_INVALID + feraiseexcept(FE_INVALID); +#endif + return (DTYPE_MAX); + } +} diff --git a/newlib/libm/ld/s_lroundl.c b/newlib/libm/ld/s_lroundl.c new file mode 100644 index 0000000000..e410827e26 --- /dev/null +++ b/newlib/libm/ld/s_lroundl.c @@ -0,0 +1,11 @@ +#include +__FBSDID("$FreeBSD$"); + +#define type long double +#define roundit roundl +#define dtype long +#define DTYPE_MIN LONG_MIN +#define DTYPE_MAX LONG_MAX +#define fn lroundl + +#include "s_lround.c" diff --git a/newlib/libm/ld/s_modfl.c b/newlib/libm/ld/s_modfl.c new file mode 100644 index 0000000000..2d83bbe339 --- /dev/null +++ b/newlib/libm/ld/s_modfl.c @@ -0,0 +1,103 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2007 David Schultz + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * Derived from s_modf.c, which has the following Copyright: + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + * + * $FreeBSD$ + */ + +#include +#include +#include + +#include "fpmath.h" + +#if LDBL_MANL_SIZE > 32 +#define MASK ((uint64_t)-1) +#else +#define MASK ((uint32_t)-1) +#endif +/* Return the last n bits of a word, representing the fractional part. */ +#define GETFRAC(bits, n) ((bits) & ~(MASK << (n))) +/* The number of fraction bits in manh, not counting the integer bit */ +#define HIBITS (LDBL_MANT_DIG - LDBL_MANL_SIZE) + +static const long double zero[] = { 0.0L, -0.0L }; + +long double +modfl(long double x, long double *iptr) +{ + union IEEEl2bits ux; + int e; + + ux.e = x; + e = ux.bits.exp - LDBL_MAX_EXP + 1; + if (e < HIBITS) { /* Integer part is in manh. */ + if (e < 0) { /* |x|<1 */ + *iptr = zero[ux.bits.sign]; + return (x); + } else { + if ((GETFRAC(ux.bits.manh, HIBITS - 1 - e) | + ux.bits.manl) == 0) { /* X is an integer. */ + *iptr = x; + return (zero[ux.bits.sign]); + } else { + /* Clear all but the top e+1 bits. */ + ux.bits.manh >>= HIBITS - 1 - e; + ux.bits.manh <<= HIBITS - 1 - e; + ux.bits.manl = 0; + *iptr = ux.e; + return (x - ux.e); + } + } + } else if (e >= LDBL_MANT_DIG - 1) { /* x has no fraction part. */ + *iptr = x; + if (x != x) /* Handle NaNs. */ + return (x); + return (zero[ux.bits.sign]); + } else { /* Fraction part is in manl. */ + if (GETFRAC(ux.bits.manl, LDBL_MANT_DIG - 1 - e) == 0) { + /* x is integral. */ + *iptr = x; + return (zero[ux.bits.sign]); + } else { + /* Clear all but the top e+1 bits. */ + ux.bits.manl >>= LDBL_MANT_DIG - 1 - e; + ux.bits.manl <<= LDBL_MANT_DIG - 1 - e; + *iptr = ux.e; + return (x - ux.e); + } + } +} diff --git a/newlib/libm/ld/s_nearbyintl.c b/newlib/libm/ld/s_nearbyintl.c new file mode 100644 index 0000000000..9befed4dfe --- /dev/null +++ b/newlib/libm/ld/s_nearbyintl.c @@ -0,0 +1,68 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2004 David Schultz + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include + +/* + * We save and restore the floating-point environment to avoid raising + * an inexact exception. We can get away with using fesetenv() + * instead of feclearexcept()/feupdateenv() to restore the environment + * because the only exception defined for rint() is overflow, and + * rounding can't overflow as long as emax >= p. + * + * The volatile keyword is needed below because clang incorrectly assumes + * that rint won't raise any floating-point exceptions. Declaring ret volatile + * is sufficient to trick the compiler into doing the right thing. + */ +#define DECL(type, fn, rint) \ +type \ +fn(type x) \ +{ \ + volatile type ret; \ + fenv_t env; \ + \ + fegetenv(&env); \ + ret = rint(x); \ + fesetenv(&env); \ + return (ret); \ +} + +/* + * nearbyint and nearbyintf are defined elsewhere in + * newlib. Ignore the freebsd versions and only compile + * nearbyintl. + */ +#if 0 +DECL(double, nearbyint, rint) +DECL(float, nearbyintf, rintf) +#endif +DECL(long double, nearbyintl, rintl) diff --git a/newlib/libm/ld/s_nextafterl.c b/newlib/libm/ld/s_nextafterl.c new file mode 100644 index 0000000000..9c61a436a6 --- /dev/null +++ b/newlib/libm/ld/s_nextafterl.c @@ -0,0 +1,80 @@ +/* @(#)s_nextafter.c 5.1 93/09/24 */ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#include +__FBSDID("$FreeBSD$"); + +/* IEEE functions + * nextafter(x,y) + * return the next machine floating-point number of x in the + * direction toward y. + * Special cases: + */ + +#include + +#include "fpmath.h" +#include "math.h" +#include "math_private.h" + +#if LDBL_MAX_EXP != 0x4000 +#error "Unsupported long double format" +#endif + +long double +nextafterl(long double x, long double y) +{ + volatile long double t; + union IEEEl2bits ux, uy; + + ux.e = x; + uy.e = y; + + if ((ux.bits.exp == 0x7fff && + ((ux.bits.manh&~LDBL_NBIT)|ux.bits.manl) != 0) || + (uy.bits.exp == 0x7fff && + ((uy.bits.manh&~LDBL_NBIT)|uy.bits.manl) != 0)) + return x+y; /* x or y is nan */ + if(x==y) return y; /* x=y, return y */ + if(x==0.0) { + ux.bits.manh = 0; /* return +-minsubnormal */ + ux.bits.manl = 1; + ux.bits.sign = uy.bits.sign; + t = ux.e*ux.e; + if(t==ux.e) return t; else return ux.e; /* raise underflow flag */ + } + if(x>0.0 ^ x +__FBSDID("$FreeBSD$"); + +/* + * We assume that a long double has a 15-bit exponent. On systems + * where long double is the same as double, nexttoward() is an alias + * for nextafter(), so we don't use this routine. + */ + +#include + +#include "fpmath.h" +#include "math.h" +#include "math_private.h" + +#if LDBL_MAX_EXP != 0x4000 +#error "Unsupported long double format" +#endif + +double +nexttoward(double x, long double y) +{ + union IEEEl2bits uy; + volatile double t; + int32_t hx,ix; + u_int32_t lx; + + EXTRACT_WORDS(hx,lx,x); + ix = hx&0x7fffffff; /* |x| */ + uy.e = y; + + if(((ix>=0x7ff00000)&&((ix-0x7ff00000)|lx)!=0) || + (uy.bits.exp == 0x7fff && + ((uy.bits.manh&~LDBL_NBIT)|uy.bits.manl) != 0)) + return x+y; /* x or y is nan */ + if(x==y) return (double)y; /* x=y, return y */ + if(x==0.0) { + INSERT_WORDS(x,uy.bits.sign<<31,1); /* return +-minsubnormal */ + t = x*x; + if(t==x) return t; else return x; /* raise underflow flag */ + } + if(hx>0.0 ^ x < y) { /* x -= ulp */ + if(lx==0) hx -= 1; + lx -= 1; + } else { /* x += ulp */ + lx += 1; + if(lx==0) hx += 1; + } + ix = hx&0x7ff00000; + if(ix>=0x7ff00000) return x+x; /* overflow */ + if(ix<0x00100000) { /* underflow */ + t = x*x; + if(t!=x) { /* raise underflow flag */ + INSERT_WORDS(x,hx,lx); + return x; + } + } + INSERT_WORDS(x,hx,lx); + return x; +} diff --git a/newlib/libm/ld/s_nexttowardf.c b/newlib/libm/ld/s_nexttowardf.c new file mode 100644 index 0000000000..9ddfff961b --- /dev/null +++ b/newlib/libm/ld/s_nexttowardf.c @@ -0,0 +1,59 @@ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#include +__FBSDID("$FreeBSD$"); + +#include + +#include "fpmath.h" +#include "math.h" +#include "math_private.h" + +#define LDBL_INFNAN_EXP (LDBL_MAX_EXP * 2 - 1) + +float +nexttowardf(float x, long double y) +{ + union IEEEl2bits uy; + volatile float t; + int32_t hx,ix; + + GET_FLOAT_WORD(hx,x); + ix = hx&0x7fffffff; /* |x| */ + uy.e = y; + + if((ix>0x7f800000) || + (uy.bits.exp == LDBL_INFNAN_EXP && + ((uy.bits.manh&~LDBL_NBIT)|uy.bits.manl) != 0)) + return x+y; /* x or y is nan */ + if(x==y) return (float)y; /* x=y, return y */ + if(ix==0) { /* x == 0 */ + SET_FLOAT_WORD(x,(uy.bits.sign<<31)|1);/* return +-minsubnormal */ + t = x*x; + if(t==x) return t; else return x; /* raise underflow flag */ + } + if(hx>=0 ^ x < y) /* x -= ulp */ + hx -= 1; + else /* x += ulp */ + hx += 1; + ix = hx&0x7f800000; + if(ix>=0x7f800000) return x+x; /* overflow */ + if(ix<0x00800000) { /* underflow */ + t = x*x; + if(t!=x) { /* raise underflow flag */ + SET_FLOAT_WORD(x,hx); + return x; + } + } + SET_FLOAT_WORD(x,hx); + return x; +} diff --git a/newlib/libm/ld/s_remquol.c b/newlib/libm/ld/s_remquol.c new file mode 100644 index 0000000000..56c05456b4 --- /dev/null +++ b/newlib/libm/ld/s_remquol.c @@ -0,0 +1,173 @@ +/* @(#)e_fmod.c 1.3 95/01/18 */ +/*- + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunSoft, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include + +#include "fpmath.h" +#include "math.h" +#include "math_private.h" + +#define BIAS (LDBL_MAX_EXP - 1) + +#if LDBL_MANL_SIZE > 32 +typedef uint64_t manl_t; +#else +typedef uint32_t manl_t; +#endif + +#if LDBL_MANH_SIZE > 32 +typedef uint64_t manh_t; +#else +typedef uint32_t manh_t; +#endif + +/* + * These macros add and remove an explicit integer bit in front of the + * fractional mantissa, if the architecture doesn't have such a bit by + * default already. + */ +#ifdef LDBL_IMPLICIT_NBIT +#define SET_NBIT(hx) ((hx) | (1ULL << LDBL_MANH_SIZE)) +#define HFRAC_BITS LDBL_MANH_SIZE +#else +#define SET_NBIT(hx) (hx) +#define HFRAC_BITS (LDBL_MANH_SIZE - 1) +#endif + +#define MANL_SHIFT (LDBL_MANL_SIZE - 1) + +static const long double Zero[] = {0.0L, -0.0L}; + +/* + * Return the IEEE remainder and set *quo to the last n bits of the + * quotient, rounded to the nearest integer. We choose n=31 because + * we wind up computing all the integer bits of the quotient anyway as + * a side-effect of computing the remainder by the shift and subtract + * method. In practice, this is far more bits than are needed to use + * remquo in reduction algorithms. + * + * Assumptions: + * - The low part of the mantissa fits in a manl_t exactly. + * - The high part of the mantissa fits in an int64_t with enough room + * for an explicit integer bit in front of the fractional bits. + */ +long double +remquol(long double x, long double y, int *quo) +{ + union IEEEl2bits ux, uy; + int64_t hx,hz; /* We need a carry bit even if LDBL_MANH_SIZE is 32. */ + manh_t hy; + manl_t lx,ly,lz; + int ix,iy,n,q,sx,sxy; + + ux.e = x; + uy.e = y; + sx = ux.bits.sign; + sxy = sx ^ uy.bits.sign; + ux.bits.sign = 0; /* |x| */ + uy.bits.sign = 0; /* |y| */ + + /* purge off exception values */ + if((uy.bits.exp|uy.bits.manh|uy.bits.manl)==0 || /* y=0 */ + (ux.bits.exp == BIAS + LDBL_MAX_EXP) || /* or x not finite */ + (uy.bits.exp == BIAS + LDBL_MAX_EXP && + ((uy.bits.manh&~LDBL_NBIT)|uy.bits.manl)!=0)) /* or y is NaN */ + return nan_mix_op(x, y, *)/nan_mix_op(x, y, *); + if(ux.bits.exp<=uy.bits.exp) { + if((ux.bits.exp>MANL_SHIFT); lx = lx+lx;} + else {hx = hz+hz+(lz>>MANL_SHIFT); lx = lz+lz; q++;} + q <<= 1; + } + hz=hx-hy;lz=lx-ly; if(lx=0) {hx=hz;lx=lz;q++;} + + /* convert back to floating value and restore the sign */ + if((hx|lx)==0) { /* return sign(x)*0 */ + q &= 0x7fffffff; + *quo = (sxy ? -q : q); + return Zero[sx]; + } + while(hx<(1ULL<>MANL_SHIFT); lx = lx+lx; + iy -= 1; + } + ux.bits.manh = hx; /* The integer bit is truncated here if needed. */ + ux.bits.manl = lx; + if (iy < LDBL_MIN_EXP) { + ux.bits.exp = iy + (BIAS + 512); + ux.e *= 0x1p-512; + } else { + ux.bits.exp = iy + BIAS; + } +fixup: + x = ux.e; /* |x| */ + y = fabsl(y); + if (y < LDBL_MIN * 2) { + if (x+x>y || (x+x==y && (q & 1))) { + q++; + x-=y; + } + } else if (x>0.5*y || (x==0.5*y && (q & 1))) { + q++; + x-=y; + } + ux.e = x; + ux.bits.sign ^= sx; + x = ux.e; + q &= 0x7fffffff; + *quo = (sxy ? -q : q); + return x; +} diff --git a/newlib/libm/ld/s_rintl.c b/newlib/libm/ld/s_rintl.c new file mode 100644 index 0000000000..9bbb7c31e6 --- /dev/null +++ b/newlib/libm/ld/s_rintl.c @@ -0,0 +1,93 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2008 David Schultz + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include +#include + +#include "fpmath.h" + +#if LDBL_MAX_EXP != 0x4000 +/* We also require the usual bias, min exp and expsign packing. */ +#error "Unsupported long double format" +#endif + +#define BIAS (LDBL_MAX_EXP - 1) + +static const float +shift[2] = { +#if LDBL_MANT_DIG == 64 + 0x1.0p63, -0x1.0p63 +#elif LDBL_MANT_DIG == 113 + 0x1.0p112, -0x1.0p112 +#else +#error "Unsupported long double format" +#endif +}; +static const float zero[2] = { 0.0, -0.0 }; + +long double +rintl(long double x) +{ + union IEEEl2bits u; + uint32_t expsign; + int ex, sign; + + u.e = x; + expsign = u.xbits.expsign; + ex = expsign & 0x7fff; + + if (ex >= BIAS + LDBL_MANT_DIG - 1) { + if (ex == BIAS + LDBL_MAX_EXP) + return (x + x); /* Inf, NaN, or unsupported format */ + return (x); /* finite and already an integer */ + } + sign = expsign >> 15; + + /* + * The following code assumes that intermediate results are + * evaluated in long double precision. If they are evaluated in + * greater precision, double rounding may occur, and if they are + * evaluated in less precision (as on i386), results will be + * wildly incorrect. + */ + x += shift[sign]; + x -= shift[sign]; + + /* + * If the result is +-0, then it must have the same sign as x, but + * the above calculation doesn't always give this. Fix up the sign. + */ + if (ex < BIAS && x == 0.0L) + return (zero[sign]); + + return (x); +} diff --git a/newlib/libm/ld/s_roundl.c b/newlib/libm/ld/s_roundl.c new file mode 100644 index 0000000000..8d1c02a7f8 --- /dev/null +++ b/newlib/libm/ld/s_roundl.c @@ -0,0 +1,64 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2003, Steven G. Kargl + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice unmodified, this list of conditions, and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#ifdef __i386__ +#include +#endif + +#include "fpmath.h" +#include "math.h" +#include "math_private.h" + +long double +roundl(long double x) +{ + long double t; + uint16_t hx; + + GET_LDBL_EXPSIGN(hx, x); + if ((hx & 0x7fff) == 0x7fff) + return (x + x); + + ENTERI(); + + if (!(hx & 0x8000)) { + t = floorl(x); + if (t - x <= -0.5L) + t += 1; + RETURNI(t); + } else { + t = floorl(-x); + if (t + x <= -0.5L) + t += 1; + RETURNI(-t); + } +} diff --git a/newlib/libm/ld/s_scalbnl.c b/newlib/libm/ld/s_scalbnl.c new file mode 100644 index 0000000000..8fb4750e70 --- /dev/null +++ b/newlib/libm/ld/s_scalbnl.c @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2005-2020 Rich Felker, et al. + * + * SPDX-License-Identifier: MIT + * + * Please see https://git.musl-libc.org/cgit/musl/tree/COPYRIGHT + * for all contributors to musl. + */ +#include +#include +#include "math_private.h" +#include "fpmath.h" +/* + * scalbnl (long double x, int n) + * scalbnl(x,n) returns x* 2**n computed by exponent + * manipulation rather than by actually performing an + * exponentiation or a multiplication. + */ +#if (LDBL_MANT_DIG == 64 || LDBL_MANT_DIG == 113) && LDBL_MAX_EXP == 16384 +long double scalbnl(long double x, int n) +{ + union IEEEl2bits u; + + if (n > 16383) { + x *= 0x1p16383L; + n -= 16383; + if (n > 16383) { + x *= 0x1p16383L; + n -= 16383; + if (n > 16383) + n = 16383; + } + } else if (n < -16382) { + x *= 0x1p-16382L * 0x1p113L; + n += 16382 - 113; + if (n < -16382) { + x *= 0x1p-16382L * 0x1p113L; + n += 16382 - 113; + if (n < -16382) + n = -16382; + } + } + u.e = 1.0; + u.xbits.expsign = 0x3fff + n; + return x * u.e; +} +__strong_reference(scalbnl, ldexpl); +#endif diff --git a/newlib/libm/ld/s_sinl.c b/newlib/libm/ld/s_sinl.c new file mode 100644 index 0000000000..038191b0e9 --- /dev/null +++ b/newlib/libm/ld/s_sinl.c @@ -0,0 +1,95 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2007 Steven G. Kargl + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice unmodified, this list of conditions, and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#ifdef __i386__ +#include +#endif + +#include "math.h" +#include "math_private.h" +#if LDBL_MANT_DIG == 64 +#include "../ld80/e_rem_pio2l.h" +#elif LDBL_MANT_DIG == 113 +#include "../ld128/e_rem_pio2l.h" +#else +#error "Unsupported long double format" +#endif + +long double +sinl(long double x) +{ + union IEEEl2bits z; + int e0, s; + long double y[2]; + long double hi, lo; + + z.e = x; + s = z.bits.sign; + z.bits.sign = 0; + + /* If x = +-0 or x is a subnormal number, then sin(x) = x */ + if (z.bits.exp == 0) + return (x); + + /* If x = NaN or Inf, then sin(x) = NaN. */ + if (z.bits.exp == 32767) + return ((x - x) / (x - x)); + + ENTERI(); + + /* Optimize the case where x is already within range. */ + if (z.e < M_PI_4) { + hi = __kernel_sinl(z.e, 0, 0); + RETURNI(s ? -hi : hi); + } + + e0 = __ieee754_rem_pio2l(x, y); + hi = y[0]; + lo = y[1]; + + switch (e0 & 3) { + case 0: + hi = __kernel_sinl(hi, lo, 1); + break; + case 1: + hi = __kernel_cosl(hi, lo); + break; + case 2: + hi = - __kernel_sinl(hi, lo, 1); + break; + case 3: + hi = - __kernel_cosl(hi, lo); + break; + } + + RETURNI(hi); +} diff --git a/newlib/libm/ld/s_tanhl.c b/newlib/libm/ld/s_tanhl.c new file mode 100644 index 0000000000..b7531866dd --- /dev/null +++ b/newlib/libm/ld/s_tanhl.c @@ -0,0 +1,174 @@ +/* from: FreeBSD: head/lib/msun/src/s_tanhl.c XXX */ + +/* @(#)s_tanh.c 5.1 93/09/24 */ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#include +__FBSDID("$FreeBSD$"); + +/* + * See s_tanh.c for complete comments. + * + * Converted to long double by Bruce D. Evans. + */ + +#include +#ifdef __i386__ +#include +#endif + +#include "math.h" +#include "math_private.h" +#include "fpmath.h" +#include "k_expl.h" + +#if LDBL_MAX_EXP != 0x4000 +/* We also require the usual expsign encoding. */ +#error "Unsupported long double format" +#endif + +#define BIAS (LDBL_MAX_EXP - 1) + +static const volatile double tiny = 1.0e-300; +static const double one = 1.0; +#if LDBL_MANT_DIG == 64 +/* + * Domain [-0.25, 0.25], range ~[-1.6304e-22, 1.6304e-22]: + * |tanh(x)/x - t(x)| < 2**-72.3 + */ +static const union IEEEl2bits +T3u = LD80C(0xaaaaaaaaaaaaaa9f, -2, -3.33333333333333333017e-1L); +#define T3 T3u.e +static const double +T5 = 1.3333333333333314e-1, /* 0x1111111111110a.0p-55 */ +T7 = -5.3968253968210485e-2, /* -0x1ba1ba1ba1a1a1.0p-57 */ +T9 = 2.1869488531393817e-2, /* 0x1664f488172022.0p-58 */ +T11 = -8.8632352345964591e-3, /* -0x1226e34bc138d5.0p-59 */ +T13 = 3.5921169709993771e-3, /* 0x1d6d371d3e400f.0p-61 */ +T15 = -1.4555786415756001e-3, /* -0x17d923aa63814d.0p-62 */ +T17 = 5.8645267876296793e-4, /* 0x13378589b85aa7.0p-63 */ +T19 = -2.1121033571392224e-4; /* -0x1baf0af80c4090.0p-65 */ +#elif LDBL_MANT_DIG == 113 +/* + * Domain [-0.25, 0.25], range ~[-2.4211e-37, 2.4211e-37]: + * |tanh(x)/x - t(x)| < 2**121.6 + */ +static const long double +T3 = -3.33333333333333333333333333333332980e-1L, /* -0x1555555555555555555555555554e.0p-114L */ +T5 = 1.33333333333333333333333333332707260e-1L, /* 0x1111111111111111111111110ab7b.0p-115L */ +T7 = -5.39682539682539682539682535723482314e-2L, /* -0x1ba1ba1ba1ba1ba1ba1ba17b5fc98.0p-117L */ +T9 = 2.18694885361552028218693591149061717e-2L, /* 0x1664f4882c10f9f32d6b1a12a25e5.0p-118L */ +T11 = -8.86323552990219656883762347736381851e-3L, /* -0x1226e355e6c23c8f5a5a0f386cb4d.0p-119L */ +T13 = 3.59212803657248101358314398220822722e-3L, /* 0x1d6d3d0e157ddfb403ad3637442c6.0p-121L */ +T15 = -1.45583438705131796512568010348874662e-3L; /* -0x17da36452b75e150c44cc34253b34.0p-122L */ +static const double +T17 = 5.9002744094556621e-4, /* 0x1355824803668e.0p-63 */ +T19 = -2.3912911424260516e-4, /* -0x1f57d7734c8dde.0p-65 */ +T21 = 9.6915379535512898e-5, /* 0x1967e18ad6a6ca.0p-66 */ +T23 = -3.9278322983156353e-5, /* -0x1497d8e6b75729.0p-67 */ +T25 = 1.5918887220143869e-5, /* 0x10b1319998cafa.0p-68 */ +T27 = -6.4514295231630956e-6, /* -0x1b0f2b71b218eb.0p-70 */ +T29 = 2.6120754043964365e-6, /* 0x15e963a3cf3a39.0p-71 */ +T31 = -1.0407567231003314e-6, /* -0x1176041e656869.0p-72 */ +T33 = 3.4744117554063574e-7; /* 0x1750fe732cab9c.0p-74 */ +#endif /* LDBL_MANT_DIG == 64 */ + +static inline long double +divl(long double a, long double b, long double c, long double d, + long double e, long double f) +{ + long double inv, r; + float fr, fw; + + _2sumF(a, c); + b = b + c; + _2sumF(d, f); + e = e + f; + + inv = 1 / (d + e); + + r = (a + b) * inv; + fr = r; + r = fr; + + fw = d + e; + e = d - fw + e; + d = fw; + + r = r + (a - d * r + b - e * r) * inv; + + return r; +} + +long double +tanhl(long double x) +{ + long double hi,lo,s,x2,x4,z; +#if LDBL_MANT_DIG == 113 + double dx2; +#endif + int16_t jx,ix; + + GET_LDBL_EXPSIGN(jx,x); + ix = jx&0x7fff; + + /* x is INF or NaN */ + if(ix>=0x7fff) { + if (jx>=0) return one/x+one; /* tanh(+-inf)=+-1 */ + else return one/x-one; /* tanh(NaN) = NaN */ + } + + ENTERI(); + + /* |x| < 40 */ + if (ix < 0x4004 || fabsl(x) < 40) { /* |x|<40 */ + if (__predict_false(ix= 40, return +-1 */ + } else { + z = one - tiny; /* raise inexact flag */ + } + s = 1; + if (jx<0) s = -1; + RETURNI(s*z); +} diff --git a/newlib/libm/ld/s_tanl.c b/newlib/libm/ld/s_tanl.c new file mode 100644 index 0000000000..0c5228ec8f --- /dev/null +++ b/newlib/libm/ld/s_tanl.c @@ -0,0 +1,97 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2007 Steven G. Kargl + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice unmodified, this list of conditions, and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +/* + * Limited testing on pseudorandom numbers drawn within [0:4e8] shows + * an accuracy of <= 1.5 ULP where 247024 values of x out of 40 million + * possibles resulted in tan(x) that exceeded 0.5 ULP (ie., 0.6%). + */ + +#include +#ifdef __i386__ +#include +#endif + +#include "math.h" +#include "math_private.h" +#if LDBL_MANT_DIG == 64 +#include "../ld80/e_rem_pio2l.h" +#elif LDBL_MANT_DIG == 113 +#include "../ld128/e_rem_pio2l.h" +#else +#error "Unsupported long double format" +#endif + +long double +tanl(long double x) +{ + union IEEEl2bits z; + int e0, s; + long double y[2]; + long double hi, lo; + + z.e = x; + s = z.bits.sign; + z.bits.sign = 0; + + /* If x = +-0 or x is subnormal, then tan(x) = x. */ + if (z.bits.exp == 0) + return (x); + + /* If x = NaN or Inf, then tan(x) = NaN. */ + if (z.bits.exp == 32767) + return ((x - x) / (x - x)); + + ENTERI(); + + /* Optimize the case where x is already within range. */ + if (z.e < M_PI_4) { + hi = __kernel_tanl(z.e, 0, 0); + RETURNI(s ? -hi : hi); + } + + e0 = __ieee754_rem_pio2l(x, y); + hi = y[0]; + lo = y[1]; + + switch (e0 & 3) { + case 0: + case 2: + hi = __kernel_tanl(hi, lo, 0); + break; + case 1: + case 3: + hi = __kernel_tanl(hi, lo, 1); + break; + } + + RETURNI(hi); +} diff --git a/newlib/libm/ld/s_truncl.c b/newlib/libm/ld/s_truncl.c new file mode 100644 index 0000000000..9e2b511325 --- /dev/null +++ b/newlib/libm/ld/s_truncl.c @@ -0,0 +1,68 @@ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + * + * From: @(#)s_floor.c 5.1 93/09/24 + */ + +#include +__FBSDID("$FreeBSD$"); + +/* + * truncl(x) + * Return x rounded toward 0 to integral value + * Method: + * Bit twiddling. + * Exception: + * Inexact flag raised if x not equal to truncl(x). + */ + +#include +#include +#include + +#include "fpmath.h" + +#ifdef LDBL_IMPLICIT_NBIT +#define MANH_SIZE (LDBL_MANH_SIZE + 1) +#else +#define MANH_SIZE LDBL_MANH_SIZE +#endif + +static const long double huge = 1.0e300; +static const float zero[] = { 0.0, -0.0 }; + +long double +truncl(long double x) +{ + union IEEEl2bits u = { .e = x }; + int e = u.bits.exp - LDBL_MAX_EXP + 1; + + if (e < MANH_SIZE - 1) { + if (e < 0) { /* raise inexact if x != 0 */ + if (huge + x > 0.0) + u.e = zero[u.bits.sign]; + } else { + uint64_t m = ((1llu << MANH_SIZE) - 1) >> (e + 1); + if (((u.bits.manh & m) | u.bits.manl) == 0) + return (x); /* x is integral */ + if (huge + x > 0.0) { /* raise inexact flag */ + u.bits.manh &= ~m; + u.bits.manl = 0; + } + } + } else if (e < LDBL_MANT_DIG - 1) { + uint64_t m = (uint64_t)-1 >> (64 - LDBL_MANT_DIG + e + 1); + if ((u.bits.manl & m) == 0) + return (x); /* x is integral */ + if (huge + x > 0.0) /* raise inexact flag */ + u.bits.manl &= ~m; + } + return (u.e); +} diff --git a/newlib/libm/ld/scalblnl.c b/newlib/libm/ld/scalblnl.c new file mode 100644 index 0000000000..b0a0fc3237 --- /dev/null +++ b/newlib/libm/ld/scalblnl.c @@ -0,0 +1,63 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2004 David Schultz + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include + +#define NMAX 65536 +#define NMIN -65536 + +/* + * scalbln and scalblnf are defined elsewhere in + * newlib. Ignore the freebsd versions and only compile + * scalblnl. + */ +#if 0 +double +scalbln(double x, long n) +{ + + return (scalbn(x, (n > NMAX) ? NMAX : (n < NMIN) ? NMIN : (int)n)); +} + +float +scalblnf(float x, long n) +{ + + return (scalbnf(x, (n > NMAX) ? NMAX : (n < NMIN) ? NMIN : (int)n)); +} +#endif + +long double +scalblnl(long double x, long n) +{ + + return (scalbnl(x, (n > NMAX) ? NMAX : (n < NMIN) ? NMIN : (int)n)); +} diff --git a/newlib/libm/ld128/Makefile.inc b/newlib/libm/ld128/Makefile.inc new file mode 100644 index 0000000000..337284d690 --- /dev/null +++ b/newlib/libm/ld128/Makefile.inc @@ -0,0 +1,14 @@ +%C%_lsrc = \ + %D%/e_powl.c %D%/s_erfl.c %D%/s_exp2l.c %D%/s_expl.c \ + %D%/s_logl.c %D%/b_tgammal.c %D%/invtrig.c \ + %D%/e_lgammal_r.c %D%/k_cosl.c %D%/k_sinl.c + +libm_a_CFLAGS_%C% = -fbuiltin -fno-math-errno + +if HAVE_LONG_DOUBLE +libm_a_SOURCES += $(%C%_lsrc) +endif # HAVE_LONG_DOUBLE + +LIBM_CHEWOUT_FILES += + +LIBM_CHAPTERS += diff --git a/newlib/libm/ld128/b_tgammal.c b/newlib/libm/ld128/b_tgammal.c new file mode 100644 index 0000000000..1c995ab6d6 --- /dev/null +++ b/newlib/libm/ld128/b_tgammal.c @@ -0,0 +1,57 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2013 David Chisnall + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#include +#include + +/* + * If long double is not the same size as double, then these will lose + * precision and we should emit a warning whenever something links against + * them. + */ +#if (LDBL_MANT_DIG > 53) +#define WARN_IMPRECISE(x) \ + __warn_references(x, # x " has lower than advertised precision"); +#else +#define WARN_IMPRECISE(x) +#endif +/* + * Declare the functions as weak variants so that other libraries providing + * real versions can override them. + */ +#define DECLARE_WEAK(x)\ + __weak_reference(imprecise_## x, x);\ + WARN_IMPRECISE(x) + +#define DECLARE_IMPRECISE(f) \ + long double imprecise_ ## f ## l(long double v) { return f(v); }\ + DECLARE_WEAK(f ## l) + +DECLARE_IMPRECISE(tgamma); diff --git a/newlib/libm/ld128/e_lgammal_r.c b/newlib/libm/ld128/e_lgammal_r.c new file mode 100644 index 0000000000..fe315a4c58 --- /dev/null +++ b/newlib/libm/ld128/e_lgammal_r.c @@ -0,0 +1,330 @@ +/* @(#)e_lgamma_r.c 1.3 95/01/18 */ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunSoft, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#include +__FBSDID("$FreeBSD$"); + +/* + * See e_lgamma_r.c for complete comments. + * + * Converted to long double by Steven G. Kargl. + */ + +#include "../ld/fpmath.h" +#include "math.h" +#include "../ld/math_private.h" + +static const volatile double vzero = 0; + +static const double +zero= 0, +half= 0.5, +one = 1; + +static const long double +pi = 3.14159265358979323846264338327950288e+00L; +/* + * Domain y in [0x1p-119, 0.28], range ~[-1.4065e-36, 1.4065e-36]: + * |(lgamma(2 - y) + y / 2) / y - a(y)| < 2**-119.1 + */ +static const long double +a0 = 7.72156649015328606065120900824024296e-02L, +a1 = 3.22467033424113218236207583323018498e-01L, +a2 = 6.73523010531980951332460538330282217e-02L, +a3 = 2.05808084277845478790009252803463129e-02L, +a4 = 7.38555102867398526627292839296001626e-03L, +a5 = 2.89051033074152328576829509522483468e-03L, +a6 = 1.19275391170326097618357349881842913e-03L, +a7 = 5.09669524743042462515256340206203019e-04L, +a8 = 2.23154758453578096143609255559576017e-04L, +a9 = 9.94575127818397632126978731542755129e-05L, +a10 = 4.49262367375420471287545895027098145e-05L, +a11 = 2.05072127845117995426519671481628849e-05L, +a12 = 9.43948816959096748454087141447939513e-06L, +a13 = 4.37486780697359330303852050718287419e-06L, +a14 = 2.03920783892362558276037363847651809e-06L, +a15 = 9.55191070057967287877923073200324649e-07L, +a16 = 4.48993286185740853170657139487620560e-07L, +a17 = 2.13107543597620911675316728179563522e-07L, +a18 = 9.70745379855304499867546549551023473e-08L, +a19 = 5.61889970390290257926487734695402075e-08L, +a20 = 6.42739653024130071866684358960960951e-09L, +a21 = 3.34491062143649291746195612991870119e-08L, +a22 = -1.57068547394315223934653011440641472e-08L, +a23 = 1.30812825422415841213733487745200632e-08L; +/* + * Domain x in [tc-0.24, tc+0.28], range ~[-6.3201e-37, 6.3201e-37]: + * |(lgamma(x) - tf) - t(x - tc)| < 2**-120.3. + */ +static const long double +tc = 1.46163214496836234126265954232572133e+00L, +tf = -1.21486290535849608095514557177691584e-01L, +tt = 1.57061739945077675484237837992951704e-36L, +t0 = -1.99238329499314692728655623767019240e-36L, +t1 = -6.08453430711711404116887457663281416e-35L, +t2 = 4.83836122723810585213722380854828904e-01L, +t3 = -1.47587722994530702030955093950668275e-01L, +t4 = 6.46249402389127526561003464202671923e-02L, +t5 = -3.27885410884813055008502586863748063e-02L, +t6 = 1.79706751152103942928638276067164935e-02L, +t7 = -1.03142230366363872751602029672767978e-02L, +t8 = 6.10053602051788840313573150785080958e-03L, +t9 = -3.68456960831637325470641021892968954e-03L, +t10 = 2.25976482322181046611440855340968560e-03L, +t11 = -1.40225144590445082933490395950664961e-03L, +t12 = 8.78232634717681264035014878172485575e-04L, +t13 = -5.54194952796682301220684760591403899e-04L, +t14 = 3.51912956837848209220421213975000298e-04L, +t15 = -2.24653443695947456542669289367055542e-04L, +t16 = 1.44070395420840737695611929680511823e-04L, +t17 = -9.27609865550394140067059487518862512e-05L, +t18 = 5.99347334438437081412945428365433073e-05L, +t19 = -3.88458388854572825603964274134801009e-05L, +t20 = 2.52476631610328129217896436186551043e-05L, +t21 = -1.64508584981658692556994212457518536e-05L, +t22 = 1.07434583475987007495523340296173839e-05L, +t23 = -7.03070407519397260929482550448878399e-06L, +t24 = 4.60968590693753579648385629003100469e-06L, +t25 = -3.02765473778832036018438676945512661e-06L, +t26 = 1.99238771545503819972741288511303401e-06L, +t27 = -1.31281299822614084861868817951788579e-06L, +t28 = 8.60844432267399655055574642052370223e-07L, +t29 = -5.64535486432397413273248363550536374e-07L, +t30 = 3.99357783676275660934903139592727737e-07L, +t31 = -2.95849029193433121795495215869311610e-07L, +t32 = 1.37790144435073124976696250804940384e-07L; +/* + * Domain y in [-0.1, 0.232], range ~[-1.4046e-37, 1.4181e-37]: + * |(lgamma(1 + y) + 0.5 * y) / y - u(y) / v(y)| < 2**-122.8 + */ +static const long double +u0 = -7.72156649015328606065120900824024311e-02L, +u1 = 4.24082772271938167430983113242482656e-01L, +u2 = 2.96194003481457101058321977413332171e+00L, +u3 = 6.49503267711258043997790983071543710e+00L, +u4 = 7.40090051288150177152835698948644483e+00L, +u5 = 4.94698036296756044610805900340723464e+00L, +u6 = 2.00194224610796294762469550684947768e+00L, +u7 = 4.82073087750608895996915051568834949e-01L, +u8 = 6.46694052280506568192333848437585427e-02L, +u9 = 4.17685526755100259316625348933108810e-03L, +u10 = 9.06361003550314327144119307810053410e-05L, +v1 = 5.15937098592887275994320496999951947e+00L, +v2 = 1.14068418766251486777604403304717558e+01L, +v3 = 1.41164839437524744055723871839748489e+01L, +v4 = 1.07170702656179582805791063277960532e+01L, +v5 = 5.14448694179047879915042998453632434e+00L, +v6 = 1.55210088094585540637493826431170289e+00L, +v7 = 2.82975732849424562719893657416365673e-01L, +v8 = 2.86424622754753198010525786005443539e-02L, +v9 = 1.35364253570403771005922441442688978e-03L, +v10 = 1.91514173702398375346658943749580666e-05L, +v11 = -3.25364686890242327944584691466034268e-08L; +/* + * Domain x in (2, 3], range ~[-1.3341e-36, 1.3536e-36]: + * |(lgamma(y+2) - 0.5 * y) / y - s(y)/r(y)| < 2**-120.1 + * with y = x - 2. + */ +static const long double +s0 = -7.72156649015328606065120900824024297e-02L, +s1 = 1.23221687850916448903914170805852253e-01L, +s2 = 5.43673188699937239808255378293820020e-01L, +s3 = 6.31998137119005233383666791176301800e-01L, +s4 = 3.75885340179479850993811501596213763e-01L, +s5 = 1.31572908743275052623410195011261575e-01L, +s6 = 2.82528453299138685507186287149699749e-02L, +s7 = 3.70262021550340817867688714880797019e-03L, +s8 = 2.83374000312371199625774129290973648e-04L, +s9 = 1.15091830239148290758883505582343691e-05L, +s10 = 2.04203474281493971326506384646692446e-07L, +s11 = 9.79544198078992058548607407635645763e-10L, +r1 = 2.58037466655605285937112832039537492e+00L, +r2 = 2.86289413392776399262513849911531180e+00L, +r3 = 1.78691044735267497452847829579514367e+00L, +r4 = 6.89400381446725342846854215600008055e-01L, +r5 = 1.70135865462567955867134197595365343e-01L, +r6 = 2.68794816183964420375498986152766763e-02L, +r7 = 2.64617234244861832870088893332006679e-03L, +r8 = 1.52881761239180800640068128681725702e-04L, +r9 = 4.63264813762296029824851351257638558e-06L, +r10 = 5.89461519146957343083848967333671142e-08L, +r11 = 1.79027678176582527798327441636552968e-10L; +/* + * Domain z in [8, 0x1p70], range ~[-9.8214e-35, 9.8214e-35]: + * |lgamma(x) - (x - 0.5) * (log(x) - 1) - w(1/x)| < 2**-113.0 + */ +static const long double +w0 = 4.18938533204672741780329736405617738e-01L, +w1 = 8.33333333333333333333333333332852026e-02L, +w2 = -2.77777777777777777777777727810123528e-03L, +w3 = 7.93650793650793650791708939493907380e-04L, +w4 = -5.95238095238095234390450004444370959e-04L, +w5 = 8.41750841750837633887817658848845695e-04L, +w6 = -1.91752691752396849943172337347259743e-03L, +w7 = 6.41025640880333069429106541459015557e-03L, +w8 = -2.95506530801732133437990433080327074e-02L, +w9 = 1.79644237328444101596766586979576927e-01L, +w10 = -1.39240539108367641920172649259736394e+00L, +w11 = 1.33987701479007233325288857758641761e+01L, +w12 = -1.56363596431084279780966590116006255e+02L, +w13 = 2.14830978044410267201172332952040777e+03L, +w14 = -3.28636067474227378352761516589092334e+04L, +w15 = 5.06201257747865138432663574251462485e+05L, +w16 = -6.79720123352023636706247599728048344e+06L, +w17 = 6.57556601705472106989497289465949255e+07L, +w18 = -3.26229058141181783534257632389415580e+08L; + +static long double +sin_pil(long double x) +{ + volatile long double vz; + long double y,z; + uint64_t lx, n; + uint16_t hx; + + y = -x; + + vz = y+0x1.p112; + z = vz-0x1.p112; + if (z == y) + return zero; + + vz = y+0x1.p110; + EXTRACT_LDBL128_WORDS(hx,lx,n,vz); + z = vz-0x1.p110; + if (z > y) { + z -= 0.25; + n--; + } + n &= 7; + y = y - z + n * 0.25; + + switch (n) { + case 0: y = __kernel_sinl(pi*y,zero,0); break; + case 1: + case 2: y = __kernel_cosl(pi*(0.5-y),zero); break; + case 3: + case 4: y = __kernel_sinl(pi*(one-y),zero,0); break; + case 5: + case 6: y = -__kernel_cosl(pi*(y-1.5),zero); break; + default: y = __kernel_sinl(pi*(y-2.0),zero,0); break; + } + return -y; +} + +long double +lgammal_r(long double x, int *signgamp) +{ + long double nadj,p,p1,p2,p3,q,r,t,w,y,z; + uint64_t llx,lx; + int i; + uint16_t hx,ix; + + EXTRACT_LDBL128_WORDS(hx,lx,llx,x); + + /* purge +-Inf and NaNs */ + *signgamp = 1; + ix = hx&0x7fff; + if(ix==0x7fff) return x*x; + + /* purge +-0 and tiny arguments */ + *signgamp = 1-2*(hx>>15); + if(ix<0x3fff-116) { /* |x|<2**-(p+3), return -log(|x|) */ + if((ix|lx|llx)==0) + return one/vzero; + return -logl(fabsl(x)); + } + + /* purge negative integers and start evaluation for other x < 0 */ + if(hx&0x8000) { + *signgamp = 1; + if(ix>=0x3fff+112) /* |x|>=2**(p-1), must be -integer */ + return one/vzero; + t = sin_pil(x); + if(t==zero) return one/vzero; + nadj = logl(pi/fabsl(t*x)); + if(t=7.3159980773925781e-01) {y = 1-x; i= 0;} + else if(x>=2.3163998126983643e-01) {y= x-(tc-1); i=1;} + else {y = x; i=2;} + } else { + r = 0; + if(x>=1.7316312789916992e+00) {y=2-x;i=0;} + else if(x>=1.2316322326660156e+00) {y=x-tc;i=1;} + else {y=x-1;i=2;} + } + switch(i) { + case 0: + z = y*y; + p1 = a0+z*(a2+z*(a4+z*(a6+z*(a8+z*(a10+z*(a12+z*(a14+z*(a16+ + z*(a18+z*(a20+z*a22)))))))))); + p2 = z*(a1+z*(a3+z*(a5+z*(a7+z*(a9+z*(a11+z*(a13+z*(a15+ + z*(a17+z*(a19+z*(a21+z*a23))))))))))); + p = y*p1+p2; + r += p-y/2; break; + case 1: + p = t0+y*t1+tt+y*y*(t2+y*(t3+y*(t4+y*(t5+y*(t6+y*(t7+y*(t8+ + y*(t9+y*(t10+y*(t11+y*(t12+y*(t13+y*(t14+y*(t15+y*(t16+ + y*(t17+y*(t18+y*(t19+y*(t20+y*(t21+y*(t22+y*(t23+ + y*(t24+y*(t25+y*(t26+y*(t27+y*(t28+y*(t29+y*(t30+ + y*(t31+y*t32)))))))))))))))))))))))))))))); + r += tf + p; break; + case 2: + p1 = y*(u0+y*(u1+y*(u2+y*(u3+y*(u4+y*(u5+y*(u6+y*(u7+ + y*(u8+y*(u9+y*u10)))))))))); + p2 = one+y*(v1+y*(v2+y*(v3+y*(v4+y*(v5+y*(v6+y*(v7+ + y*(v8+y*(v9+y*(v10+y*v11)))))))))); + r += p1/p2-y/2; + } + } + /* x < 8.0 */ + else if(ix<0x4002) { + i = x; + y = x-i; + p = y*(s0+y*(s1+y*(s2+y*(s3+y*(s4+y*(s5+y*(s6+y*(s7+y*(s8+ + y*(s9+y*(s10+y*s11))))))))))); + q = one+y*(r1+y*(r2+y*(r3+y*(r4+y*(r5+y*(r6+y*(r7+y*(r8+ + y*(r9+y*(r10+y*r11)))))))))); + r = y/2+p/q; + z = 1; /* lgamma(1+s) = log(s) + lgamma(s) */ + switch(i) { + case 7: z *= (y+6); /* FALLTHRU */ + case 6: z *= (y+5); /* FALLTHRU */ + case 5: z *= (y+4); /* FALLTHRU */ + case 4: z *= (y+3); /* FALLTHRU */ + case 3: z *= (y+2); /* FALLTHRU */ + r += logl(z); break; + } + /* 8.0 <= x < 2**(p+3) */ + } else if (ix<0x3fff+116) { + t = logl(x); + z = one/x; + y = z*z; + w = w0+z*(w1+y*(w2+y*(w3+y*(w4+y*(w5+y*(w6+y*(w7+y*(w8+ + y*(w9+y*(w10+y*(w11+y*(w12+y*(w13+y*(w14+y*(w15+y*(w16+ + y*(w17+y*w18))))))))))))))))); + r = (x-half)*(t-one)+w; + /* 2**(p+3) <= x <= inf */ + } else + r = x*(logl(x)-1); + if(hx&0x8000) r = nadj - r; + return r; +} diff --git a/newlib/libm/ld128/e_powl.c b/newlib/libm/ld128/e_powl.c new file mode 100644 index 0000000000..ea68f87ba4 --- /dev/null +++ b/newlib/libm/ld128/e_powl.c @@ -0,0 +1,443 @@ +/*- + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* + * Copyright (c) 2008 Stephen L. Moshier + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +/* powl(x,y) return x**y + * + * n + * Method: Let x = 2 * (1+f) + * 1. Compute and return log2(x) in two pieces: + * log2(x) = w1 + w2, + * where w1 has 113-53 = 60 bit trailing zeros. + * 2. Perform y*log2(x) = n+y' by simulating multi-precision + * arithmetic, where |y'|<=0.5. + * 3. Return x**y = 2**n*exp(y'*log2) + * + * Special cases: + * 1. (anything) ** 0 is 1 + * 2. (anything) ** 1 is itself + * 3. (anything) ** NAN is NAN + * 4. NAN ** (anything except 0) is NAN + * 5. +-(|x| > 1) ** +INF is +INF + * 6. +-(|x| > 1) ** -INF is +0 + * 7. +-(|x| < 1) ** +INF is +0 + * 8. +-(|x| < 1) ** -INF is +INF + * 9. +-1 ** +-INF is NAN + * 10. +0 ** (+anything except 0, NAN) is +0 + * 11. -0 ** (+anything except 0, NAN, odd integer) is +0 + * 12. +0 ** (-anything except 0, NAN) is +INF + * 13. -0 ** (-anything except 0, NAN, odd integer) is +INF + * 14. -0 ** (odd integer) = -( +0 ** (odd integer) ) + * 15. +INF ** (+anything except 0,NAN) is +INF + * 16. +INF ** (-anything except 0,NAN) is +0 + * 17. -INF ** (anything) = -0 ** (-anything) + * 18. (-anything) ** (integer) is (-1)**(integer)*(+anything**integer) + * 19. (-anything except 0 and inf) ** (non-integer) is NAN + * + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include + +#include "../ld/math_private.h" + +static const long double bp[] = { + 1.0L, + 1.5L, +}; + +/* log_2(1.5) */ +static const long double dp_h[] = { + 0.0, + 5.8496250072115607565592654282227158546448E-1L +}; + +/* Low part of log_2(1.5) */ +static const long double dp_l[] = { + 0.0, + 1.0579781240112554492329533686862998106046E-16L +}; + +static const long double zero = 0.0L, + one = 1.0L, + two = 2.0L, + two113 = 1.0384593717069655257060992658440192E34L, + huge = 1.0e3000L, + tiny = 1.0e-3000L; + +/* 3/2 log x = 3 z + z^3 + z^3 (z^2 R(z^2)) + z = (x-1)/(x+1) + 1 <= x <= 1.25 + Peak relative error 2.3e-37 */ +static const long double LN[] = +{ + -3.0779177200290054398792536829702930623200E1L, + 6.5135778082209159921251824580292116201640E1L, + -4.6312921812152436921591152809994014413540E1L, + 1.2510208195629420304615674658258363295208E1L, + -9.9266909031921425609179910128531667336670E-1L +}; +static const long double LD[] = +{ + -5.129862866715009066465422805058933131960E1L, + 1.452015077564081884387441590064272782044E2L, + -1.524043275549860505277434040464085593165E2L, + 7.236063513651544224319663428634139768808E1L, + -1.494198912340228235853027849917095580053E1L + /* 1.0E0 */ +}; + +/* exp(x) = 1 + x - x / (1 - 2 / (x - x^2 R(x^2))) + 0 <= x <= 0.5 + Peak relative error 5.7e-38 */ +static const long double PN[] = +{ + 5.081801691915377692446852383385968225675E8L, + 9.360895299872484512023336636427675327355E6L, + 4.213701282274196030811629773097579432957E4L, + 5.201006511142748908655720086041570288182E1L, + 9.088368420359444263703202925095675982530E-3L, +}; +static const long double PD[] = +{ + 3.049081015149226615468111430031590411682E9L, + 1.069833887183886839966085436512368982758E8L, + 8.259257717868875207333991924545445705394E5L, + 1.872583833284143212651746812884298360922E3L, + /* 1.0E0 */ +}; + +static const long double + /* ln 2 */ + lg2 = 6.9314718055994530941723212145817656807550E-1L, + lg2_h = 6.9314718055994528622676398299518041312695E-1L, + lg2_l = 2.3190468138462996154948554638754786504121E-17L, + ovt = 8.0085662595372944372e-0017L, + /* 2/(3*log(2)) */ + cp = 9.6179669392597560490661645400126142495110E-1L, + cp_h = 9.6179669392597555432899980587535537779331E-1L, + cp_l = 5.0577616648125906047157785230014751039424E-17L; + +long double +powl(long double x, long double y) +{ + long double z, ax, z_h, z_l, p_h, p_l; + long double yy1, t1, t2, r, s, t, u, v, w; + long double s2, s_h, s_l, t_h, t_l; + int32_t i, j, k, yisint, n; + u_int32_t ix, iy; + int32_t hx, hy; + ieee_quad_shape_type o, p, q; + + p.value = x; + hx = p.parts32.mswhi; + ix = hx & 0x7fffffff; + + q.value = y; + hy = q.parts32.mswhi; + iy = hy & 0x7fffffff; + + + /* y==zero: x**0 = 1 */ + if ((iy | q.parts32.mswlo | q.parts32.lswhi | q.parts32.lswlo) == 0) + return one; + + /* 1.0**y = 1; -1.0**+-Inf = 1 */ + if (x == one) + return one; + if (x == -1.0L && iy == 0x7fff0000 + && (q.parts32.mswlo | q.parts32.lswhi | q.parts32.lswlo) == 0) + return one; + + /* +-NaN return x+y */ + if ((ix > 0x7fff0000) + || ((ix == 0x7fff0000) + && ((p.parts32.mswlo | p.parts32.lswhi | p.parts32.lswlo) != 0)) + || (iy > 0x7fff0000) + || ((iy == 0x7fff0000) + && ((q.parts32.mswlo | q.parts32.lswhi | q.parts32.lswlo) != 0))) + return nan_mix(x, y); + + /* determine if y is an odd int when x < 0 + * yisint = 0 ... y is not an integer + * yisint = 1 ... y is an odd int + * yisint = 2 ... y is an even int + */ + yisint = 0; + if (hx < 0) + { + if (iy >= 0x40700000) /* 2^113 */ + yisint = 2; /* even integer y */ + else if (iy >= 0x3fff0000) /* 1.0 */ + { + if (floorl (y) == y) + { + z = 0.5 * y; + if (floorl (z) == z) + yisint = 2; + else + yisint = 1; + } + } + } + + /* special value of y */ + if ((q.parts32.mswlo | q.parts32.lswhi | q.parts32.lswlo) == 0) + { + if (iy == 0x7fff0000) /* y is +-inf */ + { + if (((ix - 0x3fff0000) | p.parts32.mswlo | p.parts32.lswhi | + p.parts32.lswlo) == 0) + return y - y; /* +-1**inf is NaN */ + else if (ix >= 0x3fff0000) /* (|x|>1)**+-inf = inf,0 */ + return (hy >= 0) ? y : zero; + else /* (|x|<1)**-,+inf = inf,0 */ + return (hy < 0) ? -y : zero; + } + if (iy == 0x3fff0000) + { /* y is +-1 */ + if (hy < 0) + return one / x; + else + return x; + } + if (hy == 0x40000000) + return x * x; /* y is 2 */ + if (hy == 0x3ffe0000) + { /* y is 0.5 */ + if (hx >= 0) /* x >= +0 */ + return sqrtl (x); + } + } + + ax = fabsl (x); + /* special value of x */ + if ((p.parts32.mswlo | p.parts32.lswhi | p.parts32.lswlo) == 0) + { + if (ix == 0x7fff0000 || ix == 0 || ix == 0x3fff0000) + { + z = ax; /*x is +-0,+-inf,+-1 */ + if (hy < 0) + z = one / z; /* z = (1/|x|) */ + if (hx < 0) + { + if (((ix - 0x3fff0000) | yisint) == 0) + { + z = (z - z) / (z - z); /* (-1)**non-int is NaN */ + } + else if (yisint == 1) + z = -z; /* (x<0)**odd = -(|x|**odd) */ + } + return z; + } + } + + /* (x<0)**(non-int) is NaN */ + if (((((u_int32_t) hx >> 31) - 1) | yisint) == 0) + return (x - x) / (x - x); + + /* |y| is huge. + 2^-16495 = 1/2 of smallest representable value. + If (1 - 1/131072)^y underflows, y > 1.4986e9 */ + if (iy > 0x401d654b) + { + /* if (1 - 2^-113)^y underflows, y > 1.1873e38 */ + if (iy > 0x407d654b) + { + if (ix <= 0x3ffeffff) + return (hy < 0) ? huge * huge : tiny * tiny; + if (ix >= 0x3fff0000) + return (hy > 0) ? huge * huge : tiny * tiny; + } + /* over/underflow if x is not close to one */ + if (ix < 0x3ffeffff) + return (hy < 0) ? huge * huge : tiny * tiny; + if (ix > 0x3fff0000) + return (hy > 0) ? huge * huge : tiny * tiny; + } + + n = 0; + /* take care subnormal number */ + if (ix < 0x00010000) + { + ax *= two113; + n -= 113; + o.value = ax; + ix = o.parts32.mswhi; + } + n += ((ix) >> 16) - 0x3fff; + j = ix & 0x0000ffff; + /* determine interval */ + ix = j | 0x3fff0000; /* normalize ix */ + if (j <= 0x3988) + k = 0; /* |x|> 31) - 1) | (yisint - 1)) == 0) + s = -one; /* (-ve)**(odd int) */ + + /* split up y into yy1+y2 and compute (yy1+y2)*(t1+t2) */ + yy1 = y; + o.value = yy1; + o.parts32.lswlo = 0; + o.parts32.lswhi &= 0xf8000000; + yy1 = o.value; + p_l = (y - yy1) * t1 + y * t2; + p_h = yy1 * t1; + z = p_l + p_h; + o.value = z; + j = o.parts32.mswhi; + if (j >= 0x400d0000) /* z >= 16384 */ + { + /* if z > 16384 */ + if (((j - 0x400d0000) | o.parts32.mswlo | o.parts32.lswhi | + o.parts32.lswlo) != 0) + return s * huge * huge; /* overflow */ + else + { + if (p_l + ovt > z - p_h) + return s * huge * huge; /* overflow */ + } + } + else if ((j & 0x7fffffff) >= 0x400d01b9) /* z <= -16495 */ + { + /* z < -16495 */ + if (((j - 0xc00d01bc) | o.parts32.mswlo | o.parts32.lswhi | + o.parts32.lswlo) + != 0) + return s * tiny * tiny; /* underflow */ + else + { + if (p_l <= z - p_h) + return s * tiny * tiny; /* underflow */ + } + } + /* compute 2**(p_h+p_l) */ + i = j & 0x7fffffff; + k = (i >> 16) - 0x3fff; + n = 0; + if (i > 0x3ffe0000) + { /* if |z| > 0.5, set n = [z+0.5] */ + n = floorl (z + 0.5L); + t = n; + p_h -= t; + } + t = p_l + p_h; + o.value = t; + o.parts32.lswlo = 0; + o.parts32.lswhi &= 0xf8000000; + t = o.value; + u = t * lg2_h; + v = (p_l - (t - p_h)) * lg2 + t * lg2_l; + z = u + v; + w = v - (z - u); + /* exp(z) */ + t = z * z; + u = PN[0] + t * (PN[1] + t * (PN[2] + t * (PN[3] + t * PN[4]))); + v = PD[0] + t * (PD[1] + t * (PD[2] + t * (PD[3] + t))); + t1 = z - t * u / v; + r = (z * t1) / (t1 - two) - (w + z * w); + z = one - (r - z); + o.value = z; + j = o.parts32.mswhi; + j += (n << 16); + if ((j >> 16) <= 0) + z = scalbnl (z, n); /* subnormal output */ + else + { + o.parts32.mswhi = j; + z = o.value; + } + return s * z; +} diff --git a/newlib/libm/ld128/e_rem_pio2l.h b/newlib/libm/ld128/e_rem_pio2l.h new file mode 100644 index 0000000000..55810ab395 --- /dev/null +++ b/newlib/libm/ld128/e_rem_pio2l.h @@ -0,0 +1,135 @@ +/* From: @(#)e_rem_pio2.c 1.4 95/01/18 */ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * Copyright (c) 2008 Steven G. Kargl, David Schultz, Bruce D. Evans. + * + * Developed at SunSoft, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + * + * Optimized by Bruce D. Evans. + */ + +#include +__FBSDID("$FreeBSD$"); + +/* ld128 version of __ieee754_rem_pio2l(x,y) + * + * return the remainder of x rem pi/2 in y[0]+y[1] + * use __kernel_rem_pio2() + */ + +#include + +#include "math.h" +#include "../ld/math_private.h" +#include "../ld/fpmath.h" + +#define BIAS (LDBL_MAX_EXP - 1) + +/* + * XXX need to verify that nonzero integer multiples of pi/2 within the + * range get no closer to a long double than 2**-140, or that + * ilogb(x) + ilogb(min_delta) < 45 - -140. + */ +/* + * invpio2: 113 bits of 2/pi + * pio2_1: first 68 bits of pi/2 + * pio2_1t: pi/2 - pio2_1 + * pio2_2: second 68 bits of pi/2 + * pio2_2t: pi/2 - (pio2_1+pio2_2) + * pio2_3: third 68 bits of pi/2 + * pio2_3t: pi/2 - (pio2_1+pio2_2+pio2_3) + */ + +static const double +zero = 0.00000000000000000000e+00, /* 0x00000000, 0x00000000 */ +two24 = 1.67772160000000000000e+07; /* 0x41700000, 0x00000000 */ + +static const long double +invpio2 = 6.3661977236758134307553505349005747e-01L, /* 0x145f306dc9c882a53f84eafa3ea6a.0p-113 */ +pio2_1 = 1.5707963267948966192292994253909555e+00L, /* 0x1921fb54442d18469800000000000.0p-112 */ +pio2_1t = 2.0222662487959507323996846200947577e-21L, /* 0x13198a2e03707344a4093822299f3.0p-181 */ +pio2_2 = 2.0222662487959507323994779168837751e-21L, /* 0x13198a2e03707344a400000000000.0p-181 */ +pio2_2t = 2.0670321098263988236496903051604844e-43L, /* 0x127044533e63a0105df531d89cd91.0p-254 */ +pio2_3 = 2.0670321098263988236499468110329591e-43L, /* 0x127044533e63a0105e00000000000.0p-254 */ +pio2_3t = -2.5650587247459238361625433492959285e-65L; /* -0x159c4ec64ddaeb5f78671cbfb2210.0p-327 */ + +static inline __always_inline int +__ieee754_rem_pio2l(long double x, long double *y) +{ + union IEEEl2bits u,u1; + long double z,w,t,r,fn; + double tx[5],ty[3]; + int64_t n; + int e0,ex,i,j,nx; + int16_t expsign; + + u.e = x; + expsign = u.xbits.expsign; + ex = expsign & 0x7fff; + if (ex < BIAS + 45 || ex == BIAS + 45 && + u.bits.manh < 0x921fb54442d1LL) { + /* |x| ~< 2^45*(pi/2), medium size */ + /* TODO: use only double precision for fn, as in expl(). */ + fn = rnintl(x * invpio2); + n = i64rint(fn); + r = x-fn*pio2_1; + w = fn*pio2_1t; /* 1st round good to 180 bit */ + { + union IEEEl2bits u2; + int ex1; + j = ex; + y[0] = r-w; + u2.e = y[0]; + ex1 = u2.xbits.expsign & 0x7fff; + i = j-ex1; + if(i>51) { /* 2nd iteration needed, good to 248 */ + t = r; + w = fn*pio2_2; + r = t-w; + w = fn*pio2_2t-((t-r)-w); + y[0] = r-w; + u2.e = y[0]; + ex1 = u2.xbits.expsign & 0x7fff; + i = j-ex1; + if(i>119) { /* 3rd iteration need, 316 bits acc */ + t = r; /* will cover all possible cases */ + w = fn*pio2_3; + r = t-w; + w = fn*pio2_3t-((t-r)-w); + y[0] = r-w; + } + } + } + y[1] = (r-y[0])-w; + return n; + } + /* + * all other (large) arguments + */ + if(ex==0x7fff) { /* x is inf or NaN */ + y[0]=y[1]=x-x; return 0; + } + /* set z = scalbn(|x|,ilogb(x)-23) */ + u1.e = x; + e0 = ex - BIAS - 23; /* e0 = ilogb(|x|)-23; */ + u1.xbits.expsign = ex - e0; + z = u1.e; + for(i=0;i<4;i++) { + tx[i] = (double)((int32_t)(z)); + z = (z-tx[i])*two24; + } + tx[4] = z; + nx = 5; + while(tx[nx-1]==zero) nx--; /* skip zero term */ + n = __kernel_rem_pio2(tx,ty,e0,nx,3); + t = (long double)ty[2] + ty[1]; + r = t + ty[0]; + w = ty[0] - (r - t); + if(expsign<0) {y[0] = -r; y[1] = -w; return -n;} + y[0] = r; y[1] = w; return n; +} diff --git a/newlib/libm/ld128/invtrig.c b/newlib/libm/ld128/invtrig.c new file mode 100644 index 0000000000..e06403c6a5 --- /dev/null +++ b/newlib/libm/ld128/invtrig.c @@ -0,0 +1,102 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2008 David Schultz + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include "invtrig.h" + +/* + * asinl() and acosl() + */ +const long double +pS0 = 1.66666666666666666666666666666700314e-01L, +pS1 = -7.32816946414566252574527475428622708e-01L, +pS2 = 1.34215708714992334609030036562143589e+00L, +pS3 = -1.32483151677116409805070261790752040e+00L, +pS4 = 7.61206183613632558824485341162121989e-01L, +pS5 = -2.56165783329023486777386833928147375e-01L, +pS6 = 4.80718586374448793411019434585413855e-02L, +pS7 = -4.42523267167024279410230886239774718e-03L, +pS8 = 1.44551535183911458253205638280410064e-04L, +pS9 = -2.10558957916600254061591040482706179e-07L, +qS1 = -4.84690167848739751544716485245697428e+00L, +qS2 = 9.96619113536172610135016921140206980e+00L, +qS3 = -1.13177895428973036660836798461641458e+01L, +qS4 = 7.74004374389488266169304117714658761e+00L, +qS5 = -3.25871986053534084709023539900339905e+00L, +qS6 = 8.27830318881232209752469022352928864e-01L, +qS7 = -1.18768052702942805423330715206348004e-01L, +qS8 = 8.32600764660522313269101537926539470e-03L, +qS9 = -1.99407384882605586705979504567947007e-04L; + +/* + * atanl() + */ +const long double atanhi[] = { + 4.63647609000806116214256231461214397e-01L, + 7.85398163397448309615660845819875699e-01L, + 9.82793723247329067985710611014666038e-01L, + 1.57079632679489661923132169163975140e+00L, +}; + +const long double atanlo[] = { + 4.89509642257333492668618435220297706e-36L, + 2.16795253253094525619926100651083806e-35L, + -2.31288434538183565909319952098066272e-35L, + 4.33590506506189051239852201302167613e-35L, +}; + +const long double aT[] = { + 3.33333333333333333333333333333333125e-01L, + -1.99999999999999999999999999999180430e-01L, + 1.42857142857142857142857142125269827e-01L, + -1.11111111111111111111110834490810169e-01L, + 9.09090909090909090908522355708623681e-02L, + -7.69230769230769230696553844935357021e-02L, + 6.66666666666666660390096773046256096e-02L, + -5.88235294117646671706582985209643694e-02L, + 5.26315789473666478515847092020327506e-02L, + -4.76190476189855517021024424991436144e-02L, + 4.34782608678695085948531993458097026e-02L, + -3.99999999632663469330634215991142368e-02L, + 3.70370363987423702891250829918659723e-02L, + -3.44827496515048090726669907612335954e-02L, + 3.22579620681420149871973710852268528e-02L, + -3.03020767654269261041647570626778067e-02L, + 2.85641979882534783223403715930946138e-02L, + -2.69824879726738568189929461383741323e-02L, + 2.54194698498808542954187110873675769e-02L, + -2.35083879708189059926183138130183215e-02L, + 2.04832358998165364349957325067131428e-02L, + -1.54489555488544397858507248612362957e-02L, + 8.64492360989278761493037861575248038e-03L, + -2.58521121597609872727919154569765469e-03L, +}; + +const long double pi_lo = 8.67181013012378102479704402604335225e-35L; diff --git a/newlib/libm/ld128/invtrig.h b/newlib/libm/ld128/invtrig.h new file mode 100644 index 0000000000..eaa801d431 --- /dev/null +++ b/newlib/libm/ld128/invtrig.h @@ -0,0 +1,115 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2008 David Schultz + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#include + +#include "../ld/fpmath.h" + +#define BIAS (LDBL_MAX_EXP - 1) +#define MANH_SIZE (LDBL_MANH_SIZE + 1) + +/* Approximation thresholds. */ +#define ASIN_LINEAR (BIAS - 56) /* 2**-56 */ +#define ACOS_CONST (BIAS - 113) /* 2**-113 */ +#define ATAN_CONST (BIAS + 113) /* 2**113 */ +#define ATAN_LINEAR (BIAS - 56) /* 2**-56 */ + +/* 0.95 */ +#define THRESH ((0xe666666666666666ULL>>(64-(MANH_SIZE-1)))|LDBL_NBIT) + +/* Constants shared by the long double inverse trig functions. */ +#define pS0 _ItL_pS0 +#define pS1 _ItL_pS1 +#define pS2 _ItL_pS2 +#define pS3 _ItL_pS3 +#define pS4 _ItL_pS4 +#define pS5 _ItL_pS5 +#define pS6 _ItL_pS6 +#define pS7 _ItL_pS7 +#define pS8 _ItL_pS8 +#define pS9 _ItL_pS9 +#define qS1 _ItL_qS1 +#define qS2 _ItL_qS2 +#define qS3 _ItL_qS3 +#define qS4 _ItL_qS4 +#define qS5 _ItL_qS5 +#define qS6 _ItL_qS6 +#define qS7 _ItL_qS7 +#define qS8 _ItL_qS8 +#define qS9 _ItL_qS9 +#define atanhi _ItL_atanhi +#define atanlo _ItL_atanlo +#define aT _ItL_aT +#define pi_lo _ItL_pi_lo + +#define pio2_hi atanhi[3] +#define pio2_lo atanlo[3] +#define pio4_hi atanhi[1] + +/* Constants shared by the long double inverse trig functions. */ +extern const long double pS0, pS1, pS2, pS3, pS4, pS5, pS6, pS7, pS8, pS9; +extern const long double qS1, qS2, qS3, qS4, qS5, qS6, qS7, qS8, qS9; +extern const long double atanhi[], atanlo[], aT[]; +extern const long double pi_lo; + +static inline long double +P(long double x) +{ + + return (x * (pS0 + x * (pS1 + x * (pS2 + x * (pS3 + x * \ + (pS4 + x * (pS5 + x * (pS6 + x * (pS7 + x * (pS8 + x * \ + pS9)))))))))); +} + +static inline long double +Q(long double x) +{ + + return (1.0 + x * (qS1 + x * (qS2 + x * (qS3 + x * (qS4 + x * \ + (qS5 + x * (qS6 + x * (qS7 + x * (qS8 + x * qS9))))))))); +} + +static inline long double +T_even(long double x) +{ + + return (aT[0] + x * (aT[2] + x * (aT[4] + x * (aT[6] + x * \ + (aT[8] + x * (aT[10] + x * (aT[12] + x * (aT[14] + x * \ + (aT[16] + x * (aT[18] + x * (aT[20] + x * aT[22]))))))))))); +} + +static inline long double +T_odd(long double x) +{ + + return (aT[1] + x * (aT[3] + x * (aT[5] + x * (aT[7] + x * \ + (aT[9] + x * (aT[11] + x * (aT[13] + x * (aT[15] + x * \ + (aT[17] + x * (aT[19] + x * (aT[21] + x * aT[23]))))))))))); +} diff --git a/newlib/libm/ld128/k_cosl.c b/newlib/libm/ld128/k_cosl.c new file mode 100644 index 0000000000..ea5b013c5f --- /dev/null +++ b/newlib/libm/ld128/k_cosl.c @@ -0,0 +1,59 @@ +/* From: @(#)k_cos.c 1.3 95/01/18 */ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * Copyright (c) 2008 Steven G. Kargl, David Schultz, Bruce D. Evans. + * + * Developed at SunSoft, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#include +__FBSDID("$FreeBSD$"); + +/* + * ld128 version of k_cos.c. See ../src/k_cos.c for most comments. + */ +#include +#include "../ld/math_private.h" + +/* + * Domain [-0.7854, 0.7854], range ~[-1.17e-39, 1.19e-39]: + * |cos(x) - c(x))| < 2**-129.3 + * + * 113-bit precision requires more care than 64-bit precision, since + * simple methods give a minimax polynomial with coefficient for x^2 + * that is 1 ulp below 0.5, but we want it to be precisely 0.5. See + * ../ld80/k_cosl.c for more details. + */ +static const double +one = 1.0; +static const long double +C1 = 4.16666666666666666666666666666666667e-02L, +C2 = -1.38888888888888888888888888888888834e-03L, +C3 = 2.48015873015873015873015873015446795e-05L, +C4 = -2.75573192239858906525573190949988493e-07L, +C5 = 2.08767569878680989792098886701451072e-09L, +C6 = -1.14707455977297247136657111139971865e-11L, +C7 = 4.77947733238738518870113294139830239e-14L, +C8 = -1.56192069685858079920640872925306403e-16L, +C9 = 4.11031762320473354032038893429515732e-19L, +C10= -8.89679121027589608738005163931958096e-22L, +C11= 1.61171797801314301767074036661901531e-24L, +C12= -2.46748624357670948912574279501044295e-27L; + +long double +__kernel_cosl(long double x, long double y) +{ + long double hz,z,r,w; + + z = x*x; + r = z*(C1+z*(C2+z*(C3+z*(C4+z*(C5+z*(C6+z*(C7+ + z*(C8+z*(C9+z*(C10+z*(C11+z*C12))))))))))); + hz = 0.5*z; + w = one-hz; + return w + (((one-w)-hz) + (z*r-x*y)); +} diff --git a/newlib/libm/ld128/k_expl.h b/newlib/libm/ld128/k_expl.h new file mode 100644 index 0000000000..159338fe3f --- /dev/null +++ b/newlib/libm/ld128/k_expl.h @@ -0,0 +1,324 @@ +/* from: FreeBSD: head/lib/msun/ld128/s_expl.c 251345 2013-06-03 20:09:22Z kargl */ + +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2009-2013 Steven G. Kargl + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice unmodified, this list of conditions, and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Optimized by Bruce D. Evans. + */ + +#include +__FBSDID("$FreeBSD$"); + +/* + * ld128 version of k_expl.h. See ../ld80/s_expl.c for most comments. + * + * See ../src/e_exp.c and ../src/k_exp.h for precision-independent comments + * about the secondary kernels. + */ + +#define INTERVALS 128 +#define LOG2_INTERVALS 7 +#define BIAS (LDBL_MAX_EXP - 1) + +static const double +/* + * ln2/INTERVALS = L1+L2 (hi+lo decomposition for multiplication). L1 must + * have at least 22 (= log2(|LDBL_MIN_EXP-extras|) + log2(INTERVALS)) lowest + * bits zero so that multiplication of it by n is exact. + */ +INV_L = 1.8466496523378731e+2, /* 0x171547652b82fe.0p-45 */ +L2 = -1.0253670638894731e-29; /* -0x1.9ff0342542fc3p-97 */ +static const long double +/* 0x1.62e42fefa39ef35793c768000000p-8 */ +L1 = 5.41521234812457272982212595914567508e-3L; + +/* + * XXX values in hex in comments have been lost (or were never present) + * from here. + */ +static const long double +/* + * Domain [-0.002708, 0.002708], range ~[-2.4021e-38, 2.4234e-38]: + * |exp(x) - p(x)| < 2**-124.9 + * (0.002708 is ln2/(2*INTERVALS) rounded up a little). + * + * XXX the coeffs aren't very carefully rounded, and I get 3.6 more bits. + */ +A2 = 0.5, +A3 = 1.66666666666666666666666666651085500e-1L, +A4 = 4.16666666666666666666666666425885320e-2L, +A5 = 8.33333333333333333334522877160175842e-3L, +A6 = 1.38888888888888888889971139751596836e-3L; + +static const double +A7 = 1.9841269841269470e-4, /* 0x1.a01a01a019f91p-13 */ +A8 = 2.4801587301585286e-5, /* 0x1.71de3ec75a967p-19 */ +A9 = 2.7557324277411235e-6, /* 0x1.71de3ec75a967p-19 */ +A10 = 2.7557333722375069e-7; /* 0x1.27e505ab56259p-22 */ + +static const struct { + /* + * hi must be rounded to at most 106 bits so that multiplication + * by r1 in expm1l() is exact, but it is rounded to 88 bits due to + * historical accidents. + * + * XXX it is wasteful to use long double for both hi and lo. ld128 + * exp2l() uses only float for lo (in a very differently organized + * table; ld80 exp2l() is different again. It uses 2 doubles in a + * table organized like this one. 1 double and 1 float would + * suffice). There are different packing/locality/alignment/caching + * problems with these methods. + * + * XXX C's bad %a format makes the bits unreadable. They happen + * to all line up for the hi values 1 before the point and 88 + * in 22 nybbles, but for the low values the nybbles are shifted + * randomly. + */ + long double hi; + long double lo; +} tbl[INTERVALS] = { + 0x1p0L, 0x0p0L, + 0x1.0163da9fb33356d84a66aep0L, 0x3.36dcdfa4003ec04c360be2404078p-92L, + 0x1.02c9a3e778060ee6f7cacap0L, 0x4.f7a29bde93d70a2cabc5cb89ba10p-92L, + 0x1.04315e86e7f84bd738f9a2p0L, 0xd.a47e6ed040bb4bfc05af6455e9b8p-96L, + 0x1.059b0d31585743ae7c548ep0L, 0xb.68ca417fe53e3495f7df4baf84a0p-92L, + 0x1.0706b29ddf6ddc6dc403a8p0L, 0x1.d87b27ed07cb8b092ac75e311753p-88L, + 0x1.0874518759bc808c35f25cp0L, 0x1.9427fa2b041b2d6829d8993a0d01p-88L, + 0x1.09e3ecac6f3834521e060cp0L, 0x5.84d6b74ba2e023da730e7fccb758p-92L, + 0x1.0b5586cf9890f6298b92b6p0L, 0x1.1842a98364291408b3ceb0a2a2bbp-88L, + 0x1.0cc922b7247f7407b705b8p0L, 0x9.3dc5e8aac564e6fe2ef1d431fd98p-92L, + 0x1.0e3ec32d3d1a2020742e4ep0L, 0x1.8af6a552ac4b358b1129e9f966a4p-88L, + 0x1.0fb66affed31af232091dcp0L, 0x1.8a1426514e0b627bda694a400a27p-88L, + 0x1.11301d0125b50a4ebbf1aep0L, 0xd.9318ceac5cc47ab166ee57427178p-92L, + 0x1.12abdc06c31cbfb92bad32p0L, 0x4.d68e2f7270bdf7cedf94eb1cb818p-92L, + 0x1.1429aaea92ddfb34101942p0L, 0x1.b2586d01844b389bea7aedd221d4p-88L, + 0x1.15a98c8a58e512480d573cp0L, 0x1.d5613bf92a2b618ee31b376c2689p-88L, + 0x1.172b83c7d517adcdf7c8c4p0L, 0x1.0eb14a792035509ff7d758693f24p-88L, + 0x1.18af9388c8de9bbbf70b9ap0L, 0x3.c2505c97c0102e5f1211941d2840p-92L, + 0x1.1a35beb6fcb753cb698f68p0L, 0x1.2d1c835a6c30724d5cfae31b84e5p-88L, + 0x1.1bbe084045cd39ab1e72b4p0L, 0x4.27e35f9acb57e473915519a1b448p-92L, + 0x1.1d4873168b9aa7805b8028p0L, 0x9.90f07a98b42206e46166cf051d70p-92L, + 0x1.1ed5022fcd91cb8819ff60p0L, 0x1.121d1e504d36c47474c9b7de6067p-88L, + 0x1.2063b88628cd63b8eeb028p0L, 0x1.50929d0fc487d21c2b84004264dep-88L, + 0x1.21f49917ddc962552fd292p0L, 0x9.4bdb4b61ea62477caa1dce823ba0p-92L, + 0x1.2387a6e75623866c1fadb0p0L, 0x1.c15cb593b0328566902df69e4de2p-88L, + 0x1.251ce4fb2a63f3582ab7dep0L, 0x9.e94811a9c8afdcf796934bc652d0p-92L, + 0x1.26b4565e27cdd257a67328p0L, 0x1.d3b249dce4e9186ddd5ff44e6b08p-92L, + 0x1.284dfe1f5638096cf15cf0p0L, 0x3.ca0967fdaa2e52d7c8106f2e262cp-92L, + 0x1.29e9df51fdee12c25d15f4p0L, 0x1.a24aa3bca890ac08d203fed80a07p-88L, + 0x1.2b87fd0dad98ffddea4652p0L, 0x1.8fcab88442fdc3cb6de4519165edp-88L, + 0x1.2d285a6e4030b40091d536p0L, 0xd.075384589c1cd1b3e4018a6b1348p-92L, + 0x1.2ecafa93e2f5611ca0f45cp0L, 0x1.523833af611bdcda253c554cf278p-88L, + 0x1.306fe0a31b7152de8d5a46p0L, 0x3.05c85edecbc27343629f502f1af2p-92L, + 0x1.32170fc4cd8313539cf1c2p0L, 0x1.008f86dde3220ae17a005b6412bep-88L, + 0x1.33c08b26416ff4c9c8610cp0L, 0x1.96696bf95d1593039539d94d662bp-88L, + 0x1.356c55f929ff0c94623476p0L, 0x3.73af38d6d8d6f9506c9bbc93cbc0p-92L, + 0x1.371a7373aa9caa7145502ep0L, 0x1.4547987e3e12516bf9c699be432fp-88L, + 0x1.38cae6d05d86585a9cb0d8p0L, 0x1.bed0c853bd30a02790931eb2e8f0p-88L, + 0x1.3a7db34e59ff6ea1bc9298p0L, 0x1.e0a1d336163fe2f852ceeb134067p-88L, + 0x1.3c32dc313a8e484001f228p0L, 0xb.58f3775e06ab66353001fae9fca0p-92L, + 0x1.3dea64c12342235b41223ep0L, 0x1.3d773fba2cb82b8244267c54443fp-92L, + 0x1.3fa4504ac801ba0bf701aap0L, 0x4.1832fb8c1c8dbdff2c49909e6c60p-92L, + 0x1.4160a21f72e29f84325b8ep0L, 0x1.3db61fb352f0540e6ba05634413ep-88L, + 0x1.431f5d950a896dc7044394p0L, 0x1.0ccec81e24b0caff7581ef4127f7p-92L, + 0x1.44e086061892d03136f408p0L, 0x1.df019fbd4f3b48709b78591d5cb5p-88L, + 0x1.46a41ed1d005772512f458p0L, 0x1.229d97df404ff21f39c1b594d3a8p-88L, + 0x1.486a2b5c13cd013c1a3b68p0L, 0x1.062f03c3dd75ce8757f780e6ec99p-88L, + 0x1.4a32af0d7d3de672d8bcf4p0L, 0x6.f9586461db1d878b1d148bd3ccb8p-92L, + 0x1.4bfdad5362a271d4397afep0L, 0xc.42e20e0363ba2e159c579f82e4b0p-92L, + 0x1.4dcb299fddd0d63b36ef1ap0L, 0x9.e0cc484b25a5566d0bd5f58ad238p-92L, + 0x1.4f9b2769d2ca6ad33d8b68p0L, 0x1.aa073ee55e028497a329a7333dbap-88L, + 0x1.516daa2cf6641c112f52c8p0L, 0x4.d822190e718226177d7608d20038p-92L, + 0x1.5342b569d4f81df0a83c48p0L, 0x1.d86a63f4e672a3e429805b049465p-88L, + 0x1.551a4ca5d920ec52ec6202p0L, 0x4.34ca672645dc6c124d6619a87574p-92L, + 0x1.56f4736b527da66ecb0046p0L, 0x1.64eb3c00f2f5ab3d801d7cc7272dp-88L, + 0x1.58d12d497c7fd252bc2b72p0L, 0x1.43bcf2ec936a970d9cc266f0072fp-88L, + 0x1.5ab07dd48542958c930150p0L, 0x1.91eb345d88d7c81280e069fbdb63p-88L, + 0x1.5c9268a5946b701c4b1b80p0L, 0x1.6986a203d84e6a4a92f179e71889p-88L, + 0x1.5e76f15ad21486e9be4c20p0L, 0x3.99766a06548a05829e853bdb2b52p-92L, + 0x1.605e1b976dc08b076f592ap0L, 0x4.86e3b34ead1b4769df867b9c89ccp-92L, + 0x1.6247eb03a5584b1f0fa06ep0L, 0x1.d2da42bb1ceaf9f732275b8aef30p-88L, + 0x1.6434634ccc31fc76f8714cp0L, 0x4.ed9a4e41000307103a18cf7a6e08p-92L, + 0x1.66238825522249127d9e28p0L, 0x1.b8f314a337f4dc0a3adf1787ff74p-88L, + 0x1.68155d44ca973081c57226p0L, 0x1.b9f32706bfe4e627d809a85dcc66p-88L, + 0x1.6a09e667f3bcc908b2fb12p0L, 0x1.66ea957d3e3adec17512775099dap-88L, + 0x1.6c012750bdabeed76a9980p0L, 0xf.4f33fdeb8b0ecd831106f57b3d00p-96L, + 0x1.6dfb23c651a2ef220e2cbep0L, 0x1.bbaa834b3f11577ceefbe6c1c411p-92L, + 0x1.6ff7df9519483cf87e1b4ep0L, 0x1.3e213bff9b702d5aa477c12523cep-88L, + 0x1.71f75e8ec5f73dd2370f2ep0L, 0xf.0acd6cb434b562d9e8a20adda648p-92L, + 0x1.73f9a48a58173bd5c9a4e6p0L, 0x8.ab1182ae217f3a7681759553e840p-92L, + 0x1.75feb564267c8bf6e9aa32p0L, 0x1.a48b27071805e61a17b954a2dad8p-88L, + 0x1.780694fde5d3f619ae0280p0L, 0x8.58b2bb2bdcf86cd08e35fb04c0f0p-92L, + 0x1.7a11473eb0186d7d51023ep0L, 0x1.6cda1f5ef42b66977960531e821bp-88L, + 0x1.7c1ed0130c1327c4933444p0L, 0x1.937562b2dc933d44fc828efd4c9cp-88L, + 0x1.7e2f336cf4e62105d02ba0p0L, 0x1.5797e170a1427f8fcdf5f3906108p-88L, + 0x1.80427543e1a11b60de6764p0L, 0x9.a354ea706b8e4d8b718a672bf7c8p-92L, + 0x1.82589994cce128acf88afap0L, 0xb.34a010f6ad65cbbac0f532d39be0p-92L, + 0x1.8471a4623c7acce52f6b96p0L, 0x1.c64095370f51f48817914dd78665p-88L, + 0x1.868d99b4492ec80e41d90ap0L, 0xc.251707484d73f136fb5779656b70p-92L, + 0x1.88ac7d98a669966530bcdep0L, 0x1.2d4e9d61283ef385de170ab20f96p-88L, + 0x1.8ace5422aa0db5ba7c55a0p0L, 0x1.92c9bb3e6ed61f2733304a346d8fp-88L, + 0x1.8cf3216b5448bef2aa1cd0p0L, 0x1.61c55d84a9848f8c453b3ca8c946p-88L, + 0x1.8f1ae991577362b982745cp0L, 0x7.2ed804efc9b4ae1458ae946099d4p-92L, + 0x1.9145b0b91ffc588a61b468p0L, 0x1.f6b70e01c2a90229a4c4309ea719p-88L, + 0x1.93737b0cdc5e4f4501c3f2p0L, 0x5.40a22d2fc4af581b63e8326efe9cp-92L, + 0x1.95a44cbc8520ee9b483694p0L, 0x1.a0fc6f7c7d61b2b3a22a0eab2cadp-88L, + 0x1.97d829fde4e4f8b9e920f8p0L, 0x1.1e8bd7edb9d7144b6f6818084cc7p-88L, + 0x1.9a0f170ca07b9ba3109b8cp0L, 0x4.6737beb19e1eada6825d3c557428p-92L, + 0x1.9c49182a3f0901c7c46b06p0L, 0x1.1f2be58ddade50c217186c90b457p-88L, + 0x1.9e86319e323231824ca78ep0L, 0x6.4c6e010f92c082bbadfaf605cfd4p-92L, + 0x1.a0c667b5de564b29ada8b8p0L, 0xc.ab349aa0422a8da7d4512edac548p-92L, + 0x1.a309bec4a2d3358c171f76p0L, 0x1.0daad547fa22c26d168ea762d854p-88L, + 0x1.a5503b23e255c8b424491cp0L, 0xa.f87bc8050a405381703ef7caff50p-92L, + 0x1.a799e1330b3586f2dfb2b0p0L, 0x1.58f1a98796ce8908ae852236ca94p-88L, + 0x1.a9e6b5579fdbf43eb243bcp0L, 0x1.ff4c4c58b571cf465caf07b4b9f5p-88L, + 0x1.ac36bbfd3f379c0db966a2p0L, 0x1.1265fc73e480712d20f8597a8e7bp-88L, + 0x1.ae89f995ad3ad5e8734d16p0L, 0x1.73205a7fbc3ae675ea440b162d6cp-88L, + 0x1.b0e07298db66590842acdep0L, 0x1.c6f6ca0e5dcae2aafffa7a0554cbp-88L, + 0x1.b33a2b84f15faf6bfd0e7ap0L, 0x1.d947c2575781dbb49b1237c87b6ep-88L, + 0x1.b59728de559398e3881110p0L, 0x1.64873c7171fefc410416be0a6525p-88L, + 0x1.b7f76f2fb5e46eaa7b081ap0L, 0xb.53c5354c8903c356e4b625aacc28p-92L, + 0x1.ba5b030a10649840cb3c6ap0L, 0xf.5b47f297203757e1cc6eadc8bad0p-92L, + 0x1.bcc1e904bc1d2247ba0f44p0L, 0x1.b3d08cd0b20287092bd59be4ad98p-88L, + 0x1.bf2c25bd71e088408d7024p0L, 0x1.18e3449fa073b356766dfb568ff4p-88L, + 0x1.c199bdd85529c2220cb12ap0L, 0x9.1ba6679444964a36661240043970p-96L, + 0x1.c40ab5fffd07a6d14df820p0L, 0xf.1828a5366fd387a7bdd54cdf7300p-92L, + 0x1.c67f12e57d14b4a2137fd2p0L, 0xf.2b301dd9e6b151a6d1f9d5d5f520p-96L, + 0x1.c8f6d9406e7b511acbc488p0L, 0x5.c442ddb55820171f319d9e5076a8p-96L, + 0x1.cb720dcef90691503cbd1ep0L, 0x9.49db761d9559ac0cb6dd3ed599e0p-92L, + 0x1.cdf0b555dc3f9c44f8958ep0L, 0x1.ac51be515f8c58bdfb6f5740a3a4p-88L, + 0x1.d072d4a07897b8d0f22f20p0L, 0x1.a158e18fbbfc625f09f4cca40874p-88L, + 0x1.d2f87080d89f18ade12398p0L, 0x9.ea2025b4c56553f5cdee4c924728p-92L, + 0x1.d5818dcfba48725da05aeap0L, 0x1.66e0dca9f589f559c0876ff23830p-88L, + 0x1.d80e316c98397bb84f9d04p0L, 0x8.805f84bec614de269900ddf98d28p-92L, + 0x1.da9e603db3285708c01a5ap0L, 0x1.6d4c97f6246f0ec614ec95c99392p-88L, + 0x1.dd321f301b4604b695de3cp0L, 0x6.30a393215299e30d4fb73503c348p-96L, + 0x1.dfc97337b9b5eb968cac38p0L, 0x1.ed291b7225a944efd5bb5524b927p-88L, + 0x1.e264614f5a128a12761fa0p0L, 0x1.7ada6467e77f73bf65e04c95e29dp-88L, + 0x1.e502ee78b3ff6273d13014p0L, 0x1.3991e8f49659e1693be17ae1d2f9p-88L, + 0x1.e7a51fbc74c834b548b282p0L, 0x1.23786758a84f4956354634a416cep-88L, + 0x1.ea4afa2a490d9858f73a18p0L, 0xf.5db301f86dea20610ceee13eb7b8p-92L, + 0x1.ecf482d8e67f08db0312fap0L, 0x1.949cef462010bb4bc4ce72a900dfp-88L, + 0x1.efa1bee615a27771fd21a8p0L, 0x1.2dac1f6dd5d229ff68e46f27e3dfp-88L, + 0x1.f252b376bba974e8696fc2p0L, 0x1.6390d4c6ad5476b5162f40e1d9a9p-88L, + 0x1.f50765b6e4540674f84b76p0L, 0x2.862baff99000dfc4352ba29b8908p-92L, + 0x1.f7bfdad9cbe138913b4bfep0L, 0x7.2bd95c5ce7280fa4d2344a3f5618p-92L, + 0x1.fa7c1819e90d82e90a7e74p0L, 0xb.263c1dc060c36f7650b4c0f233a8p-92L, + 0x1.fd3c22b8f71f10975ba4b2p0L, 0x1.2bcf3a5e12d269d8ad7c1a4a8875p-88L +}; + +/* + * Kernel for expl(x). x must be finite and not tiny or huge. + * "tiny" is anything that would make us underflow (|A6*x^6| < ~LDBL_MIN). + * "huge" is anything that would make fn*L1 inexact (|x| > ~2**17*ln2). + */ +static inline void +__k_expl(long double x, long double *hip, long double *lop, int *kp) +{ + long double q, r, r1, t; + double dr, fn, r2; + int n, n2; + + /* Reduce x to (k*ln2 + endpoint[n2] + r1 + r2). */ + fn = rnint((double)x * INV_L); + n = irint(fn); + n2 = (unsigned)n % INTERVALS; + /* Depend on the sign bit being propagated: */ + *kp = n >> LOG2_INTERVALS; + r1 = x - fn * L1; + r2 = fn * -L2; + r = r1 + r2; + + /* Evaluate expl(endpoint[n2] + r1 + r2) = tbl[n2] * expl(r1 + r2). */ + dr = r; + q = r2 + r * r * (A2 + r * (A3 + r * (A4 + r * (A5 + r * (A6 + + dr * (A7 + dr * (A8 + dr * (A9 + dr * A10)))))))); + t = tbl[n2].lo + tbl[n2].hi; + *hip = tbl[n2].hi; + *lop = tbl[n2].lo + t * (q + r1); +} + +/* + * XXX: the rest of the functions are identical for ld80 and ld128. + * However, we should use scalbnl() for ld128, since long double + * multiplication was very slow on sparc64 and no new evaluation has + * been made for aarch64 and/or riscv. + */ + +static inline void +k_hexpl(long double x, long double *hip, long double *lop) +{ + float twopkm1; + int k; + + __k_expl(x, hip, lop, &k); + SET_FLOAT_WORD(twopkm1, 0x3f800000 + ((k - 1) << 23)); + *hip *= twopkm1; + *lop *= twopkm1; +} + +static inline long double +hexpl(long double x) +{ + long double hi, lo, twopkm2; + int k; + + twopkm2 = 1; + __k_expl(x, &hi, &lo, &k); + SET_LDBL_EXPSIGN(twopkm2, BIAS + k - 2); + return (lo + hi) * 2 * twopkm2; +} + +#ifdef _COMPLEX_H +/* + * See ../src/k_exp.c for details. + */ +static inline long double complex +__ldexp_cexpl(long double complex z, int expt) +{ + long double c, exp_x, hi, lo, s; + long double x, y, scale1, scale2; + int half_expt, k; + + x = creall(z); + y = cimagl(z); + __k_expl(x, &hi, &lo, &k); + + exp_x = (lo + hi) * 0x1p16382L; + expt += k - 16382; + + scale1 = 1; + half_expt = expt / 2; + SET_LDBL_EXPSIGN(scale1, BIAS + half_expt); + scale2 = 1; + SET_LDBL_EXPSIGN(scale2, BIAS + expt - half_expt); + + sincosl(y, &s, &c); + return (CMPLXL(c * exp_x * scale1 * scale2, + s * exp_x * scale1 * scale2)); +} +#endif /* _COMPLEX_H */ diff --git a/newlib/libm/ld128/k_sinl.c b/newlib/libm/ld128/k_sinl.c new file mode 100644 index 0000000000..da9e57f58f --- /dev/null +++ b/newlib/libm/ld128/k_sinl.c @@ -0,0 +1,59 @@ +/* From: @(#)k_sin.c 1.3 95/01/18 */ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * Copyright (c) 2008 Steven G. Kargl, David Schultz, Bruce D. Evans. + * + * Developed at SunSoft, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#include +__FBSDID("$FreeBSD$"); + +/* + * ld128 version of k_sin.c. See ../src/k_sin.c for most comments. + */ +#include +#include "../ld/math_private.h" + +static const double +half = 0.5; + +/* + * Domain [-0.7854, 0.7854], range ~[-1.53e-37, 1.659e-37] + * |sin(x)/x - s(x)| < 2**-122.1 + * + * See ../ld80/k_cosl.c for more details about the polynomial. + */ +static const long double +S1 = -0.16666666666666666666666666666666666606732416116558L, +S2 = 0.0083333333333333333333333333333331135404851288270047L, +S3 = -0.00019841269841269841269841269839935785325638310428717L, +S4 = 0.27557319223985890652557316053039946268333231205686e-5L, +S5 = -0.25052108385441718775048214826384312253862930064745e-7L, +S6 = 0.16059043836821614596571832194524392581082444805729e-9L, +S7 = -0.76471637318198151807063387954939213287488216303768e-12L, +S8 = 0.28114572543451292625024967174638477283187397621303e-14L; + +static const double +S9 = -0.82206352458348947812512122163446202498005154296863e-17, +S10 = 0.19572940011906109418080609928334380560135358385256e-19, +S11 = -0.38680813379701966970673724299207480965452616911420e-22, +S12 = 0.64038150078671872796678569586315881020659912139412e-25; + +long double +__kernel_sinl(long double x, long double y, int iy) +{ + long double z,r,v; + + z = x*x; + v = z*x; + r = S2+z*(S3+z*(S4+z*(S5+z*(S6+z*(S7+z*(S8+ + z*(S9+z*(S10+z*(S11+z*S12))))))))); + if(iy==0) return x+v*(S1+z*r); + else return x-((z*(half*y-v*r)-y)-v*S1); +} diff --git a/newlib/libm/ld128/s_erfl.c b/newlib/libm/ld128/s_erfl.c new file mode 100644 index 0000000000..3a74659519 --- /dev/null +++ b/newlib/libm/ld128/s_erfl.c @@ -0,0 +1,329 @@ +/* @(#)s_erf.c 5.1 93/09/24 */ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#include +__FBSDID("$FreeBSD$"); + +/* + * See s_erf.c for complete comments. + * + * Converted to long double by Steven G. Kargl. + */ +#include + +#include "../ld/fpmath.h" +#include "math.h" +#include "../ld/math_private.h" + +/* XXX Prevent compilers from erroneously constant folding these: */ +static const volatile long double tiny = 0x1p-10000L; + +static const double +half= 0.5, +one = 1, +two = 2; +/* + * In the domain [0, 2**-40], only the first term in the power series + * expansion of erf(x) is used. The magnitude of the first neglected + * terms is less than 2**-120. + */ +static const long double +efx = 1.28379167095512573896158903121545167e-01L, /* 0xecbff6a7, 0x481dd788, 0xb64d21a8, 0xeb06fc3f */ +efx8 = 1.02703333676410059116927122497236133e+00L, /* 0xecbff6a7, 0x481dd788, 0xb64d21a8, 0xeb06ff3f */ +/* + * Domain [0, 0.84375], range ~[-1.919e-38, 1.919e-38]: + * |(erf(x) - x)/x - pp(x)/qq(x)| < 2**-125.29 + */ +pp0 = 1.28379167095512573896158903121545167e-01L, /* 0x3ffc06eb, 0xa8214db6, 0x88d71d48, 0xa7f6bfec */ +pp1 = -3.14931554396568573802046931159683404e-01L, /* 0xbffd427d, 0x6ada7263, 0x547eb096, 0x95f37463 */ +pp2 = -5.27514920282183487103576956956725309e-02L, /* 0xbffab023, 0xe5a271e3, 0xb0e79b01, 0x2f7ac962 */ +pp3 = -1.13202828509005281355609495523452713e-02L, /* 0xbff872f1, 0x6a5023a1, 0xe08b3884, 0x326af20f */ +pp4 = -9.18626155872522453865998391206048506e-04L, /* 0xbff4e19f, 0xea5fb024, 0x43247a37, 0xe430b06c */ +pp5 = -7.87518862406176274922506447157284230e-05L, /* 0xbff14a4f, 0x31a85fe0, 0x7fff2204, 0x09c49b37 */ +pp6 = -3.42357944472240436548115331090560881e-06L, /* 0xbfeccb81, 0x4b43c336, 0xcd2eb6c2, 0x903f2d87 */ +pp7 = -1.37317432573890412634717890726745428e-07L, /* 0xbfe826e3, 0x0e915eb6, 0x42aee414, 0xf7e36805 */ +pp8 = -2.71115170113861755855049008732113726e-09L, /* 0xbfe2749e, 0x2b94fd00, 0xecb4d166, 0x0efb91f8 */ +pp9 = -3.37925756196555959454018189718117864e-11L, /* 0xbfdc293e, 0x1d9060cb, 0xd043204a, 0x314cd7f0 */ +qq1 = 4.76672625471551170489978555182449450e-01L, /* 0x3ffde81c, 0xde6531f0, 0x76803bee, 0x526e29e9 */ +qq2 = 1.06713144672281502058807525850732240e-01L, /* 0x3ffbb518, 0xd7a6bb74, 0xcd9bdd33, 0x7601eee5 */ +qq3 = 1.47747613127513761102189201923147490e-02L, /* 0x3ff8e423, 0xae527e18, 0xf12cb447, 0x723b4749 */ +qq4 = 1.39939377672028671891148770908874816e-03L, /* 0x3ff56ed7, 0xba055d84, 0xc21b45c4, 0x388d1812 */ +qq5 = 9.44302939359455241271983309378738276e-05L, /* 0x3ff18c11, 0xc18c99a4, 0x86d0fe09, 0x46387b4c */ +qq6 = 4.56199342312522842161301671745365650e-06L, /* 0x3fed3226, 0x73421d05, 0x08875300, 0x32fa1432 */ +qq7 = 1.53019260483764773845294600092361197e-07L, /* 0x3fe8489b, 0x3a63f627, 0x2b9ad2ce, 0x26516e57 */ +qq8 = 3.25542691121324805094777901250005508e-09L, /* 0x3fe2bf6c, 0x26d93a29, 0x9142be7c, 0x9f1dd043 */ +qq9 = 3.37405581964478060434410167262684979e-11L; /* 0x3fdc28c8, 0xfb8fa1be, 0x10e57eec, 0xaa19e49f */ + +static const long double +erx = 8.42700792949714894142232424201210961e-01L, /* 0x3ffeaf76, 0x7a741088, 0xb0000000, 0x00000000 */ +/* + * Domain [0.84375, 1.25], range ~[-2.521e-36, 2.523e-36]: + * |(erf(x) - erx) - pa(x)/qa(x)| < 2**-120.15 + */ +pa0 = -2.48010117891186017024438233323795897e-17L, /* 0xbfc7c97f, 0x77812279, 0x6c877f22, 0xef4bfb2e */ +pa1 = 4.15107497420594680894327969504526489e-01L, /* 0x3ffda911, 0xf096fbc2, 0x55662005, 0x2337fa64 */ +pa2 = -3.94180628087084846724448515851892609e-02L, /* 0xbffa42e9, 0xab54528c, 0xad529da1, 0x6efc2af3 */ +pa3 = 4.48897599625192107295954790681677462e-02L, /* 0x3ffa6fbc, 0xa65edba1, 0x0e4cbcea, 0x73ef9a31 */ +pa4 = 8.02069252143016600110972019232995528e-02L, /* 0x3ffb4887, 0x0e8b548e, 0x3230b417, 0x11b553b3 */ +pa5 = -1.02729816533435279443621120242391295e-02L, /* 0xbff850a0, 0x041de3ee, 0xd5bca6c9, 0x4ef5f9f2 */ +pa6 = 5.70777694530755634864821094419982095e-03L, /* 0x3ff77610, 0x9b501e10, 0x4c978382, 0x742df68f */ +pa7 = 1.22635150233075521018231779267077071e-03L, /* 0x3ff5417b, 0x0e623682, 0x60327da0, 0x96b9219e */ +pa8 = 5.36100234820204569428412542856666503e-04L, /* 0x3ff41912, 0x27ceb4c1, 0x1d3298ec, 0x84ced627 */ +pa9 = -1.97753571846365167177187858667583165e-04L, /* 0xbff29eb8, 0x23f5bcf3, 0x15c83c46, 0xe4fda98b */ +pa10 = 6.19333039900846970674794789568415105e-05L, /* 0x3ff103c4, 0x60f88e46, 0xc0c9fb02, 0x13cc7fc1 */ +pa11 = -5.40531400436645861492290270311751349e-06L, /* 0xbfed6abe, 0x9665f8a8, 0xdd0ad3ba, 0xe5dc0ee3 */ +qa1 = 9.05041313265490487793231810291907851e-01L, /* 0x3ffecf61, 0x93340222, 0xe9930620, 0xc4e61168 */ +qa2 = 6.79848064708886864767240880834868092e-01L, /* 0x3ffe5c15, 0x0ba858dc, 0xf7900ae9, 0xfea1e09a */ +qa3 = 4.04720609926471677581066689316516445e-01L, /* 0x3ffd9e6f, 0x145e9b00, 0x6d8c1749, 0xd2928623 */ +qa4 = 1.69183273898369996364661075664302225e-01L, /* 0x3ffc5a7c, 0xc2a363c1, 0xd6c19097, 0xef9b4063 */ +qa5 = 7.44476185988067992342479750486764248e-02L, /* 0x3ffb30ef, 0xfc7259ef, 0x1bcbb089, 0x686dd62d */ +qa6 = 2.02981172725892407200420389604788573e-02L, /* 0x3ff94c90, 0x7976cb0e, 0x21e1d36b, 0x0f09ca2b */ +qa7 = 6.94281866271607668268269403102277234e-03L, /* 0x3ff7c701, 0x2b193250, 0xc5d46ecc, 0x374843d8 */ +qa8 = 1.12952275469171559611651594706820034e-03L, /* 0x3ff52818, 0xfd2a7c06, 0xd13e38fd, 0xda4b34f5 */ +qa9 = 3.13736683241992737197226578597710179e-04L, /* 0x3ff348fa, 0x0cb48d18, 0x051f849b, 0x135ccf74 */ +qa10 = 1.17037675204033225470121134087771410e-05L, /* 0x3fee88b6, 0x98f47704, 0xa5d8f8f2, 0xc6422e11 */ +qa11 = 4.61312518293853991439362806880973592e-06L, /* 0x3fed3594, 0xe31db94f, 0x3592b693, 0xed4386b4 */ +qa12 = -1.02158572037456893687737553657431771e-06L; /* 0xbfeb123a, 0xd60d9b1e, 0x1f6fdeb9, 0x7dc8410a */ +/* + * Domain [1.25,2.85715], range ~[-2.922e-37,2.922e-37]: + * |log(x*erfc(x)) + x**2 + 0.5625 - ra(x)/sa(x)| < 2**-121.36 + */ +static const long double +ra0 = -9.86494292470069009555706994426014461e-03L, /* 0xbff84341, 0x239e8709, 0xe941b06a, 0xcb4b6ec5 */ +ra1 = -1.13580436992565640457579040117568870e+00L, /* 0xbfff22c4, 0x133f7c0d, 0x72d5e231, 0x2eb1ee3f */ +ra2 = -4.89744330295291950661185707066921755e+01L, /* 0xc00487cb, 0xa38b4fc2, 0xc136695b, 0xc1df8047 */ +ra3 = -1.10766149300215937173768072715352140e+03L, /* 0xc00914ea, 0x55e6beb3, 0xabc50e07, 0xb6e5664d */ +ra4 = -1.49991031232170934967642795601952100e+04L, /* 0xc00cd4b8, 0xd33243e6, 0xffbf6545, 0x3c57ef6e */ +ra5 = -1.29805749738318462882524181556996692e+05L, /* 0xc00ffb0d, 0xbfeed9b6, 0x5b2a3ff4, 0xe245bd3c */ +ra6 = -7.42828497044940065828871976644647850e+05L, /* 0xc0126ab5, 0x8fe7caca, 0x473352d9, 0xcd4e0c90 */ +ra7 = -2.85637299581890734287995171242421106e+06L, /* 0xc0145cad, 0xa7f76fe7, 0x3e358051, 0x1799f927 */ +ra8 = -7.40674797129824999383748865571026084e+06L, /* 0xc015c412, 0x6fe29c02, 0x298ad158, 0x7d24e45c */ +ra9 = -1.28653420911930973914078724204151759e+07L, /* 0xc016889e, 0x7c2eb0dc, 0x95d5863b, 0x0aa34dc3 */ +ra10 = -1.47198163599330179552932489109452638e+07L, /* 0xc016c136, 0x90b84923, 0xf9bcb497, 0x19bbd0f5 */ +ra11 = -1.07812992258382800318665248311522624e+07L, /* 0xc0164904, 0xe673a113, 0x35d7f079, 0xe13701f3 */ +ra12 = -4.83545565681708642630419905537756076e+06L, /* 0xc0152721, 0xfea094a8, 0x869eb39d, 0x413d6f13 */ +ra13 = -1.23956521201673964822976917356685286e+06L, /* 0xc0132ea0, 0xd3646baa, 0x2fe62b0d, 0xbae5ce85 */ +ra14 = -1.62289333553652417591275333240371812e+05L, /* 0xc0103cf8, 0xaab1e2d6, 0x4c25e014, 0x248d76ab */ +ra15 = -8.82890392601176969729168894389833110e+03L, /* 0xc00c13e7, 0x3b3d8f94, 0x6fbda6f6, 0xe7049a82 */ +ra16 = -1.22591866337261720023681535568334619e+02L, /* 0xc005ea5e, 0x12358891, 0xcfa712c5, 0x77f050d4 */ +sa1 = 6.44508918884710829371852723353794047e+01L, /* 0x400501cd, 0xb69a6c0f, 0x5716de14, 0x47161af6 */ +sa2 = 1.76118475473171481523704824327358534e+03L, /* 0x4009b84b, 0xd305829f, 0xc4c771b0, 0xbf1f7f9b */ +sa3 = 2.69448346969488374857087646131950188e+04L, /* 0x400da503, 0x56bacc05, 0x4fdba68d, 0x2cca27e6 */ +sa4 = 2.56826633369941456778326497384543763e+05L, /* 0x4010f59d, 0x51124428, 0x69c41de6, 0xbd0d5753 */ +sa5 = 1.60647413092257206847700054645905859e+06L, /* 0x40138834, 0xa2184244, 0x557a1bed, 0x68c9d556 */ +sa6 = 6.76963075165099718574753447122393797e+06L, /* 0x40159d2f, 0x7b01b0cc, 0x8bac9e95, 0x5d35d56e */ +sa7 = 1.94295690905361884290986932493647741e+07L, /* 0x40172878, 0xc1172d61, 0x3068501e, 0x2f3c71da */ +sa8 = 3.79774781017759149060839255547073541e+07L, /* 0x401821be, 0xc30d06fe, 0x410563d7, 0x032111fd */ +sa9 = 5.00659831846029484248302236457727397e+07L, /* 0x40187df9, 0x1f97a111, 0xc51d6ac2, 0x4b389793 */ +sa10 = 4.36486287620506484276130525941972541e+07L, /* 0x40184d03, 0x3a618ae0, 0x2a723357, 0xfa45c60a */ +sa11 = 2.43779678791333894255510508253951934e+07L, /* 0x401773fa, 0x6fe10ee2, 0xc467850d, 0xc6b7ff30 */ +sa12 = 8.30732360384443202039372372212966542e+06L, /* 0x4015fb09, 0xee6a5631, 0xdd98de7e, 0x8b00461a */ +sa13 = 1.60160846942050515734192397495105693e+06L, /* 0x40138704, 0x8782bf13, 0x5b8fb315, 0xa898abe5 */ +sa14 = 1.54255505242533291014555153757001825e+05L, /* 0x40102d47, 0xc0abc98e, 0x843c9490, 0xb4352440 */ +sa15 = 5.87949220002375547561467275493888824e+03L, /* 0x400b6f77, 0xe00d21d1, 0xec4d41e8, 0x2f8e1673 */ +sa16 = 4.97272976346793193860385983372237710e+01L; /* 0x40048dd1, 0x816c1b3f, 0x24f540a6, 0x4cfe03cc */ +/* + * Domain [2.85715,9], range ~[-7.886e-37,7.918e-37]: + * |log(x*erfc(x)) + x**2 + 0.5625 - rb(x)/sb(x)| < 2**-120 + */ +static const long double +rb0 = -9.86494292470008707171371994479162369e-3L, /* 0xbff84341, 0x239e86f4, 0x2f57e561, 0xf4469360 */ +rb1 = -1.57047326624110727986326503729442830L, /* 0xbfff920a, 0x8935bf73, 0x8803b894, 0x4656482d */ +rb2 = -1.03228196364885474342132255440317065e2L, /* 0xc0059ce9, 0xac4ed0ff, 0x2cff0ff7, 0x5e70d1ab */ +rb3 = -3.74000570653418227179358710865224376e3L, /* 0xc00ad380, 0x2ebf7835, 0xf6b07ed2, 0x861242f7 */ +rb4 = -8.35435477739098044190860390632813956e4L, /* 0xc00f4657, 0x8c3ae934, 0x3647d7b3, 0x80e76fb7 */ +rb5 = -1.21398672055223642118716640216747152e6L, /* 0xc0132862, 0x2b8761c8, 0x27d18c0f, 0x137c9463 */ +rb6 = -1.17669175877248796101665344873273970e7L, /* 0xc0166719, 0x0b2cea46, 0x81f14174, 0x11602ea5 */ +rb7 = -7.66108006086998253606773064264599615e7L, /* 0xc019243f, 0x3c26f4f0, 0x1cc05241, 0x3b953728 */ +rb8 = -3.32547117558141845968704725353130804e8L, /* 0xc01b3d24, 0x42d8ee26, 0x24ef6f3b, 0x604a8c65 */ +rb9 = -9.41561252426350696802167711221739746e8L, /* 0xc01cc0f8, 0xad23692a, 0x8ddb2310, 0xe9937145 */ +rb10 = -1.67157110805390944549427329626281063e9L, /* 0xc01d8e88, 0x9a903734, 0x09a55fa3, 0xd205c903 */ +rb11 = -1.74339631004410841337645931421427373e9L, /* 0xc01d9fa8, 0x77582d2a, 0xc183b8ab, 0x7e00cb05 */ +rb12 = -9.57655233596934915727573141357471703e8L, /* 0xc01cc8a5, 0x460cc685, 0xd0271fa0, 0x6a70e3da */ +rb13 = -2.26320062731339353035254704082495066e8L, /* 0xc01aafab, 0xd7d76721, 0xc9720e11, 0x6a8bd489 */ +rb14 = -1.42777302996263256686002973851837039e7L, /* 0xc016b3b8, 0xc499689f, 0x2b88d965, 0xc32414f9 */ +sb1 = 1.08512869705594540211033733976348506e2L, /* 0x4005b20d, 0x2db7528d, 0x00d20dcb, 0x858f6191 */ +sb2 = 5.02757713761390460534494530537572834e3L, /* 0x400b3a39, 0x3bf4a690, 0x3025d28d, 0xfd40a891 */ +sb3 = 1.31019107205412870059331647078328430e5L, /* 0x400fffcb, 0x1b71d05e, 0x3b28361d, 0x2a3c3690 */ +sb4 = 2.13021555152296846166736757455018030e6L, /* 0x40140409, 0x3c6984df, 0xc4491d7c, 0xb04aa08d */ +sb5 = 2.26649105281820861953868568619768286e7L, /* 0x401759d6, 0xce8736f0, 0xf28ad037, 0x2a901e0c */ +sb6 = 1.61071939490875921812318684143076081e8L, /* 0x401a3338, 0x686fb541, 0x6bd27d06, 0x4f95c9ac */ +sb7 = 7.66895673844301852676056750497991966e8L, /* 0x401c6daf, 0x31cec121, 0x54699126, 0x4bd9bf9e */ +sb8 = 2.41884450436101936436023058196042526e9L, /* 0x401e2059, 0x46b0b8d7, 0x87b64cbf, 0x78bc296d */ +sb9 = 4.92403055884071695093305291535107666e9L, /* 0x401f257e, 0xbe5ed739, 0x39e17346, 0xcadd2e55 */ +sb10 = 6.18627786365587486459633615573786416e9L, /* 0x401f70bb, 0x1be7a7e7, 0x6a45b5ae, 0x607c70f0 */ +sb11 = 4.45898013426501378097430226324743199e9L, /* 0x401f09c6, 0xa32643d7, 0xf1724620, 0x9ea46c32 */ +sb12 = 1.63006115763329848117160344854224975e9L, /* 0x401d84a3, 0x0996887f, 0x65a4f43b, 0x978c1d74 */ +sb13 = 2.39216717012421697446304015847567721e8L, /* 0x401ac845, 0x09a065c2, 0x30095da7, 0x9d72d6ae */ +sb14 = 7.84837329009278694937250358810225609e6L; /* 0x4015df06, 0xd5290e15, 0x63031fac, 0x4d9c894c */ +/* + * Domain [9,108], range ~[-5.324e-38,5.340e-38]: + * |log(x*erfc(x)) + x**2 + 0.5625 - r(x)/s(x)| < 2**-124 + */ +static const long double +rc0 = -9.86494292470008707171367567652935673e-3L, /* 0xbff84341, 0x239e86f4, 0x2f57e55b, 0x1aa10fd3 */ +rc1 = -1.26229447747315096406518846411562266L, /* 0xbfff4325, 0xbb1aab28, 0xda395cd9, 0xfb861c15 */ +rc2 = -6.13742634438922591780742637728666162e1L, /* 0xc004eafe, 0x7dd51cd8, 0x3c7c5928, 0x751e50cf */ +rc3 = -1.50455835478908280402912854338421517e3L, /* 0xc0097823, 0xbc15b9ab, 0x3d60745c, 0x523e80a5 */ +rc4 = -2.04415631865861549920184039902945685e4L, /* 0xc00d3f66, 0x40b3fc04, 0x5388f2ec, 0xb009e1f0 */ +rc5 = -1.57625662981714582753490610560037638e5L, /* 0xc01033dc, 0xd4dc95b6, 0xfd4da93b, 0xf355b4a9 */ +rc6 = -6.73473451616752528402917538033283794e5L, /* 0xc01248d8, 0x2e73a4f9, 0xcded49c5, 0xfa3bfeb7 */ +rc7 = -1.47433165421387483167186683764364857e6L, /* 0xc01367f1, 0xba77a8f7, 0xcfdd0dbb, 0x25d554b3 */ +rc8 = -1.38811981807868828563794929997744139e6L, /* 0xc01352e5, 0x7d16d9ad, 0xbbdcbf38, 0x38fbc5ea */ +rc9 = -3.59659700530831825640766479698155060e5L, /* 0xc0115f3a, 0xecd57f45, 0x21f8ad6c, 0x910a5958 */ +sc1 = 7.72730753022908298637508998072635696e1L, /* 0x40053517, 0xa10d52bc, 0xdabb55b6, 0xbd0328cd */ +sc2 = 2.36825757341694050500333261769082182e3L, /* 0x400a2808, 0x3e0a9b42, 0x82977842, 0x9c5de29e */ +sc3 = 3.72210540173034735352888847134073099e4L, /* 0x400e22ca, 0x1ba827ef, 0xac8390d7, 0x1fc39a41 */ +sc4 = 3.24136032646418336712461033591393412e5L, /* 0x40113c8a, 0x0216e100, 0xc59d1e44, 0xf0e68d9d */ +sc5 = 1.57836135851134393802505823370009175e6L, /* 0x40138157, 0x95bc7664, 0x17575961, 0xdbe58eeb */ +sc6 = 4.12881981392063738026679089714182355e6L, /* 0x4014f801, 0x9e82e8d2, 0xb8b3a70e, 0xfd84185d */ +sc7 = 5.24438427289213488410596395361544142e6L, /* 0x40154017, 0x81177109, 0x2aa6c3b0, 0x1f106625 */ +sc8 = 2.59909544563616121735963429710382149e6L, /* 0x40143d45, 0xbb90a9b1, 0x12bf9390, 0xa827a700 */ +sc9 = 2.80930665169282501639651995082335693e5L; /* 0x40111258, 0xaa92222e, 0xa97e3216, 0xa237fa6c */ + +long double +erfl(long double x) +{ + long double ax,R,S,P,Q,s,y,z,r; + uint64_t lx, llx; + int32_t i; + uint16_t hx; + + EXTRACT_LDBL128_WORDS(hx, lx, llx, x); + + if((hx & 0x7fff) == 0x7fff) { /* erfl(nan)=nan */ + i = (hx>>15)<<1; + return (1-i)+one/x; /* erfl(+-inf)=+-1 */ + } + + ax = fabsl(x); + if(ax < 0.84375) { + if(ax < 0x1p-40L) { + if(ax < 0x1p-16373L) + return (8*x+efx8*x)/8; /* avoid spurious underflow */ + return x + efx*x; + } + z = x*x; + r = pp0+z*(pp1+z*(pp2+z*(pp3+z*(pp4+z*(pp5+z*(pp6+z*(pp7+ + z*(pp8+z*pp9)))))))); + s = one+z*(qq1+z*(qq2+z*(qq3+z*(qq4+z*(qq5+z*(qq6+z*(qq7+ + z*(qq8+z*qq9)))))))); + y = r/s; + return x + x*y; + } + if(ax < 1.25) { + s = ax-one; + P = pa0+s*(pa1+s*(pa2+s*(pa3+s*(pa4+s*(pa5+s*(pa6+s*(pa7+ + s*(pa8+s*(pa9+s*(pa10+s*pa11)))))))))); + Q = one+s*(qa1+s*(qa2+s*(qa3+s*(qa4+s*(qa5+s*(qa6+s*(qa7+ + s*(qa8+s*(qa9+s*(qa10+s*(qa11+s*qa12))))))))))); + if(x>=0) return (erx + P/Q); else return (-erx - P/Q); + } + if (ax >= 9) { /* inf>|x|>= 9 */ + if(x>=0) return (one-tiny); else return (tiny-one); + } + s = one/(ax*ax); + if(ax < 2.85715) { /* |x| < 2.85715 */ + R=ra0+s*(ra1+s*(ra2+s*(ra3+s*(ra4+s*(ra5+s*(ra6+s*(ra7+ + s*(ra8+s*(ra9+s*(ra10+s*(ra11+s*(ra12+s*(ra13+s*(ra14+ + s*(ra15+s*ra16))))))))))))))); + S=one+s*(sa1+s*(sa2+s*(sa3+s*(sa4+s*(sa5+s*(sa6+s*(sa7+ + s*(sa8+s*(sa9+s*(sa10+s*(sa11+s*(sa12+s*(sa13+s*(sa14+ + s*(sa15+s*sa16))))))))))))))); + } else { /* |x| >= 2.85715 */ + R=rb0+s*(rb1+s*(rb2+s*(rb3+s*(rb4+s*(rb5+s*(rb6+s*(rb7+ + s*(rb8+s*(rb9+s*(rb10+s*(rb11+s*(rb12+s*(rb13+ + s*rb14))))))))))))); + S=one+s*(sb1+s*(sb2+s*(sb3+s*(sb4+s*(sb5+s*(sb6+s*(sb7+ + s*(sb8+s*(sb9+s*(sb10+s*(sb11+s*(sb12+s*(sb13+ + s*sb14))))))))))))); + } + z = (float)ax; + r = expl(-z*z-0.5625)*expl((z-ax)*(z+ax)+R/S); + if(x>=0) return (one-r/ax); else return (r/ax-one); +} + +long double +erfcl(long double x) +{ + long double ax,R,S,P,Q,s,y,z,r; + uint64_t lx, llx; + uint16_t hx; + + EXTRACT_LDBL128_WORDS(hx, lx, llx, x); + + if((hx & 0x7fff) == 0x7fff) { /* erfcl(nan)=nan */ + /* erfcl(+-inf)=0,2 */ + return ((hx>>15)<<1)+one/x; + } + + ax = fabsl(x); + if(ax < 0.84375L) { + if(ax < 0x1p-34L) + return one-x; + z = x*x; + r = pp0+z*(pp1+z*(pp2+z*(pp3+z*(pp4+z*(pp5+z*(pp6+z*(pp7+ + z*(pp8+z*pp9)))))))); + s = one+z*(qq1+z*(qq2+z*(qq3+z*(qq4+z*(qq5+z*(qq6+z*(qq7+ + z*(qq8+z*qq9)))))))); + y = r/s; + if(ax < 0.25L) { /* x<1/4 */ + return one-(x+x*y); + } else { + r = x*y; + r += (x-half); + return half - r; + } + } + if(ax < 1.25L) { + s = ax-one; + P = pa0+s*(pa1+s*(pa2+s*(pa3+s*(pa4+s*(pa5+s*(pa6+s*(pa7+ + s*(pa8+s*(pa9+s*(pa10+s*pa11)))))))))); + Q = one+s*(qa1+s*(qa2+s*(qa3+s*(qa4+s*(qa5+s*(qa6+s*(qa7+ + s*(qa8+s*(qa9+s*(qa10+s*(qa11+s*qa12))))))))))); + if(x>=0) { + z = one-erx; return z - P/Q; + } else { + z = erx+P/Q; return one+z; + } + } + + if(ax < 108) { /* |x| < 108 */ + s = one/(ax*ax); + if(ax < 2.85715) { /* |x| < 2.85715 */ + R=ra0+s*(ra1+s*(ra2+s*(ra3+s*(ra4+s*(ra5+s*(ra6+s*(ra7+ + s*(ra8+s*(ra9+s*(ra10+s*(ra11+s*(ra12+s*(ra13+s*(ra14+ + s*(ra15+s*ra16))))))))))))))); + S=one+s*(sa1+s*(sa2+s*(sa3+s*(sa4+s*(sa5+s*(sa6+s*(sa7+ + s*(sa8+s*(sa9+s*(sa10+s*(sa11+s*(sa12+s*(sa13+s*(sa14+ + s*(sa15+s*sa16))))))))))))))); + } else if(ax < 9) { + R=rb0+s*(rb1+s*(rb2+s*(rb3+s*(rb4+s*(rb5+s*(rb6+s*(rb7+ + s*(rb8+s*(rb9+s*(rb10+s*(rb11+s*(rb12+s*(rb13+ + s*rb14))))))))))))); + S=one+s*(sb1+s*(sb2+s*(sb3+s*(sb4+s*(sb5+s*(sb6+s*(sb7+ + s*(sb8+s*(sb9+s*(sb10+s*(sb11+s*(sb12+s*(sb13+ + s*sb14))))))))))))); + } else { + if(x < -9) return two-tiny; /* x < -9 */ + R=rc0+s*(rc1+s*(rc2+s*(rc3+s*(rc4+s*(rc5+s*(rc6+s*(rc7+ + s*(rc8+s*rc9)))))))); + S=one+s*(sc1+s*(sc2+s*(sc3+s*(sc4+s*(sc5+s*(sc6+s*(sc7+ + s*(sc8+s*sc9)))))))); + } + z = (float)ax; + r = expl(-z*z-0.5625)*expl((z-ax)*(z+ax)+R/S); + if(x>0) return r/ax; else return two-r/ax; + } else { + if(x>0) return tiny*tiny; else return two-tiny; + } +} diff --git a/newlib/libm/ld128/s_exp2l.c b/newlib/libm/ld128/s_exp2l.c new file mode 100644 index 0000000000..5535e075cb --- /dev/null +++ b/newlib/libm/ld128/s_exp2l.c @@ -0,0 +1,429 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2005-2008 David Schultz + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include + +#include "../ld/fpmath.h" +#include "math.h" + +#define TBLBITS 7 +#define TBLSIZE (1 << TBLBITS) + +#define BIAS (LDBL_MAX_EXP - 1) +#define EXPMASK (BIAS + LDBL_MAX_EXP) + +static volatile long double + huge = 0x1p10000L, + twom10000 = 0x1p-10000L; + +static const long double + P1 = 0x1.62e42fefa39ef35793c7673007e6p-1L, + P2 = 0x1.ebfbdff82c58ea86f16b06ec9736p-3L, + P3 = 0x1.c6b08d704a0bf8b33a762bad3459p-5L, + P4 = 0x1.3b2ab6fba4e7729ccbbe0b4f3fc2p-7L, + P5 = 0x1.5d87fe78a67311071dee13fd11d9p-10L, + P6 = 0x1.430912f86c7876f4b663b23c5fe5p-13L; + +static const double + P7 = 0x1.ffcbfc588b041p-17, + P8 = 0x1.62c0223a5c7c7p-20, + P9 = 0x1.b52541ff59713p-24, + P10 = 0x1.e4cf56a391e22p-28, + redux = 0x1.8p112 / TBLSIZE; + +static const long double tbl[TBLSIZE] = { + 0x1.6a09e667f3bcc908b2fb1366dfeap-1L, + 0x1.6c012750bdabeed76a99800f4edep-1L, + 0x1.6dfb23c651a2ef220e2cbe1bc0d4p-1L, + 0x1.6ff7df9519483cf87e1b4f3e1e98p-1L, + 0x1.71f75e8ec5f73dd2370f2ef0b148p-1L, + 0x1.73f9a48a58173bd5c9a4e68ab074p-1L, + 0x1.75feb564267c8bf6e9aa33a489a8p-1L, + 0x1.780694fde5d3f619ae02808592a4p-1L, + 0x1.7a11473eb0186d7d51023f6ccb1ap-1L, + 0x1.7c1ed0130c1327c49334459378dep-1L, + 0x1.7e2f336cf4e62105d02ba1579756p-1L, + 0x1.80427543e1a11b60de67649a3842p-1L, + 0x1.82589994cce128acf88afab34928p-1L, + 0x1.8471a4623c7acce52f6b97c6444cp-1L, + 0x1.868d99b4492ec80e41d90ac2556ap-1L, + 0x1.88ac7d98a669966530bcdf2d4cc0p-1L, + 0x1.8ace5422aa0db5ba7c55a192c648p-1L, + 0x1.8cf3216b5448bef2aa1cd161c57ap-1L, + 0x1.8f1ae991577362b982745c72eddap-1L, + 0x1.9145b0b91ffc588a61b469f6b6a0p-1L, + 0x1.93737b0cdc5e4f4501c3f2540ae8p-1L, + 0x1.95a44cbc8520ee9b483695a0e7fep-1L, + 0x1.97d829fde4e4f8b9e920f91e8eb6p-1L, + 0x1.9a0f170ca07b9ba3109b8c467844p-1L, + 0x1.9c49182a3f0901c7c46b071f28dep-1L, + 0x1.9e86319e323231824ca78e64c462p-1L, + 0x1.a0c667b5de564b29ada8b8cabbacp-1L, + 0x1.a309bec4a2d3358c171f770db1f4p-1L, + 0x1.a5503b23e255c8b424491caf88ccp-1L, + 0x1.a799e1330b3586f2dfb2b158f31ep-1L, + 0x1.a9e6b5579fdbf43eb243bdff53a2p-1L, + 0x1.ac36bbfd3f379c0db966a3126988p-1L, + 0x1.ae89f995ad3ad5e8734d17731c80p-1L, + 0x1.b0e07298db66590842acdfc6fb4ep-1L, + 0x1.b33a2b84f15faf6bfd0e7bd941b0p-1L, + 0x1.b59728de559398e3881111648738p-1L, + 0x1.b7f76f2fb5e46eaa7b081ab53ff6p-1L, + 0x1.ba5b030a10649840cb3c6af5b74cp-1L, + 0x1.bcc1e904bc1d2247ba0f45b3d06cp-1L, + 0x1.bf2c25bd71e088408d7025190cd0p-1L, + 0x1.c199bdd85529c2220cb12a0916bap-1L, + 0x1.c40ab5fffd07a6d14df820f17deap-1L, + 0x1.c67f12e57d14b4a2137fd20f2a26p-1L, + 0x1.c8f6d9406e7b511acbc48805c3f6p-1L, + 0x1.cb720dcef90691503cbd1e949d0ap-1L, + 0x1.cdf0b555dc3f9c44f8958fac4f12p-1L, + 0x1.d072d4a07897b8d0f22f21a13792p-1L, + 0x1.d2f87080d89f18ade123989ea50ep-1L, + 0x1.d5818dcfba48725da05aeb66dff8p-1L, + 0x1.d80e316c98397bb84f9d048807a0p-1L, + 0x1.da9e603db3285708c01a5b6d480cp-1L, + 0x1.dd321f301b4604b695de3c0630c0p-1L, + 0x1.dfc97337b9b5eb968cac39ed284cp-1L, + 0x1.e264614f5a128a12761fa17adc74p-1L, + 0x1.e502ee78b3ff6273d130153992d0p-1L, + 0x1.e7a51fbc74c834b548b2832378a4p-1L, + 0x1.ea4afa2a490d9858f73a18f5dab4p-1L, + 0x1.ecf482d8e67f08db0312fb949d50p-1L, + 0x1.efa1bee615a27771fd21a92dabb6p-1L, + 0x1.f252b376bba974e8696fc3638f24p-1L, + 0x1.f50765b6e4540674f84b762861a6p-1L, + 0x1.f7bfdad9cbe138913b4bfe72bd78p-1L, + 0x1.fa7c1819e90d82e90a7e74b26360p-1L, + 0x1.fd3c22b8f71f10975ba4b32bd006p-1L, + 0x1.0000000000000000000000000000p+0L, + 0x1.0163da9fb33356d84a66ae336e98p+0L, + 0x1.02c9a3e778060ee6f7caca4f7a18p+0L, + 0x1.04315e86e7f84bd738f9a20da442p+0L, + 0x1.059b0d31585743ae7c548eb68c6ap+0L, + 0x1.0706b29ddf6ddc6dc403a9d87b1ep+0L, + 0x1.0874518759bc808c35f25d942856p+0L, + 0x1.09e3ecac6f3834521e060c584d5cp+0L, + 0x1.0b5586cf9890f6298b92b7184200p+0L, + 0x1.0cc922b7247f7407b705b893dbdep+0L, + 0x1.0e3ec32d3d1a2020742e4f8af794p+0L, + 0x1.0fb66affed31af232091dd8a169ep+0L, + 0x1.11301d0125b50a4ebbf1aed9321cp+0L, + 0x1.12abdc06c31cbfb92bad324d6f84p+0L, + 0x1.1429aaea92ddfb34101943b2588ep+0L, + 0x1.15a98c8a58e512480d573dd562aep+0L, + 0x1.172b83c7d517adcdf7c8c50eb162p+0L, + 0x1.18af9388c8de9bbbf70b9a3c269cp+0L, + 0x1.1a35beb6fcb753cb698f692d2038p+0L, + 0x1.1bbe084045cd39ab1e72b442810ep+0L, + 0x1.1d4873168b9aa7805b8028990be8p+0L, + 0x1.1ed5022fcd91cb8819ff61121fbep+0L, + 0x1.2063b88628cd63b8eeb0295093f6p+0L, + 0x1.21f49917ddc962552fd29294bc20p+0L, + 0x1.2387a6e75623866c1fadb1c159c0p+0L, + 0x1.251ce4fb2a63f3582ab7de9e9562p+0L, + 0x1.26b4565e27cdd257a673281d3068p+0L, + 0x1.284dfe1f5638096cf15cf03c9fa0p+0L, + 0x1.29e9df51fdee12c25d15f5a25022p+0L, + 0x1.2b87fd0dad98ffddea46538fca24p+0L, + 0x1.2d285a6e4030b40091d536d0733ep+0L, + 0x1.2ecafa93e2f5611ca0f45d5239a4p+0L, + 0x1.306fe0a31b7152de8d5a463063bep+0L, + 0x1.32170fc4cd8313539cf1c3009330p+0L, + 0x1.33c08b26416ff4c9c8610d96680ep+0L, + 0x1.356c55f929ff0c94623476373be4p+0L, + 0x1.371a7373aa9caa7145502f45452ap+0L, + 0x1.38cae6d05d86585a9cb0d9bed530p+0L, + 0x1.3a7db34e59ff6ea1bc9299e0a1fep+0L, + 0x1.3c32dc313a8e484001f228b58cf0p+0L, + 0x1.3dea64c12342235b41223e13d7eep+0L, + 0x1.3fa4504ac801ba0bf701aa417b9cp+0L, + 0x1.4160a21f72e29f84325b8f3dbacap+0L, + 0x1.431f5d950a896dc704439410b628p+0L, + 0x1.44e086061892d03136f409df0724p+0L, + 0x1.46a41ed1d005772512f459229f0ap+0L, + 0x1.486a2b5c13cd013c1a3b69062f26p+0L, + 0x1.4a32af0d7d3de672d8bcf46f99b4p+0L, + 0x1.4bfdad5362a271d4397afec42e36p+0L, + 0x1.4dcb299fddd0d63b36ef1a9e19dep+0L, + 0x1.4f9b2769d2ca6ad33d8b69aa0b8cp+0L, + 0x1.516daa2cf6641c112f52c84d6066p+0L, + 0x1.5342b569d4f81df0a83c49d86bf4p+0L, + 0x1.551a4ca5d920ec52ec620243540cp+0L, + 0x1.56f4736b527da66ecb004764e61ep+0L, + 0x1.58d12d497c7fd252bc2b7343d554p+0L, + 0x1.5ab07dd48542958c93015191e9a8p+0L, + 0x1.5c9268a5946b701c4b1b81697ed4p+0L, + 0x1.5e76f15ad21486e9be4c20399d12p+0L, + 0x1.605e1b976dc08b076f592a487066p+0L, + 0x1.6247eb03a5584b1f0fa06fd2d9eap+0L, + 0x1.6434634ccc31fc76f8714c4ee122p+0L, + 0x1.66238825522249127d9e29b92ea2p+0L, + 0x1.68155d44ca973081c57227b9f69ep+0L, +}; + +static const float eps[TBLSIZE] = { + -0x1.5c50p-101, + -0x1.5d00p-106, + 0x1.8e90p-102, + -0x1.5340p-103, + 0x1.1bd0p-102, + -0x1.4600p-105, + -0x1.7a40p-104, + 0x1.d590p-102, + -0x1.d590p-101, + 0x1.b100p-103, + -0x1.0d80p-105, + 0x1.6b00p-103, + -0x1.9f00p-105, + 0x1.c400p-103, + 0x1.e120p-103, + -0x1.c100p-104, + -0x1.9d20p-103, + 0x1.a800p-108, + 0x1.4c00p-106, + -0x1.9500p-106, + 0x1.6900p-105, + -0x1.29d0p-100, + 0x1.4c60p-103, + 0x1.13a0p-102, + -0x1.5b60p-103, + -0x1.1c40p-103, + 0x1.db80p-102, + 0x1.91a0p-102, + 0x1.dc00p-105, + 0x1.44c0p-104, + 0x1.9710p-102, + 0x1.8760p-103, + -0x1.a720p-103, + 0x1.ed20p-103, + -0x1.49c0p-102, + -0x1.e000p-111, + 0x1.86a0p-103, + 0x1.2b40p-103, + -0x1.b400p-108, + 0x1.1280p-99, + -0x1.02d8p-102, + -0x1.e3d0p-103, + -0x1.b080p-105, + -0x1.f100p-107, + -0x1.16c0p-105, + -0x1.1190p-103, + -0x1.a7d2p-100, + 0x1.3450p-103, + -0x1.67c0p-105, + 0x1.4b80p-104, + -0x1.c4e0p-103, + 0x1.6000p-108, + -0x1.3f60p-105, + 0x1.93f0p-104, + 0x1.5fe0p-105, + 0x1.6f80p-107, + -0x1.7600p-106, + 0x1.21e0p-106, + -0x1.3a40p-106, + -0x1.40c0p-104, + -0x1.9860p-105, + -0x1.5d40p-108, + -0x1.1d70p-106, + 0x1.2760p-105, + 0x0.0000p+0, + 0x1.21e2p-104, + -0x1.9520p-108, + -0x1.5720p-106, + -0x1.4810p-106, + -0x1.be00p-109, + 0x1.0080p-105, + -0x1.5780p-108, + -0x1.d460p-105, + -0x1.6140p-105, + 0x1.4630p-104, + 0x1.ad50p-103, + 0x1.82e0p-105, + 0x1.1d3cp-101, + 0x1.6100p-107, + 0x1.ec30p-104, + 0x1.f200p-108, + 0x1.0b40p-103, + 0x1.3660p-102, + 0x1.d9d0p-103, + -0x1.02d0p-102, + 0x1.b070p-103, + 0x1.b9c0p-104, + -0x1.01c0p-103, + -0x1.dfe0p-103, + 0x1.1b60p-104, + -0x1.ae94p-101, + -0x1.3340p-104, + 0x1.b3d8p-102, + -0x1.6e40p-105, + -0x1.3670p-103, + 0x1.c140p-104, + 0x1.1840p-101, + 0x1.1ab0p-102, + -0x1.a400p-104, + 0x1.1f00p-104, + -0x1.7180p-103, + 0x1.4ce0p-102, + 0x1.9200p-107, + -0x1.54c0p-103, + 0x1.1b80p-105, + -0x1.1828p-101, + 0x1.5720p-102, + -0x1.a060p-100, + 0x1.9160p-102, + 0x1.a280p-104, + 0x1.3400p-107, + 0x1.2b20p-102, + 0x1.7800p-108, + 0x1.cfd0p-101, + 0x1.2ef0p-102, + -0x1.2760p-99, + 0x1.b380p-104, + 0x1.0048p-101, + -0x1.60b0p-102, + 0x1.a1ccp-100, + -0x1.a640p-104, + -0x1.08a0p-101, + 0x1.7e60p-102, + 0x1.22c0p-103, + -0x1.7200p-106, + 0x1.f0f0p-102, + 0x1.eb4ep-99, + 0x1.c6e0p-103, +}; + +/* + * exp2l(x): compute the base 2 exponential of x + * + * Accuracy: Peak error < 0.502 ulp. + * + * Method: (accurate tables) + * + * Reduce x: + * x = 2**k + y, for integer k and |y| <= 1/2. + * Thus we have exp2(x) = 2**k * exp2(y). + * + * Reduce y: + * y = i/TBLSIZE + z - eps[i] for integer i near y * TBLSIZE. + * Thus we have exp2(y) = exp2(i/TBLSIZE) * exp2(z - eps[i]), + * with |z - eps[i]| <= 2**-8 + 2**-98 for the table used. + * + * We compute exp2(i/TBLSIZE) via table lookup and exp2(z - eps[i]) via + * a degree-10 minimax polynomial with maximum error under 2**-120. + * The values in exp2t[] and eps[] are chosen such that + * exp2t[i] = exp2(i/TBLSIZE + eps[i]), and eps[i] is a small offset such + * that exp2t[i] is accurate to 2**-122. + * + * Note that the range of i is +-TBLSIZE/2, so we actually index the tables + * by i0 = i + TBLSIZE/2. + * + * This method is due to Gal, with many details due to Gal and Bachelis: + * + * Gal, S. and Bachelis, B. An Accurate Elementary Mathematical Library + * for the IEEE Floating Point Standard. TOMS 17(1), 26-46 (1991). + */ +long double +exp2l(long double x) +{ + union IEEEl2bits u, v; + long double r, t, twopk, twopkp10000, z; + uint32_t hx, ix, i0; + int k; + + u.e = x; + + /* Filter out exceptional cases. */ + hx = u.xbits.expsign; + ix = hx & EXPMASK; + if (ix >= BIAS + 14) { /* |x| >= 16384 */ + if (ix == BIAS + LDBL_MAX_EXP) { + if (u.xbits.manh != 0 + || u.xbits.manl != 0 + || (hx & 0x8000) == 0) + return (x + x); /* x is NaN or +Inf */ + else + return (0.0); /* x is -Inf */ + } + if (x >= 16384) + return (huge * huge); /* overflow */ + if (x <= -16495) + return (twom10000 * twom10000); /* underflow */ + } else if (ix <= BIAS - 115) { /* |x| < 0x1p-115 */ + return (1.0 + x); + } + + /* + * Reduce x, computing z, i0, and k. The low bits of x + redux + * contain the 16-bit integer part of the exponent (k) followed by + * TBLBITS fractional bits (i0). We use bit tricks to extract these + * as integers, then set z to the remainder. + * + * Example: Suppose x is 0xabc.123456p0 and TBLBITS is 8. + * Then the low-order word of x + redux is 0x000abc12, + * We split this into k = 0xabc and i0 = 0x12 (adjusted to + * index into the table), then we compute z = 0x0.003456p0. + * + * XXX If the exponent is negative, the computation of k depends on + * '>>' doing sign extension. + */ + u.e = x + redux; + i0 = (u.bits.manl & 0xffffffff) + TBLSIZE / 2; + k = (int)i0 >> TBLBITS; + i0 = i0 & (TBLSIZE - 1); + u.e -= redux; + z = x - u.e; + v.xbits.manh = 0; + v.xbits.manl = 0; + if (k >= LDBL_MIN_EXP) { + v.xbits.expsign = LDBL_MAX_EXP - 1 + k; + twopk = v.e; + } else { + v.xbits.expsign = LDBL_MAX_EXP - 1 + k + 10000; + twopkp10000 = v.e; + } + + /* Compute r = exp2(y) = exp2t[i0] * p(z - eps[i]). */ + t = tbl[i0]; /* exp2t[i0] */ + z -= eps[i0]; /* eps[i0] */ + r = t + t * z * (P1 + z * (P2 + z * (P3 + z * (P4 + z * (P5 + z * (P6 + + z * (P7 + z * (P8 + z * (P9 + z * P10))))))))); + + /* Scale by 2**k. */ + if(k >= LDBL_MIN_EXP) { + if (k == LDBL_MAX_EXP) + return (r * 2.0 * 0x1p16383L); + return (r * twopk); + } else { + return (r * twopkp10000 * twom10000); + } +} diff --git a/newlib/libm/ld128/s_expl.c b/newlib/libm/ld128/s_expl.c new file mode 100644 index 0000000000..29fcda3505 --- /dev/null +++ b/newlib/libm/ld128/s_expl.c @@ -0,0 +1,326 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2009-2013 Steven G. Kargl + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice unmodified, this list of conditions, and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Optimized by Bruce D. Evans. + */ + +#include +__FBSDID("$FreeBSD$"); + +/* + * ld128 version of s_expl.c. See ../ld80/s_expl.c for most comments. + */ + +#include + +#include "../ld/fpmath.h" +#include "math.h" +#include "../ld/math_private.h" +#include "k_expl.h" + +/* XXX Prevent compilers from erroneously constant folding these: */ +static const volatile long double +huge = 0x1p10000L, +tiny = 0x1p-10000L; + +static const long double +twom10000 = 0x1p-10000L; + +static const long double +/* log(2**16384 - 0.5) rounded towards zero: */ +/* log(2**16384 - 0.5 + 1) rounded towards zero for expm1l() is the same: */ +o_threshold = 11356.523406294143949491931077970763428L, +/* log(2**(-16381-64-1)) rounded towards zero: */ +u_threshold = -11433.462743336297878837243843452621503L; + +long double +expl(long double x) +{ + union IEEEl2bits u; + long double hi, lo, t, twopk; + int k; + uint16_t hx, ix; + + DOPRINT_START(&x); + + /* Filter out exceptional cases. */ + u.e = x; + hx = u.xbits.expsign; + ix = hx & 0x7fff; + if (ix >= BIAS + 13) { /* |x| >= 8192 or x is NaN */ + if (ix == BIAS + LDBL_MAX_EXP) { + if (hx & 0x8000) /* x is -Inf or -NaN */ + RETURNP(-1 / x); + RETURNP(x + x); /* x is +Inf or +NaN */ + } + if (x > o_threshold) + RETURNP(huge * huge); + if (x < u_threshold) + RETURNP(tiny * tiny); + } else if (ix < BIAS - 114) { /* |x| < 0x1p-114 */ + RETURN2P(1, x); /* 1 with inexact iff x != 0 */ + } + + ENTERI(); + + twopk = 1; + __k_expl(x, &hi, &lo, &k); + t = SUM2P(hi, lo); + + /* Scale by 2**k. */ + /* + * XXX sparc64 multiplication was so slow that scalbnl() is faster, + * but performance on aarch64 and riscv hasn't yet been quantified. + */ + if (k >= LDBL_MIN_EXP) { + if (k == LDBL_MAX_EXP) + RETURNI(t * 2 * 0x1p16383L); + SET_LDBL_EXPSIGN(twopk, BIAS + k); + RETURNI(t * twopk); + } else { + SET_LDBL_EXPSIGN(twopk, BIAS + k + 10000); + RETURNI(t * twopk * twom10000); + } +} + +/* + * Our T1 and T2 are chosen to be approximately the points where method + * A and method B have the same accuracy. Tang's T1 and T2 are the + * points where method A's accuracy changes by a full bit. For Tang, + * this drop in accuracy makes method A immediately less accurate than + * method B, but our larger INTERVALS makes method A 2 bits more + * accurate so it remains the most accurate method significantly + * closer to the origin despite losing the full bit in our extended + * range for it. + * + * Split the interval [T1, T2] into two intervals [T1, T3] and [T3, T2]. + * Setting T3 to 0 would require the |x| < 0x1p-113 condition to appear + * in both subintervals, so set T3 = 2**-5, which places the condition + * into the [T1, T3] interval. + * + * XXX we now do this more to (partially) balance the number of terms + * in the C and D polys than to avoid checking the condition in both + * intervals. + * + * XXX these micro-optimizations are excessive. + */ +static const double +T1 = -0.1659, /* ~-30.625/128 * log(2) */ +T2 = 0.1659, /* ~30.625/128 * log(2) */ +T3 = 0.03125; + +/* + * Domain [-0.1659, 0.03125], range ~[2.9134e-44, 1.8404e-37]: + * |(exp(x)-1-x-x**2/2)/x - p(x)| < 2**-122.03 + * + * XXX none of the long double C or D coeffs except C10 is correctly printed. + * If you re-print their values in %.35Le format, the result is always + * different. For example, the last 2 digits in C3 should be 59, not 67. + * 67 is apparently from rounding an extra-precision value to 36 decimal + * places. + */ +static const long double +C3 = 1.66666666666666666666666666666666667e-1L, +C4 = 4.16666666666666666666666666666666645e-2L, +C5 = 8.33333333333333333333333333333371638e-3L, +C6 = 1.38888888888888888888888888891188658e-3L, +C7 = 1.98412698412698412698412697235950394e-4L, +C8 = 2.48015873015873015873015112487849040e-5L, +C9 = 2.75573192239858906525606685484412005e-6L, +C10 = 2.75573192239858906612966093057020362e-7L, +C11 = 2.50521083854417203619031960151253944e-8L, +C12 = 2.08767569878679576457272282566520649e-9L, +C13 = 1.60590438367252471783548748824255707e-10L; + +/* + * XXX this has 1 more coeff than needed. + * XXX can start the double coeffs but not the double mults at C10. + * With my coeffs (C10-C17 double; s = best_s): + * Domain [-0.1659, 0.03125], range ~[-1.1976e-37, 1.1976e-37]: + * |(exp(x)-1-x-x**2/2)/x - p(x)| ~< 2**-122.65 + */ +static const double +C14 = 1.1470745580491932e-11, /* 0x1.93974a81dae30p-37 */ +C15 = 7.6471620181090468e-13, /* 0x1.ae7f3820adab1p-41 */ +C16 = 4.7793721460260450e-14, /* 0x1.ae7cd18a18eacp-45 */ +C17 = 2.8074757356658877e-15, /* 0x1.949992a1937d9p-49 */ +C18 = 1.4760610323699476e-16; /* 0x1.545b43aabfbcdp-53 */ + +/* + * Domain [0.03125, 0.1659], range ~[-2.7676e-37, -1.0367e-38]: + * |(exp(x)-1-x-x**2/2)/x - p(x)| < 2**-121.44 + */ +static const long double +D3 = 1.66666666666666666666666666666682245e-1L, +D4 = 4.16666666666666666666666666634228324e-2L, +D5 = 8.33333333333333333333333364022244481e-3L, +D6 = 1.38888888888888888888887138722762072e-3L, +D7 = 1.98412698412698412699085805424661471e-4L, +D8 = 2.48015873015873015687993712101479612e-5L, +D9 = 2.75573192239858944101036288338208042e-6L, +D10 = 2.75573192239853161148064676533754048e-7L, +D11 = 2.50521083855084570046480450935267433e-8L, +D12 = 2.08767569819738524488686318024854942e-9L, +D13 = 1.60590442297008495301927448122499313e-10L; + +/* + * XXX this has 1 more coeff than needed. + * XXX can start the double coeffs but not the double mults at D11. + * With my coeffs (D11-D16 double): + * Domain [0.03125, 0.1659], range ~[-1.1980e-37, 1.1980e-37]: + * |(exp(x)-1-x-x**2/2)/x - p(x)| ~< 2**-122.65 + */ +static const double +D14 = 1.1470726176204336e-11, /* 0x1.93971dc395d9ep-37 */ +D15 = 7.6478532249581686e-13, /* 0x1.ae892e3D16fcep-41 */ +D16 = 4.7628892832607741e-14, /* 0x1.ad00Dfe41feccp-45 */ +D17 = 3.0524857220358650e-15; /* 0x1.D7e8d886Df921p-49 */ + +long double +expm1l(long double x) +{ + union IEEEl2bits u, v; + long double hx2_hi, hx2_lo, q, r, r1, t, twomk, twopk, x_hi; + long double x_lo, x2; + double dr, dx, fn, r2; + int k, n, n2; + uint16_t hx, ix; + + DOPRINT_START(&x); + + /* Filter out exceptional cases. */ + u.e = x; + hx = u.xbits.expsign; + ix = hx & 0x7fff; + if (ix >= BIAS + 7) { /* |x| >= 128 or x is NaN */ + if (ix == BIAS + LDBL_MAX_EXP) { + if (hx & 0x8000) /* x is -Inf or -NaN */ + RETURNP(-1 / x - 1); + RETURNP(x + x); /* x is +Inf or +NaN */ + } + if (x > o_threshold) + RETURNP(huge * huge); + /* + * expm1l() never underflows, but it must avoid + * unrepresentable large negative exponents. We used a + * much smaller threshold for large |x| above than in + * expl() so as to handle not so large negative exponents + * in the same way as large ones here. + */ + if (hx & 0x8000) /* x <= -128 */ + RETURN2P(tiny, -1); /* good for x < -114ln2 - eps */ + } + + ENTERI(); + + if (T1 < x && x < T2) { + x2 = x * x; + dx = x; + + if (x < T3) { + if (ix < BIAS - 113) { /* |x| < 0x1p-113 */ + /* x (rounded) with inexact if x != 0: */ + RETURNPI(x == 0 ? x : + (0x1p200 * x + fabsl(x)) * 0x1p-200); + } + q = x * x2 * C3 + x2 * x2 * (C4 + x * (C5 + x * (C6 + + x * (C7 + x * (C8 + x * (C9 + x * (C10 + + x * (C11 + x * (C12 + x * (C13 + + dx * (C14 + dx * (C15 + dx * (C16 + + dx * (C17 + dx * C18)))))))))))))); + } else { + q = x * x2 * D3 + x2 * x2 * (D4 + x * (D5 + x * (D6 + + x * (D7 + x * (D8 + x * (D9 + x * (D10 + + x * (D11 + x * (D12 + x * (D13 + + dx * (D14 + dx * (D15 + dx * (D16 + + dx * D17))))))))))))); + } + + x_hi = (float)x; + x_lo = x - x_hi; + hx2_hi = x_hi * x_hi / 2; + hx2_lo = x_lo * (x + x_hi) / 2; + if (ix >= BIAS - 7) + RETURN2PI(hx2_hi + x_hi, hx2_lo + x_lo + q); + else + RETURN2PI(x, hx2_lo + q + hx2_hi); + } + + /* Reduce x to (k*ln2 + endpoint[n2] + r1 + r2). */ + fn = rnint((double)x * INV_L); + n = irint(fn); + n2 = (unsigned)n % INTERVALS; + k = n >> LOG2_INTERVALS; + r1 = x - fn * L1; + r2 = fn * -L2; + r = r1 + r2; + + /* Prepare scale factor. */ + v.e = 1; + v.xbits.expsign = BIAS + k; + twopk = v.e; + + /* + * Evaluate lower terms of + * expl(endpoint[n2] + r1 + r2) = tbl[n2] * expl(r1 + r2). + */ + dr = r; + q = r2 + r * r * (A2 + r * (A3 + r * (A4 + r * (A5 + r * (A6 + + dr * (A7 + dr * (A8 + dr * (A9 + dr * A10)))))))); + + t = tbl[n2].lo + tbl[n2].hi; + + if (k == 0) { + t = SUM2P(tbl[n2].hi - 1, tbl[n2].lo * (r1 + 1) + t * q + + tbl[n2].hi * r1); + RETURNI(t); + } + if (k == -1) { + t = SUM2P(tbl[n2].hi - 2, tbl[n2].lo * (r1 + 1) + t * q + + tbl[n2].hi * r1); + RETURNI(t / 2); + } + if (k < -7) { + t = SUM2P(tbl[n2].hi, tbl[n2].lo + t * (q + r1)); + RETURNI(t * twopk - 1); + } + if (k > 2 * LDBL_MANT_DIG - 1) { + t = SUM2P(tbl[n2].hi, tbl[n2].lo + t * (q + r1)); + if (k == LDBL_MAX_EXP) + RETURNI(t * 2 * 0x1p16383L - 1); + RETURNI(t * twopk - 1); + } + + v.xbits.expsign = BIAS - k; + twomk = v.e; + + if (k > LDBL_MANT_DIG - 1) + t = SUM2P(tbl[n2].hi, tbl[n2].lo - twomk + t * (q + r1)); + else + t = SUM2P(tbl[n2].hi - twomk, tbl[n2].lo + t * (q + r1)); + RETURNI(t * twopk); +} diff --git a/newlib/libm/ld128/s_logl.c b/newlib/libm/ld128/s_logl.c new file mode 100644 index 0000000000..3b00d47ad4 --- /dev/null +++ b/newlib/libm/ld128/s_logl.c @@ -0,0 +1,740 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2007-2013 Bruce D. Evans + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice unmodified, this list of conditions, and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +/** + * Implementation of the natural logarithm of x for 128-bit format. + * + * First decompose x into its base 2 representation: + * + * log(x) = log(X * 2**k), where X is in [1, 2) + * = log(X) + k * log(2). + * + * Let X = X_i + e, where X_i is the center of one of the intervals + * [-1.0/256, 1.0/256), [1.0/256, 3.0/256), .... [2.0-1.0/256, 2.0+1.0/256) + * and X is in this interval. Then + * + * log(X) = log(X_i + e) + * = log(X_i * (1 + e / X_i)) + * = log(X_i) + log(1 + e / X_i). + * + * The values log(X_i) are tabulated below. Let d = e / X_i and use + * + * log(1 + d) = p(d) + * + * where p(d) = d - 0.5*d*d + ... is a special minimax polynomial of + * suitably high degree. + * + * To get sufficiently small roundoff errors, k * log(2), log(X_i), and + * sometimes (if |k| is not large) the first term in p(d) must be evaluated + * and added up in extra precision. Extra precision is not needed for the + * rest of p(d). In the worst case when k = 0 and log(X_i) is 0, the final + * error is controlled mainly by the error in the second term in p(d). The + * error in this term itself is at most 0.5 ulps from the d*d operation in + * it. The error in this term relative to the first term is thus at most + * 0.5 * |-0.5| * |d| < 1.0/1024 ulps. We aim for an accumulated error of + * at most twice this at the point of the final rounding step. Thus the + * final error should be at most 0.5 + 1.0/512 = 0.5020 ulps. Exhaustive + * testing of a float variant of this function showed a maximum final error + * of 0.5008 ulps. Non-exhaustive testing of a double variant of this + * function showed a maximum final error of 0.5078 ulps (near 1+1.0/256). + * + * We made the maximum of |d| (and thus the total relative error and the + * degree of p(d)) small by using a large number of intervals. Using + * centers of intervals instead of endpoints reduces this maximum by a + * factor of 2 for a given number of intervals. p(d) is special only + * in beginning with the Taylor coefficients 0 + 1*d, which tends to happen + * naturally. The most accurate minimax polynomial of a given degree might + * be different, but then we wouldn't want it since we would have to do + * extra work to avoid roundoff error (especially for P0*d instead of d). + */ + +#ifdef DEBUG +#include +#include +#endif + +#include "../ld/fpmath.h" +#include "math.h" +#ifndef NO_STRUCT_RETURN +#define STRUCT_RETURN +#endif +#include "../ld/math_private.h" + +#if !defined(NO_UTAB) && !defined(NO_UTABL) +#define USE_UTAB +#endif + +/* + * Domain [-0.005280, 0.004838], range ~[-1.1577e-37, 1.1582e-37]: + * |log(1 + d)/d - p(d)| < 2**-122.7 + */ +static const long double +P2 = -0.5L, +P3 = 3.33333333333333333333333333333233795e-1L, /* 0x15555555555555555555555554d42.0p-114L */ +P4 = -2.49999999999999999999999999941139296e-1L, /* -0x1ffffffffffffffffffffffdab14e.0p-115L */ +P5 = 2.00000000000000000000000085468039943e-1L, /* 0x19999999999999999999a6d3567f4.0p-115L */ +P6 = -1.66666666666666666666696142372698408e-1L, /* -0x15555555555555555567267a58e13.0p-115L */ +P7 = 1.42857142857142857119522943477166120e-1L, /* 0x1249249249249248ed79a0ae434de.0p-115L */ +P8 = -1.24999999999999994863289015033581301e-1L; /* -0x1fffffffffffffa13e91765e46140.0p-116L */ +/* Double precision gives ~ 53 + log2(P9 * max(|d|)**8) ~= 120 bits. */ +static const double +P9 = 1.1111111111111401e-1, /* 0x1c71c71c71c7ed.0p-56 */ +P10 = -1.0000000000040135e-1, /* -0x199999999a0a92.0p-56 */ +P11 = 9.0909090728136258e-2, /* 0x1745d173962111.0p-56 */ +P12 = -8.3333318851855284e-2, /* -0x1555551722c7a3.0p-56 */ +P13 = 7.6928634666404178e-2, /* 0x13b1985204a4ae.0p-56 */ +P14 = -7.1626810078462499e-2; /* -0x12562276cdc5d0.0p-56 */ + +static volatile const double zero = 0; + +#define INTERVALS 128 +#define LOG2_INTERVALS 7 +#define TSIZE (INTERVALS + 1) +#define G(i) (T[(i)].G) +#define F_hi(i) (T[(i)].F_hi) +#define F_lo(i) (T[(i)].F_lo) +#define ln2_hi F_hi(TSIZE - 1) +#define ln2_lo F_lo(TSIZE - 1) +#define E(i) (U[(i)].E) +#define H(i) (U[(i)].H) + +static const struct { + float G; /* 1/(1 + i/128) rounded to 8/9 bits */ + float F_hi; /* log(1 / G_i) rounded (see below) */ + /* The compiler will insert 8 bytes of padding here. */ + long double F_lo; /* next 113 bits for log(1 / G_i) */ +} T[TSIZE] = { + /* + * ln2_hi and each F_hi(i) are rounded to a number of bits that + * makes F_hi(i) + dk*ln2_hi exact for all i and all dk. + * + * The last entry (for X just below 2) is used to define ln2_hi + * and ln2_lo, to ensure that F_hi(i) and F_lo(i) cancel exactly + * with dk*ln2_hi and dk*ln2_lo, respectively, when dk = -1. + * This is needed for accuracy when x is just below 1. (To avoid + * special cases, such x are "reduced" strangely to X just below + * 2 and dk = -1, and then the exact cancellation is needed + * because any the error from any non-exactness would be too + * large). + * + * The relevant range of dk is [-16445, 16383]. The maximum number + * of bits in F_hi(i) that works is very dependent on i but has + * a minimum of 93. We only need about 12 bits in F_hi(i) for + * it to provide enough extra precision. + * + * We round F_hi(i) to 24 bits so that it can have type float, + * mainly to minimize the size of the table. Using all 24 bits + * in a float for it automatically satisfies the above constraints. + */ + 0x800000.0p-23, 0, 0, + 0xfe0000.0p-24, 0x8080ac.0p-30, -0x14ee431dae6674afa0c4bfe16e8fd.0p-144L, + 0xfc0000.0p-24, 0x8102b3.0p-29, -0x1db29ee2d83717be918e1119642ab.0p-144L, + 0xfa0000.0p-24, 0xc24929.0p-29, 0x1191957d173697cf302cc9476f561.0p-143L, + 0xf80000.0p-24, 0x820aec.0p-28, 0x13ce8888e02e78eba9b1113bc1c18.0p-142L, + 0xf60000.0p-24, 0xa33577.0p-28, -0x17a4382ce6eb7bfa509bec8da5f22.0p-142L, + 0xf48000.0p-24, 0xbc42cb.0p-28, -0x172a21161a107674986dcdca6709c.0p-143L, + 0xf30000.0p-24, 0xd57797.0p-28, -0x1e09de07cb958897a3ea46e84abb3.0p-142L, + 0xf10000.0p-24, 0xf7518e.0p-28, 0x1ae1eec1b036c484993c549c4bf40.0p-151L, + 0xef0000.0p-24, 0x8cb9df.0p-27, -0x1d7355325d560d9e9ab3d6ebab580.0p-141L, + 0xed8000.0p-24, 0x999ec0.0p-27, -0x1f9f02d256d5037108f4ec21e48cd.0p-142L, + 0xec0000.0p-24, 0xa6988b.0p-27, -0x16fc0a9d12c17a70f7a684c596b12.0p-143L, + 0xea0000.0p-24, 0xb80698.0p-27, 0x15d581c1e8da99ded322fb08b8462.0p-141L, + 0xe80000.0p-24, 0xc99af3.0p-27, -0x1535b3ba8f150ae09996d7bb4653e.0p-143L, + 0xe70000.0p-24, 0xd273b2.0p-27, 0x163786f5251aefe0ded34c8318f52.0p-145L, + 0xe50000.0p-24, 0xe442c0.0p-27, 0x1bc4b2368e32d56699c1799a244d4.0p-144L, + 0xe38000.0p-24, 0xf1b83f.0p-27, 0x1c6090f684e6766abceccab1d7174.0p-141L, + 0xe20000.0p-24, 0xff448a.0p-27, -0x1890aa69ac9f4215f93936b709efb.0p-142L, + 0xe08000.0p-24, 0x8673f6.0p-26, 0x1b9985194b6affd511b534b72a28e.0p-140L, + 0xdf0000.0p-24, 0x8d515c.0p-26, -0x1dc08d61c6ef1d9b2ef7e68680598.0p-143L, + 0xdd8000.0p-24, 0x943a9e.0p-26, -0x1f72a2dac729b3f46662238a9425a.0p-142L, + 0xdc0000.0p-24, 0x9b2fe6.0p-26, -0x1fd4dfd3a0afb9691aed4d5e3df94.0p-140L, + 0xda8000.0p-24, 0xa2315d.0p-26, -0x11b26121629c46c186384993e1c93.0p-142L, + 0xd90000.0p-24, 0xa93f2f.0p-26, 0x1286d633e8e5697dc6a402a56fce1.0p-141L, + 0xd78000.0p-24, 0xb05988.0p-26, 0x16128eba9367707ebfa540e45350c.0p-144L, + 0xd60000.0p-24, 0xb78094.0p-26, 0x16ead577390d31ef0f4c9d43f79b2.0p-140L, + 0xd50000.0p-24, 0xbc4c6c.0p-26, 0x151131ccf7c7b75e7d900b521c48d.0p-141L, + 0xd38000.0p-24, 0xc3890a.0p-26, -0x115e2cd714bd06508aeb00d2ae3e9.0p-140L, + 0xd20000.0p-24, 0xcad2d7.0p-26, -0x1847f406ebd3af80485c2f409633c.0p-142L, + 0xd10000.0p-24, 0xcfb620.0p-26, 0x1c2259904d686581799fbce0b5f19.0p-141L, + 0xcf8000.0p-24, 0xd71653.0p-26, 0x1ece57a8d5ae54f550444ecf8b995.0p-140L, + 0xce0000.0p-24, 0xde843a.0p-26, -0x1f109d4bc4595412b5d2517aaac13.0p-141L, + 0xcd0000.0p-24, 0xe37fde.0p-26, 0x1bc03dc271a74d3a85b5b43c0e727.0p-141L, + 0xcb8000.0p-24, 0xeb050c.0p-26, -0x1bf2badc0df841a71b79dd5645b46.0p-145L, + 0xca0000.0p-24, 0xf29878.0p-26, -0x18efededd89fbe0bcfbe6d6db9f66.0p-147L, + 0xc90000.0p-24, 0xf7ad6f.0p-26, 0x1373ff977baa6911c7bafcb4d84fb.0p-141L, + 0xc80000.0p-24, 0xfcc8e3.0p-26, 0x196766f2fb328337cc050c6d83b22.0p-140L, + 0xc68000.0p-24, 0x823f30.0p-25, 0x19bd076f7c434e5fcf1a212e2a91e.0p-139L, + 0xc58000.0p-24, 0x84d52c.0p-25, -0x1a327257af0f465e5ecab5f2a6f81.0p-139L, + 0xc40000.0p-24, 0x88bc74.0p-25, 0x113f23def19c5a0fe396f40f1dda9.0p-141L, + 0xc30000.0p-24, 0x8b5ae6.0p-25, 0x1759f6e6b37de945a049a962e66c6.0p-139L, + 0xc20000.0p-24, 0x8dfccb.0p-25, 0x1ad35ca6ed5147bdb6ddcaf59c425.0p-141L, + 0xc10000.0p-24, 0x90a22b.0p-25, 0x1a1d71a87deba46bae9827221dc98.0p-139L, + 0xbf8000.0p-24, 0x94a0d8.0p-25, -0x139e5210c2b730e28aba001a9b5e0.0p-140L, + 0xbe8000.0p-24, 0x974f16.0p-25, -0x18f6ebcff3ed72e23e13431adc4a5.0p-141L, + 0xbd8000.0p-24, 0x9a00f1.0p-25, -0x1aa268be39aab7148e8d80caa10b7.0p-139L, + 0xbc8000.0p-24, 0x9cb672.0p-25, -0x14c8815839c5663663d15faed7771.0p-139L, + 0xbb0000.0p-24, 0xa0cda1.0p-25, 0x1eaf46390dbb2438273918db7df5c.0p-141L, + 0xba0000.0p-24, 0xa38c6e.0p-25, 0x138e20d831f698298adddd7f32686.0p-141L, + 0xb90000.0p-24, 0xa64f05.0p-25, -0x1e8d3c41123615b147a5d47bc208f.0p-142L, + 0xb80000.0p-24, 0xa91570.0p-25, 0x1ce28f5f3840b263acb4351104631.0p-140L, + 0xb70000.0p-24, 0xabdfbb.0p-25, -0x186e5c0a42423457e22d8c650b355.0p-139L, + 0xb60000.0p-24, 0xaeadef.0p-25, -0x14d41a0b2a08a465dc513b13f567d.0p-143L, + 0xb50000.0p-24, 0xb18018.0p-25, 0x16755892770633947ffe651e7352f.0p-139L, + 0xb40000.0p-24, 0xb45642.0p-25, -0x16395ebe59b15228bfe8798d10ff0.0p-142L, + 0xb30000.0p-24, 0xb73077.0p-25, 0x1abc65c8595f088b61a335f5b688c.0p-140L, + 0xb20000.0p-24, 0xba0ec4.0p-25, -0x1273089d3dad88e7d353e9967d548.0p-139L, + 0xb10000.0p-24, 0xbcf133.0p-25, 0x10f9f67b1f4bbf45de06ecebfaf6d.0p-139L, + 0xb00000.0p-24, 0xbfd7d2.0p-25, -0x109fab904864092b34edda19a831e.0p-140L, + 0xaf0000.0p-24, 0xc2c2ac.0p-25, -0x1124680aa43333221d8a9b475a6ba.0p-139L, + 0xae8000.0p-24, 0xc439b3.0p-25, -0x1f360cc4710fbfe24b633f4e8d84d.0p-140L, + 0xad8000.0p-24, 0xc72afd.0p-25, -0x132d91f21d89c89c45003fc5d7807.0p-140L, + 0xac8000.0p-24, 0xca20a2.0p-25, -0x16bf9b4d1f8da8002f2449e174504.0p-139L, + 0xab8000.0p-24, 0xcd1aae.0p-25, 0x19deb5ce6a6a8717d5626e16acc7d.0p-141L, + 0xaa8000.0p-24, 0xd0192f.0p-25, 0x1a29fb48f7d3ca87dabf351aa41f4.0p-139L, + 0xaa0000.0p-24, 0xd19a20.0p-25, 0x1127d3c6457f9d79f51dcc73014c9.0p-141L, + 0xa90000.0p-24, 0xd49f6a.0p-25, -0x1ba930e486a0ac42d1bf9199188e7.0p-141L, + 0xa80000.0p-24, 0xd7a94b.0p-25, -0x1b6e645f31549dd1160bcc45c7e2c.0p-139L, + 0xa70000.0p-24, 0xdab7d0.0p-25, 0x1118a425494b610665377f15625b6.0p-140L, + 0xa68000.0p-24, 0xdc40d5.0p-25, 0x1966f24d29d3a2d1b2176010478be.0p-140L, + 0xa58000.0p-24, 0xdf566d.0p-25, -0x1d8e52eb2248f0c95dd83626d7333.0p-142L, + 0xa48000.0p-24, 0xe270ce.0p-25, -0x1ee370f96e6b67ccb006a5b9890ea.0p-140L, + 0xa40000.0p-24, 0xe3ffce.0p-25, 0x1d155324911f56db28da4d629d00a.0p-140L, + 0xa30000.0p-24, 0xe72179.0p-25, -0x1fe6e2f2f867d8f4d60c713346641.0p-140L, + 0xa20000.0p-24, 0xea4812.0p-25, 0x1b7be9add7f4d3b3d406b6cbf3ce5.0p-140L, + 0xa18000.0p-24, 0xebdd3d.0p-25, 0x1b3cfb3f7511dd73692609040ccc2.0p-139L, + 0xa08000.0p-24, 0xef0b5b.0p-25, -0x1220de1f7301901b8ad85c25afd09.0p-139L, + 0xa00000.0p-24, 0xf0a451.0p-25, -0x176364c9ac81cc8a4dfb804de6867.0p-140L, + 0x9f0000.0p-24, 0xf3da16.0p-25, 0x1eed6b9aafac8d42f78d3e65d3727.0p-141L, + 0x9e8000.0p-24, 0xf576e9.0p-25, 0x1d593218675af269647b783d88999.0p-139L, + 0x9d8000.0p-24, 0xf8b47c.0p-25, -0x13e8eb7da053e063714615f7cc91d.0p-144L, + 0x9d0000.0p-24, 0xfa553f.0p-25, 0x1c063259bcade02951686d5373aec.0p-139L, + 0x9c0000.0p-24, 0xfd9ac5.0p-25, 0x1ef491085fa3c1649349630531502.0p-139L, + 0x9b8000.0p-24, 0xff3f8c.0p-25, 0x1d607a7c2b8c5320619fb9433d841.0p-139L, + 0x9a8000.0p-24, 0x814697.0p-24, -0x12ad3817004f3f0bdff99f932b273.0p-138L, + 0x9a0000.0p-24, 0x821b06.0p-24, -0x189fc53117f9e54e78103a2bc1767.0p-141L, + 0x990000.0p-24, 0x83c5f8.0p-24, 0x14cf15a048907b7d7f47ddb45c5a3.0p-139L, + 0x988000.0p-24, 0x849c7d.0p-24, 0x1cbb1d35fb82873b04a9af1dd692c.0p-138L, + 0x978000.0p-24, 0x864ba6.0p-24, 0x1128639b814f9b9770d8cb6573540.0p-138L, + 0x970000.0p-24, 0x87244c.0p-24, 0x184733853300f002e836dfd47bd41.0p-139L, + 0x968000.0p-24, 0x87fdaa.0p-24, 0x109d23aef77dd5cd7cc94306fb3ff.0p-140L, + 0x958000.0p-24, 0x89b293.0p-24, -0x1a81ef367a59de2b41eeebd550702.0p-138L, + 0x950000.0p-24, 0x8a8e20.0p-24, -0x121ad3dbb2f45275c917a30df4ac9.0p-138L, + 0x948000.0p-24, 0x8b6a6a.0p-24, -0x1cfb981628af71a89df4e6df2e93b.0p-139L, + 0x938000.0p-24, 0x8d253a.0p-24, -0x1d21730ea76cfdec367828734cae5.0p-139L, + 0x930000.0p-24, 0x8e03c2.0p-24, 0x135cc00e566f76b87333891e0dec4.0p-138L, + 0x928000.0p-24, 0x8ee30d.0p-24, -0x10fcb5df257a263e3bf446c6e3f69.0p-140L, + 0x918000.0p-24, 0x90a3ee.0p-24, -0x16e171b15433d723a4c7380a448d8.0p-139L, + 0x910000.0p-24, 0x918587.0p-24, -0x1d050da07f3236f330972da2a7a87.0p-139L, + 0x908000.0p-24, 0x9267e7.0p-24, 0x1be03669a5268d21148c6002becd3.0p-139L, + 0x8f8000.0p-24, 0x942f04.0p-24, 0x10b28e0e26c336af90e00533323ba.0p-139L, + 0x8f0000.0p-24, 0x9513c3.0p-24, 0x1a1d820da57cf2f105a89060046aa.0p-138L, + 0x8e8000.0p-24, 0x95f950.0p-24, -0x19ef8f13ae3cf162409d8ea99d4c0.0p-139L, + 0x8e0000.0p-24, 0x96dfab.0p-24, -0x109e417a6e507b9dc10dac743ad7a.0p-138L, + 0x8d0000.0p-24, 0x98aed2.0p-24, 0x10d01a2c5b0e97c4990b23d9ac1f5.0p-139L, + 0x8c8000.0p-24, 0x9997a2.0p-24, -0x1d6a50d4b61ea74540bdd2aa99a42.0p-138L, + 0x8c0000.0p-24, 0x9a8145.0p-24, 0x1b3b190b83f9527e6aba8f2d783c1.0p-138L, + 0x8b8000.0p-24, 0x9b6bbf.0p-24, 0x13a69fad7e7abe7ba81c664c107e0.0p-138L, + 0x8b0000.0p-24, 0x9c5711.0p-24, -0x11cd12316f576aad348ae79867223.0p-138L, + 0x8a8000.0p-24, 0x9d433b.0p-24, 0x1c95c444b807a246726b304ccae56.0p-139L, + 0x898000.0p-24, 0x9f1e22.0p-24, -0x1b9c224ea698c2f9b47466d6123fe.0p-139L, + 0x890000.0p-24, 0xa00ce1.0p-24, 0x125ca93186cf0f38b4619a2483399.0p-141L, + 0x888000.0p-24, 0xa0fc80.0p-24, -0x1ee38a7bc228b3597043be78eaf49.0p-139L, + 0x880000.0p-24, 0xa1ed00.0p-24, -0x1a0db876613d204147dc69a07a649.0p-138L, + 0x878000.0p-24, 0xa2de62.0p-24, 0x193224e8516c008d3602a7b41c6e8.0p-139L, + 0x870000.0p-24, 0xa3d0a9.0p-24, 0x1fa28b4d2541aca7d5844606b2421.0p-139L, + 0x868000.0p-24, 0xa4c3d6.0p-24, 0x1c1b5760fb4571acbcfb03f16daf4.0p-138L, + 0x858000.0p-24, 0xa6acea.0p-24, 0x1fed5d0f65949c0a345ad743ae1ae.0p-140L, + 0x850000.0p-24, 0xa7a2d4.0p-24, 0x1ad270c9d749362382a7688479e24.0p-140L, + 0x848000.0p-24, 0xa899ab.0p-24, 0x199ff15ce532661ea9643a3a2d378.0p-139L, + 0x840000.0p-24, 0xa99171.0p-24, 0x1a19e15ccc45d257530a682b80490.0p-139L, + 0x838000.0p-24, 0xaa8a28.0p-24, -0x121a14ec532b35ba3e1f868fd0b5e.0p-140L, + 0x830000.0p-24, 0xab83d1.0p-24, 0x1aee319980bff3303dd481779df69.0p-139L, + 0x828000.0p-24, 0xac7e6f.0p-24, -0x18ffd9e3900345a85d2d86161742e.0p-140L, + 0x820000.0p-24, 0xad7a03.0p-24, -0x1e4db102ce29f79b026b64b42caa1.0p-140L, + 0x818000.0p-24, 0xae768f.0p-24, 0x17c35c55a04a82ab19f77652d977a.0p-141L, + 0x810000.0p-24, 0xaf7415.0p-24, 0x1448324047019b48d7b98c1cf7234.0p-138L, + 0x808000.0p-24, 0xb07298.0p-24, -0x1750ee3915a197e9c7359dd94152f.0p-138L, + 0x800000.0p-24, 0xb17218.0p-24, -0x105c610ca86c3898cff81a12a17e2.0p-141L, +}; + +#ifdef USE_UTAB +static const struct { + float H; /* 1 + i/INTERVALS (exact) */ + float E; /* H(i) * G(i) - 1 (exact) */ +} U[TSIZE] = { + 0x800000.0p-23, 0, + 0x810000.0p-23, -0x800000.0p-37, + 0x820000.0p-23, -0x800000.0p-35, + 0x830000.0p-23, -0x900000.0p-34, + 0x840000.0p-23, -0x800000.0p-33, + 0x850000.0p-23, -0xc80000.0p-33, + 0x860000.0p-23, -0xa00000.0p-36, + 0x870000.0p-23, 0x940000.0p-33, + 0x880000.0p-23, 0x800000.0p-35, + 0x890000.0p-23, -0xc80000.0p-34, + 0x8a0000.0p-23, 0xe00000.0p-36, + 0x8b0000.0p-23, 0x900000.0p-33, + 0x8c0000.0p-23, -0x800000.0p-35, + 0x8d0000.0p-23, -0xe00000.0p-33, + 0x8e0000.0p-23, 0x880000.0p-33, + 0x8f0000.0p-23, -0xa80000.0p-34, + 0x900000.0p-23, -0x800000.0p-35, + 0x910000.0p-23, 0x800000.0p-37, + 0x920000.0p-23, 0x900000.0p-35, + 0x930000.0p-23, 0xd00000.0p-35, + 0x940000.0p-23, 0xe00000.0p-35, + 0x950000.0p-23, 0xc00000.0p-35, + 0x960000.0p-23, 0xe00000.0p-36, + 0x970000.0p-23, -0x800000.0p-38, + 0x980000.0p-23, -0xc00000.0p-35, + 0x990000.0p-23, -0xd00000.0p-34, + 0x9a0000.0p-23, 0x880000.0p-33, + 0x9b0000.0p-23, 0xe80000.0p-35, + 0x9c0000.0p-23, -0x800000.0p-35, + 0x9d0000.0p-23, 0xb40000.0p-33, + 0x9e0000.0p-23, 0x880000.0p-34, + 0x9f0000.0p-23, -0xe00000.0p-35, + 0xa00000.0p-23, 0x800000.0p-33, + 0xa10000.0p-23, -0x900000.0p-36, + 0xa20000.0p-23, -0xb00000.0p-33, + 0xa30000.0p-23, -0xa00000.0p-36, + 0xa40000.0p-23, 0x800000.0p-33, + 0xa50000.0p-23, -0xf80000.0p-35, + 0xa60000.0p-23, 0x880000.0p-34, + 0xa70000.0p-23, -0x900000.0p-33, + 0xa80000.0p-23, -0x800000.0p-35, + 0xa90000.0p-23, 0x900000.0p-34, + 0xaa0000.0p-23, 0xa80000.0p-33, + 0xab0000.0p-23, -0xac0000.0p-34, + 0xac0000.0p-23, -0x800000.0p-37, + 0xad0000.0p-23, 0xf80000.0p-35, + 0xae0000.0p-23, 0xf80000.0p-34, + 0xaf0000.0p-23, -0xac0000.0p-33, + 0xb00000.0p-23, -0x800000.0p-33, + 0xb10000.0p-23, -0xb80000.0p-34, + 0xb20000.0p-23, -0x800000.0p-34, + 0xb30000.0p-23, -0xb00000.0p-35, + 0xb40000.0p-23, -0x800000.0p-35, + 0xb50000.0p-23, -0xe00000.0p-36, + 0xb60000.0p-23, -0x800000.0p-35, + 0xb70000.0p-23, -0xb00000.0p-35, + 0xb80000.0p-23, -0x800000.0p-34, + 0xb90000.0p-23, -0xb80000.0p-34, + 0xba0000.0p-23, -0x800000.0p-33, + 0xbb0000.0p-23, -0xac0000.0p-33, + 0xbc0000.0p-23, 0x980000.0p-33, + 0xbd0000.0p-23, 0xbc0000.0p-34, + 0xbe0000.0p-23, 0xe00000.0p-36, + 0xbf0000.0p-23, -0xb80000.0p-35, + 0xc00000.0p-23, -0x800000.0p-33, + 0xc10000.0p-23, 0xa80000.0p-33, + 0xc20000.0p-23, 0x900000.0p-34, + 0xc30000.0p-23, -0x800000.0p-35, + 0xc40000.0p-23, -0x900000.0p-33, + 0xc50000.0p-23, 0x820000.0p-33, + 0xc60000.0p-23, 0x800000.0p-38, + 0xc70000.0p-23, -0x820000.0p-33, + 0xc80000.0p-23, 0x800000.0p-33, + 0xc90000.0p-23, -0xa00000.0p-36, + 0xca0000.0p-23, -0xb00000.0p-33, + 0xcb0000.0p-23, 0x840000.0p-34, + 0xcc0000.0p-23, -0xd00000.0p-34, + 0xcd0000.0p-23, 0x800000.0p-33, + 0xce0000.0p-23, -0xe00000.0p-35, + 0xcf0000.0p-23, 0xa60000.0p-33, + 0xd00000.0p-23, -0x800000.0p-35, + 0xd10000.0p-23, 0xb40000.0p-33, + 0xd20000.0p-23, -0x800000.0p-35, + 0xd30000.0p-23, 0xaa0000.0p-33, + 0xd40000.0p-23, -0xe00000.0p-35, + 0xd50000.0p-23, 0x880000.0p-33, + 0xd60000.0p-23, -0xd00000.0p-34, + 0xd70000.0p-23, 0x9c0000.0p-34, + 0xd80000.0p-23, -0xb00000.0p-33, + 0xd90000.0p-23, -0x800000.0p-38, + 0xda0000.0p-23, 0xa40000.0p-33, + 0xdb0000.0p-23, -0xdc0000.0p-34, + 0xdc0000.0p-23, 0xc00000.0p-35, + 0xdd0000.0p-23, 0xca0000.0p-33, + 0xde0000.0p-23, -0xb80000.0p-34, + 0xdf0000.0p-23, 0xd00000.0p-35, + 0xe00000.0p-23, 0xc00000.0p-33, + 0xe10000.0p-23, -0xf40000.0p-34, + 0xe20000.0p-23, 0x800000.0p-37, + 0xe30000.0p-23, 0x860000.0p-33, + 0xe40000.0p-23, -0xc80000.0p-33, + 0xe50000.0p-23, -0xa80000.0p-34, + 0xe60000.0p-23, 0xe00000.0p-36, + 0xe70000.0p-23, 0x880000.0p-33, + 0xe80000.0p-23, -0xe00000.0p-33, + 0xe90000.0p-23, -0xfc0000.0p-34, + 0xea0000.0p-23, -0x800000.0p-35, + 0xeb0000.0p-23, 0xe80000.0p-35, + 0xec0000.0p-23, 0x900000.0p-33, + 0xed0000.0p-23, 0xe20000.0p-33, + 0xee0000.0p-23, -0xac0000.0p-33, + 0xef0000.0p-23, -0xc80000.0p-34, + 0xf00000.0p-23, -0x800000.0p-35, + 0xf10000.0p-23, 0x800000.0p-35, + 0xf20000.0p-23, 0xb80000.0p-34, + 0xf30000.0p-23, 0x940000.0p-33, + 0xf40000.0p-23, 0xc80000.0p-33, + 0xf50000.0p-23, -0xf20000.0p-33, + 0xf60000.0p-23, -0xc80000.0p-33, + 0xf70000.0p-23, -0xa20000.0p-33, + 0xf80000.0p-23, -0x800000.0p-33, + 0xf90000.0p-23, -0xc40000.0p-34, + 0xfa0000.0p-23, -0x900000.0p-34, + 0xfb0000.0p-23, -0xc80000.0p-35, + 0xfc0000.0p-23, -0x800000.0p-35, + 0xfd0000.0p-23, -0x900000.0p-36, + 0xfe0000.0p-23, -0x800000.0p-37, + 0xff0000.0p-23, -0x800000.0p-39, + 0x800000.0p-22, 0, +}; +#endif /* USE_UTAB */ + +#ifdef STRUCT_RETURN +#define RETURN1(rp, v) do { \ + (rp)->hi = (v); \ + (rp)->lo_set = 0; \ + return; \ +} while (0) + +#define RETURN2(rp, h, l) do { \ + (rp)->hi = (h); \ + (rp)->lo = (l); \ + (rp)->lo_set = 1; \ + return; \ +} while (0) + +struct ld { + long double hi; + long double lo; + int lo_set; +}; +#else +#define RETURN1(rp, v) RETURNF(v) +#define RETURN2(rp, h, l) RETURNI((h) + (l)) +#endif + +#ifdef STRUCT_RETURN +static inline __always_inline void +k_logl(long double x, struct ld *rp) +#else +long double +logl(long double x) +#endif +{ + long double d, val_hi, val_lo; + double dd, dk; + uint64_t lx, llx; + int i, k; + uint16_t hx; + + EXTRACT_LDBL128_WORDS(hx, lx, llx, x); + k = -16383; +#if 0 /* Hard to do efficiently. Don't do it until we support all modes. */ + if (x == 1) + RETURN1(rp, 0); /* log(1) = +0 in all rounding modes */ +#endif + if (hx == 0 || hx >= 0x8000) { /* zero, negative or subnormal? */ + if (((hx & 0x7fff) | lx | llx) == 0) + RETURN1(rp, -1 / zero); /* log(+-0) = -Inf */ + if (hx != 0) + /* log(neg or NaN) = qNaN: */ + RETURN1(rp, (x - x) / zero); + x *= 0x1.0p113; /* subnormal; scale up x */ + EXTRACT_LDBL128_WORDS(hx, lx, llx, x); + k = -16383 - 113; + } else if (hx >= 0x7fff) + RETURN1(rp, x + x); /* log(Inf or NaN) = Inf or qNaN */ +#ifndef STRUCT_RETURN + ENTERI(); +#endif + k += hx; + dk = k; + + /* Scale x to be in [1, 2). */ + SET_LDBL_EXPSIGN(x, 0x3fff); + + /* 0 <= i <= INTERVALS: */ +#define L2I (49 - LOG2_INTERVALS) + i = (lx + (1LL << (L2I - 2))) >> (L2I - 1); + + /* + * -0.005280 < d < 0.004838. In particular, the infinite- + * precision |d| is <= 2**-7. Rounding of G(i) to 8 bits + * ensures that d is representable without extra precision for + * this bound on |d| (since when this calculation is expressed + * as x*G(i)-1, the multiplication needs as many extra bits as + * G(i) has and the subtraction cancels 8 bits). But for + * most i (107 cases out of 129), the infinite-precision |d| + * is <= 2**-8. G(i) is rounded to 9 bits for such i to give + * better accuracy (this works by improving the bound on |d|, + * which in turn allows rounding to 9 bits in more cases). + * This is only important when the original x is near 1 -- it + * lets us avoid using a special method to give the desired + * accuracy for such x. + */ + if (0) + d = x * G(i) - 1; + else { +#ifdef USE_UTAB + d = (x - H(i)) * G(i) + E(i); +#else + long double x_hi; + double x_lo; + + /* + * Split x into x_hi + x_lo to calculate x*G(i)-1 exactly. + * G(i) has at most 9 bits, so the splitting point is not + * critical. + */ + INSERT_LDBL128_WORDS(x_hi, 0x3fff, lx, + llx & 0xffffffffff000000ULL); + x_lo = x - x_hi; + d = x_hi * G(i) - 1 + x_lo * G(i); +#endif + } + + /* + * Our algorithm depends on exact cancellation of F_lo(i) and + * F_hi(i) with dk*ln_2_lo and dk*ln2_hi when k is -1 and i is + * at the end of the table. This and other technical complications + * make it difficult to avoid the double scaling in (dk*ln2) * + * log(base) for base != e without losing more accuracy and/or + * efficiency than is gained. + */ + /* + * Use double precision operations wherever possible, since + * long double operations are emulated and were very slow on + * the old sparc64 and unknown on the newer aarch64 and riscv + * machines. Also, don't try to improve parallelism by + * increasing the number of operations, since any parallelism + * on such machines is needed for the emulation. Horner's + * method is good for this, and is also good for accuracy. + * Horner's method doesn't handle the `lo' term well, either + * for efficiency or accuracy. However, for accuracy we + * evaluate d * d * P2 separately to take advantage of by P2 + * being exact, and this gives a good place to sum the 'lo' + * term too. + */ + dd = (double)d; + val_lo = d * d * d * (P3 + + d * (P4 + d * (P5 + d * (P6 + d * (P7 + d * (P8 + + dd * (P9 + dd * (P10 + dd * (P11 + dd * (P12 + dd * (P13 + + dd * P14))))))))))) + (F_lo(i) + dk * ln2_lo) + d * d * P2; + val_hi = d; +#ifdef DEBUG + if (fetestexcept(FE_UNDERFLOW)) + breakpoint(); +#endif + + _3sumF(val_hi, val_lo, F_hi(i) + dk * ln2_hi); + RETURN2(rp, val_hi, val_lo); +} + +long double +log1pl(long double x) +{ + long double d, d_hi, f_lo, val_hi, val_lo; + long double f_hi, twopminusk; + double d_lo, dd, dk; + uint64_t lx, llx; + int i, k; + int16_t ax, hx; + + DOPRINT_START(&x); + EXTRACT_LDBL128_WORDS(hx, lx, llx, x); + if (hx < 0x3fff) { /* x < 1, or x neg NaN */ + ax = hx & 0x7fff; + if (ax >= 0x3fff) { /* x <= -1, or x neg NaN */ + if (ax == 0x3fff && (lx | llx) == 0) + RETURNP(-1 / zero); /* log1p(-1) = -Inf */ + /* log1p(x < 1, or x NaN) = qNaN: */ + RETURNP((x - x) / (x - x)); + } + if (ax <= 0x3f8d) { /* |x| < 2**-113 */ + if ((int)x == 0) + RETURNP(x); /* x with inexact if x != 0 */ + } + f_hi = 1; + f_lo = x; + } else if (hx >= 0x7fff) { /* x +Inf or non-neg NaN */ + RETURNP(x + x); /* log1p(Inf or NaN) = Inf or qNaN */ + } else if (hx < 0x40e1) { /* 1 <= x < 2**226 */ + f_hi = x; + f_lo = 1; + } else { /* 2**226 <= x < +Inf */ + f_hi = x; + f_lo = 0; /* avoid underflow of the P3 term */ + } + ENTERI(); + x = f_hi + f_lo; + f_lo = (f_hi - x) + f_lo; + + EXTRACT_LDBL128_WORDS(hx, lx, llx, x); + k = -16383; + + k += hx; + dk = k; + + SET_LDBL_EXPSIGN(x, 0x3fff); + twopminusk = 1; + SET_LDBL_EXPSIGN(twopminusk, 0x7ffe - (hx & 0x7fff)); + f_lo *= twopminusk; + + i = (lx + (1LL << (L2I - 2))) >> (L2I - 1); + + /* + * x*G(i)-1 (with a reduced x) can be represented exactly, as + * above, but now we need to evaluate the polynomial on d = + * (x+f_lo)*G(i)-1 and extra precision is needed for that. + * Since x+x_lo is a hi+lo decomposition and subtracting 1 + * doesn't lose too many bits, an inexact calculation for + * f_lo*G(i) is good enough. + */ + if (0) + d_hi = x * G(i) - 1; + else { +#ifdef USE_UTAB + d_hi = (x - H(i)) * G(i) + E(i); +#else + long double x_hi; + double x_lo; + + INSERT_LDBL128_WORDS(x_hi, 0x3fff, lx, + llx & 0xffffffffff000000ULL); + x_lo = x - x_hi; + d_hi = x_hi * G(i) - 1 + x_lo * G(i); +#endif + } + d_lo = f_lo * G(i); + + /* + * This is _2sumF(d_hi, d_lo) inlined. The condition + * (d_hi == 0 || |d_hi| >= |d_lo|) for using _2sumF() is not + * always satisifed, so it is not clear that this works, but + * it works in practice. It works even if it gives a wrong + * normalized d_lo, since |d_lo| > |d_hi| implies that i is + * nonzero and d is tiny, so the F(i) term dominates d_lo. + * In float precision: + * (By exhaustive testing, the worst case is d_hi = 0x1.bp-25. + * And if d is only a little tinier than that, we would have + * another underflow problem for the P3 term; this is also ruled + * out by exhaustive testing.) + */ + d = d_hi + d_lo; + d_lo = d_hi - d + d_lo; + d_hi = d; + + dd = (double)d; + val_lo = d * d * d * (P3 + + d * (P4 + d * (P5 + d * (P6 + d * (P7 + d * (P8 + + dd * (P9 + dd * (P10 + dd * (P11 + dd * (P12 + dd * (P13 + + dd * P14))))))))))) + (F_lo(i) + dk * ln2_lo + d_lo) + d * d * P2; + val_hi = d_hi; +#ifdef DEBUG + if (fetestexcept(FE_UNDERFLOW)) + breakpoint(); +#endif + + _3sumF(val_hi, val_lo, F_hi(i) + dk * ln2_hi); + RETURN2PI(val_hi, val_lo); +} + +#ifdef STRUCT_RETURN + +long double +logl(long double x) +{ + struct ld r; + + ENTERI(); + DOPRINT_START(&x); + k_logl(x, &r); + RETURNSPI(&r); +} + +/* + * 29+113 bit decompositions. The bits are distributed so that the products + * of the hi terms are exact in double precision. The types are chosen so + * that the products of the hi terms are done in at least double precision, + * without any explicit conversions. More natural choices would require a + * slow long double precision multiplication. + */ +static const double +invln10_hi = 4.3429448176175356e-1, /* 0x1bcb7b15000000.0p-54 */ +invln2_hi = 1.4426950402557850e0; /* 0x17154765000000.0p-52 */ +static const long double +invln10_lo = 1.41498268538580090791605082294397000e-10L, /* 0x137287195355baaafad33dc323ee3.0p-145L */ +invln2_lo = 6.33178418956604368501892137426645911e-10L, /* 0x15c17f0bbbe87fed0691d3e88eb57.0p-143L */ +invln10_lo_plus_hi = invln10_lo + invln10_hi, +invln2_lo_plus_hi = invln2_lo + invln2_hi; + +long double +log10l(long double x) +{ + struct ld r; + long double hi, lo; + + ENTERI(); + DOPRINT_START(&x); + k_logl(x, &r); + if (!r.lo_set) + RETURNPI(r.hi); + _2sumF(r.hi, r.lo); + hi = (float)r.hi; + lo = r.lo + (r.hi - hi); + RETURN2PI(invln10_hi * hi, + invln10_lo_plus_hi * lo + invln10_lo * hi); +} + +long double +log2l(long double x) +{ + struct ld r; + long double hi, lo; + + ENTERI(); + DOPRINT_START(&x); + k_logl(x, &r); + if (!r.lo_set) + RETURNPI(r.hi); + _2sumF(r.hi, r.lo); + hi = (float)r.hi; + lo = r.lo + (r.hi - hi); + RETURN2PI(invln2_hi * hi, + invln2_lo_plus_hi * lo + invln2_lo * hi); +} + +#endif /* STRUCT_RETURN */ diff --git a/newlib/libm/ld80/Makefile.inc b/newlib/libm/ld80/Makefile.inc new file mode 100644 index 0000000000..97fbacddaa --- /dev/null +++ b/newlib/libm/ld80/Makefile.inc @@ -0,0 +1,15 @@ +%C%_lsrc = \ + %D%/b_tgammal.c %D%/e_powl.c %D%/s_erfl.c %D%/s_exp2l.c \ + %D%/s_expl.c %D%/s_logl.c %D%/s_sinpil.c %D%/s_cospil.c \ + %D%/invtrig.c %D%/e_lgammal_r.c %D%/k_cosl.c %D%/k_sinl.c + + +libm_a_CFLAGS_%C% = -fbuiltin -fno-math-errno + +if HAVE_LONG_DOUBLE +libm_a_SOURCES += $(%C%_lsrc) +endif # HAVE_LONG_DOUBLE + +LIBM_CHEWOUT_FILES += + +LIBM_CHAPTERS += diff --git a/newlib/libm/ld80/b_expl.c b/newlib/libm/ld80/b_expl.c new file mode 100644 index 0000000000..26c95fb7bf --- /dev/null +++ b/newlib/libm/ld80/b_expl.c @@ -0,0 +1,113 @@ +/*- + * SPDX-License-Identifier: BSD-3-Clause + * + * Copyright (c) 1985, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/* + * See bsdsrc/b_exp.c for implementation details. + * + * bsdrc/b_exp.c converted to long double by Steven G. Kargl. + */ + +#include "../ld/fpmath.h" +#include "../ld/math_private.h" + +static const union IEEEl2bits + p0u = LD80C(0xaaaaaaaaaaaaaaab, -3, 1.66666666666666666671e-01L), + p1u = LD80C(0xb60b60b60b60b59a, -9, -2.77777777777777775377e-03L), + p2u = LD80C(0x8ab355e008a3cfce, -14, 6.61375661375629297465e-05L), + p3u = LD80C(0xddebbc994b0c1376, -20, -1.65343915327882529784e-06L), + p4u = LD80C(0xb354784cb4ef4c41, -25, 4.17535101591534118469e-08L), + p5u = LD80C(0x913e8a718382ce75, -30, -1.05679137034774806475e-09L), + p6u = LD80C(0xe8f0042aa134502e, -36, 2.64819349895429516863e-11L); +#define p1 (p0u.e) +#define p2 (p1u.e) +#define p3 (p2u.e) +#define p4 (p3u.e) +#define p5 (p4u.e) +#define p6 (p5u.e) +#define p7 (p6u.e) + +/* + * lnhuge = (LDBL_MAX_EXP + 9) * log(2.) + * lntiny = (LDBL_MIN_EXP - 64 - 10) * log(2.) + * invln2 = 1 / log(2.) + */ +static const union IEEEl2bits +ln2hiu = LD80C(0xb17217f700000000, -1, 6.93147180369123816490e-01L), +ln2lou = LD80C(0xd1cf79abc9e3b398, -33, 1.90821492927058781614e-10L), +lnhugeu = LD80C(0xb18b0c0330a8fad9, 13, 1.13627617309191834574e+04L), +lntinyu = LD80C(0xb236f28a68bc3bd7, 13, -1.14057368561139000667e+04L), +invln2u = LD80C(0xb8aa3b295c17f0bc, 0, 1.44269504088896340739e+00L); +#define ln2hi (ln2hiu.e) +#define ln2lo (ln2lou.e) +#define lnhuge (lnhugeu.e) +#define lntiny (lntinyu.e) +#define invln2 (invln2u.e) + +/* returns exp(r = x + c) for |c| < |x| with no overlap. */ + +static long double +__exp__D(long double x, long double c) +{ + long double hi, lo, z; + int k; + + if (x != x) /* x is NaN. */ + return(x); + + if (x <= lnhuge) { + if (x >= lntiny) { + /* argument reduction: x --> x - k*ln2 */ + z = invln2 * x; + k = z + copysignl(0.5L, x); + + /* + * Express (x + c) - k * ln2 as hi - lo. + * Let x = hi - lo rounded. + */ + hi = x - k * ln2hi; /* Exact. */ + lo = k * ln2lo - c; + x = hi - lo; + + /* Return 2^k*[1+x+x*c/(2+c)] */ + z = x * x; + c = x - z * (p1 + z * (p2 + z * (p3 + z * (p4 + + z * (p5 + z * (p6 + z * p7)))))); + c = (x * c) / (2 - c); + + return (ldexpl(1 + (hi - (lo - c)), k)); + } else { + /* exp(-INF) is 0. exp(-big) underflows to 0. */ + return (isfinite(x) ? ldexpl(1., -5000) : 0); + } + } else + /* exp(INF) is INF, exp(+big#) overflows to INF */ + return (isfinite(x) ? ldexpl(1., 5000) : x); +} diff --git a/newlib/libm/ld80/b_logl.c b/newlib/libm/ld80/b_logl.c new file mode 100644 index 0000000000..b11eacbe17 --- /dev/null +++ b/newlib/libm/ld80/b_logl.c @@ -0,0 +1,375 @@ +/*- + * SPDX-License-Identifier: BSD-3-Clause + * + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/* + * See bsdsrc/b_log.c for implementation details. + * + * bsdrc/b_log.c converted to long double by Steven G. Kargl. + */ + +#define N 128 + +/* + * Coefficients in the polynomial approximation of log(1+f/F). + * Domain of x is [0,1./256] with 2**(-84.48) precision. + */ +static const union IEEEl2bits + a1u = LD80C(0xaaaaaaaaaaaaaaab, -4, 8.33333333333333333356e-02L), + a2u = LD80C(0xcccccccccccccd29, -7, 1.25000000000000000781e-02L), + a3u = LD80C(0x9249249241ed3764, -9, 2.23214285711721994134e-03L), + a4u = LD80C(0xe38e959e1e7e01cf, -12, 4.34030476540000360640e-04L); +#define A1 (a1u.e) +#define A2 (a2u.e) +#define A3 (a3u.e) +#define A4 (a4u.e) + +/* + * Table of log(Fj) = logF_head[j] + logF_tail[j], for Fj = 1+j/128. + * Used for generation of extend precision logarithms. + * The constant 35184372088832 is 2^45, so the divide is exact. + * It ensures correct reading of logF_head, even for inaccurate + * decimal-to-binary conversion routines. (Everybody gets the + * right answer for integers less than 2^53.) + * Values for log(F) were generated using error < 10^-57 absolute + * with the bc -l package. + */ + +static double logF_head[N+1] = { + 0., + .007782140442060381246, + .015504186535963526694, + .023167059281547608406, + .030771658666765233647, + .038318864302141264488, + .045809536031242714670, + .053244514518837604555, + .060624621816486978786, + .067950661908525944454, + .075223421237524235039, + .082443669210988446138, + .089612158689760690322, + .096729626458454731618, + .103796793681567578460, + .110814366340264314203, + .117783035656430001836, + .124703478501032805070, + .131576357788617315236, + .138402322859292326029, + .145182009844575077295, + .151916042025732167530, + .158605030176659056451, + .165249572895390883786, + .171850256926518341060, + .178407657472689606947, + .184922338493834104156, + .191394852999565046047, + .197825743329758552135, + .204215541428766300668, + .210564769107350002741, + .216873938300523150246, + .223143551314024080056, + .229374101064877322642, + .235566071312860003672, + .241719936886966024758, + .247836163904594286577, + .253915209980732470285, + .259957524436686071567, + .265963548496984003577, + .271933715484010463114, + .277868451003087102435, + .283768173130738432519, + .289633292582948342896, + .295464212893421063199, + .301261330578199704177, + .307025035294827830512, + .312755710004239517729, + .318453731118097493890, + .324119468654316733591, + .329753286372579168528, + .335355541920762334484, + .340926586970454081892, + .346466767346100823488, + .351976423156884266063, + .357455888922231679316, + .362905493689140712376, + .368325561158599157352, + .373716409793814818840, + .379078352934811846353, + .384411698910298582632, + .389716751140440464951, + .394993808240542421117, + .400243164127459749579, + .405465108107819105498, + .410659924985338875558, + .415827895143593195825, + .420969294644237379543, + .426084395310681429691, + .431173464818130014464, + .436236766774527495726, + .441274560805140936281, + .446287102628048160113, + .451274644139630254358, + .456237433481874177232, + .461175715122408291790, + .466089729924533457960, + .470979715219073113985, + .475845904869856894947, + .480688529345570714212, + .485507815781602403149, + .490303988045525329653, + .495077266798034543171, + .499827869556611403822, + .504556010751912253908, + .509261901790523552335, + .513945751101346104405, + .518607764208354637958, + .523248143765158602036, + .527867089620485785417, + .532464798869114019908, + .537041465897345915436, + .541597282432121573947, + .546132437597407260909, + .550647117952394182793, + .555141507540611200965, + .559615787935399566777, + .564070138285387656651, + .568504735352689749561, + .572919753562018740922, + .577315365035246941260, + .581691739635061821900, + .586049045003164792433, + .590387446602107957005, + .594707107746216934174, + .599008189645246602594, + .603290851438941899687, + .607555250224322662688, + .611801541106615331955, + .616029877215623855590, + .620240409751204424537, + .624433288012369303032, + .628608659422752680256, + .632766669570628437213, + .636907462236194987781, + .641031179420679109171, + .645137961373620782978, + .649227946625615004450, + .653301272011958644725, + .657358072709030238911, + .661398482245203922502, + .665422632544505177065, + .669430653942981734871, + .673422675212350441142, + .677398823590920073911, + .681359224807238206267, + .685304003098281100392, + .689233281238557538017, + .693147180560117703862 +}; + +static double logF_tail[N+1] = { + 0., + -.00000000000000543229938420049, + .00000000000000172745674997061, + -.00000000000001323017818229233, + -.00000000000001154527628289872, + -.00000000000000466529469958300, + .00000000000005148849572685810, + -.00000000000002532168943117445, + -.00000000000005213620639136504, + -.00000000000001819506003016881, + .00000000000006329065958724544, + .00000000000008614512936087814, + -.00000000000007355770219435028, + .00000000000009638067658552277, + .00000000000007598636597194141, + .00000000000002579999128306990, + -.00000000000004654729747598444, + -.00000000000007556920687451336, + .00000000000010195735223708472, + -.00000000000017319034406422306, + -.00000000000007718001336828098, + .00000000000010980754099855238, + -.00000000000002047235780046195, + -.00000000000008372091099235912, + .00000000000014088127937111135, + .00000000000012869017157588257, + .00000000000017788850778198106, + .00000000000006440856150696891, + .00000000000016132822667240822, + -.00000000000007540916511956188, + -.00000000000000036507188831790, + .00000000000009120937249914984, + .00000000000018567570959796010, + -.00000000000003149265065191483, + -.00000000000009309459495196889, + .00000000000017914338601329117, + -.00000000000001302979717330866, + .00000000000023097385217586939, + .00000000000023999540484211737, + .00000000000015393776174455408, + -.00000000000036870428315837678, + .00000000000036920375082080089, + -.00000000000009383417223663699, + .00000000000009433398189512690, + .00000000000041481318704258568, + -.00000000000003792316480209314, + .00000000000008403156304792424, + -.00000000000034262934348285429, + .00000000000043712191957429145, + -.00000000000010475750058776541, + -.00000000000011118671389559323, + .00000000000037549577257259853, + .00000000000013912841212197565, + .00000000000010775743037572640, + .00000000000029391859187648000, + -.00000000000042790509060060774, + .00000000000022774076114039555, + .00000000000010849569622967912, + -.00000000000023073801945705758, + .00000000000015761203773969435, + .00000000000003345710269544082, + -.00000000000041525158063436123, + .00000000000032655698896907146, + -.00000000000044704265010452446, + .00000000000034527647952039772, + -.00000000000007048962392109746, + .00000000000011776978751369214, + -.00000000000010774341461609578, + .00000000000021863343293215910, + .00000000000024132639491333131, + .00000000000039057462209830700, + -.00000000000026570679203560751, + .00000000000037135141919592021, + -.00000000000017166921336082431, + -.00000000000028658285157914353, + -.00000000000023812542263446809, + .00000000000006576659768580062, + -.00000000000028210143846181267, + .00000000000010701931762114254, + .00000000000018119346366441110, + .00000000000009840465278232627, + -.00000000000033149150282752542, + -.00000000000018302857356041668, + -.00000000000016207400156744949, + .00000000000048303314949553201, + -.00000000000071560553172382115, + .00000000000088821239518571855, + -.00000000000030900580513238244, + -.00000000000061076551972851496, + .00000000000035659969663347830, + .00000000000035782396591276383, + -.00000000000046226087001544578, + .00000000000062279762917225156, + .00000000000072838947272065741, + .00000000000026809646615211673, + -.00000000000010960825046059278, + .00000000000002311949383800537, + -.00000000000058469058005299247, + -.00000000000002103748251144494, + -.00000000000023323182945587408, + -.00000000000042333694288141916, + -.00000000000043933937969737844, + .00000000000041341647073835565, + .00000000000006841763641591466, + .00000000000047585534004430641, + .00000000000083679678674757695, + -.00000000000085763734646658640, + .00000000000021913281229340092, + -.00000000000062242842536431148, + -.00000000000010983594325438430, + .00000000000065310431377633651, + -.00000000000047580199021710769, + -.00000000000037854251265457040, + .00000000000040939233218678664, + .00000000000087424383914858291, + .00000000000025218188456842882, + -.00000000000003608131360422557, + -.00000000000050518555924280902, + .00000000000078699403323355317, + -.00000000000067020876961949060, + .00000000000016108575753932458, + .00000000000058527188436251509, + -.00000000000035246757297904791, + -.00000000000018372084495629058, + .00000000000088606689813494916, + .00000000000066486268071468700, + .00000000000063831615170646519, + .00000000000025144230728376072, + -.00000000000017239444525614834 +}; +/* + * Extra precision variant, returning struct {double a, b;}; + * log(x) = a + b to 63 bits, with 'a' rounded to 24 bits. + */ +static struct Double +__log__D(long double x) +{ + int m, j; + long double F, f, g, q, u, v, u1, u2; + struct Double r; + + /* + * Argument reduction: 1 <= g < 2; x/2^m = g; + * y = F*(1 + f/F) for |f| <= 2^-8 + */ + g = frexpl(x, &m); + g *= 2; + m--; + if (m == DBL_MIN_EXP - 1) { + j = ilogbl(g); + m += j; + g = ldexpl(g, -j); + } + j = N * (g - 1) + 0.5L; + F = (1.L / N) * j + 1; + f = g - F; + + g = 1 / (2 * F + f); + u = 2 * f * g; + v = u * u; + q = u * v * (A1 + v * (A2 + v * (A3 + v * A4))); + if (m | j) { + u1 = u + 513; + u1 -= 513; + } else { + u1 = (float)u; + } + u2 = (2 * (f - F * u1) - u1 * f) * g; + + u1 += m * (long double)logF_head[N] + logF_head[j]; + + u2 += logF_tail[j]; + u2 += q; + u2 += logF_tail[N] * m; + r.a = (float)(u1 + u2); /* Only difference is here. */ + r.b = (u1 - r.a) + u2; + return (r); +} diff --git a/newlib/libm/ld80/b_tgammal.c b/newlib/libm/ld80/b_tgammal.c new file mode 100644 index 0000000000..efc0e24345 --- /dev/null +++ b/newlib/libm/ld80/b_tgammal.c @@ -0,0 +1,422 @@ +/*- + * SPDX-License-Identifier: BSD-3-Clause + * + * Copyright (c) 1992, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +/* + * The original code, FreeBSD's old svn r93211, contain the following + * attribution: + * + * This code by P. McIlroy, Oct 1992; + * + * The financial support of UUNET Communications Services is greatfully + * acknowledged. + * + * bsdrc/b_tgamma.c converted to long double by Steven G. Kargl. + */ + +/* + * See bsdsrc/t_tgamma.c for implementation details. + */ + +#include + +#if LDBL_MAX_EXP != 0x4000 +#error "Unsupported long double format" +#endif + +#ifdef __i386__ +#include +#endif + +#include "../ld/fpmath.h" +#include "math.h" +#include "../ld/math_private.h" + +long double sinpil(long double x); +long double cospil(long double x); + +/* Used in b_log.c and below. */ +struct Double { + long double a; + long double b; +}; + +#include "b_logl.c" +#include "b_expl.c" + +static const double zero = 0.; +static const volatile double tiny = 1e-300; +/* + * x >= 6 + * + * Use the asymptotic approximation (Stirling's formula) adjusted for + * equal-ripples: + * + * log(G(x)) ~= (x-0.5)*(log(x)-1) + 0.5(log(2*pi)-1) + 1/x*P(1/(x*x)) + * + * Keep extra precision in multiplying (x-.5)(log(x)-1), to avoid + * premature round-off. + * + * Accurate to max(ulp(1/128) absolute, 2^-66 relative) error. + */ + +/* + * The following is a decomposition of 0.5 * (log(2*pi) - 1) into the + * first 12 bits in ln2pi_hi and the trailing 64 bits in ln2pi_lo. The + * variables are clearly misnamed. + */ +static const union IEEEl2bits +ln2pi_hiu = LD80C(0xd680000000000000, -2, 4.18945312500000000000e-01L), +ln2pi_lou = LD80C(0xe379b414b596d687, -18, -6.77929532725821967032e-06L); +#define ln2pi_hi (ln2pi_hiu.e) +#define ln2pi_lo (ln2pi_lou.e) + +static const union IEEEl2bits + Pa0u = LD80C(0xaaaaaaaaaaaaaaaa, -4, 8.33333333333333333288e-02L), + Pa1u = LD80C(0xb60b60b60b5fcd59, -9, -2.77777777777776516326e-03L), + Pa2u = LD80C(0xd00d00cffbb47014, -11, 7.93650793635429639018e-04L), + Pa3u = LD80C(0x9c09c07c0805343e, -11, -5.95238087960599252215e-04L), + Pa4u = LD80C(0xdca8d31f8e6e5e8f, -11, 8.41749082509607342883e-04L), + Pa5u = LD80C(0xfb4d4289632f1638, -10, -1.91728055205541624556e-03L), + Pa6u = LD80C(0xd15a4ba04078d3f8, -8, 6.38893788027752396194e-03L), + Pa7u = LD80C(0xe877283110bcad95, -6, -2.83771309846297590312e-02L), + Pa8u = LD80C(0x8da97eed13717af8, -3, 1.38341887683837576925e-01L), + Pa9u = LD80C(0xf093b1c1584e30ce, -2, -4.69876818515470146031e-01L); +#define Pa0 (Pa0u.e) +#define Pa1 (Pa1u.e) +#define Pa2 (Pa2u.e) +#define Pa3 (Pa3u.e) +#define Pa4 (Pa4u.e) +#define Pa5 (Pa5u.e) +#define Pa6 (Pa6u.e) +#define Pa7 (Pa7u.e) +#define Pa8 (Pa8u.e) +#define Pa9 (Pa9u.e) + +static struct Double +large_gam(long double x) +{ + long double p, z, thi, tlo, xhi, xlo; + long double logx; + struct Double u; + + z = 1 / (x * x); + p = Pa0 + z * (Pa1 + z * (Pa2 + z * (Pa3 + z * (Pa4 + z * (Pa5 + + z * (Pa6 + z * (Pa7 + z * (Pa8 + z * Pa9)))))))); + p = p / x; + + u = __log__D(x); + u.a -= 1; + + /* Split (x - 0.5) in high and low parts. */ + x -= 0.5L; + xhi = (float)x; + xlo = x - xhi; + + /* Compute t = (x-.5)*(log(x)-1) in extra precision. */ + thi = xhi * u.a; + tlo = xlo * u.a + x * u.b; + + /* Compute thi + tlo + ln2pi_hi + ln2pi_lo + p. */ + tlo += ln2pi_lo; + tlo += p; + u.a = ln2pi_hi + tlo; + u.a += thi; + u.b = thi - u.a; + u.b += ln2pi_hi; + u.b += tlo; + return (u); +} +/* + * Rational approximation, A0 + x * x * P(x) / Q(x), on the interval + * [1.066.., 2.066..] accurate to 4.25e-19. + * + * Returns r.a + r.b = a0 + (z + c)^2 * p / q, with r.a truncated. + */ +static const union IEEEl2bits + a0_hiu = LD80C(0xe2b6e4153a57746c, -1, 8.85603194410888700265e-01L), + a0_lou = LD80C(0x851566d40f32c76d, -66, 1.40907742727049706207e-20L); +#define a0_hi (a0_hiu.e) +#define a0_lo (a0_lou.e) + +static const union IEEEl2bits +P0u = LD80C(0xdb629fb9bbdc1c1d, -2, 4.28486815855585429733e-01L), +P1u = LD80C(0xe6f4f9f5641aa6be, -3, 2.25543885805587730552e-01L), +P2u = LD80C(0xead1bd99fdaf7cc1, -6, 2.86644652514293482381e-02L), +P3u = LD80C(0x9ccc8b25838ab1e0, -8, 4.78512567772456362048e-03L), +P4u = LD80C(0x8f0c4383ef9ce72a, -9, 2.18273781132301146458e-03L), +P5u = LD80C(0xe732ab2c0a2778da, -13, 2.20487522485636008928e-04L), +P6u = LD80C(0xce70b27ca822b297, -16, 2.46095923774929264284e-05L), +P7u = LD80C(0xa309e2e16fb63663, -19, 2.42946473022376182921e-06L), +P8u = LD80C(0xaf9c110efb2c633d, -23, 1.63549217667765869987e-07L), +Q1u = LD80C(0xd4d7422719f48f15, -1, 8.31409582658993993626e-01L), +Q2u = LD80C(0xe13138ea404f1268, -5, -5.49785826915643198508e-02L), +Q3u = LD80C(0xd1c6cc91989352c0, -4, -1.02429960435139887683e-01L), +Q4u = LD80C(0xa7e9435a84445579, -7, 1.02484853505908820524e-02L), +Q5u = LD80C(0x83c7c34db89b7bda, -8, 4.02161632832052872697e-03L), +Q6u = LD80C(0xbed06bf6e1c14e5b, -11, -7.27898206351223022157e-04L), +Q7u = LD80C(0xef05bf841d4504c0, -18, 7.12342421869453515194e-06L), +Q8u = LD80C(0xf348d08a1ff53cb1, -19, 3.62522053809474067060e-06L); +#define P0 (P0u.e) +#define P1 (P1u.e) +#define P2 (P2u.e) +#define P3 (P3u.e) +#define P4 (P4u.e) +#define P5 (P5u.e) +#define P6 (P6u.e) +#define P7 (P7u.e) +#define P8 (P8u.e) +#define Q1 (Q1u.e) +#define Q2 (Q2u.e) +#define Q3 (Q3u.e) +#define Q4 (Q4u.e) +#define Q5 (Q5u.e) +#define Q6 (Q6u.e) +#define Q7 (Q7u.e) +#define Q8 (Q8u.e) + +static struct Double +ratfun_gam(long double z, long double c) +{ + long double p, q, thi, tlo; + struct Double r; + + q = 1 + z * (Q1 + z * (Q2 + z * (Q3 + z * (Q4 + z * (Q5 + + z * (Q6 + z * (Q7 + z * Q8))))))); + p = P0 + z * (P1 + z * (P2 + z * (P3 + z * (P4 + z * (P5 + + z * (P6 + z * (P7 + z * P8))))))); + p = p / q; + + /* Split z into high and low parts. */ + thi = (float)z; + tlo = (z - thi) + c; + tlo *= (thi + z); + + /* Split (z+c)^2 into high and low parts. */ + thi *= thi; + q = thi; + thi = (float)thi; + tlo += (q - thi); + + /* Split p/q into high and low parts. */ + r.a = (float)p; + r.b = p - r.a; + + tlo = tlo * p + thi * r.b + a0_lo; + thi *= r.a; /* t = (z+c)^2*(P/Q) */ + r.a = (float)(thi + a0_hi); + r.b = ((a0_hi - r.a) + thi) + tlo; + return (r); /* r = a0 + t */ +} +/* + * x < 6 + * + * Use argument reduction G(x+1) = xG(x) to reach the range [1.066124, + * 2.066124]. Use a rational approximation centered at the minimum + * (x0+1) to ensure monotonicity. + * + * Good to < 1 ulp. (provably .90 ulp; .87 ulp on 1,000,000 runs.) + * It also has correct monotonicity. + */ +static const union IEEEl2bits + xm1u = LD80C(0xec5b0c6ad7c7edc3, -2, 4.61632144968362341254e-01L); +#define x0 (xm1u.e) + +static const double + left = -0.3955078125; /* left boundary for rat. approx */ + +static long double +small_gam(long double x) +{ + long double t, y, ym1; + struct Double yy, r; + + y = x - 1; + + if (y <= 1 + (left + x0)) { + yy = ratfun_gam(y - x0, 0); + return (yy.a + yy.b); + } + + r.a = (float)y; + yy.a = r.a - 1; + y = y - 1 ; + r.b = yy.b = y - yy.a; + + /* Argument reduction: G(x+1) = x*G(x) */ + for (ym1 = y - 1; ym1 > left + x0; y = ym1--, yy.a--) { + t = r.a * yy.a; + r.b = r.a * yy.b + y * r.b; + r.a = (float)t; + r.b += (t - r.a); + } + + /* Return r*tgamma(y). */ + yy = ratfun_gam(y - x0, 0); + y = r.b * (yy.a + yy.b) + r.a * yy.b; + y += yy.a * r.a; + return (y); +} +/* + * Good on (0, 1+x0+left]. Accurate to 1 ulp. + */ +static long double +smaller_gam(long double x) +{ + long double d, rhi, rlo, t, xhi, xlo; + struct Double r; + + if (x < x0 + left) { + t = (float)x; + d = (t + x) * (x - t); + t *= t; + xhi = (float)(t + x); + xlo = x - xhi; + xlo += t; + xlo += d; + t = 1 - x0; + t += x; + d = 1 - x0; + d -= t; + d += x; + x = xhi + xlo; + } else { + xhi = (float)x; + xlo = x - xhi; + t = x - x0; + d = - x0 - t; + d += x; + } + + r = ratfun_gam(t, d); + d = (float)(r.a / x); + r.a -= d * xhi; + r.a -= d * xlo; + r.a += r.b; + + return (d + r.a / x); +} +/* + * x < 0 + * + * Use reflection formula, G(x) = pi/(sin(pi*x)*x*G(x)). + * At negative integers, return NaN and raise invalid. + */ +static const union IEEEl2bits +piu = LD80C(0xc90fdaa22168c235, 1, 3.14159265358979323851e+00L); +#define pi (piu.e) + +static long double +neg_gam(long double x) +{ + int sgn = 1; + struct Double lg, lsine; + long double y, z; + + y = ceill(x); + if (y == x) /* Negative integer. */ + return ((x - x) / zero); + + z = y - x; + if (z > 0.5) + z = 1 - z; + + y = y / 2; + if (y == ceill(y)) + sgn = -1; + + if (z < 0.25) + z = sinpil(z); + else + z = cospil(0.5 - z); + + /* Special case: G(1-x) = Inf; G(x) may be nonzero. */ + if (x < -1753) { + + if (x < -1760) + return (sgn * tiny * tiny); + y = expl(lgammal(x) / 2); + y *= y; + return (sgn < 0 ? -y : y); + } + + + y = 1 - x; + if (1 - y == x) + y = tgammal(y); + else /* 1-x is inexact */ + y = - x * tgammal(-x); + + if (sgn < 0) y = -y; + return (pi / (y * z)); +} +/* + * xmax comes from lgamma(xmax) - emax * log(2) = 0. + * static const float xmax = 35.040095f + * static const double xmax = 171.624376956302725; + * ld80: LD80C(0xdb718c066b352e20, 10, 1.75554834290446291689e+03L), + * ld128: 1.75554834290446291700388921607020320e+03L, + * + * iota is a sloppy threshold to isolate x = 0. + */ +static const double xmax = 1755.54834290446291689; +static const double iota = 0x1p-116; + +long double +tgammal(long double x) +{ + struct Double u; + + ENTERI(); + + if (x >= 6) { + if (x > xmax) + RETURNI(x / zero); + u = large_gam(x); + RETURNI(__exp__D(u.a, u.b)); + } + + if (x >= 1 + left + x0) + RETURNI(small_gam(x)); + + if (x > iota) + RETURNI(smaller_gam(x)); + + if (x > -iota) { + if (x != 0) + u.a = 1 - tiny; /* raise inexact */ + RETURNI(1 / x); + } + + if (!isfinite(x)) + RETURNI(x - x); /* x is NaN or -Inf */ + + RETURNI(neg_gam(x)); +} diff --git a/newlib/libm/ld80/e_lgammal_r.c b/newlib/libm/ld80/e_lgammal_r.c new file mode 100644 index 0000000000..840c7ccbea --- /dev/null +++ b/newlib/libm/ld80/e_lgammal_r.c @@ -0,0 +1,358 @@ +/* @(#)e_lgamma_r.c 1.3 95/01/18 */ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunSoft, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#include +__FBSDID("$FreeBSD$"); + +/* + * See e_lgamma_r.c for complete comments. + * + * Converted to long double by Steven G. Kargl. + */ + +#ifdef __i386__ +#include +#endif + +#include "../ld/fpmath.h" +#include "math.h" +#include "../ld/math_private.h" + +static const volatile double vzero = 0; + +static const double +zero= 0, +half= 0.5, +one = 1; + +static const union IEEEl2bits +piu = LD80C(0xc90fdaa22168c235, 1, 3.14159265358979323851e+00L); +#define pi (piu.e) +/* + * Domain y in [0x1p-70, 0.27], range ~[-4.5264e-22, 4.5264e-22]: + * |(lgamma(2 - y) + y / 2) / y - a(y)| < 2**-70.9 + */ +static const union IEEEl2bits +a0u = LD80C(0x9e233f1bed863d26, -4, 7.72156649015328606028e-02L), +a1u = LD80C(0xa51a6625307d3249, -2, 3.22467033424113218889e-01L), +a2u = LD80C(0x89f000d2abafda8c, -4, 6.73523010531979398946e-02L), +a3u = LD80C(0xa8991563eca75f26, -6, 2.05808084277991211934e-02L), +a4u = LD80C(0xf2027e10634ce6b6, -8, 7.38555102796070454026e-03L), +a5u = LD80C(0xbd6eb76dd22187f4, -9, 2.89051035162703932972e-03L), +a6u = LD80C(0x9c562ab05e0458ed, -10, 1.19275351624639999297e-03L), +a7u = LD80C(0x859baed93ee48e46, -11, 5.09674593842117925320e-04L), +a8u = LD80C(0xe9f28a4432949af2, -13, 2.23109648015769155122e-04L), +a9u = LD80C(0xd12ad0d9b93c6bb0, -14, 9.97387167479808509830e-05L), +a10u= LD80C(0xb7522643c78a219b, -15, 4.37071076331030136818e-05L), +a11u= LD80C(0xca024dcdece2cb79, -16, 2.40813493372040143061e-05L), +a12u= LD80C(0xbb90fb6968ebdbf9, -19, 2.79495621083634031729e-06L), +a13u= LD80C(0xba1c9ffeeae07b37, -17, 1.10931287015513924136e-05L); +#define a0 (a0u.e) +#define a1 (a1u.e) +#define a2 (a2u.e) +#define a3 (a3u.e) +#define a4 (a4u.e) +#define a5 (a5u.e) +#define a6 (a6u.e) +#define a7 (a7u.e) +#define a8 (a8u.e) +#define a9 (a9u.e) +#define a10 (a10u.e) +#define a11 (a11u.e) +#define a12 (a12u.e) +#define a13 (a13u.e) +/* + * Domain x in [tc-0.24, tc+0.28], range ~[-6.1205e-22, 6.1205e-22]: + * |(lgamma(x) - tf) - t(x - tc)| < 2**-70.5 + */ +static const union IEEEl2bits +tcu = LD80C(0xbb16c31ab5f1fb71, 0, 1.46163214496836234128e+00L), +tfu = LD80C(0xf8cdcde61c520e0f, -4, -1.21486290535849608093e-01L), +ttu = LD80C(0xd46ee54b27d4de99, -69, -2.81152980996018785880e-21L), +t0u = LD80C(0x80b9406556a62a6b, -68, 3.40728634996055147231e-21L), +t1u = LD80C(0xc7e9c6f6df3f8c39, -67, -1.05833162742737073665e-20L), +t2u = LD80C(0xf7b95e4771c55d51, -2, 4.83836122723810583532e-01L), +t3u = LD80C(0x97213c6e35e119ff, -3, -1.47587722994530691476e-01L), +t4u = LD80C(0x845a14a6a81dc94b, -4, 6.46249402389135358063e-02L), +t5u = LD80C(0x864d46fa89997796, -5, -3.27885410884846056084e-02L), +t6u = LD80C(0x93373cbd00297438, -6, 1.79706751150707171293e-02L), +t7u = LD80C(0xa8fcfca7eddc8d1d, -7, -1.03142230361450732547e-02L), +t8u = LD80C(0xc7e7015ff4bc45af, -8, 6.10053603296546099193e-03L), +t9u = LD80C(0xf178d2247adc5093, -9, -3.68456964904901200152e-03L), +t10u = LD80C(0x94188d58f12e5e9f, -9, 2.25976420273774583089e-03L), +t11u = LD80C(0xb7cbaef14e1406f1, -10, -1.40224943666225639823e-03L), +t12u = LD80C(0xe63a671e6704ea4d, -11, 8.78250640744776944887e-04L), +t13u = LD80C(0x914b6c9cae61783e, -11, -5.54255012657716808811e-04L), +t14u = LD80C(0xb858f5bdb79276fe, -12, 3.51614951536825927370e-04L), +t15u = LD80C(0xea73e744c34b9591, -13, -2.23591563824520112236e-04L), +t16u = LD80C(0x99aeabb0d67ba835, -13, 1.46562869351659194136e-04L), +t17u = LD80C(0xd7c6938325db2024, -14, -1.02889866046435680588e-04L), +t18u = LD80C(0xe24cb1e3b0474775, -15, 5.39540265505221957652e-05L); +#define tc (tcu.e) +#define tf (tfu.e) +#define tt (ttu.e) +#define t0 (t0u.e) +#define t1 (t1u.e) +#define t2 (t2u.e) +#define t3 (t3u.e) +#define t4 (t4u.e) +#define t5 (t5u.e) +#define t6 (t6u.e) +#define t7 (t7u.e) +#define t8 (t8u.e) +#define t9 (t9u.e) +#define t10 (t10u.e) +#define t11 (t11u.e) +#define t12 (t12u.e) +#define t13 (t13u.e) +#define t14 (t14u.e) +#define t15 (t15u.e) +#define t16 (t16u.e) +#define t17 (t17u.e) +#define t18 (t18u.e) +/* + * Domain y in [-0.1, 0.232], range ~[-8.1938e-22, 8.3815e-22]: + * |(lgamma(1 + y) + 0.5 * y) / y - u(y) / v(y)| < 2**-71.2 + */ +static const union IEEEl2bits +u0u = LD80C(0x9e233f1bed863d27, -4, -7.72156649015328606095e-02L), +u1u = LD80C(0x98280ee45e4ddd3d, -1, 5.94361239198682739769e-01L), +u2u = LD80C(0xe330c8ead4130733, 0, 1.77492629495841234275e+00L), +u3u = LD80C(0xd4a213f1a002ec52, 0, 1.66119622514818078064e+00L), +u4u = LD80C(0xa5a9ca6f5bc62163, -1, 6.47122051417476492989e-01L), +u5u = LD80C(0xc980e49cd5b019e6, -4, 9.83903751718671509455e-02L), +u6u = LD80C(0xff636a8bdce7025b, -9, 3.89691687802305743450e-03L), +v1u = LD80C(0xbd109c533a19fbf5, 1, 2.95413883330948556544e+00L), +v2u = LD80C(0xd295cbf96f31f099, 1, 3.29039286955665403176e+00L), +v3u = LD80C(0xdab8bcfee40496cb, 0, 1.70876276441416471410e+00L), +v4u = LD80C(0xd2f2dc3638567e9f, -2, 4.12009126299534668571e-01L), +v5u = LD80C(0xa07d9b0851070f41, -5, 3.91822868305682491442e-02L), +v6u = LD80C(0xe3cd8318f7adb2c4, -11, 8.68998648222144351114e-04L); +#define u0 (u0u.e) +#define u1 (u1u.e) +#define u2 (u2u.e) +#define u3 (u3u.e) +#define u4 (u4u.e) +#define u5 (u5u.e) +#define u6 (u6u.e) +#define v1 (v1u.e) +#define v2 (v2u.e) +#define v3 (v3u.e) +#define v4 (v4u.e) +#define v5 (v5u.e) +#define v6 (v6u.e) +/* + * Domain x in (2, 3], range ~[-3.3648e-22, 3.4416e-22]: + * |(lgamma(y+2) - 0.5 * y) / y - s(y)/r(y)| < 2**-72.3 + * with y = x - 2. + */ +static const union IEEEl2bits +s0u = LD80C(0x9e233f1bed863d27, -4, -7.72156649015328606095e-02L), +s1u = LD80C(0xd3ff0dcc7fa91f94, -3, 2.07027640921219389860e-01L), +s2u = LD80C(0xb2bb62782478ef31, -2, 3.49085881391362090549e-01L), +s3u = LD80C(0xb49f7438c4611a74, -3, 1.76389518704213357954e-01L), +s4u = LD80C(0x9a957008fa27ecf9, -5, 3.77401710862930008071e-02L), +s5u = LD80C(0xda9b389a6ca7a7ac, -9, 3.33566791452943399399e-03L), +s6u = LD80C(0xbc7a2263faf59c14, -14, 8.98728786745638844395e-05L), +r1u = LD80C(0xbf5cff5b11477d4d, 0, 1.49502555796294337722e+00L), +r2u = LD80C(0xd9aec89de08e3da6, -1, 8.50323236984473285866e-01L), +r3u = LD80C(0xeab7ae5057c443f9, -3, 2.29216312078225806131e-01L), +r4u = LD80C(0xf29707d9bd2b1e37, -6, 2.96130326586640089145e-02L), +r5u = LD80C(0xd376c2f09736c5a3, -10, 1.61334161411590662495e-03L), +r6u = LD80C(0xc985983d0cd34e3d, -16, 2.40232770710953450636e-05L), +r7u = LD80C(0xe5c7a4f7fc2ef13d, -25, -5.34997929289167573510e-08L); +#define s0 (s0u.e) +#define s1 (s1u.e) +#define s2 (s2u.e) +#define s3 (s3u.e) +#define s4 (s4u.e) +#define s5 (s5u.e) +#define s6 (s6u.e) +#define r1 (r1u.e) +#define r2 (r2u.e) +#define r3 (r3u.e) +#define r4 (r4u.e) +#define r5 (r5u.e) +#define r6 (r6u.e) +#define r7 (r7u.e) +/* + * Domain z in [8, 0x1p70], range ~[-3.0235e-22, 3.0563e-22]: + * |lgamma(x) - (x - 0.5) * (log(x) - 1) - w(1/x)| < 2**-71.7 + */ +static const union IEEEl2bits +w0u = LD80C(0xd67f1c864beb4a69, -2, 4.18938533204672741776e-01L), +w1u = LD80C(0xaaaaaaaaaaaaaaa1, -4, 8.33333333333333332678e-02L), +w2u = LD80C(0xb60b60b60b5491c9, -9, -2.77777777777760927870e-03L), +w3u = LD80C(0xd00d00cf58aede4c, -11, 7.93650793490637233668e-04L), +w4u = LD80C(0x9c09bf626783d4a5, -11, -5.95238023926039051268e-04L), +w5u = LD80C(0xdca7cadc5baa517b, -11, 8.41733700408000822962e-04L), +w6u = LD80C(0xfb060e361e1ffd07, -10, -1.91515849570245136604e-03L), +w7u = LD80C(0xcbd5101bb58d1f2b, -8, 6.22046743903262649294e-03L), +w8u = LD80C(0xad27a668d32c821b, -6, -2.11370706734662081843e-02L); +#define w0 (w0u.e) +#define w1 (w1u.e) +#define w2 (w2u.e) +#define w3 (w3u.e) +#define w4 (w4u.e) +#define w5 (w5u.e) +#define w6 (w6u.e) +#define w7 (w7u.e) +#define w8 (w8u.e) + +static long double +sin_pil(long double x) +{ + volatile long double vz; + long double y,z; + uint64_t n; + uint16_t hx; + + y = -x; + + vz = y+0x1p63; + z = vz-0x1p63; + if (z == y) + return zero; + + vz = y+0x1p61; + EXTRACT_LDBL80_WORDS(hx,n,vz); + z = vz-0x1p61; + if (z > y) { + z -= 0.25; /* adjust to round down */ + n--; + } + n &= 7; /* octant of y mod 2 */ + y = y - z + n * 0.25; /* y mod 2 */ + + switch (n) { + case 0: y = __kernel_sinl(pi*y,zero,0); break; + case 1: + case 2: y = __kernel_cosl(pi*(0.5-y),zero); break; + case 3: + case 4: y = __kernel_sinl(pi*(one-y),zero,0); break; + case 5: + case 6: y = -__kernel_cosl(pi*(y-1.5),zero); break; + default: y = __kernel_sinl(pi*(y-2.0),zero,0); break; + } + return -y; +} + +long double +lgammal_r(long double x, int *signgamp) +{ + long double nadj,p,p1,p2,q,r,t,w,y,z; + uint64_t lx; + int i; + uint16_t hx,ix; + + EXTRACT_LDBL80_WORDS(hx,lx,x); + + /* purge +-Inf and NaNs */ + *signgamp = 1; + ix = hx&0x7fff; + if(ix==0x7fff) return x*x; + + ENTERI(); + + /* purge +-0 and tiny arguments */ + *signgamp = 1-2*(hx>>15); + if(ix<0x3fff-67) { /* |x|<2**-(p+3), return -log(|x|) */ + if((ix|lx)==0) + RETURNI(one/vzero); + RETURNI(-logl(fabsl(x))); + } + + /* purge negative integers and start evaluation for other x < 0 */ + if(hx&0x8000) { + *signgamp = 1; + if(ix>=0x3fff+63) /* |x|>=2**(p-1), must be -integer */ + RETURNI(one/vzero); + t = sin_pil(x); + if(t==zero) RETURNI(one/vzero); /* -integer */ + nadj = logl(pi/fabsl(t*x)); + if(t=7.3159980773925781e-01) {y = 1-x; i= 0;} + else if(x>=2.3163998126983643e-01) {y= x-(tc-1); i=1;} + else {y = x; i=2;} + } else { + r = 0; + if(x>=1.7316312789916992e+00) {y=2-x;i=0;} + else if(x>=1.2316322326660156e+00) {y=x-tc;i=1;} + else {y=x-1;i=2;} + } + switch(i) { + case 0: + z = y*y; + p1 = a0+z*(a2+z*(a4+z*(a6+z*(a8+z*(a10+z*a12))))); + p2 = z*(a1+z*(a3+z*(a5+z*(a7+z*(a9+z*(a11+z*a13)))))); + p = y*p1+p2; + r += p-y/2; break; + case 1: + p = t0+y*t1+tt+y*y*(t2+y*(t3+y*(t4+y*(t5+y*(t6+y*(t7+y*(t8+ + y*(t9+y*(t10+y*(t11+y*(t12+y*(t13+y*(t14+y*(t15+y*(t16+ + y*(t17+y*t18)))))))))))))))); + r += tf + p; break; + case 2: + p1 = y*(u0+y*(u1+y*(u2+y*(u3+y*(u4+y*(u5+y*u6)))))); + p2 = 1+y*(v1+y*(v2+y*(v3+y*(v4+y*(v5+y*v6))))); + r += p1/p2-y/2; + } + } + /* x < 8.0 */ + else if(ix<0x4002) { + i = x; + y = x-i; + p = y*(s0+y*(s1+y*(s2+y*(s3+y*(s4+y*(s5+y*s6)))))); + q = 1+y*(r1+y*(r2+y*(r3+y*(r4+y*(r5+y*(r6+y*r7)))))); + r = y/2+p/q; + z = 1; /* lgamma(1+s) = log(s) + lgamma(s) */ + switch(i) { + case 7: z *= (y+6); /* FALLTHRU */ + case 6: z *= (y+5); /* FALLTHRU */ + case 5: z *= (y+4); /* FALLTHRU */ + case 4: z *= (y+3); /* FALLTHRU */ + case 3: z *= (y+2); /* FALLTHRU */ + r += logl(z); break; + } + /* 8.0 <= x < 2**(p+3) */ + } else if (ix<0x3fff+67) { + t = logl(x); + z = one/x; + y = z*z; + w = w0+z*(w1+y*(w2+y*(w3+y*(w4+y*(w5+y*(w6+y*(w7+y*w8))))))); + r = (x-half)*(t-one)+w; + /* 2**(p+3) <= x <= inf */ + } else + r = x*(logl(x)-1); + if(hx&0x8000) r = nadj - r; + RETURNI(r); +} diff --git a/newlib/libm/ld80/e_powl.c b/newlib/libm/ld80/e_powl.c new file mode 100644 index 0000000000..6c11c73d0f --- /dev/null +++ b/newlib/libm/ld80/e_powl.c @@ -0,0 +1,662 @@ +/*- + * Copyright (c) 2008 Stephen L. Moshier + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include + +#include "../ld/math_private.h" + +/* + * Polynomial evaluator: + * P[0] x^n + P[1] x^(n-1) + ... + P[n] + */ +static inline long double +__polevll(long double x, long double *PP, int n) +{ + long double y; + long double *P; + + P = PP; + y = *P++; + do { + y = y * x + *P++; + } while (--n); + + return (y); +} + +/* + * Polynomial evaluator: + * x^n + P[0] x^(n-1) + P[1] x^(n-2) + ... + P[n] + */ +static inline long double +__p1evll(long double x, long double *PP, int n) +{ + long double y; + long double *P; + + P = PP; + n -= 1; + y = x + *P++; + do { + y = y * x + *P++; + } while (--n); + + return (y); +} + +/* powl.c + * + * Power function, long double precision + * + * + * + * SYNOPSIS: + * + * long double x, y, z, powl(); + * + * z = powl( x, y ); + * + * + * + * DESCRIPTION: + * + * Computes x raised to the yth power. Analytically, + * + * x**y = exp( y log(x) ). + * + * Following Cody and Waite, this program uses a lookup table + * of 2**-i/32 and pseudo extended precision arithmetic to + * obtain several extra bits of accuracy in both the logarithm + * and the exponential. + * + * + * + * ACCURACY: + * + * The relative error of pow(x,y) can be estimated + * by y dl ln(2), where dl is the absolute error of + * the internally computed base 2 logarithm. At the ends + * of the approximation interval the logarithm equal 1/32 + * and its relative error is about 1 lsb = 1.1e-19. Hence + * the predicted relative error in the result is 2.3e-21 y . + * + * Relative error: + * arithmetic domain # trials peak rms + * + * IEEE +-1000 40000 2.8e-18 3.7e-19 + * .001 < x < 1000, with log(x) uniformly distributed. + * -1000 < y < 1000, y uniformly distributed. + * + * IEEE 0,8700 60000 6.5e-18 1.0e-18 + * 0.99 < x < 1.01, 0 < y < 8700, uniformly distributed. + * + * + * ERROR MESSAGES: + * + * message condition value returned + * pow overflow x**y > MAXNUM INFINITY + * pow underflow x**y < 1/MAXNUM 0.0 + * pow domain x<0 and y noninteger 0.0 + * + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include + +#include "../ld/math_private.h" + +/* Table size */ +#define NXT 32 +/* log2(Table size) */ +#define LNXT 5 + +/* log(1+x) = x - .5x^2 + x^3 * P(z)/Q(z) + * on the domain 2^(-1/32) - 1 <= x <= 2^(1/32) - 1 + */ +static long double P[] = { + 8.3319510773868690346226E-4L, + 4.9000050881978028599627E-1L, + 1.7500123722550302671919E0L, + 1.4000100839971580279335E0L, +}; +static long double Q[] = { +/* 1.0000000000000000000000E0L,*/ + 5.2500282295834889175431E0L, + 8.4000598057587009834666E0L, + 4.2000302519914740834728E0L, +}; +/* A[i] = 2^(-i/32), rounded to IEEE long double precision. + * If i is even, A[i] + B[i/2] gives additional accuracy. + */ +static long double A[33] = { + 1.0000000000000000000000E0L, + 9.7857206208770013448287E-1L, + 9.5760328069857364691013E-1L, + 9.3708381705514995065011E-1L, + 9.1700404320467123175367E-1L, + 8.9735453750155359320742E-1L, + 8.7812608018664974155474E-1L, + 8.5930964906123895780165E-1L, + 8.4089641525371454301892E-1L, + 8.2287773907698242225554E-1L, + 8.0524516597462715409607E-1L, + 7.8799042255394324325455E-1L, + 7.7110541270397041179298E-1L, + 7.5458221379671136985669E-1L, + 7.3841307296974965571198E-1L, + 7.2259040348852331001267E-1L, + 7.0710678118654752438189E-1L, + 6.9195494098191597746178E-1L, + 6.7712777346844636413344E-1L, + 6.6261832157987064729696E-1L, + 6.4841977732550483296079E-1L, + 6.3452547859586661129850E-1L, + 6.2092890603674202431705E-1L, + 6.0762367999023443907803E-1L, + 5.9460355750136053334378E-1L, + 5.8186242938878875689693E-1L, + 5.6939431737834582684856E-1L, + 5.5719337129794626814472E-1L, + 5.4525386633262882960438E-1L, + 5.3357020033841180906486E-1L, + 5.2213689121370692017331E-1L, + 5.1094857432705833910408E-1L, + 5.0000000000000000000000E-1L, +}; +static long double B[17] = { + 0.0000000000000000000000E0L, + 2.6176170809902549338711E-20L, +-1.0126791927256478897086E-20L, + 1.3438228172316276937655E-21L, + 1.2207982955417546912101E-20L, +-6.3084814358060867200133E-21L, + 1.3164426894366316434230E-20L, +-1.8527916071632873716786E-20L, + 1.8950325588932570796551E-20L, + 1.5564775779538780478155E-20L, + 6.0859793637556860974380E-21L, +-2.0208749253662532228949E-20L, + 1.4966292219224761844552E-20L, + 3.3540909728056476875639E-21L, +-8.6987564101742849540743E-22L, +-1.2327176863327626135542E-20L, + 0.0000000000000000000000E0L, +}; + +/* 2^x = 1 + x P(x), + * on the interval -1/32 <= x <= 0 + */ +static long double R[] = { + 1.5089970579127659901157E-5L, + 1.5402715328927013076125E-4L, + 1.3333556028915671091390E-3L, + 9.6181291046036762031786E-3L, + 5.5504108664798463044015E-2L, + 2.4022650695910062854352E-1L, + 6.9314718055994530931447E-1L, +}; + +#define douba(k) A[k] +#define doubb(k) B[k] +#define MEXP (NXT*16384.0L) +/* The following if denormal numbers are supported, else -MEXP: */ +#define MNEXP (-NXT*(16384.0L+64.0L)) +/* log2(e) - 1 */ +#define LOG2EA 0.44269504088896340735992L + +#define F W +#define Fa Wa +#define Fb Wb +#define G W +#define Ga Wa +#define Gb u +#define H W +#define Ha Wb +#define Hb Wb + +static const long double MAXLOGL = 1.1356523406294143949492E4L; +static const long double MINLOGL = -1.13994985314888605586758E4L; +static const long double LOGE2L = 6.9314718055994530941723E-1L; +static volatile long double z; +static long double w, W, Wa, Wb, ya, yb, u; +static const long double huge = 0x1p10000L; +#if 0 /* XXX Prevent gcc from erroneously constant folding this. */ +static const long double twom10000 = 0x1p-10000L; +#else +static volatile long double twom10000 = 0x1p-10000L; +#endif + +static long double reducl( long double ); +static long double powil ( long double, int ); + +long double +powl(long double x, long double y) +{ +/* double F, Fa, Fb, G, Ga, Gb, H, Ha, Hb */ +int i, nflg, iyflg, yoddint; +long e; + +if( y == 0.0L ) + return( 1.0L ); + +if( x == 1.0L ) + return( 1.0L ); + +if( isnan(x) ) + return ( nan_mix(x, y) ); +if( isnan(y) ) + return ( nan_mix(x, y) ); + +if( y == 1.0L ) + return( x ); + +if( !isfinite(y) && x == -1.0L ) + return( 1.0L ); + +if( y >= LDBL_MAX ) + { + if( x > 1.0L ) + return( INFINITY ); + if( x > 0.0L && x < 1.0L ) + return( 0.0L ); + if( x < -1.0L ) + return( INFINITY ); + if( x > -1.0L && x < 0.0L ) + return( 0.0L ); + } +if( y <= -LDBL_MAX ) + { + if( x > 1.0L ) + return( 0.0L ); + if( x > 0.0L && x < 1.0L ) + return( INFINITY ); + if( x < -1.0L ) + return( 0.0L ); + if( x > -1.0L && x < 0.0L ) + return( INFINITY ); + } +if( x >= LDBL_MAX ) + { + if( y > 0.0L ) + return( INFINITY ); + return( 0.0L ); + } + +w = floorl(y); +/* Set iyflg to 1 if y is an integer. */ +iyflg = 0; +if( w == y ) + iyflg = 1; + +/* Test for odd integer y. */ +yoddint = 0; +if( iyflg ) + { + ya = fabsl(y); + ya = floorl(0.5L * ya); + yb = 0.5L * fabsl(w); + if( ya != yb ) + yoddint = 1; + } + +if( x <= -LDBL_MAX ) + { + if( y > 0.0L ) + { + if( yoddint ) + return( -INFINITY ); + return( INFINITY ); + } + if( y < 0.0L ) + { + if( yoddint ) + return( -0.0L ); + return( 0.0 ); + } + } + + +nflg = 0; /* flag = 1 if x<0 raised to integer power */ +if( x <= 0.0L ) + { + if( x == 0.0L ) + { + if( y < 0.0 ) + { + if( signbit(x) && yoddint ) + return( -INFINITY ); + return( INFINITY ); + } + if( y > 0.0 ) + { + if( signbit(x) && yoddint ) + return( -0.0L ); + return( 0.0 ); + } + if( y == 0.0L ) + return( 1.0L ); /* 0**0 */ + else + return( 0.0L ); /* 0**y */ + } + else + { + if( iyflg == 0 ) + return (x - x) / (x - x); /* (x<0)**(non-int) is NaN */ + nflg = 1; + } + } + +/* Integer power of an integer. */ + +if( iyflg ) + { + i = w; + w = floorl(x); + if( (w == x) && (fabsl(y) < 32768.0) ) + { + w = powil( x, (int) y ); + return( w ); + } + } + + +if( nflg ) + x = fabsl(x); + +/* separate significand from exponent */ +x = frexpl( x, &i ); +e = i; + +/* find significand in antilog table A[] */ +i = 1; +if( x <= douba(17) ) + i = 17; +if( x <= douba(i+8) ) + i += 8; +if( x <= douba(i+4) ) + i += 4; +if( x <= douba(i+2) ) + i += 2; +if( x >= douba(1) ) + i = -1; +i += 1; + + +/* Find (x - A[i])/A[i] + * in order to compute log(x/A[i]): + * + * log(x) = log( a x/a ) = log(a) + log(x/a) + * + * log(x/a) = log(1+v), v = x/a - 1 = (x-a)/a + */ +x -= douba(i); +x -= doubb(i/2); +x /= douba(i); + + +/* rational approximation for log(1+v): + * + * log(1+v) = v - v**2/2 + v**3 P(v) / Q(v) + */ +z = x*x; +w = x * ( z * __polevll( x, P, 3 ) / __p1evll( x, Q, 3 ) ); +w = w - ldexpl( z, -1 ); /* w - 0.5 * z */ + +/* Convert to base 2 logarithm: + * multiply by log2(e) = 1 + LOG2EA + */ +z = LOG2EA * w; +z += w; +z += LOG2EA * x; +z += x; + +/* Compute exponent term of the base 2 logarithm. */ +w = -i; +w = ldexpl( w, -LNXT ); /* divide by NXT */ +w += e; +/* Now base 2 log of x is w + z. */ + +/* Multiply base 2 log by y, in extended precision. */ + +/* separate y into large part ya + * and small part yb less than 1/NXT + */ +ya = reducl(y); +yb = y - ya; + +/* (w+z)(ya+yb) + * = w*ya + w*yb + z*y + */ +F = z * y + w * yb; +Fa = reducl(F); +Fb = F - Fa; + +G = Fa + w * ya; +Ga = reducl(G); +Gb = G - Ga; + +H = Fb + Gb; +Ha = reducl(H); +w = ldexpl( Ga+Ha, LNXT ); + +/* Test the power of 2 for overflow */ +if( w > MEXP ) + return (huge * huge); /* overflow */ + +if( w < MNEXP ) + return (twom10000 * twom10000); /* underflow */ + +e = w; +Hb = H - Ha; + +if( Hb > 0.0L ) + { + e += 1; + Hb -= (1.0L/NXT); /*0.0625L;*/ + } + +/* Now the product y * log2(x) = Hb + e/NXT. + * + * Compute base 2 exponential of Hb, + * where -0.0625 <= Hb <= 0. + */ +z = Hb * __polevll( Hb, R, 6 ); /* z = 2**Hb - 1 */ + +/* Express e/NXT as an integer plus a negative number of (1/NXT)ths. + * Find lookup table entry for the fractional power of 2. + */ +if( e < 0 ) + i = 0; +else + i = 1; +i = e/NXT + i; +e = NXT*i - e; +w = douba( e ); +z = w * z; /* 2**-e * ( 1 + (2**Hb-1) ) */ +z = z + w; +z = ldexpl( z, i ); /* multiply by integer power of 2 */ + +if( nflg ) + { +/* For negative x, + * find out if the integer exponent + * is odd or even. + */ + w = ldexpl( y, -1 ); + w = floorl(w); + w = ldexpl( w, 1 ); + if( w != y ) + z = -z; /* odd exponent */ + } + +return( z ); +} + + +/* Find a multiple of 1/NXT that is within 1/NXT of x. */ +static inline long double +reducl(long double x) +{ +long double t; + +t = ldexpl( x, LNXT ); +t = floorl( t ); +t = ldexpl( t, -LNXT ); +return(t); +} + +/* powil.c + * + * Real raised to integer power, long double precision + * + * + * + * SYNOPSIS: + * + * long double x, y, powil(); + * int n; + * + * y = powil( x, n ); + * + * + * + * DESCRIPTION: + * + * Returns argument x raised to the nth power. + * The routine efficiently decomposes n as a sum of powers of + * two. The desired power is a product of two-to-the-kth + * powers of x. Thus to compute the 32767 power of x requires + * 28 multiplications instead of 32767 multiplications. + * + * + * + * ACCURACY: + * + * + * Relative error: + * arithmetic x domain n domain # trials peak rms + * IEEE .001,1000 -1022,1023 50000 4.3e-17 7.8e-18 + * IEEE 1,2 -1022,1023 20000 3.9e-17 7.6e-18 + * IEEE .99,1.01 0,8700 10000 3.6e-16 7.2e-17 + * + * Returns MAXNUM on overflow, zero on underflow. + * + */ + +static long double +powil(long double x, int nn) +{ +long double ww, y; +long double s; +int n, e, sign, asign, lx; + +if( x == 0.0L ) + { + if( nn == 0 ) + return( 1.0L ); + else if( nn < 0 ) + return( LDBL_MAX ); + else + return( 0.0L ); + } + +if( nn == 0 ) + return( 1.0L ); + + +if( x < 0.0L ) + { + asign = -1; + x = -x; + } +else + asign = 0; + + +if( nn < 0 ) + { + sign = -1; + n = -nn; + } +else + { + sign = 1; + n = nn; + } + +/* Overflow detection */ + +/* Calculate approximate logarithm of answer */ +s = x; +s = frexpl( s, &lx ); +e = (lx - 1)*n; +if( (e == 0) || (e > 64) || (e < -64) ) + { + s = (s - 7.0710678118654752e-1L) / (s + 7.0710678118654752e-1L); + s = (2.9142135623730950L * s - 0.5L + lx) * nn * LOGE2L; + } +else + { + s = LOGE2L * e; + } + +if( s > MAXLOGL ) + return (huge * huge); /* overflow */ + +if( s < MINLOGL ) + return (twom10000 * twom10000); /* underflow */ +/* Handle tiny denormal answer, but with less accuracy + * since roundoff error in 1.0/x will be amplified. + * The precise demarcation should be the gradual underflow threshold. + */ +if( s < (-MAXLOGL+2.0L) ) + { + x = 1.0L/x; + sign = -sign; + } + +/* First bit of the power */ +if( n & 1 ) + y = x; + +else + { + y = 1.0L; + asign = 0; + } + +ww = x; +n >>= 1; +while( n ) + { + ww = ww * ww; /* arg to the 2-to-the-kth power */ + if( n & 1 ) /* if that bit is set, then include in product */ + y *= ww; + n >>= 1; + } + +if( asign ) + y = -y; /* odd power of negative number */ +if( sign < 0 ) + y = 1.0L/y; +return(y); +} diff --git a/newlib/libm/ld80/e_rem_pio2l.h b/newlib/libm/ld80/e_rem_pio2l.h new file mode 100644 index 0000000000..496a077441 --- /dev/null +++ b/newlib/libm/ld80/e_rem_pio2l.h @@ -0,0 +1,143 @@ +/* From: @(#)e_rem_pio2.c 1.4 95/01/18 */ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * Copyright (c) 2008 Steven G. Kargl, David Schultz, Bruce D. Evans. + * + * Developed at SunSoft, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + * + * Optimized by Bruce D. Evans. + */ + +#include +__FBSDID("$FreeBSD$"); + +/* ld80 version of __ieee754_rem_pio2l(x,y) + * + * return the remainder of x rem pi/2 in y[0]+y[1] + * use __kernel_rem_pio2() + */ + +#include + +#include "math.h" +#include "../ld/math_private.h" +#include "../ld/fpmath.h" + +#define BIAS (LDBL_MAX_EXP - 1) + +/* + * invpio2: 64 bits of 2/pi + * pio2_1: first 39 bits of pi/2 + * pio2_1t: pi/2 - pio2_1 + * pio2_2: second 39 bits of pi/2 + * pio2_2t: pi/2 - (pio2_1+pio2_2) + * pio2_3: third 39 bits of pi/2 + * pio2_3t: pi/2 - (pio2_1+pio2_2+pio2_3) + */ + +static const double +zero = 0.00000000000000000000e+00, /* 0x00000000, 0x00000000 */ +two24 = 1.67772160000000000000e+07, /* 0x41700000, 0x00000000 */ +pio2_1 = 1.57079632679597125389e+00, /* 0x3FF921FB, 0x54444000 */ +pio2_2 = -1.07463465549783099519e-12, /* -0x12e7b967674000.0p-92 */ +pio2_3 = 6.36831716351370313614e-25; /* 0x18a2e037074000.0p-133 */ + +#if defined(__amd64__) || defined(__i386__) +/* Long double constants are slow on these arches, and broken on i386. */ +static const volatile double +invpio2hi = 6.3661977236758138e-01, /* 0x145f306dc9c883.0p-53 */ +invpio2lo = -3.9356538861223811e-17, /* -0x16b00000000000.0p-107 */ +pio2_1thi = -1.0746346554971943e-12, /* -0x12e7b9676733af.0p-92 */ +pio2_1tlo = 8.8451028997905949e-29, /* 0x1c080000000000.0p-146 */ +pio2_2thi = 6.3683171635109499e-25, /* 0x18a2e03707344a.0p-133 */ +pio2_2tlo = 2.3183081793789774e-41, /* 0x10280000000000.0p-187 */ +pio2_3thi = -2.7529965190440717e-37, /* -0x176b7ed8fbbacc.0p-174 */ +pio2_3tlo = -4.2006647512740502e-54; /* -0x19c00000000000.0p-230 */ +#define invpio2 ((long double)invpio2hi + invpio2lo) +#define pio2_1t ((long double)pio2_1thi + pio2_1tlo) +#define pio2_2t ((long double)pio2_2thi + pio2_2tlo) +#define pio2_3t ((long double)pio2_3thi + pio2_3tlo) +#else +static const long double +invpio2 = 6.36619772367581343076e-01L, /* 0xa2f9836e4e44152a.0p-64 */ +pio2_1t = -1.07463465549719416346e-12L, /* -0x973dcb3b399d747f.0p-103 */ +pio2_2t = 6.36831716351095013979e-25L, /* 0xc51701b839a25205.0p-144 */ +pio2_3t = -2.75299651904407171810e-37L; /* -0xbb5bf6c7ddd660ce.0p-185 */ +#endif + +static inline __always_inline int +__ieee754_rem_pio2l(long double x, long double *y) +{ + union IEEEl2bits u,u1; + long double z,w,t,r,fn; + double tx[3],ty[2]; + int e0,ex,i,j,nx,n; + int16_t expsign; + + u.e = x; + expsign = u.xbits.expsign; + ex = expsign & 0x7fff; + if (ex < BIAS + 25 || (ex == BIAS + 25 && u.bits.manh < 0xc90fdaa2)) { + /* |x| ~< 2^25*(pi/2), medium size */ + fn = rnintl(x*invpio2); + n = irint(fn); + r = x-fn*pio2_1; + w = fn*pio2_1t; /* 1st round good to 102 bit */ + { + union IEEEl2bits u2; + int ex1; + j = ex; + y[0] = r-w; + u2.e = y[0]; + ex1 = u2.xbits.expsign & 0x7fff; + i = j-ex1; + if(i>22) { /* 2nd iteration needed, good to 141 */ + t = r; + w = fn*pio2_2; + r = t-w; + w = fn*pio2_2t-((t-r)-w); + y[0] = r-w; + u2.e = y[0]; + ex1 = u2.xbits.expsign & 0x7fff; + i = j-ex1; + if(i>61) { /* 3rd iteration need, 180 bits acc */ + t = r; /* will cover all possible cases */ + w = fn*pio2_3; + r = t-w; + w = fn*pio2_3t-((t-r)-w); + y[0] = r-w; + } + } + } + y[1] = (r-y[0])-w; + return n; + } + /* + * all other (large) arguments + */ + if(ex==0x7fff) { /* x is inf or NaN */ + y[0]=y[1]=x-x; return 0; + } + /* set z = scalbn(|x|,ilogb(x)-23) */ + u1.e = x; + e0 = ex - BIAS - 23; /* e0 = ilogb(|x|)-23; */ + u1.xbits.expsign = ex - e0; + z = u1.e; + for(i=0;i<2;i++) { + tx[i] = (double)((int32_t)(z)); + z = (z-tx[i])*two24; + } + tx[2] = z; + nx = 3; + while(tx[nx-1]==zero) nx--; /* skip zero term */ + n = __kernel_rem_pio2(tx,ty,e0,nx,2); + r = (long double)ty[0] + ty[1]; + w = ty[1] - (r - ty[0]); + if(expsign<0) {y[0] = -r; y[1] = -w; return -n;} + y[0] = r; y[1] = w; return n; +} diff --git a/newlib/libm/ld80/invtrig.c b/newlib/libm/ld80/invtrig.c new file mode 100644 index 0000000000..5c8047857d --- /dev/null +++ b/newlib/libm/ld80/invtrig.c @@ -0,0 +1,84 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2008 David Schultz + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include "invtrig.h" + +/* + * asinl() and acosl() + */ +const long double +pS0 = 1.66666666666666666631e-01L, +pS1 = -4.16313987993683104320e-01L, +pS2 = 3.69068046323246813704e-01L, +pS3 = -1.36213932016738603108e-01L, +pS4 = 1.78324189708471965733e-02L, +pS5 = -2.19216428382605211588e-04L, +pS6 = -7.10526623669075243183e-06L, +qS1 = -2.94788392796209867269e+00L, +qS2 = 3.27309890266528636716e+00L, +qS3 = -1.68285799854822427013e+00L, +qS4 = 3.90699412641738801874e-01L, +qS5 = -3.14365703596053263322e-02L; + +/* + * atanl() + */ +const long double atanhi[] = { + 4.63647609000806116202e-01L, + 7.85398163397448309628e-01L, + 9.82793723247329067960e-01L, + 1.57079632679489661926e+00L, +}; + +const long double atanlo[] = { + 1.18469937025062860669e-20L, + -1.25413940316708300586e-20L, + 2.55232234165405176172e-20L, + -2.50827880633416601173e-20L, +}; + +const long double aT[] = { + 3.33333333333333333017e-01L, + -1.99999999999999632011e-01L, + 1.42857142857046531280e-01L, + -1.11111111100562372733e-01L, + 9.09090902935647302252e-02L, + -7.69230552476207730353e-02L, + 6.66661718042406260546e-02L, + -5.88158892835030888692e-02L, + 5.25499891539726639379e-02L, + -4.70119845393155721494e-02L, + 4.03539201366454414072e-02L, + -2.91303858419364158725e-02L, + 1.24822046299269234080e-02L, +}; + +const long double pi_lo = -5.01655761266833202345e-20L; diff --git a/newlib/libm/ld80/invtrig.h b/newlib/libm/ld80/invtrig.h new file mode 100644 index 0000000000..4a2469ed6c --- /dev/null +++ b/newlib/libm/ld80/invtrig.h @@ -0,0 +1,116 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2008 David Schultz + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ + +#include + +#include "../ld/fpmath.h" + +#define BIAS (LDBL_MAX_EXP - 1) +#define MANH_SIZE LDBL_MANH_SIZE + +/* Approximation thresholds. */ +#define ASIN_LINEAR (BIAS - 32) /* 2**-32 */ +#define ACOS_CONST (BIAS - 65) /* 2**-65 */ +#define ATAN_CONST (BIAS + 65) /* 2**65 */ +#define ATAN_LINEAR (BIAS - 32) /* 2**-32 */ + +/* 0.95 */ +#define THRESH ((0xe666666666666666ULL>>(64-(MANH_SIZE-1)))|LDBL_NBIT) + +/* Constants shared by the long double inverse trig functions. */ +#define pS0 _ItL_pS0 +#define pS1 _ItL_pS1 +#define pS2 _ItL_pS2 +#define pS3 _ItL_pS3 +#define pS4 _ItL_pS4 +#define pS5 _ItL_pS5 +#define pS6 _ItL_pS6 +#define qS1 _ItL_qS1 +#define qS2 _ItL_qS2 +#define qS3 _ItL_qS3 +#define qS4 _ItL_qS4 +#define qS5 _ItL_qS5 +#define atanhi _ItL_atanhi +#define atanlo _ItL_atanlo +#define aT _ItL_aT +#define pi_lo _ItL_pi_lo + +#define pio2_hi atanhi[3] +#define pio2_lo atanlo[3] +#define pio4_hi atanhi[1] + +#ifdef STRUCT_DECLS +typedef struct longdouble { + uint64_t mant; + uint16_t expsign; +} LONGDOUBLE; +#else +typedef long double LONGDOUBLE; +#endif + +extern const LONGDOUBLE pS0, pS1, pS2, pS3, pS4, pS5, pS6; +extern const LONGDOUBLE qS1, qS2, qS3, qS4, qS5; +extern const LONGDOUBLE atanhi[], atanlo[], aT[]; +extern const LONGDOUBLE pi_lo; + +#ifndef STRUCT_DECLS + +static inline long double +P(long double x) +{ + + return (x * (pS0 + x * (pS1 + x * (pS2 + x * (pS3 + x * \ + (pS4 + x * (pS5 + x * pS6))))))); +} + +static inline long double +Q(long double x) +{ + + return (1.0 + x * (qS1 + x * (qS2 + x * (qS3 + x * (qS4 + x * qS5))))); +} + +static inline long double +T_even(long double x) +{ + + return (aT[0] + x * (aT[2] + x * (aT[4] + x * (aT[6] + x * \ + (aT[8] + x * (aT[10] + x * aT[12])))))); +} + +static inline long double +T_odd(long double x) +{ + + return (aT[1] + x * (aT[3] + x * (aT[5] + x * (aT[7] + x * \ + (aT[9] + x * aT[11]))))); +} + +#endif diff --git a/newlib/libm/ld80/k_cosl.c b/newlib/libm/ld80/k_cosl.c new file mode 100644 index 0000000000..f7ba7cf3d1 --- /dev/null +++ b/newlib/libm/ld80/k_cosl.c @@ -0,0 +1,78 @@ +/* From: @(#)k_cos.c 1.3 95/01/18 */ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * Copyright (c) 2008 Steven G. Kargl, David Schultz, Bruce D. Evans. + * + * Developed at SunSoft, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#include +__FBSDID("$FreeBSD$"); + +/* + * ld80 version of k_cos.c. See ../src/k_cos.c for most comments. + */ +#include +#include "../ld/math_private.h" + +/* + * Domain [-0.7854, 0.7854], range ~[-2.43e-23, 2.425e-23]: + * |cos(x) - c(x)| < 2**-75.1 + * + * The coefficients of c(x) were generated by a pari-gp script using + * a Remez algorithm that searches for the best higher coefficients + * after rounding leading coefficients to a specified precision. + * + * Simpler methods like Chebyshev or basic Remez barely suffice for + * cos() in 64-bit precision, because we want the coefficient of x^2 + * to be precisely -0.5 so that multiplying by it is exact, and plain + * rounding of the coefficients of a good polynomial approximation only + * gives this up to about 64-bit precision. Plain rounding also gives + * a mediocre approximation for the coefficient of x^4, but a rounding + * error of 0.5 ulps for this coefficient would only contribute ~0.01 + * ulps to the final error, so this is unimportant. Rounding errors in + * higher coefficients are even less important. + * + * In fact, coefficients above the x^4 one only need to have 53-bit + * precision, and this is more efficient. We get this optimization + * almost for free from the complications needed to search for the best + * higher coefficients. + */ +static const double +one = 1.0; + +#if defined(__amd64__) || defined(__i386__) +/* Long double constants are slow on these arches, and broken on i386. */ +static const volatile double +C1hi = 0.041666666666666664, /* 0x15555555555555.0p-57 */ +C1lo = 2.2598839032744733e-18; /* 0x14d80000000000.0p-111 */ +#define C1 ((long double)C1hi + C1lo) +#else +static const long double +C1 = 0.0416666666666666666136L; /* 0xaaaaaaaaaaaaaa9b.0p-68 */ +#endif + +static const double +C2 = -0.0013888888888888874, /* -0x16c16c16c16c10.0p-62 */ +C3 = 0.000024801587301571716, /* 0x1a01a01a018e22.0p-68 */ +C4 = -0.00000027557319215507120, /* -0x127e4fb7602f22.0p-74 */ +C5 = 0.0000000020876754400407278, /* 0x11eed8caaeccf1.0p-81 */ +C6 = -1.1470297442401303e-11, /* -0x19393412bd1529.0p-89 */ +C7 = 4.7383039476436467e-14; /* 0x1aac9d9af5c43e.0p-97 */ + +long double +__kernel_cosl(long double x, long double y) +{ + long double hz,z,r,w; + + z = x*x; + r = z*(C1+z*(C2+z*(C3+z*(C4+z*(C5+z*(C6+z*C7)))))); + hz = 0.5*z; + w = one-hz; + return w + (((one-w)-hz) + (z*r-x*y)); +} diff --git a/newlib/libm/ld80/k_cospil.h b/newlib/libm/ld80/k_cospil.h new file mode 100644 index 0000000000..6e13ef02ae --- /dev/null +++ b/newlib/libm/ld80/k_cospil.h @@ -0,0 +1,42 @@ +/*- + * Copyright (c) 2017 Steven G. Kargl + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice unmodified, this list of conditions, and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * See ../src/k_cospi.c for implementation details. + */ + +static inline long double +__kernel_cospil(long double x) +{ + long double hi, lo; + + hi = (float)x; + lo = x - hi; + lo = lo * (pi_lo + pi_hi) + hi * pi_lo; + hi *= pi_hi; + _2sumF(hi, lo); + return (__kernel_cosl(hi, lo)); +} diff --git a/newlib/libm/ld80/k_expl.h b/newlib/libm/ld80/k_expl.h new file mode 100644 index 0000000000..a744d2d381 --- /dev/null +++ b/newlib/libm/ld80/k_expl.h @@ -0,0 +1,301 @@ +/* from: FreeBSD: head/lib/msun/ld80/s_expl.c 251343 2013-06-03 19:51:32Z kargl */ + +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2009-2013 Steven G. Kargl + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice unmodified, this list of conditions, and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Optimized by Bruce D. Evans. + */ + +#include +__FBSDID("$FreeBSD$"); + +/* + * See s_expl.c for more comments about __k_expl(). + * + * See ../src/e_exp.c and ../src/k_exp.h for precision-independent comments + * about the secondary kernels. + */ + +#define INTERVALS 128 +#define LOG2_INTERVALS 7 +#define BIAS (LDBL_MAX_EXP - 1) + +static const double +/* + * ln2/INTERVALS = L1+L2 (hi+lo decomposition for multiplication). L1 must + * have at least 22 (= log2(|LDBL_MIN_EXP-extras|) + log2(INTERVALS)) lowest + * bits zero so that multiplication of it by n is exact. + */ +INV_L = 1.8466496523378731e+2, /* 0x171547652b82fe.0p-45 */ +L1 = 5.4152123484527692e-3, /* 0x162e42ff000000.0p-60 */ +L2 = -3.2819649005320973e-13, /* -0x1718432a1b0e26.0p-94 */ +/* + * Domain [-0.002708, 0.002708], range ~[-5.7136e-24, 5.7110e-24]: + * |exp(x) - p(x)| < 2**-77.2 + * (0.002708 is ln2/(2*INTERVALS) rounded up a little). + */ +A2 = 0.5, +A3 = 1.6666666666666119e-1, /* 0x15555555555490.0p-55 */ +A4 = 4.1666666666665887e-2, /* 0x155555555554e5.0p-57 */ +A5 = 8.3333354987869413e-3, /* 0x1111115b789919.0p-59 */ +A6 = 1.3888891738560272e-3; /* 0x16c16c651633ae.0p-62 */ + +/* + * 2^(i/INTERVALS) for i in [0,INTERVALS] is represented by two values where + * the first 53 bits of the significand are stored in hi and the next 53 + * bits are in lo. Tang's paper states that the trailing 6 bits of hi must + * be zero for his algorithm in both single and double precision, because + * the table is re-used in the implementation of expm1() where a floating + * point addition involving hi must be exact. Here hi is double, so + * converting it to long double gives 11 trailing zero bits. + */ +static const struct { + double hi; + double lo; +} tbl[INTERVALS] = { + { 0x1p+0, 0x0p+0 }, + /* + * XXX hi is rounded down, and the formatting is not quite normal. + * But I rather like both. The 0x1.*p format is good for 4N+1 + * mantissa bits. Rounding down makes the lo terms positive, + * so that the columnar formatting can be simpler. + */ + { 0x1.0163da9fb3335p+0, 0x1.b61299ab8cdb7p-54 }, + { 0x1.02c9a3e778060p+0, 0x1.dcdef95949ef4p-53 }, + { 0x1.04315e86e7f84p+0, 0x1.7ae71f3441b49p-53 }, + { 0x1.059b0d3158574p+0, 0x1.d73e2a475b465p-55 }, + { 0x1.0706b29ddf6ddp+0, 0x1.8db880753b0f6p-53 }, + { 0x1.0874518759bc8p+0, 0x1.186be4bb284ffp-57 }, + { 0x1.09e3ecac6f383p+0, 0x1.1487818316136p-54 }, + { 0x1.0b5586cf9890fp+0, 0x1.8a62e4adc610bp-54 }, + { 0x1.0cc922b7247f7p+0, 0x1.01edc16e24f71p-54 }, + { 0x1.0e3ec32d3d1a2p+0, 0x1.03a1727c57b53p-59 }, + { 0x1.0fb66affed31ap+0, 0x1.e464123bb1428p-53 }, + { 0x1.11301d0125b50p+0, 0x1.49d77e35db263p-53 }, + { 0x1.12abdc06c31cbp+0, 0x1.f72575a649ad2p-53 }, + { 0x1.1429aaea92ddfp+0, 0x1.66820328764b1p-53 }, + { 0x1.15a98c8a58e51p+0, 0x1.2406ab9eeab0ap-55 }, + { 0x1.172b83c7d517ap+0, 0x1.b9bef918a1d63p-53 }, + { 0x1.18af9388c8de9p+0, 0x1.777ee1734784ap-53 }, + { 0x1.1a35beb6fcb75p+0, 0x1.e5b4c7b4968e4p-55 }, + { 0x1.1bbe084045cd3p+0, 0x1.3563ce56884fcp-53 }, + { 0x1.1d4873168b9aap+0, 0x1.e016e00a2643cp-54 }, + { 0x1.1ed5022fcd91cp+0, 0x1.71033fec2243ap-53 }, + { 0x1.2063b88628cd6p+0, 0x1.dc775814a8495p-55 }, + { 0x1.21f49917ddc96p+0, 0x1.2a97e9494a5eep-55 }, + { 0x1.2387a6e756238p+0, 0x1.9b07eb6c70573p-54 }, + { 0x1.251ce4fb2a63fp+0, 0x1.ac155bef4f4a4p-55 }, + { 0x1.26b4565e27cddp+0, 0x1.2bd339940e9d9p-55 }, + { 0x1.284dfe1f56380p+0, 0x1.2d9e2b9e07941p-53 }, + { 0x1.29e9df51fdee1p+0, 0x1.612e8afad1255p-55 }, + { 0x1.2b87fd0dad98fp+0, 0x1.fbbd48ca71f95p-53 }, + { 0x1.2d285a6e4030bp+0, 0x1.0024754db41d5p-54 }, + { 0x1.2ecafa93e2f56p+0, 0x1.1ca0f45d52383p-56 }, + { 0x1.306fe0a31b715p+0, 0x1.6f46ad23182e4p-55 }, + { 0x1.32170fc4cd831p+0, 0x1.a9ce78e18047cp-55 }, + { 0x1.33c08b26416ffp+0, 0x1.32721843659a6p-54 }, + { 0x1.356c55f929ff0p+0, 0x1.928c468ec6e76p-53 }, + { 0x1.371a7373aa9cap+0, 0x1.4e28aa05e8a8fp-53 }, + { 0x1.38cae6d05d865p+0, 0x1.0b53961b37da2p-53 }, + { 0x1.3a7db34e59ff6p+0, 0x1.d43792533c144p-53 }, + { 0x1.3c32dc313a8e4p+0, 0x1.08003e4516b1ep-53 }, + { 0x1.3dea64c123422p+0, 0x1.ada0911f09ebcp-55 }, + { 0x1.3fa4504ac801bp+0, 0x1.417ee03548306p-53 }, + { 0x1.4160a21f72e29p+0, 0x1.f0864b71e7b6cp-53 }, + { 0x1.431f5d950a896p+0, 0x1.b8e088728219ap-53 }, + { 0x1.44e086061892dp+0, 0x1.89b7a04ef80d0p-59 }, + { 0x1.46a41ed1d0057p+0, 0x1.c944bd1648a76p-54 }, + { 0x1.486a2b5c13cd0p+0, 0x1.3c1a3b69062f0p-56 }, + { 0x1.4a32af0d7d3dep+0, 0x1.9cb62f3d1be56p-54 }, + { 0x1.4bfdad5362a27p+0, 0x1.d4397afec42e2p-56 }, + { 0x1.4dcb299fddd0dp+0, 0x1.8ecdbbc6a7833p-54 }, + { 0x1.4f9b2769d2ca6p+0, 0x1.5a67b16d3540ep-53 }, + { 0x1.516daa2cf6641p+0, 0x1.8225ea5909b04p-53 }, + { 0x1.5342b569d4f81p+0, 0x1.be1507893b0d5p-53 }, + { 0x1.551a4ca5d920ep+0, 0x1.8a5d8c4048699p-53 }, + { 0x1.56f4736b527dap+0, 0x1.9bb2c011d93adp-54 }, + { 0x1.58d12d497c7fdp+0, 0x1.295e15b9a1de8p-55 }, + { 0x1.5ab07dd485429p+0, 0x1.6324c054647adp-54 }, + { 0x1.5c9268a5946b7p+0, 0x1.c4b1b816986a2p-60 }, + { 0x1.5e76f15ad2148p+0, 0x1.ba6f93080e65ep-54 }, + { 0x1.605e1b976dc08p+0, 0x1.60edeb25490dcp-53 }, + { 0x1.6247eb03a5584p+0, 0x1.63e1f40dfa5b5p-53 }, + { 0x1.6434634ccc31fp+0, 0x1.8edf0e2989db3p-53 }, + { 0x1.6623882552224p+0, 0x1.224fb3c5371e6p-53 }, + { 0x1.68155d44ca973p+0, 0x1.038ae44f73e65p-57 }, + { 0x1.6a09e667f3bccp+0, 0x1.21165f626cdd5p-53 }, + { 0x1.6c012750bdabep+0, 0x1.daed533001e9ep-53 }, + { 0x1.6dfb23c651a2ep+0, 0x1.e441c597c3775p-53 }, + { 0x1.6ff7df9519483p+0, 0x1.9f0fc369e7c42p-53 }, + { 0x1.71f75e8ec5f73p+0, 0x1.ba46e1e5de15ap-53 }, + { 0x1.73f9a48a58173p+0, 0x1.7ab9349cd1562p-53 }, + { 0x1.75feb564267c8p+0, 0x1.7edd354674916p-53 }, + { 0x1.780694fde5d3fp+0, 0x1.866b80a02162dp-54 }, + { 0x1.7a11473eb0186p+0, 0x1.afaa2047ed9b4p-53 }, + { 0x1.7c1ed0130c132p+0, 0x1.f124cd1164dd6p-54 }, + { 0x1.7e2f336cf4e62p+0, 0x1.05d02ba15797ep-56 }, + { 0x1.80427543e1a11p+0, 0x1.6c1bccec9346bp-53 }, + { 0x1.82589994cce12p+0, 0x1.159f115f56694p-53 }, + { 0x1.8471a4623c7acp+0, 0x1.9ca5ed72f8c81p-53 }, + { 0x1.868d99b4492ecp+0, 0x1.01c83b21584a3p-53 }, + { 0x1.88ac7d98a6699p+0, 0x1.994c2f37cb53ap-54 }, + { 0x1.8ace5422aa0dbp+0, 0x1.6e9f156864b27p-54 }, + { 0x1.8cf3216b5448bp+0, 0x1.de55439a2c38bp-53 }, + { 0x1.8f1ae99157736p+0, 0x1.5cc13a2e3976cp-55 }, + { 0x1.9145b0b91ffc5p+0, 0x1.114c368d3ed6ep-53 }, + { 0x1.93737b0cdc5e4p+0, 0x1.e8a0387e4a814p-53 }, + { 0x1.95a44cbc8520ep+0, 0x1.d36906d2b41f9p-53 }, + { 0x1.97d829fde4e4fp+0, 0x1.173d241f23d18p-53 }, + { 0x1.9a0f170ca07b9p+0, 0x1.7462137188ce7p-53 }, + { 0x1.9c49182a3f090p+0, 0x1.c7c46b071f2bep-56 }, + { 0x1.9e86319e32323p+0, 0x1.824ca78e64c6ep-56 }, + { 0x1.a0c667b5de564p+0, 0x1.6535b51719567p-53 }, + { 0x1.a309bec4a2d33p+0, 0x1.6305c7ddc36abp-54 }, + { 0x1.a5503b23e255cp+0, 0x1.1684892395f0fp-53 }, + { 0x1.a799e1330b358p+0, 0x1.bcb7ecac563c7p-54 }, + { 0x1.a9e6b5579fdbfp+0, 0x1.0fac90ef7fd31p-54 }, + { 0x1.ac36bbfd3f379p+0, 0x1.81b72cd4624ccp-53 }, + { 0x1.ae89f995ad3adp+0, 0x1.7a1cd345dcc81p-54 }, + { 0x1.b0e07298db665p+0, 0x1.2108559bf8deep-53 }, + { 0x1.b33a2b84f15fap+0, 0x1.ed7fa1cf7b290p-53 }, + { 0x1.b59728de55939p+0, 0x1.1c7102222c90ep-53 }, + { 0x1.b7f76f2fb5e46p+0, 0x1.d54f610356a79p-53 }, + { 0x1.ba5b030a10649p+0, 0x1.0819678d5eb69p-53 }, + { 0x1.bcc1e904bc1d2p+0, 0x1.23dd07a2d9e84p-55 }, + { 0x1.bf2c25bd71e08p+0, 0x1.0811ae04a31c7p-53 }, + { 0x1.c199bdd85529cp+0, 0x1.11065895048ddp-55 }, + { 0x1.c40ab5fffd07ap+0, 0x1.b4537e083c60ap-54 }, + { 0x1.c67f12e57d14bp+0, 0x1.2884dff483cadp-54 }, + { 0x1.c8f6d9406e7b5p+0, 0x1.1acbc48805c44p-56 }, + { 0x1.cb720dcef9069p+0, 0x1.503cbd1e949dbp-56 }, + { 0x1.cdf0b555dc3f9p+0, 0x1.889f12b1f58a3p-53 }, + { 0x1.d072d4a07897bp+0, 0x1.1a1e45e4342b2p-53 }, + { 0x1.d2f87080d89f1p+0, 0x1.15bc247313d44p-53 }, + { 0x1.d5818dcfba487p+0, 0x1.2ed02d75b3707p-55 }, + { 0x1.d80e316c98397p+0, 0x1.7709f3a09100cp-53 }, + { 0x1.da9e603db3285p+0, 0x1.c2300696db532p-54 }, + { 0x1.dd321f301b460p+0, 0x1.2da5778f018c3p-54 }, + { 0x1.dfc97337b9b5ep+0, 0x1.72d195873da52p-53 }, + { 0x1.e264614f5a128p+0, 0x1.424ec3f42f5b5p-53 }, + { 0x1.e502ee78b3ff6p+0, 0x1.39e8980a9cc8fp-55 }, + { 0x1.e7a51fbc74c83p+0, 0x1.2d522ca0c8de2p-54 }, + { 0x1.ea4afa2a490d9p+0, 0x1.0b1ee7431ebb6p-53 }, + { 0x1.ecf482d8e67f0p+0, 0x1.1b60625f7293ap-53 }, + { 0x1.efa1bee615a27p+0, 0x1.dc7f486a4b6b0p-54 }, + { 0x1.f252b376bba97p+0, 0x1.3a1a5bf0d8e43p-54 }, + { 0x1.f50765b6e4540p+0, 0x1.9d3e12dd8a18bp-54 }, + { 0x1.f7bfdad9cbe13p+0, 0x1.1227697fce57bp-53 }, + { 0x1.fa7c1819e90d8p+0, 0x1.74853f3a5931ep-55 }, + { 0x1.fd3c22b8f71f1p+0, 0x1.2eb74966579e7p-57 } +}; + +/* + * Kernel for expl(x). x must be finite and not tiny or huge. + * "tiny" is anything that would make us underflow (|A6*x^6| < ~LDBL_MIN). + * "huge" is anything that would make fn*L1 inexact (|x| > ~2**17*ln2). + */ +static inline void +__k_expl(long double x, long double *hip, long double *lop, int *kp) +{ + long double fn, q, r, r1, r2, t, z; + int n, n2; + + /* Reduce x to (k*ln2 + endpoint[n2] + r1 + r2). */ + fn = rnintl(x * INV_L); + r = x - fn * L1 - fn * L2; /* r = r1 + r2 done independently. */ + n = irint(fn); + n2 = (unsigned)n % INTERVALS; + /* Depend on the sign bit being propagated: */ + *kp = n >> LOG2_INTERVALS; + r1 = x - fn * L1; + r2 = fn * -L2; + + /* Evaluate expl(endpoint[n2] + r1 + r2) = tbl[n2] * expl(r1 + r2). */ + z = r * r; +#if 0 + q = r2 + z * (A2 + r * A3) + z * z * (A4 + r * A5) + z * z * z * A6; +#else + q = r2 + z * A2 + z * r * (A3 + r * A4 + z * (A5 + r * A6)); +#endif + t = (long double)tbl[n2].lo + tbl[n2].hi; + *hip = tbl[n2].hi; + *lop = tbl[n2].lo + t * (q + r1); +} + +static inline void +k_hexpl(long double x, long double *hip, long double *lop) +{ + float twopkm1; + int k; + + __k_expl(x, hip, lop, &k); + SET_FLOAT_WORD(twopkm1, 0x3f800000 + ((k - 1) << 23)); + *hip *= twopkm1; + *lop *= twopkm1; +} + +static inline long double +hexpl(long double x) +{ + long double hi, lo, twopkm2; + int k; + + twopkm2 = 1; + __k_expl(x, &hi, &lo, &k); + SET_LDBL_EXPSIGN(twopkm2, BIAS + k - 2); + return (lo + hi) * 2 * twopkm2; +} + +#ifdef _COMPLEX_H +/* + * See ../src/k_exp.c for details. + */ +static inline long double complex +__ldexp_cexpl(long double complex z, int expt) +{ + long double c, exp_x, hi, lo, s; + long double x, y, scale1, scale2; + int half_expt, k; + + x = creall(z); + y = cimagl(z); + __k_expl(x, &hi, &lo, &k); + + exp_x = (lo + hi) * 0x1p16382L; + expt += k - 16382; + + scale1 = 1; + half_expt = expt / 2; + SET_LDBL_EXPSIGN(scale1, BIAS + half_expt); + scale2 = 1; + SET_LDBL_EXPSIGN(scale2, BIAS + expt - half_expt); + + sincosl(y, &s, &c); + return (CMPLXL(c * exp_x * scale1 * scale2, + s * exp_x * scale1 * scale2)); +} +#endif /* _COMPLEX_H */ diff --git a/newlib/libm/ld80/k_sinl.c b/newlib/libm/ld80/k_sinl.c new file mode 100644 index 0000000000..7d6e9717d3 --- /dev/null +++ b/newlib/libm/ld80/k_sinl.c @@ -0,0 +1,62 @@ +/* From: @(#)k_sin.c 1.3 95/01/18 */ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * Copyright (c) 2008 Steven G. Kargl, David Schultz, Bruce D. Evans. + * + * Developed at SunSoft, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#include +__FBSDID("$FreeBSD$"); + +/* + * ld80 version of k_sin.c. See ../src/k_sin.c for most comments. + */ +#include +#include "../ld/math_private.h" + +static const double +half = 0.5; + +/* + * Domain [-0.7854, 0.7854], range ~[-1.89e-22, 1.915e-22] + * |sin(x)/x - s(x)| < 2**-72.1 + * + * See ../ld80/k_cosl.c for more details about the polynomial. + */ +#if defined(__amd64__) || defined(__i386__) +/* Long double constants are slow on these arches, and broken on i386. */ +static const volatile double +S1hi = -0.16666666666666666, /* -0x15555555555555.0p-55 */ +S1lo = -9.2563760475949941e-18; /* -0x15580000000000.0p-109 */ +#define S1 ((long double)S1hi + S1lo) +#else +static const long double +S1 = -0.166666666666666666671L; /* -0xaaaaaaaaaaaaaaab.0p-66 */ +#endif + +static const double +S2 = 0.0083333333333333332, /* 0x11111111111111.0p-59 */ +S3 = -0.00019841269841269427, /* -0x1a01a01a019f81.0p-65 */ +S4 = 0.0000027557319223597490, /* 0x171de3a55560f7.0p-71 */ +S5 = -0.000000025052108218074604, /* -0x1ae64564f16cad.0p-78 */ +S6 = 1.6059006598854211e-10, /* 0x161242b90243b5.0p-85 */ +S7 = -7.6429779983024564e-13, /* -0x1ae42ebd1b2e00.0p-93 */ +S8 = 2.6174587166648325e-15; /* 0x179372ea0b3f64.0p-101 */ + +long double +__kernel_sinl(long double x, long double y, int iy) +{ + long double z,r,v; + + z = x*x; + v = z*x; + r = S2+z*(S3+z*(S4+z*(S5+z*(S6+z*(S7+z*S8))))); + if(iy==0) return x+v*(S1+z*r); + else return x-((z*(half*y-v*r)-y)-v*S1); +} diff --git a/newlib/libm/ld80/k_sinpil.h b/newlib/libm/ld80/k_sinpil.h new file mode 100644 index 0000000000..00241b932e --- /dev/null +++ b/newlib/libm/ld80/k_sinpil.h @@ -0,0 +1,42 @@ +/*- + * Copyright (c) 2017 Steven G. Kargl + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice unmodified, this list of conditions, and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * See ../src/k_sinpi.c for implementation details. + */ + +static inline long double +__kernel_sinpil(long double x) +{ + long double hi, lo; + + hi = (float)x; + lo = x - hi; + lo = lo * (pi_lo + pi_hi) + hi * pi_lo; + hi *= pi_hi; + _2sumF(hi, lo); + return (__kernel_sinl(hi, lo, 1)); +} diff --git a/newlib/libm/ld80/s_cospil.c b/newlib/libm/ld80/s_cospil.c new file mode 100644 index 0000000000..75ec27d0c5 --- /dev/null +++ b/newlib/libm/ld80/s_cospil.c @@ -0,0 +1,129 @@ +/*- + * Copyright (c) 2017 Steven G. Kargl + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice unmodified, this list of conditions, and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * See ../src/s_cospi.c for implementation details. + */ + +#ifdef __i386__ +#include +#endif +#include + +#include "../ld/fpmath.h" +#include "math.h" +#include "../ld/math_private.h" + +static const double +pi_hi = 3.1415926814079285e+00, /* 0x400921fb 0x58000000 */ +pi_lo =-2.7818135228334233e-08; /* 0xbe5dde97 0x3dcb3b3a */ + +#include "k_cospil.h" +#include "k_sinpil.h" + +volatile static const double vzero = 0; + +long double +cospil(long double x) +{ + long double ax, c; + uint64_t lx, m; + uint32_t j0; + uint16_t hx, ix; + + EXTRACT_LDBL80_WORDS(hx, lx, x); + ix = hx & 0x7fff; + INSERT_LDBL80_WORDS(ax, ix, lx); + + ENTERI(); + + if (ix < 0x3fff) { /* |x| < 1 */ + if (ix < 0x3ffd) { /* |x| < 0.25 */ + if (ix < 0x3fdd) { /* |x| < 0x1p-34 */ + if ((int)x == 0) + RETURNI(1); + } + RETURNI(__kernel_cospil(ax)); + } + + if (ix < 0x3ffe) /* |x| < 0.5 */ + c = __kernel_sinpil(0.5 - ax); + else if (lx < 0xc000000000000000ull) { /* |x| < 0.75 */ + if (ax == 0.5) + RETURNI(0); + c = -__kernel_sinpil(ax - 0.5); + } else + c = -__kernel_cospil(1 - ax); + RETURNI(c); + } + + if (ix < 0x403e) { /* 1 <= |x| < 0x1p63 */ + /* Determine integer part of ax. */ + j0 = ix - 0x3fff + 1; + if (j0 < 32) { + lx = (lx >> 32) << 32; + lx &= ~(((lx << 32)-1) >> j0); + } else { + m = (uint64_t)-1 >> (j0 + 1); + if (lx & m) lx &= ~m; + } + INSERT_LDBL80_WORDS(x, ix, lx); + + ax -= x; + EXTRACT_LDBL80_WORDS(ix, lx, ax); + + if (ix < 0x3ffe) { /* |x| < 0.5 */ + if (ix < 0x3ffd) /* |x| < 0.25 */ + c = ix == 0 ? 1 : __kernel_cospil(ax); + else + c = __kernel_sinpil(0.5 - ax); + + } else { + if (lx < 0xc000000000000000ull) { /* |x| < 0.75 */ + if (ax == 0.5) + RETURNI(0); + c = -__kernel_sinpil(ax - 0.5); + } else + c = -__kernel_cospil(1 - ax); + } + + if (j0 > 40) + x -= 0x1p40; + if (j0 > 30) + x -= 0x1p30; + j0 = (uint32_t)x; + + RETURNI(j0 & 1 ? -c : c); + } + + if (ix >= 0x7fff) + RETURNI(vzero / vzero); + + /* + * |x| >= 0x1p63 is always an even integer, so return 1. + */ + RETURNI(1); +} diff --git a/newlib/libm/ld80/s_erfl.c b/newlib/libm/ld80/s_erfl.c new file mode 100644 index 0000000000..da04cd8ea8 --- /dev/null +++ b/newlib/libm/ld80/s_erfl.c @@ -0,0 +1,337 @@ +/* @(#)s_erf.c 5.1 93/09/24 */ +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +#include +__FBSDID("$FreeBSD$"); + +/* + * See s_erf.c for complete comments. + * + * Converted to long double by Steven G. Kargl. + */ +#include +#ifdef __i386__ +#include +#endif + +#include "../ld/fpmath.h" +#include "math.h" +#include "../ld/math_private.h" + +/* XXX Prevent compilers from erroneously constant folding: */ +static const volatile long double tiny = 0x1p-10000L; + +static const double +half= 0.5, +one = 1, +two = 2; +/* + * In the domain [0, 2**-34], only the first term in the power series + * expansion of erf(x) is used. The magnitude of the first neglected + * terms is less than 2**-102. + */ +static const union IEEEl2bits +efxu = LD80C(0x8375d410a6db446c, -3, 1.28379167095512573902e-1L), +efx8u = LD80C(0x8375d410a6db446c, 0, 1.02703333676410059122e+0L), +/* + * Domain [0, 0.84375], range ~[-1.423e-22, 1.423e-22]: + * |(erf(x) - x)/x - pp(x)/qq(x)| < 2**-72.573 + */ +pp0u = LD80C(0x8375d410a6db446c, -3, 1.28379167095512573902e-1L), +pp1u = LD80C(0xa46c7d09ec3d0cec, -2, -3.21140201054840180596e-1L), +pp2u = LD80C(0x9b31e66325576f86, -5, -3.78893851760347812082e-2L), +pp3u = LD80C(0x804ac72c9a0b97dd, -7, -7.83032847030604679616e-3L), +pp4u = LD80C(0x9f42bcbc3d5a601d, -12, -3.03765663857082048459e-4L), +pp5u = LD80C(0x9ec4ad6193470693, -16, -1.89266527398167917502e-5L), +qq1u = LD80C(0xdb4b8eb713188d6b, -2, 4.28310832832310510579e-1L), +qq2u = LD80C(0xa5750835b2459bd1, -4, 8.07896272074540216658e-2L), +qq3u = LD80C(0x8b85d6bd6a90b51c, -7, 8.51579638189385354266e-3L), +qq4u = LD80C(0x87332f82cff4ff96, -11, 5.15746855583604912827e-4L), +qq5u = LD80C(0x83466cb6bf9dca00, -16, 1.56492109706256700009e-5L), +qq6u = LD80C(0xf5bf98c2f996bf63, -24, 1.14435527803073879724e-7L); +#define efx (efxu.e) +#define efx8 (efx8u.e) +#define pp0 (pp0u.e) +#define pp1 (pp1u.e) +#define pp2 (pp2u.e) +#define pp3 (pp3u.e) +#define pp4 (pp4u.e) +#define pp5 (pp5u.e) +#define qq1 (qq1u.e) +#define qq2 (qq2u.e) +#define qq3 (qq3u.e) +#define qq4 (qq4u.e) +#define qq5 (qq5u.e) +#define qq6 (qq6u.e) +static const union IEEEl2bits +erxu = LD80C(0xd7bb3d0000000000, -1, 8.42700779438018798828e-1L), +/* + * Domain [0.84375, 1.25], range ~[-8.132e-22, 8.113e-22]: + * |(erf(x) - erx) - pa(x)/qa(x)| < 2**-71.762 + */ +pa0u = LD80C(0xe8211158da02c692, -27, 1.35116960705131296711e-8L), +pa1u = LD80C(0xd488f89f36988618, -2, 4.15107507167065612570e-1L), +pa2u = LD80C(0xece74f8c63fa3942, -4, -1.15675565215949226989e-1L), +pa3u = LD80C(0xc8d31e020727c006, -4, 9.80589241379624665791e-2L), +pa4u = LD80C(0x985d5d5fafb0551f, -5, 3.71984145558422368847e-2L), +pa5u = LD80C(0xa5b6c4854d2f5452, -8, -5.05718799340957673661e-3L), +pa6u = LD80C(0x85c8d58fe3993a47, -8, 4.08277919612202243721e-3L), +pa7u = LD80C(0xddbfbc23677b35cf, -13, 2.11476292145347530794e-4L), +qa1u = LD80C(0xb8a977896f5eff3f, -1, 7.21335860303380361298e-1L), +qa2u = LD80C(0x9fcd662c3d4eac86, -1, 6.24227891731886593333e-1L), +qa3u = LD80C(0x9d0b618eac67ba07, -2, 3.06727455774491855801e-1L), +qa4u = LD80C(0x881a4293f6d6c92d, -3, 1.32912674218195890535e-1L), +qa5u = LD80C(0xbab144f07dea45bf, -5, 4.55792134233613027584e-2L), +qa6u = LD80C(0xa6c34ba438bdc900, -7, 1.01783980070527682680e-2L), +qa7u = LD80C(0x8fa866dc20717a91, -9, 2.19204436518951438183e-3L); +#define erx (erxu.e) +#define pa0 (pa0u.e) +#define pa1 (pa1u.e) +#define pa2 (pa2u.e) +#define pa3 (pa3u.e) +#define pa4 (pa4u.e) +#define pa5 (pa5u.e) +#define pa6 (pa6u.e) +#define pa7 (pa7u.e) +#define qa1 (qa1u.e) +#define qa2 (qa2u.e) +#define qa3 (qa3u.e) +#define qa4 (qa4u.e) +#define qa5 (qa5u.e) +#define qa6 (qa6u.e) +#define qa7 (qa7u.e) +static const union IEEEl2bits +/* + * Domain [1.25,2.85715], range ~[-2.334e-22,2.334e-22]: + * |log(x*erfc(x)) + x**2 + 0.5625 - ra(x)/sa(x)| < 2**-71.860 + */ +ra0u = LD80C(0xa1a091e0fb4f335a, -7, -9.86494298915814308249e-3L), +ra1u = LD80C(0xc2b0d045ae37df6b, -1, -7.60510460864878271275e-1L), +ra2u = LD80C(0xf2cec3ee7da636c5, 3, -1.51754798236892278250e+1L), +ra3u = LD80C(0x813cc205395adc7d, 7, -1.29237335516455333420e+2L), +ra4u = LD80C(0x8737c8b7b4062c2f, 9, -5.40871625829510494776e+2L), +ra5u = LD80C(0x8ffe5383c08d4943, 10, -1.15194769466026108551e+3L), +ra6u = LD80C(0x983573e64d5015a9, 10, -1.21767039790249025544e+3L), +ra7u = LD80C(0x92a794e763a6d4db, 9, -5.86618463370624636688e+2L), +ra8u = LD80C(0xd5ad1fae77c3d9a3, 6, -1.06838132335777049840e+2L), +ra9u = LD80C(0x934c1a247807bb9c, 2, -4.60303980944467334806e+0L), +sa1u = LD80C(0xd342f90012bb1189, 4, 2.64077014928547064865e+1L), +sa2u = LD80C(0x839be13d9d5da883, 8, 2.63217811300123973067e+2L), +sa3u = LD80C(0x9f8cba6d1ae1b24b, 10, 1.27639775710344617587e+3L), +sa4u = LD80C(0xcaa83f403713e33e, 11, 3.24251544209971162003e+3L), +sa5u = LD80C(0x8796aff2f3c47968, 12, 4.33883591261332837874e+3L), +sa6u = LD80C(0xb6ef97f9c753157b, 11, 2.92697460344182158454e+3L), +sa7u = LD80C(0xe02aee5f83773d1c, 9, 8.96670799139389559818e+2L), +sa8u = LD80C(0xc82b83855b88e07e, 6, 1.00084987800048510018e+2L), +sa9u = LD80C(0x92f030aefadf28ad, 1, 2.29591004455459083843e+0L); +#define ra0 (ra0u.e) +#define ra1 (ra1u.e) +#define ra2 (ra2u.e) +#define ra3 (ra3u.e) +#define ra4 (ra4u.e) +#define ra5 (ra5u.e) +#define ra6 (ra6u.e) +#define ra7 (ra7u.e) +#define ra8 (ra8u.e) +#define ra9 (ra9u.e) +#define sa1 (sa1u.e) +#define sa2 (sa2u.e) +#define sa3 (sa3u.e) +#define sa4 (sa4u.e) +#define sa5 (sa5u.e) +#define sa6 (sa6u.e) +#define sa7 (sa7u.e) +#define sa8 (sa8u.e) +#define sa9 (sa9u.e) +/* + * Domain [2.85715,7], range ~[-8.323e-22,8.390e-22]: + * |log(x*erfc(x)) + x**2 + 0.5625 - rb(x)/sb(x)| < 2**-70.326 + */ +static const union IEEEl2bits +rb0u = LD80C(0xa1a091cf43abcd26, -7, -9.86494292470284646962e-3L), +rb1u = LD80C(0xd19d2df1cbb8da0a, -1, -8.18804618389296662837e-1L), +rb2u = LD80C(0x9a4dd1383e5daf5b, 4, -1.92879967111618594779e+1L), +rb3u = LD80C(0xbff0ae9fc0751de6, 7, -1.91940164551245394969e+2L), +rb4u = LD80C(0xdde08465310b472b, 9, -8.87508080766577324539e+2L), +rb5u = LD80C(0xe796e1d38c8c70a9, 10, -1.85271506669474503781e+3L), +rb6u = LD80C(0xbaf655a76e0ab3b5, 10, -1.49569795581333675349e+3L), +rb7u = LD80C(0x95d21e3e75503c21, 8, -2.99641547972948019157e+2L), +sb1u = LD80C(0x814487ed823c8cbd, 5, 3.23169247732868256569e+1L), +sb2u = LD80C(0xbe4bfbb1301304be, 8, 3.80593618534539961773e+2L), +sb3u = LD80C(0x809c4ade46b927c7, 11, 2.05776827838541292848e+3L), +sb4u = LD80C(0xa55284359f3395a8, 12, 5.29031455540062116327e+3L), +sb5u = LD80C(0xbcfa72da9b820874, 12, 6.04730608102312640462e+3L), +sb6u = LD80C(0x9d09a35988934631, 11, 2.51260238030767176221e+3L), +sb7u = LD80C(0xd675bbe542c159fa, 7, 2.14459898308561015684e+2L); +#define rb0 (rb0u.e) +#define rb1 (rb1u.e) +#define rb2 (rb2u.e) +#define rb3 (rb3u.e) +#define rb4 (rb4u.e) +#define rb5 (rb5u.e) +#define rb6 (rb6u.e) +#define rb7 (rb7u.e) +#define sb1 (sb1u.e) +#define sb2 (sb2u.e) +#define sb3 (sb3u.e) +#define sb4 (sb4u.e) +#define sb5 (sb5u.e) +#define sb6 (sb6u.e) +#define sb7 (sb7u.e) +/* + * Domain [7,108], range ~[-4.422e-22,4.422e-22]: + * |log(x*erfc(x)) + x**2 + 0.5625 - rc(x)/sc(x)| < 2**-70.938 + */ +static const union IEEEl2bits +/* err = -4.422092275318925082e-22 -70.937689 */ +rc0u = LD80C(0xa1a091cf437a17ad, -7, -9.86494292470008707260e-3L), +rc1u = LD80C(0xbe79c5a978122b00, -1, -7.44045595049165939261e-1L), +rc2u = LD80C(0xdb26f9bbe31a2794, 3, -1.36970155085888424425e+1L), +rc3u = LD80C(0xb5f69a38f5747ac8, 6, -9.09816453742625888546e+1L), +rc4u = LD80C(0xd79676d970d0a21a, 7, -2.15587750997584074147e+2L), +rc5u = LD80C(0xfe528153c45ec97c, 6, -1.27161142938347796666e+2L), +sc1u = LD80C(0xc5e8cd46d5604a96, 4, 2.47386727842204312937e+1L), +sc2u = LD80C(0xc5f0f5a5484520eb, 7, 1.97941248254913378865e+2L), +sc3u = LD80C(0x964e3c7b34db9170, 9, 6.01222441484087787522e+2L), +sc4u = LD80C(0x99be1b89faa0596a, 9, 6.14970430845978077827e+2L), +sc5u = LD80C(0xf80dfcbf37ffc5ea, 6, 1.24027318931184605891e+2L); +#define rc0 (rc0u.e) +#define rc1 (rc1u.e) +#define rc2 (rc2u.e) +#define rc3 (rc3u.e) +#define rc4 (rc4u.e) +#define rc5 (rc5u.e) +#define sc1 (sc1u.e) +#define sc2 (sc2u.e) +#define sc3 (sc3u.e) +#define sc4 (sc4u.e) +#define sc5 (sc5u.e) + +long double +erfl(long double x) +{ + long double ax,R,S,P,Q,s,y,z,r; + uint64_t lx; + int32_t i; + uint16_t hx; + + EXTRACT_LDBL80_WORDS(hx, lx, x); + + if((hx & 0x7fff) == 0x7fff) { /* erfl(nan)=nan */ + i = (hx>>15)<<1; + return (1-i)+one/x; /* erfl(+-inf)=+-1 */ + } + + ENTERI(); + + ax = fabsl(x); + if(ax < 0.84375) { + if(ax < 0x1p-34L) { + if(ax < 0x1p-16373L) + RETURNI((8*x+efx8*x)/8); /* avoid spurious underflow */ + RETURNI(x + efx*x); + } + z = x*x; + r = pp0+z*(pp1+z*(pp2+z*(pp3+z*(pp4+z*pp5)))); + s = one+z*(qq1+z*(qq2+z*(qq3+z*(qq4+z*(qq5+z*qq6))))); + y = r/s; + RETURNI(x + x*y); + } + if(ax < 1.25) { + s = ax-one; + P = pa0+s*(pa1+s*(pa2+s*(pa3+s*(pa4+s*(pa5+s*(pa6+s*pa7)))))); + Q = one+s*(qa1+s*(qa2+s*(qa3+s*(qa4+s*(qa5+s*(qa6+s*qa7)))))); + if(x>=0) RETURNI(erx + P/Q); else RETURNI(-erx - P/Q); + } + if(ax >= 7) { /* inf>|x|>= 7 */ + if(x>=0) RETURNI(one-tiny); else RETURNI(tiny-one); + } + s = one/(ax*ax); + if(ax < 2.85715) { /* |x| < 2.85715 */ + R=ra0+s*(ra1+s*(ra2+s*(ra3+s*(ra4+s*(ra5+s*(ra6+s*(ra7+ + s*(ra8+s*ra9)))))))); + S=one+s*(sa1+s*(sa2+s*(sa3+s*(sa4+s*(sa5+s*(sa6+s*(sa7+ + s*(sa8+s*sa9)))))))); + } else { /* |x| >= 2.85715 */ + R=rb0+s*(rb1+s*(rb2+s*(rb3+s*(rb4+s*(rb5+s*(rb6+s*rb7)))))); + S=one+s*(sb1+s*(sb2+s*(sb3+s*(sb4+s*(sb5+s*(sb6+s*sb7)))))); + } + z=(float)ax; + r=expl(-z*z-0.5625)*expl((z-ax)*(z+ax)+R/S); + if(x>=0) RETURNI(one-r/ax); else RETURNI(r/ax-one); +} + +long double +erfcl(long double x) +{ + long double ax,R,S,P,Q,s,y,z,r; + uint64_t lx; + uint16_t hx; + + EXTRACT_LDBL80_WORDS(hx, lx, x); + + if((hx & 0x7fff) == 0x7fff) { /* erfcl(nan)=nan */ + /* erfcl(+-inf)=0,2 */ + return ((hx>>15)<<1)+one/x; + } + + ENTERI(); + + ax = fabsl(x); + if(ax < 0.84375L) { + if(ax < 0x1p-34L) + RETURNI(one-x); + z = x*x; + r = pp0+z*(pp1+z*(pp2+z*(pp3+z*(pp4+z*pp5)))); + s = one+z*(qq1+z*(qq2+z*(qq3+z*(qq4+z*(qq5+z*qq6))))); + y = r/s; + if(ax < 0.25L) { /* x<1/4 */ + RETURNI(one-(x+x*y)); + } else { + r = x*y; + r += (x-half); + RETURNI(half - r); + } + } + if(ax < 1.25L) { + s = ax-one; + P = pa0+s*(pa1+s*(pa2+s*(pa3+s*(pa4+s*(pa5+s*(pa6+s*pa7)))))); + Q = one+s*(qa1+s*(qa2+s*(qa3+s*(qa4+s*(qa5+s*(qa6+s*qa7)))))); + if(x>=0) { + z = one-erx; RETURNI(z - P/Q); + } else { + z = (erx+P/Q); RETURNI(one+z); + } + } + + if(ax < 108) { /* |x| < 108 */ + s = one/(ax*ax); + if(ax < 2.85715) { /* |x| < 2.85715 */ + R=ra0+s*(ra1+s*(ra2+s*(ra3+s*(ra4+s*(ra5+s*(ra6+s*(ra7+ + s*(ra8+s*ra9)))))))); + S=one+s*(sa1+s*(sa2+s*(sa3+s*(sa4+s*(sa5+s*(sa6+s*(sa7+ + s*(sa8+s*sa9)))))))); + } else if(ax < 7) { /* | |x| < 7 */ + R=rb0+s*(rb1+s*(rb2+s*(rb3+s*(rb4+s*(rb5+s*(rb6+s*rb7)))))); + S=one+s*(sb1+s*(sb2+s*(sb3+s*(sb4+s*(sb5+s*(sb6+s*sb7)))))); + } else { + if(x < -7) RETURNI(two-tiny);/* x < -7 */ + R=rc0+s*(rc1+s*(rc2+s*(rc3+s*(rc4+s*rc5)))); + S=one+s*(sc1+s*(sc2+s*(sc3+s*(sc4+s*sc5)))); + } + z = (float)ax; + r = expl(-z*z-0.5625)*expl((z-ax)*(z+ax)+R/S); + if(x>0) RETURNI(r/ax); else RETURNI(two-r/ax); + } else { + if(x>0) RETURNI(tiny*tiny); else RETURNI(two-tiny); + } +} diff --git a/newlib/libm/ld80/s_exp2l.c b/newlib/libm/ld80/s_exp2l.c new file mode 100644 index 0000000000..552956b8b7 --- /dev/null +++ b/newlib/libm/ld80/s_exp2l.c @@ -0,0 +1,290 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2005-2008 David Schultz + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +#include +#include + +#ifdef __i386__ +#include +#endif + +#include "../ld/fpmath.h" +#include "math.h" +#include "../ld/math_private.h" + +#define TBLBITS 7 +#define TBLSIZE (1 << TBLBITS) + +#define BIAS (LDBL_MAX_EXP - 1) + +static volatile long double + huge = 0x1p10000L, + twom10000 = 0x1p-10000L; + +static const union IEEEl2bits +P1 = LD80C(0xb17217f7d1cf79ac, -1, 6.93147180559945309429e-1L); + +static const double +redux = 0x1.8p63 / TBLSIZE, +/* + * Domain [-0.00390625, 0.00390625], range ~[-1.7079e-23, 1.7079e-23] + * |exp(x) - p(x)| < 2**-75.6 + */ +P2 = 2.4022650695910072e-1, /* 0x1ebfbdff82c58f.0p-55 */ +P3 = 5.5504108664816879e-2, /* 0x1c6b08d7049e1a.0p-57 */ +P4 = 9.6181291055695180e-3, /* 0x13b2ab6fa8321a.0p-59 */ +P5 = 1.3333563089183052e-3, /* 0x15d8806f67f251.0p-62 */ +P6 = 1.5413361552277414e-4; /* 0x1433ddacff3441.0p-65 */ + +static const double tbl[TBLSIZE * 2] = { + 0x1.6a09e667f3bcdp-1, -0x1.bdd3413b2648p-55, + 0x1.6c012750bdabfp-1, -0x1.2895667ff0cp-57, + 0x1.6dfb23c651a2fp-1, -0x1.bbe3a683c88p-58, + 0x1.6ff7df9519484p-1, -0x1.83c0f25860fp-56, + 0x1.71f75e8ec5f74p-1, -0x1.16e4786887bp-56, + 0x1.73f9a48a58174p-1, -0x1.0a8d96c65d5p-55, + 0x1.75feb564267c9p-1, -0x1.0245957316ep-55, + 0x1.780694fde5d3fp-1, 0x1.866b80a0216p-55, + 0x1.7a11473eb0187p-1, -0x1.41577ee0499p-56, + 0x1.7c1ed0130c132p-1, 0x1.f124cd1164ep-55, + 0x1.7e2f336cf4e62p-1, 0x1.05d02ba157ap-57, + 0x1.80427543e1a12p-1, -0x1.27c86626d97p-55, + 0x1.82589994cce13p-1, -0x1.d4c1dd41533p-55, + 0x1.8471a4623c7adp-1, -0x1.8d684a341cep-56, + 0x1.868d99b4492edp-1, -0x1.fc6f89bd4f68p-55, + 0x1.88ac7d98a6699p-1, 0x1.994c2f37cb5p-55, + 0x1.8ace5422aa0dbp-1, 0x1.6e9f156864bp-55, + 0x1.8cf3216b5448cp-1, -0x1.0d55e32e9e4p-57, + 0x1.8f1ae99157736p-1, 0x1.5cc13a2e397p-56, + 0x1.9145b0b91ffc6p-1, -0x1.dd6792e5825p-55, + 0x1.93737b0cdc5e5p-1, -0x1.75fc781b58p-58, + 0x1.95a44cbc8520fp-1, -0x1.64b7c96a5fp-57, + 0x1.97d829fde4e5p-1, -0x1.d185b7c1b86p-55, + 0x1.9a0f170ca07bap-1, -0x1.173bd91cee6p-55, + 0x1.9c49182a3f09p-1, 0x1.c7c46b071f2p-57, + 0x1.9e86319e32323p-1, 0x1.824ca78e64cp-57, + 0x1.a0c667b5de565p-1, -0x1.359495d1cd5p-55, + 0x1.a309bec4a2d33p-1, 0x1.6305c7ddc368p-55, + 0x1.a5503b23e255dp-1, -0x1.d2f6edb8d42p-55, + 0x1.a799e1330b358p-1, 0x1.bcb7ecac564p-55, + 0x1.a9e6b5579fdbfp-1, 0x1.0fac90ef7fdp-55, + 0x1.ac36bbfd3f37ap-1, -0x1.f9234cae76dp-56, + 0x1.ae89f995ad3adp-1, 0x1.7a1cd345dcc8p-55, + 0x1.b0e07298db666p-1, -0x1.bdef54c80e4p-55, + 0x1.b33a2b84f15fbp-1, -0x1.2805e3084d8p-58, + 0x1.b59728de5593ap-1, -0x1.c71dfbbba6ep-55, + 0x1.b7f76f2fb5e47p-1, -0x1.5584f7e54acp-57, + 0x1.ba5b030a1064ap-1, -0x1.efcd30e5429p-55, + 0x1.bcc1e904bc1d2p-1, 0x1.23dd07a2d9fp-56, + 0x1.bf2c25bd71e09p-1, -0x1.efdca3f6b9c8p-55, + 0x1.c199bdd85529cp-1, 0x1.11065895049p-56, + 0x1.c40ab5fffd07ap-1, 0x1.b4537e083c6p-55, + 0x1.c67f12e57d14bp-1, 0x1.2884dff483c8p-55, + 0x1.c8f6d9406e7b5p-1, 0x1.1acbc48805cp-57, + 0x1.cb720dcef9069p-1, 0x1.503cbd1e94ap-57, + 0x1.cdf0b555dc3fap-1, -0x1.dd83b53829dp-56, + 0x1.d072d4a07897cp-1, -0x1.cbc3743797a8p-55, + 0x1.d2f87080d89f2p-1, -0x1.d487b719d858p-55, + 0x1.d5818dcfba487p-1, 0x1.2ed02d75b37p-56, + 0x1.d80e316c98398p-1, -0x1.11ec18bedep-55, + 0x1.da9e603db3285p-1, 0x1.c2300696db5p-55, + 0x1.dd321f301b46p-1, 0x1.2da5778f019p-55, + 0x1.dfc97337b9b5fp-1, -0x1.1a5cd4f184b8p-55, + 0x1.e264614f5a129p-1, -0x1.7b627817a148p-55, + 0x1.e502ee78b3ff6p-1, 0x1.39e8980a9cdp-56, + 0x1.e7a51fbc74c83p-1, 0x1.2d522ca0c8ep-55, + 0x1.ea4afa2a490dap-1, -0x1.e9c23179c288p-55, + 0x1.ecf482d8e67f1p-1, -0x1.c93f3b411ad8p-55, + 0x1.efa1bee615a27p-1, 0x1.dc7f486a4b68p-55, + 0x1.f252b376bba97p-1, 0x1.3a1a5bf0d8e8p-55, + 0x1.f50765b6e454p-1, 0x1.9d3e12dd8a18p-55, + 0x1.f7bfdad9cbe14p-1, -0x1.dbb12d00635p-55, + 0x1.fa7c1819e90d8p-1, 0x1.74853f3a593p-56, + 0x1.fd3c22b8f71f1p-1, 0x1.2eb74966578p-58, + 0x1p+0, 0x0p+0, + 0x1.0163da9fb3335p+0, 0x1.b61299ab8cd8p-54, + 0x1.02c9a3e778061p+0, -0x1.19083535b08p-56, + 0x1.04315e86e7f85p+0, -0x1.0a31c1977c98p-54, + 0x1.059b0d3158574p+0, 0x1.d73e2a475b4p-55, + 0x1.0706b29ddf6dep+0, -0x1.c91dfe2b13cp-55, + 0x1.0874518759bc8p+0, 0x1.186be4bb284p-57, + 0x1.09e3ecac6f383p+0, 0x1.14878183161p-54, + 0x1.0b5586cf9890fp+0, 0x1.8a62e4adc61p-54, + 0x1.0cc922b7247f7p+0, 0x1.01edc16e24f8p-54, + 0x1.0e3ec32d3d1a2p+0, 0x1.03a1727c58p-59, + 0x1.0fb66affed31bp+0, -0x1.b9bedc44ebcp-57, + 0x1.11301d0125b51p+0, -0x1.6c51039449bp-54, + 0x1.12abdc06c31ccp+0, -0x1.1b514b36ca8p-58, + 0x1.1429aaea92dep+0, -0x1.32fbf9af1368p-54, + 0x1.15a98c8a58e51p+0, 0x1.2406ab9eeabp-55, + 0x1.172b83c7d517bp+0, -0x1.19041b9d78ap-55, + 0x1.18af9388c8deap+0, -0x1.11023d1970f8p-54, + 0x1.1a35beb6fcb75p+0, 0x1.e5b4c7b4969p-55, + 0x1.1bbe084045cd4p+0, -0x1.95386352ef6p-54, + 0x1.1d4873168b9aap+0, 0x1.e016e00a264p-54, + 0x1.1ed5022fcd91dp+0, -0x1.1df98027bb78p-54, + 0x1.2063b88628cd6p+0, 0x1.dc775814a85p-55, + 0x1.21f49917ddc96p+0, 0x1.2a97e9494a6p-55, + 0x1.2387a6e756238p+0, 0x1.9b07eb6c7058p-54, + 0x1.251ce4fb2a63fp+0, 0x1.ac155bef4f5p-55, + 0x1.26b4565e27cddp+0, 0x1.2bd339940eap-55, + 0x1.284dfe1f56381p+0, -0x1.a4c3a8c3f0d8p-54, + 0x1.29e9df51fdee1p+0, 0x1.612e8afad12p-55, + 0x1.2b87fd0dad99p+0, -0x1.10adcd6382p-59, + 0x1.2d285a6e4030bp+0, 0x1.0024754db42p-54, + 0x1.2ecafa93e2f56p+0, 0x1.1ca0f45d524p-56, + 0x1.306fe0a31b715p+0, 0x1.6f46ad23183p-55, + 0x1.32170fc4cd831p+0, 0x1.a9ce78e1804p-55, + 0x1.33c08b26416ffp+0, 0x1.327218436598p-54, + 0x1.356c55f929ff1p+0, -0x1.b5cee5c4e46p-55, + 0x1.371a7373aa9cbp+0, -0x1.63aeabf42ebp-54, + 0x1.38cae6d05d866p+0, -0x1.e958d3c99048p-54, + 0x1.3a7db34e59ff7p+0, -0x1.5e436d661f6p-56, + 0x1.3c32dc313a8e5p+0, -0x1.efff8375d2ap-54, + 0x1.3dea64c123422p+0, 0x1.ada0911f09fp-55, + 0x1.3fa4504ac801cp+0, -0x1.7d023f956fap-54, + 0x1.4160a21f72e2ap+0, -0x1.ef3691c309p-58, + 0x1.431f5d950a897p+0, -0x1.1c7dde35f7ap-55, + 0x1.44e086061892dp+0, 0x1.89b7a04ef8p-59, + 0x1.46a41ed1d0057p+0, 0x1.c944bd1648a8p-54, + 0x1.486a2b5c13cdp+0, 0x1.3c1a3b69062p-56, + 0x1.4a32af0d7d3dep+0, 0x1.9cb62f3d1be8p-54, + 0x1.4bfdad5362a27p+0, 0x1.d4397afec42p-56, + 0x1.4dcb299fddd0dp+0, 0x1.8ecdbbc6a78p-54, + 0x1.4f9b2769d2ca7p+0, -0x1.4b309d25958p-54, + 0x1.516daa2cf6642p+0, -0x1.f768569bd94p-55, + 0x1.5342b569d4f82p+0, -0x1.07abe1db13dp-55, + 0x1.551a4ca5d920fp+0, -0x1.d689cefede6p-55, + 0x1.56f4736b527dap+0, 0x1.9bb2c011d938p-54, + 0x1.58d12d497c7fdp+0, 0x1.295e15b9a1ep-55, + 0x1.5ab07dd485429p+0, 0x1.6324c0546478p-54, + 0x1.5c9268a5946b7p+0, 0x1.c4b1b81698p-60, + 0x1.5e76f15ad2148p+0, 0x1.ba6f93080e68p-54, + 0x1.605e1b976dc09p+0, -0x1.3e2429b56de8p-54, + 0x1.6247eb03a5585p+0, -0x1.383c17e40b48p-54, + 0x1.6434634ccc32p+0, -0x1.c483c759d89p-55, + 0x1.6623882552225p+0, -0x1.bb60987591cp-54, + 0x1.68155d44ca973p+0, 0x1.038ae44f74p-57, +}; + +/** + * Compute the base 2 exponential of x for Intel 80-bit format. + * + * Accuracy: Peak error < 0.511 ulp. + * + * Method: (equally-spaced tables) + * + * Reduce x: + * x = 2**k + y, for integer k and |y| <= 1/2. + * Thus we have exp2l(x) = 2**k * exp2(y). + * + * Reduce y: + * y = i/TBLSIZE + z for integer i near y * TBLSIZE. + * Thus we have exp2(y) = exp2(i/TBLSIZE) * exp2(z), + * with |z| <= 2**-(TBLBITS+1). + * + * We compute exp2(i/TBLSIZE) via table lookup and exp2(z) via a + * degree-6 minimax polynomial with maximum error under 2**-75.6. + * The table entries each have 104 bits of accuracy, encoded as + * a pair of double precision values. + */ +long double +exp2l(long double x) +{ + union IEEEl2bits u, v; + long double r, twopk, twopkp10000, z; + uint32_t hx, ix, i0; + int k; + + /* Filter out exceptional cases. */ + u.e = x; + hx = u.xbits.expsign; + ix = hx & 0x7fff; + if (ix >= BIAS + 14) { /* |x| >= 16384 or x is NaN */ + if (ix == BIAS + LDBL_MAX_EXP) { + if (hx & 0x8000 && u.xbits.man == 1ULL << 63) + return (0.0L); /* x is -Inf */ + return (x + x); /* x is +Inf, NaN or unsupported */ + } + if (x >= 16384) + return (huge * huge); /* overflow */ + if (x <= -16446) + return (twom10000 * twom10000); /* underflow */ + } else if (ix <= BIAS - 66) { /* |x| < 0x1p-65 (includes pseudos) */ + return (1.0L + x); /* 1 with inexact */ + } + + ENTERI(); + + /* + * Reduce x, computing z, i0, and k. The low bits of x + redux + * contain the 16-bit integer part of the exponent (k) followed by + * TBLBITS fractional bits (i0). We use bit tricks to extract these + * as integers, then set z to the remainder. + * + * Example: Suppose x is 0xabc.123456p0 and TBLBITS is 8. + * Then the low-order word of x + redux is 0x000abc12, + * We split this into k = 0xabc and i0 = 0x12 (adjusted to + * index into the table), then we compute z = 0x0.003456p0. + * + * XXX If the exponent is negative, the computation of k depends on + * '>>' doing sign extension. + */ + u.e = x + redux; + i0 = u.bits.manl + TBLSIZE / 2; + k = (int)i0 >> TBLBITS; + i0 = (i0 & (TBLSIZE - 1)) << 1; + u.e -= redux; + z = x - u.e; + v.xbits.man = 1ULL << 63; + if (k >= LDBL_MIN_EXP) { + v.xbits.expsign = BIAS + k; + twopk = v.e; + } else { + v.xbits.expsign = BIAS + k + 10000; + twopkp10000 = v.e; + } + + /* Compute r = exp2l(y) = exp2lt[i0] * p(z). */ + long double t_hi = tbl[i0]; + long double t_lo = tbl[i0 + 1]; + r = t_lo + (t_hi + t_lo) * z * (P1.e + z * (P2 + z * (P3 + z * (P4 + + z * (P5 + z * P6))))) + t_hi; + + /* Scale by 2**k. */ + if (k >= LDBL_MIN_EXP) { + if (k == LDBL_MAX_EXP) + RETURNI(r * 2.0 * 0x1p16383L); + RETURNI(r * twopk); + } else { + RETURNI(r * twopkp10000 * twom10000); + } +} diff --git a/newlib/libm/ld80/s_expl.c b/newlib/libm/ld80/s_expl.c new file mode 100644 index 0000000000..81469e00fb --- /dev/null +++ b/newlib/libm/ld80/s_expl.c @@ -0,0 +1,279 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2009-2013 Steven G. Kargl + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice unmodified, this list of conditions, and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * Optimized by Bruce D. Evans. + */ + +#include +__FBSDID("$FreeBSD$"); + +/** + * Compute the exponential of x for Intel 80-bit format. This is based on: + * + * PTP Tang, "Table-driven implementation of the exponential function + * in IEEE floating-point arithmetic," ACM Trans. Math. Soft., 15, + * 144-157 (1989). + * + * where the 32 table entries have been expanded to INTERVALS (see below). + */ + +#include + +#ifdef __i386__ +#include +#endif + +#include "../ld/fpmath.h" +#include "math.h" +#include "../ld/math_private.h" +#include "k_expl.h" + +/* XXX Prevent compilers from erroneously constant folding these: */ +static const volatile long double +huge = 0x1p10000L, +tiny = 0x1p-10000L; + +static const long double +twom10000 = 0x1p-10000L; + +static const union IEEEl2bits +/* log(2**16384 - 0.5) rounded towards zero: */ +/* log(2**16384 - 0.5 + 1) rounded towards zero for expm1l() is the same: */ +o_thresholdu = LD80C(0xb17217f7d1cf79ab, 13, 11356.5234062941439488L), +#define o_threshold (o_thresholdu.e) +/* log(2**(-16381-64-1)) rounded towards zero: */ +u_thresholdu = LD80C(0xb21dfe7f09e2baa9, 13, -11399.4985314888605581L); +#define u_threshold (u_thresholdu.e) + +long double +expl(long double x) +{ + union IEEEl2bits u; + long double hi, lo, t, twopk; + int k; + uint16_t hx, ix; + + DOPRINT_START(&x); + + /* Filter out exceptional cases. */ + u.e = x; + hx = u.xbits.expsign; + ix = hx & 0x7fff; + if (ix >= BIAS + 13) { /* |x| >= 8192 or x is NaN */ + if (ix == BIAS + LDBL_MAX_EXP) { + if (hx & 0x8000) /* x is -Inf, -NaN or unsupported */ + RETURNP(-1 / x); + RETURNP(x + x); /* x is +Inf, +NaN or unsupported */ + } + if (x > o_threshold) + RETURNP(huge * huge); + if (x < u_threshold) + RETURNP(tiny * tiny); + } else if (ix < BIAS - 75) { /* |x| < 0x1p-75 (includes pseudos) */ + RETURN2P(1, x); /* 1 with inexact iff x != 0 */ + } + + ENTERI(); + + twopk = 1; + __k_expl(x, &hi, &lo, &k); + t = SUM2P(hi, lo); + + /* Scale by 2**k. */ + if (k >= LDBL_MIN_EXP) { + if (k == LDBL_MAX_EXP) + RETURNI(t * 2 * 0x1p16383L); + SET_LDBL_EXPSIGN(twopk, BIAS + k); + RETURNI(t * twopk); + } else { + SET_LDBL_EXPSIGN(twopk, BIAS + k + 10000); + RETURNI(t * twopk * twom10000); + } +} + +/** + * Compute expm1l(x) for Intel 80-bit format. This is based on: + * + * PTP Tang, "Table-driven implementation of the Expm1 function + * in IEEE floating-point arithmetic," ACM Trans. Math. Soft., 18, + * 211-222 (1992). + */ + +/* + * Our T1 and T2 are chosen to be approximately the points where method + * A and method B have the same accuracy. Tang's T1 and T2 are the + * points where method A's accuracy changes by a full bit. For Tang, + * this drop in accuracy makes method A immediately less accurate than + * method B, but our larger INTERVALS makes method A 2 bits more + * accurate so it remains the most accurate method significantly + * closer to the origin despite losing the full bit in our extended + * range for it. + */ +static const double +T1 = -0.1659, /* ~-30.625/128 * log(2) */ +T2 = 0.1659; /* ~30.625/128 * log(2) */ + +/* + * Domain [-0.1659, 0.1659], range ~[-2.6155e-22, 2.5507e-23]: + * |(exp(x)-1-x-x**2/2)/x - p(x)| < 2**-71.6 + * + * XXX the coeffs aren't very carefully rounded, and I get 2.8 more bits, + * but unlike for ld128 we can't drop any terms. + */ +static const union IEEEl2bits +B3 = LD80C(0xaaaaaaaaaaaaaaab, -3, 1.66666666666666666671e-1L), +B4 = LD80C(0xaaaaaaaaaaaaaaac, -5, 4.16666666666666666712e-2L); + +static const double +B5 = 8.3333333333333245e-3, /* 0x1.111111111110cp-7 */ +B6 = 1.3888888888888861e-3, /* 0x1.6c16c16c16c0ap-10 */ +B7 = 1.9841269841532042e-4, /* 0x1.a01a01a0319f9p-13 */ +B8 = 2.4801587302069236e-5, /* 0x1.a01a01a03cbbcp-16 */ +B9 = 2.7557316558468562e-6, /* 0x1.71de37fd33d67p-19 */ +B10 = 2.7557315829785151e-7, /* 0x1.27e4f91418144p-22 */ +B11 = 2.5063168199779829e-8, /* 0x1.ae94fabdc6b27p-26 */ +B12 = 2.0887164654459567e-9; /* 0x1.1f122d6413fe1p-29 */ + +long double +expm1l(long double x) +{ + union IEEEl2bits u, v; + long double fn, hx2_hi, hx2_lo, q, r, r1, r2, t, twomk, twopk, x_hi; + long double x_lo, x2, z; + long double x4; + int k, n, n2; + uint16_t hx, ix; + + DOPRINT_START(&x); + + /* Filter out exceptional cases. */ + u.e = x; + hx = u.xbits.expsign; + ix = hx & 0x7fff; + if (ix >= BIAS + 6) { /* |x| >= 64 or x is NaN */ + if (ix == BIAS + LDBL_MAX_EXP) { + if (hx & 0x8000) /* x is -Inf, -NaN or unsupported */ + RETURNP(-1 / x - 1); + RETURNP(x + x); /* x is +Inf, +NaN or unsupported */ + } + if (x > o_threshold) + RETURNP(huge * huge); + /* + * expm1l() never underflows, but it must avoid + * unrepresentable large negative exponents. We used a + * much smaller threshold for large |x| above than in + * expl() so as to handle not so large negative exponents + * in the same way as large ones here. + */ + if (hx & 0x8000) /* x <= -64 */ + RETURN2P(tiny, -1); /* good for x < -65ln2 - eps */ + } + + ENTERI(); + + if (T1 < x && x < T2) { + if (ix < BIAS - 74) { /* |x| < 0x1p-74 (includes pseudos) */ + /* x (rounded) with inexact if x != 0: */ + RETURNPI(x == 0 ? x : + (0x1p100 * x + fabsl(x)) * 0x1p-100); + } + + x2 = x * x; + x4 = x2 * x2; + q = x4 * (x2 * (x4 * + /* + * XXX the number of terms is no longer good for + * pairwise grouping of all except B3, and the + * grouping is no longer from highest down. + */ + (x2 * B12 + (x * B11 + B10)) + + (x2 * (x * B9 + B8) + (x * B7 + B6))) + + (x * B5 + B4.e)) + x2 * x * B3.e; + + x_hi = (float)x; + x_lo = x - x_hi; + hx2_hi = x_hi * x_hi / 2; + hx2_lo = x_lo * (x + x_hi) / 2; + if (ix >= BIAS - 7) + RETURN2PI(hx2_hi + x_hi, hx2_lo + x_lo + q); + else + RETURN2PI(x, hx2_lo + q + hx2_hi); + } + + /* Reduce x to (k*ln2 + endpoint[n2] + r1 + r2). */ + fn = rnintl(x * INV_L); + n = irint(fn); + n2 = (unsigned)n % INTERVALS; + k = n >> LOG2_INTERVALS; + r1 = x - fn * L1; + r2 = fn * -L2; + r = r1 + r2; + + /* Prepare scale factor. */ + v.e = 1; + v.xbits.expsign = BIAS + k; + twopk = v.e; + + /* + * Evaluate lower terms of + * expl(endpoint[n2] + r1 + r2) = tbl[n2] * expl(r1 + r2). + */ + z = r * r; + q = r2 + z * (A2 + r * A3) + z * z * (A4 + r * A5) + z * z * z * A6; + + t = (long double)tbl[n2].lo + tbl[n2].hi; + + if (k == 0) { + t = SUM2P(tbl[n2].hi - 1, tbl[n2].lo * (r1 + 1) + t * q + + tbl[n2].hi * r1); + RETURNI(t); + } + if (k == -1) { + t = SUM2P(tbl[n2].hi - 2, tbl[n2].lo * (r1 + 1) + t * q + + tbl[n2].hi * r1); + RETURNI(t / 2); + } + if (k < -7) { + t = SUM2P(tbl[n2].hi, tbl[n2].lo + t * (q + r1)); + RETURNI(t * twopk - 1); + } + if (k > 2 * LDBL_MANT_DIG - 1) { + t = SUM2P(tbl[n2].hi, tbl[n2].lo + t * (q + r1)); + if (k == LDBL_MAX_EXP) + RETURNI(t * 2 * 0x1p16383L - 1); + RETURNI(t * twopk - 1); + } + + v.xbits.expsign = BIAS - k; + twomk = v.e; + + if (k > LDBL_MANT_DIG - 1) + t = SUM2P(tbl[n2].hi, tbl[n2].lo - twomk + t * (q + r1)); + else + t = SUM2P(tbl[n2].hi - twomk, tbl[n2].lo + t * (q + r1)); + RETURNI(t * twopk); +} diff --git a/newlib/libm/ld80/s_logl.c b/newlib/libm/ld80/s_logl.c new file mode 100644 index 0000000000..01e541b497 --- /dev/null +++ b/newlib/libm/ld80/s_logl.c @@ -0,0 +1,722 @@ +/*- + * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * + * Copyright (c) 2007-2013 Bruce D. Evans + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice unmodified, this list of conditions, and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +__FBSDID("$FreeBSD$"); + +/** + * Implementation of the natural logarithm of x for Intel 80-bit format. + * + * First decompose x into its base 2 representation: + * + * log(x) = log(X * 2**k), where X is in [1, 2) + * = log(X) + k * log(2). + * + * Let X = X_i + e, where X_i is the center of one of the intervals + * [-1.0/256, 1.0/256), [1.0/256, 3.0/256), .... [2.0-1.0/256, 2.0+1.0/256) + * and X is in this interval. Then + * + * log(X) = log(X_i + e) + * = log(X_i * (1 + e / X_i)) + * = log(X_i) + log(1 + e / X_i). + * + * The values log(X_i) are tabulated below. Let d = e / X_i and use + * + * log(1 + d) = p(d) + * + * where p(d) = d - 0.5*d*d + ... is a special minimax polynomial of + * suitably high degree. + * + * To get sufficiently small roundoff errors, k * log(2), log(X_i), and + * sometimes (if |k| is not large) the first term in p(d) must be evaluated + * and added up in extra precision. Extra precision is not needed for the + * rest of p(d). In the worst case when k = 0 and log(X_i) is 0, the final + * error is controlled mainly by the error in the second term in p(d). The + * error in this term itself is at most 0.5 ulps from the d*d operation in + * it. The error in this term relative to the first term is thus at most + * 0.5 * |-0.5| * |d| < 1.0/1024 ulps. We aim for an accumulated error of + * at most twice this at the point of the final rounding step. Thus the + * final error should be at most 0.5 + 1.0/512 = 0.5020 ulps. Exhaustive + * testing of a float variant of this function showed a maximum final error + * of 0.5008 ulps. Non-exhaustive testing of a double variant of this + * function showed a maximum final error of 0.5078 ulps (near 1+1.0/256). + * + * We made the maximum of |d| (and thus the total relative error and the + * degree of p(d)) small by using a large number of intervals. Using + * centers of intervals instead of endpoints reduces this maximum by a + * factor of 2 for a given number of intervals. p(d) is special only + * in beginning with the Taylor coefficients 0 + 1*d, which tends to happen + * naturally. The most accurate minimax polynomial of a given degree might + * be different, but then we wouldn't want it since we would have to do + * extra work to avoid roundoff error (especially for P0*d instead of d). + */ + +#ifdef DEBUG +#include +#include +#endif + +#ifdef __i386__ +#include +#endif + +#include "../ld/fpmath.h" +#include "math.h" +#define i386_SSE_GOOD +#ifndef NO_STRUCT_RETURN +#define STRUCT_RETURN +#endif +#include "../ld/math_private.h" + +#if !defined(NO_UTAB) && !defined(NO_UTABL) +#define USE_UTAB +#endif + +/* + * Domain [-0.005280, 0.004838], range ~[-5.1736e-22, 5.1738e-22]: + * |log(1 + d)/d - p(d)| < 2**-70.7 + */ +static const double +P2 = -0.5, +P3 = 3.3333333333333359e-1, /* 0x1555555555555a.0p-54 */ +P4 = -2.5000000000004424e-1, /* -0x1000000000031d.0p-54 */ +P5 = 1.9999999992970016e-1, /* 0x1999999972f3c7.0p-55 */ +P6 = -1.6666666072191585e-1, /* -0x15555548912c09.0p-55 */ +P7 = 1.4286227413310518e-1, /* 0x12494f9d9def91.0p-55 */ +P8 = -1.2518388626763144e-1; /* -0x1006068cc0b97c.0p-55 */ + +static volatile const double zero = 0; + +#define INTERVALS 128 +#define LOG2_INTERVALS 7 +#define TSIZE (INTERVALS + 1) +#define G(i) (T[(i)].G) +#define F_hi(i) (T[(i)].F_hi) +#define F_lo(i) (T[(i)].F_lo) +#define ln2_hi F_hi(TSIZE - 1) +#define ln2_lo F_lo(TSIZE - 1) +#define E(i) (U[(i)].E) +#define H(i) (U[(i)].H) + +static const struct { + float G; /* 1/(1 + i/128) rounded to 8/9 bits */ + float F_hi; /* log(1 / G_i) rounded (see below) */ + double F_lo; /* next 53 bits for log(1 / G_i) */ +} T[TSIZE] = { + /* + * ln2_hi and each F_hi(i) are rounded to a number of bits that + * makes F_hi(i) + dk*ln2_hi exact for all i and all dk. + * + * The last entry (for X just below 2) is used to define ln2_hi + * and ln2_lo, to ensure that F_hi(i) and F_lo(i) cancel exactly + * with dk*ln2_hi and dk*ln2_lo, respectively, when dk = -1. + * This is needed for accuracy when x is just below 1. (To avoid + * special cases, such x are "reduced" strangely to X just below + * 2 and dk = -1, and then the exact cancellation is needed + * because any the error from any non-exactness would be too + * large). + * + * We want to share this table between double precision and ld80, + * so the relevant range of dk is the larger one of ld80 + * ([-16445, 16383]) and the relevant exactness requirement is + * the stricter one of double precision. The maximum number of + * bits in F_hi(i) that works is very dependent on i but has + * a minimum of 33. We only need about 12 bits in F_hi(i) for + * it to provide enough extra precision in double precision (11 + * more than that are required for ld80). + * + * We round F_hi(i) to 24 bits so that it can have type float, + * mainly to minimize the size of the table. Using all 24 bits + * in a float for it automatically satisfies the above constraints. + */ + { 0x800000.0p-23, 0, 0 }, + { 0xfe0000.0p-24, 0x8080ac.0p-30, -0x14ee431dae6675.0p-84 }, + { 0xfc0000.0p-24, 0x8102b3.0p-29, -0x1db29ee2d83718.0p-84 }, + { 0xfa0000.0p-24, 0xc24929.0p-29, 0x1191957d173698.0p-83 }, + { 0xf80000.0p-24, 0x820aec.0p-28, 0x13ce8888e02e79.0p-82 }, + { 0xf60000.0p-24, 0xa33577.0p-28, -0x17a4382ce6eb7c.0p-82 }, + { 0xf48000.0p-24, 0xbc42cb.0p-28, -0x172a21161a1076.0p-83 }, + { 0xf30000.0p-24, 0xd57797.0p-28, -0x1e09de07cb9589.0p-82 }, + { 0xf10000.0p-24, 0xf7518e.0p-28, 0x1ae1eec1b036c5.0p-91 }, + { 0xef0000.0p-24, 0x8cb9df.0p-27, -0x1d7355325d560e.0p-81 }, + { 0xed8000.0p-24, 0x999ec0.0p-27, -0x1f9f02d256d503.0p-82 }, + { 0xec0000.0p-24, 0xa6988b.0p-27, -0x16fc0a9d12c17a.0p-83 }, + { 0xea0000.0p-24, 0xb80698.0p-27, 0x15d581c1e8da9a.0p-81 }, + { 0xe80000.0p-24, 0xc99af3.0p-27, -0x1535b3ba8f150b.0p-83 }, + { 0xe70000.0p-24, 0xd273b2.0p-27, 0x163786f5251af0.0p-85 }, + { 0xe50000.0p-24, 0xe442c0.0p-27, 0x1bc4b2368e32d5.0p-84 }, + { 0xe38000.0p-24, 0xf1b83f.0p-27, 0x1c6090f684e676.0p-81 }, + { 0xe20000.0p-24, 0xff448a.0p-27, -0x1890aa69ac9f42.0p-82 }, + { 0xe08000.0p-24, 0x8673f6.0p-26, 0x1b9985194b6b00.0p-80 }, + { 0xdf0000.0p-24, 0x8d515c.0p-26, -0x1dc08d61c6ef1e.0p-83 }, + { 0xdd8000.0p-24, 0x943a9e.0p-26, -0x1f72a2dac729b4.0p-82 }, + { 0xdc0000.0p-24, 0x9b2fe6.0p-26, -0x1fd4dfd3a0afb9.0p-80 }, + { 0xda8000.0p-24, 0xa2315d.0p-26, -0x11b26121629c47.0p-82 }, + { 0xd90000.0p-24, 0xa93f2f.0p-26, 0x1286d633e8e569.0p-81 }, + { 0xd78000.0p-24, 0xb05988.0p-26, 0x16128eba936770.0p-84 }, + { 0xd60000.0p-24, 0xb78094.0p-26, 0x16ead577390d32.0p-80 }, + { 0xd50000.0p-24, 0xbc4c6c.0p-26, 0x151131ccf7c7b7.0p-81 }, + { 0xd38000.0p-24, 0xc3890a.0p-26, -0x115e2cd714bd06.0p-80 }, + { 0xd20000.0p-24, 0xcad2d7.0p-26, -0x1847f406ebd3b0.0p-82 }, + { 0xd10000.0p-24, 0xcfb620.0p-26, 0x1c2259904d6866.0p-81 }, + { 0xcf8000.0p-24, 0xd71653.0p-26, 0x1ece57a8d5ae55.0p-80 }, + { 0xce0000.0p-24, 0xde843a.0p-26, -0x1f109d4bc45954.0p-81 }, + { 0xcd0000.0p-24, 0xe37fde.0p-26, 0x1bc03dc271a74d.0p-81 }, + { 0xcb8000.0p-24, 0xeb050c.0p-26, -0x1bf2badc0df842.0p-85 }, + { 0xca0000.0p-24, 0xf29878.0p-26, -0x18efededd89fbe.0p-87 }, + { 0xc90000.0p-24, 0xf7ad6f.0p-26, 0x1373ff977baa69.0p-81 }, + { 0xc80000.0p-24, 0xfcc8e3.0p-26, 0x196766f2fb3283.0p-80 }, + { 0xc68000.0p-24, 0x823f30.0p-25, 0x19bd076f7c434e.0p-79 }, + { 0xc58000.0p-24, 0x84d52c.0p-25, -0x1a327257af0f46.0p-79 }, + { 0xc40000.0p-24, 0x88bc74.0p-25, 0x113f23def19c5a.0p-81 }, + { 0xc30000.0p-24, 0x8b5ae6.0p-25, 0x1759f6e6b37de9.0p-79 }, + { 0xc20000.0p-24, 0x8dfccb.0p-25, 0x1ad35ca6ed5148.0p-81 }, + { 0xc10000.0p-24, 0x90a22b.0p-25, 0x1a1d71a87deba4.0p-79 }, + { 0xbf8000.0p-24, 0x94a0d8.0p-25, -0x139e5210c2b731.0p-80 }, + { 0xbe8000.0p-24, 0x974f16.0p-25, -0x18f6ebcff3ed73.0p-81 }, + { 0xbd8000.0p-24, 0x9a00f1.0p-25, -0x1aa268be39aab7.0p-79 }, + { 0xbc8000.0p-24, 0x9cb672.0p-25, -0x14c8815839c566.0p-79 }, + { 0xbb0000.0p-24, 0xa0cda1.0p-25, 0x1eaf46390dbb24.0p-81 }, + { 0xba0000.0p-24, 0xa38c6e.0p-25, 0x138e20d831f698.0p-81 }, + { 0xb90000.0p-24, 0xa64f05.0p-25, -0x1e8d3c41123616.0p-82 }, + { 0xb80000.0p-24, 0xa91570.0p-25, 0x1ce28f5f3840b2.0p-80 }, + { 0xb70000.0p-24, 0xabdfbb.0p-25, -0x186e5c0a424234.0p-79 }, + { 0xb60000.0p-24, 0xaeadef.0p-25, -0x14d41a0b2a08a4.0p-83 }, + { 0xb50000.0p-24, 0xb18018.0p-25, 0x16755892770634.0p-79 }, + { 0xb40000.0p-24, 0xb45642.0p-25, -0x16395ebe59b152.0p-82 }, + { 0xb30000.0p-24, 0xb73077.0p-25, 0x1abc65c8595f09.0p-80 }, + { 0xb20000.0p-24, 0xba0ec4.0p-25, -0x1273089d3dad89.0p-79 }, + { 0xb10000.0p-24, 0xbcf133.0p-25, 0x10f9f67b1f4bbf.0p-79 }, + { 0xb00000.0p-24, 0xbfd7d2.0p-25, -0x109fab90486409.0p-80 }, + { 0xaf0000.0p-24, 0xc2c2ac.0p-25, -0x1124680aa43333.0p-79 }, + { 0xae8000.0p-24, 0xc439b3.0p-25, -0x1f360cc4710fc0.0p-80 }, + { 0xad8000.0p-24, 0xc72afd.0p-25, -0x132d91f21d89c9.0p-80 }, + { 0xac8000.0p-24, 0xca20a2.0p-25, -0x16bf9b4d1f8da8.0p-79 }, + { 0xab8000.0p-24, 0xcd1aae.0p-25, 0x19deb5ce6a6a87.0p-81 }, + { 0xaa8000.0p-24, 0xd0192f.0p-25, 0x1a29fb48f7d3cb.0p-79 }, + { 0xaa0000.0p-24, 0xd19a20.0p-25, 0x1127d3c6457f9d.0p-81 }, + { 0xa90000.0p-24, 0xd49f6a.0p-25, -0x1ba930e486a0ac.0p-81 }, + { 0xa80000.0p-24, 0xd7a94b.0p-25, -0x1b6e645f31549e.0p-79 }, + { 0xa70000.0p-24, 0xdab7d0.0p-25, 0x1118a425494b61.0p-80 }, + { 0xa68000.0p-24, 0xdc40d5.0p-25, 0x1966f24d29d3a3.0p-80 }, + { 0xa58000.0p-24, 0xdf566d.0p-25, -0x1d8e52eb2248f1.0p-82 }, + { 0xa48000.0p-24, 0xe270ce.0p-25, -0x1ee370f96e6b68.0p-80 }, + { 0xa40000.0p-24, 0xe3ffce.0p-25, 0x1d155324911f57.0p-80 }, + { 0xa30000.0p-24, 0xe72179.0p-25, -0x1fe6e2f2f867d9.0p-80 }, + { 0xa20000.0p-24, 0xea4812.0p-25, 0x1b7be9add7f4d4.0p-80 }, + { 0xa18000.0p-24, 0xebdd3d.0p-25, 0x1b3cfb3f7511dd.0p-79 }, + { 0xa08000.0p-24, 0xef0b5b.0p-25, -0x1220de1f730190.0p-79 }, + { 0xa00000.0p-24, 0xf0a451.0p-25, -0x176364c9ac81cd.0p-80 }, + { 0x9f0000.0p-24, 0xf3da16.0p-25, 0x1eed6b9aafac8d.0p-81 }, + { 0x9e8000.0p-24, 0xf576e9.0p-25, 0x1d593218675af2.0p-79 }, + { 0x9d8000.0p-24, 0xf8b47c.0p-25, -0x13e8eb7da053e0.0p-84 }, + { 0x9d0000.0p-24, 0xfa553f.0p-25, 0x1c063259bcade0.0p-79 }, + { 0x9c0000.0p-24, 0xfd9ac5.0p-25, 0x1ef491085fa3c1.0p-79 }, + { 0x9b8000.0p-24, 0xff3f8c.0p-25, 0x1d607a7c2b8c53.0p-79 }, + { 0x9a8000.0p-24, 0x814697.0p-24, -0x12ad3817004f3f.0p-78 }, + { 0x9a0000.0p-24, 0x821b06.0p-24, -0x189fc53117f9e5.0p-81 }, + { 0x990000.0p-24, 0x83c5f8.0p-24, 0x14cf15a048907b.0p-79 }, + { 0x988000.0p-24, 0x849c7d.0p-24, 0x1cbb1d35fb8287.0p-78 }, + { 0x978000.0p-24, 0x864ba6.0p-24, 0x1128639b814f9c.0p-78 }, + { 0x970000.0p-24, 0x87244c.0p-24, 0x184733853300f0.0p-79 }, + { 0x968000.0p-24, 0x87fdaa.0p-24, 0x109d23aef77dd6.0p-80 }, + { 0x958000.0p-24, 0x89b293.0p-24, -0x1a81ef367a59de.0p-78 }, + { 0x950000.0p-24, 0x8a8e20.0p-24, -0x121ad3dbb2f452.0p-78 }, + { 0x948000.0p-24, 0x8b6a6a.0p-24, -0x1cfb981628af72.0p-79 }, + { 0x938000.0p-24, 0x8d253a.0p-24, -0x1d21730ea76cfe.0p-79 }, + { 0x930000.0p-24, 0x8e03c2.0p-24, 0x135cc00e566f77.0p-78 }, + { 0x928000.0p-24, 0x8ee30d.0p-24, -0x10fcb5df257a26.0p-80 }, + { 0x918000.0p-24, 0x90a3ee.0p-24, -0x16e171b15433d7.0p-79 }, + { 0x910000.0p-24, 0x918587.0p-24, -0x1d050da07f3237.0p-79 }, + { 0x908000.0p-24, 0x9267e7.0p-24, 0x1be03669a5268d.0p-79 }, + { 0x8f8000.0p-24, 0x942f04.0p-24, 0x10b28e0e26c337.0p-79 }, + { 0x8f0000.0p-24, 0x9513c3.0p-24, 0x1a1d820da57cf3.0p-78 }, + { 0x8e8000.0p-24, 0x95f950.0p-24, -0x19ef8f13ae3cf1.0p-79 }, + { 0x8e0000.0p-24, 0x96dfab.0p-24, -0x109e417a6e507c.0p-78 }, + { 0x8d0000.0p-24, 0x98aed2.0p-24, 0x10d01a2c5b0e98.0p-79 }, + { 0x8c8000.0p-24, 0x9997a2.0p-24, -0x1d6a50d4b61ea7.0p-78 }, + { 0x8c0000.0p-24, 0x9a8145.0p-24, 0x1b3b190b83f952.0p-78 }, + { 0x8b8000.0p-24, 0x9b6bbf.0p-24, 0x13a69fad7e7abe.0p-78 }, + { 0x8b0000.0p-24, 0x9c5711.0p-24, -0x11cd12316f576b.0p-78 }, + { 0x8a8000.0p-24, 0x9d433b.0p-24, 0x1c95c444b807a2.0p-79 }, + { 0x898000.0p-24, 0x9f1e22.0p-24, -0x1b9c224ea698c3.0p-79 }, + { 0x890000.0p-24, 0xa00ce1.0p-24, 0x125ca93186cf0f.0p-81 }, + { 0x888000.0p-24, 0xa0fc80.0p-24, -0x1ee38a7bc228b3.0p-79 }, + { 0x880000.0p-24, 0xa1ed00.0p-24, -0x1a0db876613d20.0p-78 }, + { 0x878000.0p-24, 0xa2de62.0p-24, 0x193224e8516c01.0p-79 }, + { 0x870000.0p-24, 0xa3d0a9.0p-24, 0x1fa28b4d2541ad.0p-79 }, + { 0x868000.0p-24, 0xa4c3d6.0p-24, 0x1c1b5760fb4572.0p-78 }, + { 0x858000.0p-24, 0xa6acea.0p-24, 0x1fed5d0f65949c.0p-80 }, + { 0x850000.0p-24, 0xa7a2d4.0p-24, 0x1ad270c9d74936.0p-80 }, + { 0x848000.0p-24, 0xa899ab.0p-24, 0x199ff15ce53266.0p-79 }, + { 0x840000.0p-24, 0xa99171.0p-24, 0x1a19e15ccc45d2.0p-79 }, + { 0x838000.0p-24, 0xaa8a28.0p-24, -0x121a14ec532b36.0p-80 }, + { 0x830000.0p-24, 0xab83d1.0p-24, 0x1aee319980bff3.0p-79 }, + { 0x828000.0p-24, 0xac7e6f.0p-24, -0x18ffd9e3900346.0p-80 }, + { 0x820000.0p-24, 0xad7a03.0p-24, -0x1e4db102ce29f8.0p-80 }, + { 0x818000.0p-24, 0xae768f.0p-24, 0x17c35c55a04a83.0p-81 }, + { 0x810000.0p-24, 0xaf7415.0p-24, 0x1448324047019b.0p-78 }, + { 0x808000.0p-24, 0xb07298.0p-24, -0x1750ee3915a198.0p-78 }, + { 0x800000.0p-24, 0xb17218.0p-24, -0x105c610ca86c39.0p-81 }, +}; + +#ifdef USE_UTAB +static const struct { + float H; /* 1 + i/INTERVALS (exact) */ + float E; /* H(i) * G(i) - 1 (exact) */ +} U[TSIZE] = { + { 0x800000.0p-23, 0 }, + { 0x810000.0p-23, -0x800000.0p-37 }, + { 0x820000.0p-23, -0x800000.0p-35 }, + { 0x830000.0p-23, -0x900000.0p-34 }, + { 0x840000.0p-23, -0x800000.0p-33 }, + { 0x850000.0p-23, -0xc80000.0p-33 }, + { 0x860000.0p-23, -0xa00000.0p-36 }, + { 0x870000.0p-23, 0x940000.0p-33 }, + { 0x880000.0p-23, 0x800000.0p-35 }, + { 0x890000.0p-23, -0xc80000.0p-34 }, + { 0x8a0000.0p-23, 0xe00000.0p-36 }, + { 0x8b0000.0p-23, 0x900000.0p-33 }, + { 0x8c0000.0p-23, -0x800000.0p-35 }, + { 0x8d0000.0p-23, -0xe00000.0p-33 }, + { 0x8e0000.0p-23, 0x880000.0p-33 }, + { 0x8f0000.0p-23, -0xa80000.0p-34 }, + { 0x900000.0p-23, -0x800000.0p-35 }, + { 0x910000.0p-23, 0x800000.0p-37 }, + { 0x920000.0p-23, 0x900000.0p-35 }, + { 0x930000.0p-23, 0xd00000.0p-35 }, + { 0x940000.0p-23, 0xe00000.0p-35 }, + { 0x950000.0p-23, 0xc00000.0p-35 }, + { 0x960000.0p-23, 0xe00000.0p-36 }, + { 0x970000.0p-23, -0x800000.0p-38 }, + { 0x980000.0p-23, -0xc00000.0p-35 }, + { 0x990000.0p-23, -0xd00000.0p-34 }, + { 0x9a0000.0p-23, 0x880000.0p-33 }, + { 0x9b0000.0p-23, 0xe80000.0p-35 }, + { 0x9c0000.0p-23, -0x800000.0p-35 }, + { 0x9d0000.0p-23, 0xb40000.0p-33 }, + { 0x9e0000.0p-23, 0x880000.0p-34 }, + { 0x9f0000.0p-23, -0xe00000.0p-35 }, + { 0xa00000.0p-23, 0x800000.0p-33 }, + { 0xa10000.0p-23, -0x900000.0p-36 }, + { 0xa20000.0p-23, -0xb00000.0p-33 }, + { 0xa30000.0p-23, -0xa00000.0p-36 }, + { 0xa40000.0p-23, 0x800000.0p-33 }, + { 0xa50000.0p-23, -0xf80000.0p-35 }, + { 0xa60000.0p-23, 0x880000.0p-34 }, + { 0xa70000.0p-23, -0x900000.0p-33 }, + { 0xa80000.0p-23, -0x800000.0p-35 }, + { 0xa90000.0p-23, 0x900000.0p-34 }, + { 0xaa0000.0p-23, 0xa80000.0p-33 }, + { 0xab0000.0p-23, -0xac0000.0p-34 }, + { 0xac0000.0p-23, -0x800000.0p-37 }, + { 0xad0000.0p-23, 0xf80000.0p-35 }, + { 0xae0000.0p-23, 0xf80000.0p-34 }, + { 0xaf0000.0p-23, -0xac0000.0p-33 }, + { 0xb00000.0p-23, -0x800000.0p-33 }, + { 0xb10000.0p-23, -0xb80000.0p-34 }, + { 0xb20000.0p-23, -0x800000.0p-34 }, + { 0xb30000.0p-23, -0xb00000.0p-35 }, + { 0xb40000.0p-23, -0x800000.0p-35 }, + { 0xb50000.0p-23, -0xe00000.0p-36 }, + { 0xb60000.0p-23, -0x800000.0p-35 }, + { 0xb70000.0p-23, -0xb00000.0p-35 }, + { 0xb80000.0p-23, -0x800000.0p-34 }, + { 0xb90000.0p-23, -0xb80000.0p-34 }, + { 0xba0000.0p-23, -0x800000.0p-33 }, + { 0xbb0000.0p-23, -0xac0000.0p-33 }, + { 0xbc0000.0p-23, 0x980000.0p-33 }, + { 0xbd0000.0p-23, 0xbc0000.0p-34 }, + { 0xbe0000.0p-23, 0xe00000.0p-36 }, + { 0xbf0000.0p-23, -0xb80000.0p-35 }, + { 0xc00000.0p-23, -0x800000.0p-33 }, + { 0xc10000.0p-23, 0xa80000.0p-33 }, + { 0xc20000.0p-23, 0x900000.0p-34 }, + { 0xc30000.0p-23, -0x800000.0p-35 }, + { 0xc40000.0p-23, -0x900000.0p-33 }, + { 0xc50000.0p-23, 0x820000.0p-33 }, + { 0xc60000.0p-23, 0x800000.0p-38 }, + { 0xc70000.0p-23, -0x820000.0p-33 }, + { 0xc80000.0p-23, 0x800000.0p-33 }, + { 0xc90000.0p-23, -0xa00000.0p-36 }, + { 0xca0000.0p-23, -0xb00000.0p-33 }, + { 0xcb0000.0p-23, 0x840000.0p-34 }, + { 0xcc0000.0p-23, -0xd00000.0p-34 }, + { 0xcd0000.0p-23, 0x800000.0p-33 }, + { 0xce0000.0p-23, -0xe00000.0p-35 }, + { 0xcf0000.0p-23, 0xa60000.0p-33 }, + { 0xd00000.0p-23, -0x800000.0p-35 }, + { 0xd10000.0p-23, 0xb40000.0p-33 }, + { 0xd20000.0p-23, -0x800000.0p-35 }, + { 0xd30000.0p-23, 0xaa0000.0p-33 }, + { 0xd40000.0p-23, -0xe00000.0p-35 }, + { 0xd50000.0p-23, 0x880000.0p-33 }, + { 0xd60000.0p-23, -0xd00000.0p-34 }, + { 0xd70000.0p-23, 0x9c0000.0p-34 }, + { 0xd80000.0p-23, -0xb00000.0p-33 }, + { 0xd90000.0p-23, -0x800000.0p-38 }, + { 0xda0000.0p-23, 0xa40000.0p-33 }, + { 0xdb0000.0p-23, -0xdc0000.0p-34 }, + { 0xdc0000.0p-23, 0xc00000.0p-35 }, + { 0xdd0000.0p-23, 0xca0000.0p-33 }, + { 0xde0000.0p-23, -0xb80000.0p-34 }, + { 0xdf0000.0p-23, 0xd00000.0p-35 }, + { 0xe00000.0p-23, 0xc00000.0p-33 }, + { 0xe10000.0p-23, -0xf40000.0p-34 }, + { 0xe20000.0p-23, 0x800000.0p-37 }, + { 0xe30000.0p-23, 0x860000.0p-33 }, + { 0xe40000.0p-23, -0xc80000.0p-33 }, + { 0xe50000.0p-23, -0xa80000.0p-34 }, + { 0xe60000.0p-23, 0xe00000.0p-36 }, + { 0xe70000.0p-23, 0x880000.0p-33 }, + { 0xe80000.0p-23, -0xe00000.0p-33 }, + { 0xe90000.0p-23, -0xfc0000.0p-34 }, + { 0xea0000.0p-23, -0x800000.0p-35 }, + { 0xeb0000.0p-23, 0xe80000.0p-35 }, + { 0xec0000.0p-23, 0x900000.0p-33 }, + { 0xed0000.0p-23, 0xe20000.0p-33 }, + { 0xee0000.0p-23, -0xac0000.0p-33 }, + { 0xef0000.0p-23, -0xc80000.0p-34 }, + { 0xf00000.0p-23, -0x800000.0p-35 }, + { 0xf10000.0p-23, 0x800000.0p-35 }, + { 0xf20000.0p-23, 0xb80000.0p-34 }, + { 0xf30000.0p-23, 0x940000.0p-33 }, + { 0xf40000.0p-23, 0xc80000.0p-33 }, + { 0xf50000.0p-23, -0xf20000.0p-33 }, + { 0xf60000.0p-23, -0xc80000.0p-33 }, + { 0xf70000.0p-23, -0xa20000.0p-33 }, + { 0xf80000.0p-23, -0x800000.0p-33 }, + { 0xf90000.0p-23, -0xc40000.0p-34 }, + { 0xfa0000.0p-23, -0x900000.0p-34 }, + { 0xfb0000.0p-23, -0xc80000.0p-35 }, + { 0xfc0000.0p-23, -0x800000.0p-35 }, + { 0xfd0000.0p-23, -0x900000.0p-36 }, + { 0xfe0000.0p-23, -0x800000.0p-37 }, + { 0xff0000.0p-23, -0x800000.0p-39 }, + { 0x800000.0p-22, 0 }, +}; +#endif /* USE_UTAB */ + +#ifdef STRUCT_RETURN +#define RETURN1(rp, v) do { \ + (rp)->hi = (v); \ + (rp)->lo_set = 0; \ + return; \ +} while (0) + +#define RETURN2(rp, h, l) do { \ + (rp)->hi = (h); \ + (rp)->lo = (l); \ + (rp)->lo_set = 1; \ + return; \ +} while (0) + +struct ld { + long double hi; + long double lo; + int lo_set; +}; +#else +#define RETURN1(rp, v) RETURNF(v) +#define RETURN2(rp, h, l) RETURNI((h) + (l)) +#endif + +#ifdef STRUCT_RETURN +static inline __always_inline void +k_logl(long double x, struct ld *rp) +#else +long double +logl(long double x) +#endif +{ + long double d, dk, val_hi, val_lo, z; + uint64_t ix, lx; + int i, k; + uint16_t hx; + + EXTRACT_LDBL80_WORDS(hx, lx, x); + k = -16383; +#if 0 /* Hard to do efficiently. Don't do it until we support all modes. */ + if (x == 1) + RETURN1(rp, 0); /* log(1) = +0 in all rounding modes */ +#endif + if (hx == 0 || hx >= 0x8000) { /* zero, negative or subnormal? */ + if (((hx & 0x7fff) | lx) == 0) + RETURN1(rp, -1 / zero); /* log(+-0) = -Inf */ + if (hx != 0) + /* log(neg or [pseudo-]NaN) = qNaN: */ + RETURN1(rp, (x - x) / zero); + x *= 0x1.0p65; /* subnormal; scale up x */ + /* including pseudo-subnormals */ + EXTRACT_LDBL80_WORDS(hx, lx, x); + k = -16383 - 65; + } else if (hx >= 0x7fff || (lx & 0x8000000000000000ULL) == 0) + RETURN1(rp, x + x); /* log(Inf or NaN) = Inf or qNaN */ + /* log(pseudo-Inf) = qNaN */ + /* log(pseudo-NaN) = qNaN */ + /* log(unnormal) = qNaN */ +#ifndef STRUCT_RETURN + ENTERI(); +#endif + k += hx; + ix = lx & 0x7fffffffffffffffULL; + dk = k; + + /* Scale x to be in [1, 2). */ + SET_LDBL_EXPSIGN(x, 0x3fff); + + /* 0 <= i <= INTERVALS: */ +#define L2I (64 - LOG2_INTERVALS) + i = (ix + (1LL << (L2I - 2))) >> (L2I - 1); + + /* + * -0.005280 < d < 0.004838. In particular, the infinite- + * precision |d| is <= 2**-7. Rounding of G(i) to 8 bits + * ensures that d is representable without extra precision for + * this bound on |d| (since when this calculation is expressed + * as x*G(i)-1, the multiplication needs as many extra bits as + * G(i) has and the subtraction cancels 8 bits). But for + * most i (107 cases out of 129), the infinite-precision |d| + * is <= 2**-8. G(i) is rounded to 9 bits for such i to give + * better accuracy (this works by improving the bound on |d|, + * which in turn allows rounding to 9 bits in more cases). + * This is only important when the original x is near 1 -- it + * lets us avoid using a special method to give the desired + * accuracy for such x. + */ + if (0) + d = x * G(i) - 1; + else { +#ifdef USE_UTAB + d = (x - H(i)) * G(i) + E(i); +#else + long double x_hi, x_lo; + float fx_hi; + + /* + * Split x into x_hi + x_lo to calculate x*G(i)-1 exactly. + * G(i) has at most 9 bits, so the splitting point is not + * critical. + */ + SET_FLOAT_WORD(fx_hi, (lx >> 40) | 0x3f800000); + x_hi = fx_hi; + x_lo = x - x_hi; + d = x_hi * G(i) - 1 + x_lo * G(i); +#endif + } + + /* + * Our algorithm depends on exact cancellation of F_lo(i) and + * F_hi(i) with dk*ln_2_lo and dk*ln2_hi when k is -1 and i is + * at the end of the table. This and other technical complications + * make it difficult to avoid the double scaling in (dk*ln2) * + * log(base) for base != e without losing more accuracy and/or + * efficiency than is gained. + */ + z = d * d; + val_lo = z * d * z * (z * (d * P8 + P7) + (d * P6 + P5)) + + (F_lo(i) + dk * ln2_lo + z * d * (d * P4 + P3)) + z * P2; + val_hi = d; +#ifdef DEBUG + if (fetestexcept(FE_UNDERFLOW)) + breakpoint(); +#endif + + _3sumF(val_hi, val_lo, F_hi(i) + dk * ln2_hi); + RETURN2(rp, val_hi, val_lo); +} + +long double +log1pl(long double x) +{ + long double d, d_hi, d_lo, dk, f_lo, val_hi, val_lo, z; + long double f_hi, twopminusk; + uint64_t ix, lx; + int i, k; + int16_t ax, hx; + + DOPRINT_START(&x); + EXTRACT_LDBL80_WORDS(hx, lx, x); + if (hx < 0x3fff) { /* x < 1, or x neg NaN */ + ax = hx & 0x7fff; + if (ax >= 0x3fff) { /* x <= -1, or x neg NaN */ + if (ax == 0x3fff && lx == 0x8000000000000000ULL) + RETURNP(-1 / zero); /* log1p(-1) = -Inf */ + /* log1p(x < 1, or x [pseudo-]NaN) = qNaN: */ + RETURNP((x - x) / (x - x)); + } + if (ax <= 0x3fbe) { /* |x| < 2**-64 */ + if ((int)x == 0) + RETURNP(x); /* x with inexact if x != 0 */ + } + f_hi = 1; + f_lo = x; + } else if (hx >= 0x7fff) { /* x +Inf or non-neg NaN */ + RETURNP(x + x); /* log1p(Inf or NaN) = Inf or qNaN */ + /* log1p(pseudo-Inf) = qNaN */ + /* log1p(pseudo-NaN) = qNaN */ + /* log1p(unnormal) = qNaN */ + } else if (hx < 0x407f) { /* 1 <= x < 2**128 */ + f_hi = x; + f_lo = 1; + } else { /* 2**128 <= x < +Inf */ + f_hi = x; + f_lo = 0; /* avoid underflow of the P5 term */ + } + ENTERI(); + x = f_hi + f_lo; + f_lo = (f_hi - x) + f_lo; + + EXTRACT_LDBL80_WORDS(hx, lx, x); + k = -16383; + + k += hx; + ix = lx & 0x7fffffffffffffffULL; + dk = k; + + SET_LDBL_EXPSIGN(x, 0x3fff); + twopminusk = 1; + SET_LDBL_EXPSIGN(twopminusk, 0x7ffe - (hx & 0x7fff)); + f_lo *= twopminusk; + + i = (ix + (1LL << (L2I - 2))) >> (L2I - 1); + + /* + * x*G(i)-1 (with a reduced x) can be represented exactly, as + * above, but now we need to evaluate the polynomial on d = + * (x+f_lo)*G(i)-1 and extra precision is needed for that. + * Since x+x_lo is a hi+lo decomposition and subtracting 1 + * doesn't lose too many bits, an inexact calculation for + * f_lo*G(i) is good enough. + */ + if (0) + d_hi = x * G(i) - 1; + else { +#ifdef USE_UTAB + d_hi = (x - H(i)) * G(i) + E(i); +#else + long double x_hi, x_lo; + float fx_hi; + + SET_FLOAT_WORD(fx_hi, (lx >> 40) | 0x3f800000); + x_hi = fx_hi; + x_lo = x - x_hi; + d_hi = x_hi * G(i) - 1 + x_lo * G(i); +#endif + } + d_lo = f_lo * G(i); + + /* + * This is _2sumF(d_hi, d_lo) inlined. The condition + * (d_hi == 0 || |d_hi| >= |d_lo|) for using _2sumF() is not + * always satisifed, so it is not clear that this works, but + * it works in practice. It works even if it gives a wrong + * normalized d_lo, since |d_lo| > |d_hi| implies that i is + * nonzero and d is tiny, so the F(i) term dominates d_lo. + * In float precision: + * (By exhaustive testing, the worst case is d_hi = 0x1.bp-25. + * And if d is only a little tinier than that, we would have + * another underflow problem for the P3 term; this is also ruled + * out by exhaustive testing.) + */ + d = d_hi + d_lo; + d_lo = d_hi - d + d_lo; + d_hi = d; + + z = d * d; + val_lo = z * d * z * (z * (d * P8 + P7) + (d * P6 + P5)) + + (F_lo(i) + dk * ln2_lo + d_lo + z * d * (d * P4 + P3)) + z * P2; + val_hi = d_hi; +#ifdef DEBUG + if (fetestexcept(FE_UNDERFLOW)) + breakpoint(); +#endif + + _3sumF(val_hi, val_lo, F_hi(i) + dk * ln2_hi); + RETURN2PI(val_hi, val_lo); +} + +#ifdef STRUCT_RETURN + +long double +logl(long double x) +{ + struct ld r; + + ENTERI(); + DOPRINT_START(&x); + k_logl(x, &r); + RETURNSPI(&r); +} + +/* Use macros since GCC < 8 rejects static const expressions in initializers. */ +#define invln10_hi 4.3429448190317999e-1 /* 0x1bcb7b1526e000.0p-54 */ +#define invln10_lo 7.1842412889749798e-14 /* 0x1438ca9aadd558.0p-96 */ +#define invln2_hi 1.4426950408887933e0 /* 0x171547652b8000.0p-52 */ +#define invln2_lo 1.7010652264631490e-13 /* 0x17f0bbbe87fed0.0p-95 */ +/* Let the compiler pre-calculate this sum to avoid FE_INEXACT at run time. */ +static const double invln10_lo_plus_hi = invln10_lo + invln10_hi; +static const double invln2_lo_plus_hi = invln2_lo + invln2_hi; + +long double +log10l(long double x) +{ + struct ld r; + long double hi, lo; + + ENTERI(); + DOPRINT_START(&x); + k_logl(x, &r); + if (!r.lo_set) + RETURNPI(r.hi); + _2sumF(r.hi, r.lo); + hi = (float)r.hi; + lo = r.lo + (r.hi - hi); + RETURN2PI(invln10_hi * hi, + invln10_lo_plus_hi * lo + invln10_lo * hi); +} + +long double +log2l(long double x) +{ + struct ld r; + long double hi, lo; + + ENTERI(); + DOPRINT_START(&x); + k_logl(x, &r); + if (!r.lo_set) + RETURNPI(r.hi); + _2sumF(r.hi, r.lo); + hi = (float)r.hi; + lo = r.lo + (r.hi - hi); + RETURN2PI(invln2_hi * hi, + invln2_lo_plus_hi * lo + invln2_lo * hi); +} + +#endif /* STRUCT_RETURN */ diff --git a/newlib/libm/ld80/s_sinpil.c b/newlib/libm/ld80/s_sinpil.c new file mode 100644 index 0000000000..3390d4d056 --- /dev/null +++ b/newlib/libm/ld80/s_sinpil.c @@ -0,0 +1,140 @@ +/*- + * Copyright (c) 2017 Steven G. Kargl + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice unmodified, this list of conditions, and the following + * disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +/* + * See ../src/s_sinpi.c for implementation details. + */ + +#ifdef __i386__ +#include +#endif +#include + +#include "../ld/fpmath.h" +#include "math.h" +#include "../ld/math_private.h" + +static const union IEEEl2bits +pi_hi_u = LD80C(0xc90fdaa200000000, 1, 3.14159265346825122833e+00L), +pi_lo_u = LD80C(0x85a308d313198a2e, -33, 1.21542010130123852029e-10L); +#define pi_hi (pi_hi_u.e) +#define pi_lo (pi_lo_u.e) + +#include "k_cospil.h" +#include "k_sinpil.h" + +volatile static const double vzero = 0; + +long double +sinpil(long double x) +{ + long double ax, hi, lo, s; + uint64_t lx, m; + uint32_t j0; + uint16_t hx, ix; + + EXTRACT_LDBL80_WORDS(hx, lx, x); + ix = hx & 0x7fff; + INSERT_LDBL80_WORDS(ax, ix, lx); + + ENTERI(); + + if (ix < 0x3fff) { /* |x| < 1 */ + if (ix < 0x3ffd) { /* |x| < 0.25 */ + if (ix < 0x3fdd) { /* |x| < 0x1p-34 */ + if (x == 0) + RETURNI(x); + INSERT_LDBL80_WORDS(hi, hx, + lx & 0xffffffff00000000ull); + hi *= 0x1p63L; + lo = x * 0x1p63L - hi; + s = (pi_lo + pi_hi) * lo + pi_lo * hi + + pi_hi * hi; + RETURNI(s * 0x1p-63L); + } + s = __kernel_sinpil(ax); + RETURNI((hx & 0x8000) ? -s : s); + } + + if (ix < 0x3ffe) /* |x| < 0.5 */ + s = __kernel_cospil(0.5 - ax); + else if (lx < 0xc000000000000000ull) /* |x| < 0.75 */ + s = __kernel_cospil(ax - 0.5); + else + s = __kernel_sinpil(1 - ax); + RETURNI((hx & 0x8000) ? -s : s); + } + + if (ix < 0x403e) { /* 1 <= |x| < 0x1p63 */ + /* Determine integer part of ax. */ + j0 = ix - 0x3fff + 1; + if (j0 < 32) { + lx = (lx >> 32) << 32; + lx &= ~(((lx << 32)-1) >> j0); + } else { + m = (uint64_t)-1 >> (j0 + 1); + if (lx & m) lx &= ~m; + } + INSERT_LDBL80_WORDS(x, ix, lx); + + ax -= x; + EXTRACT_LDBL80_WORDS(ix, lx, ax); + + if (ix == 0) { + s = 0; + } else { + if (ix < 0x3ffe) { /* |x| < 0.5 */ + if (ix < 0x3ffd) /* |x| < 0.25 */ + s = __kernel_sinpil(ax); + else + s = __kernel_cospil(0.5 - ax); + } else { + /* |x| < 0.75 */ + if (lx < 0xc000000000000000ull) + s = __kernel_cospil(ax - 0.5); + else + s = __kernel_sinpil(1 - ax); + } + + if (j0 > 40) + x -= 0x1p40; + if (j0 > 30) + x -= 0x1p30; + j0 = (uint32_t)x; + if (j0 & 1) s = -s; + } + RETURNI((hx & 0x8000) ? -s : s); + } + + /* x = +-inf or nan. */ + if (ix >= 0x7fff) + RETURNI(vzero / vzero); + + /* + * |x| >= 0x1p63 is always an integer, so return +-0. + */ + RETURNI(copysignl(0, x)); +} diff --git a/newlib/libm/libm.texi b/newlib/libm/libm.texi index 779615d326..d322422c2c 100644 --- a/newlib/libm/libm.texi +++ b/newlib/libm/libm.texi @@ -46,12 +46,12 @@ into another language, under the above conditions for modified versions. @titlepage @title The Red Hat newlib C Math Library @sp 1 -@subtitle @code{libm} 2.5.0 -@subtitle December 2016 -@author {Steve Chamberlain} -@author {Roland Pesch} -@author {Red Hat Support} -@author {Jeff Johnston} +@subtitle @code{libm} 4.4.0 +@subtitle December 2023 +@author Steve Chamberlain +@author Roland Pesch +@author Red Hat Support +@author Jeff Johnston @page @tex @@ -98,6 +98,7 @@ into another language, under the above conditions for modified versions. * Reentrancy:: The functions in libm are not reentrant by default. * Long Double Functions:: The long double function support of libm. * Document Index:: +* Function Index:: @end menu @include targetdep.tex @@ -121,10 +122,15 @@ This makes it thread safe, and therefore reentrant. Currently, the full set of long double math functions is only provided on platforms where long double equals double. For such platforms, the long double math functions are implemented as calls to the double versions. + @node Document Index @unnumbered Document Index @printindex cp +@node Function Index +@unnumbered Function Index +@printindex fn + @tex % I think something like @@colophon should be in texinfo. In the % meantime: diff --git a/newlib/libm/machine/amdgcn/Makefile.inc b/newlib/libm/machine/amdgcn/Makefile.inc new file mode 100644 index 0000000000..9d6a18514b --- /dev/null +++ b/newlib/libm/machine/amdgcn/Makefile.inc @@ -0,0 +1,91 @@ +%C%_src = \ + %D%/v64_mathcnst.c \ + %D%/v64_reent.c \ + %D%/v64df_acos.c \ + %D%/v64df_acosh.c \ + %D%/v64df_asin.c \ + %D%/v64df_asine.c \ + %D%/v64df_asinh.c \ + %D%/v64df_atan.c \ + %D%/v64df_atan2.c \ + %D%/v64df_atangent.c \ + %D%/v64df_atanh.c \ + %D%/v64df_copysign.c \ + %D%/v64df_cos.c \ + %D%/v64df_cosh.c \ + %D%/v64df_erf.c \ + %D%/v64df_exp.c \ + %D%/v64df_exp2.c \ + %D%/v64df_finite.c \ + %D%/v64df_fmod.c \ + %D%/v64df_gamma.c \ + %D%/v64df_hypot.c \ + %D%/v64df_ilogb.c \ + %D%/v64df_isnan.c \ + %D%/v64df_ispos.c \ + %D%/v64df_lgamma.c \ + %D%/v64df_lgamma_r.c \ + %D%/v64df_log.c \ + %D%/v64df_log10.c \ + %D%/v64df_log2.c \ + %D%/v64df_modf.c \ + %D%/v64df_numtest.c \ + %D%/v64df_pow.c \ + %D%/v64df_remainder.c \ + %D%/v64df_rint.c \ + %D%/v64df_scalb.c \ + %D%/v64df_scalbn.c \ + %D%/v64df_signif.c \ + %D%/v64df_sin.c \ + %D%/v64df_sine.c \ + %D%/v64df_sineh.c \ + %D%/v64df_sinh.c \ + %D%/v64df_sqrt.c \ + %D%/v64df_tan.c \ + %D%/v64df_tanh.c \ + %D%/v64df_tgamma.c \ + %D%/v64sf_acos.c \ + %D%/v64sf_acosh.c \ + %D%/v64sf_asin.c \ + %D%/v64sf_asine.c \ + %D%/v64sf_asinh.c \ + %D%/v64sf_atan.c \ + %D%/v64sf_atan2.c \ + %D%/v64sf_atangent.c \ + %D%/v64sf_atanh.c \ + %D%/v64sf_copysign.c \ + %D%/v64sf_cos.c \ + %D%/v64sf_cosh.c \ + %D%/v64sf_erf.c \ + %D%/v64sf_exp.c \ + %D%/v64sf_exp2.c \ + %D%/v64sf_finite.c \ + %D%/v64sf_fmod.c \ + %D%/v64sf_gamma.c \ + %D%/v64sf_hypot.c \ + %D%/v64sf_ilogb.c \ + %D%/v64sf_isnan.c \ + %D%/v64sf_ispos.c \ + %D%/v64sf_lgamma.c \ + %D%/v64sf_lgamma_r.c \ + %D%/v64sf_log.c \ + %D%/v64sf_log10.c \ + %D%/v64sf_log2.c \ + %D%/v64sf_modf.c \ + %D%/v64sf_numtest.c \ + %D%/v64sf_pow.c \ + %D%/v64sf_remainder.c \ + %D%/v64sf_rint.c \ + %D%/v64sf_scalb.c \ + %D%/v64sf_scalbn.c \ + %D%/v64sf_signif.c \ + %D%/v64sf_sin.c \ + %D%/v64sf_sine.c \ + %D%/v64sf_sineh.c \ + %D%/v64sf_sinh.c \ + %D%/v64sf_sqrt.c \ + %D%/v64sf_tan.c \ + %D%/v64sf_tanh.c \ + %D%/v64sf_tgamma.c + +libm_a_SOURCES += $(%C%_src) diff --git a/newlib/libm/machine/amdgcn/amdgcn_veclib.h b/newlib/libm/machine/amdgcn/amdgcn_veclib.h new file mode 100644 index 0000000000..bd67740ac3 --- /dev/null +++ b/newlib/libm/machine/amdgcn/amdgcn_veclib.h @@ -0,0 +1,321 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* Macro library used to help during conversion of scalar math functions to + vectorized SIMD equivalents on AMD GCN. */ + +/* Optimization at -O2 and above currently result in ICEs when converting + between vector types. */ +#pragma GCC optimize ("O1") + +typedef float v2sf __attribute__ ((vector_size (8))); +typedef float v4sf __attribute__ ((vector_size (16))); +typedef float v8sf __attribute__ ((vector_size (32))); +typedef float v16sf __attribute__ ((vector_size (64))); +typedef float v32sf __attribute__ ((vector_size (128))); +typedef float v64sf __attribute__ ((vector_size (256))); + +typedef double v2df __attribute__ ((vector_size (16))); +typedef double v4df __attribute__ ((vector_size (32))); +typedef double v8df __attribute__ ((vector_size (64))); +typedef double v16df __attribute__ ((vector_size (128))); +typedef double v32df __attribute__ ((vector_size (256))); +typedef double v64df __attribute__ ((vector_size (512))); + +typedef int v2si __attribute__ ((vector_size (8))); +typedef int v4si __attribute__ ((vector_size (16))); +typedef int v8si __attribute__ ((vector_size (32))); +typedef int v16si __attribute__ ((vector_size (64))); +typedef int v32si __attribute__ ((vector_size (128))); +typedef int v64si __attribute__ ((vector_size (256))); + +typedef unsigned int v64usi __attribute__ ((vector_size (256))); + +typedef long v2di __attribute__ ((vector_size (16))); +typedef long v4di __attribute__ ((vector_size (32))); +typedef long v8di __attribute__ ((vector_size (64))); +typedef long v16di __attribute__ ((vector_size (128))); +typedef long v32di __attribute__ ((vector_size (256))); +typedef long v64di __attribute__ ((vector_size (512))); + +typedef union { + v2sf t_v2sf; + v4sf t_v4sf; + v8sf t_v8sf; + v16sf t_v16sf; + v32sf t_v32sf; + v64sf t_v64sf; + + v2df t_v2df; + v4df t_v4df; + v8df t_v8df; + v16df t_v16df; + v32df t_v32df; + v64df t_v64df; + + v2si t_v2si; + v4si t_v4si; + v8si t_v8si; + v16si t_v16si; + v32si t_v32si; + v64si t_v64si; + + v64usi t_v64usi; + + v2di t_v2di; + v4di t_v4di; + v8di t_v8di; + v16di t_v16di; + v32di t_v32di; + v64di t_v64di; +} vector_union; + +/* Cast between vectors with a different number of elements. */ + +#define RESIZE_VECTOR(to_t, from) \ +({ \ + __auto_type __from = (from); \ + *((to_t *) &__from); \ +}) + +/* Bit-wise cast vector FROM to type TO_T. */ + +#define CAST_VECTOR(to_t, from) \ +({ \ + _Static_assert (sizeof (to_t) == sizeof (from)); \ + union { \ + typeof (from) __from; \ + to_t __to; \ + } __tmp; \ + __tmp.__from = (from); \ + __tmp.__to; \ +}) + +#define NO_COND __mask + +/* Note - __mask is _not_ accounted for in VECTOR_MERGE! */ +#define VECTOR_MERGE(vec1, vec2, cond) \ +({ \ + _Static_assert (__builtin_types_compatible_p (typeof (vec1), typeof (vec2))); \ + union { \ + typeof (vec1) val; \ + v64si t_v64si; \ + v64di t_v64di; \ + } __vec1, __vec2, __res; \ + __vec1.val = (vec1); \ + __vec2.val = (vec2); \ + __builtin_choose_expr ( \ + sizeof (vec1) == sizeof (v64si), \ + ({ \ + v64si __bitmask = __builtin_convertvector ((cond), v64si); \ + __res.t_v64si = (__vec1.t_v64si & __bitmask) \ + | (__vec2.t_v64si & ~__bitmask); \ + }), \ + ({ \ + v64di __bitmask = __builtin_convertvector ((cond), v64di); \ + __res.t_v64di = (__vec1.t_v64di & __bitmask) \ + | (__vec2.t_v64di & ~__bitmask); \ + })); \ + __res.val; \ +}) + +#define VECTOR_RETURN(retval, cond) \ +do { \ + _Static_assert (__builtin_types_compatible_p (typeof (retval), typeof (__ret))); \ + __auto_type __cond = __builtin_convertvector ((cond), typeof (__mask)); \ + __auto_type __retval = (retval); \ + VECTOR_COND_MOVE (__ret, __retval, __cond); \ + __mask &= ~__cond; \ +} while (0) + +#define VECTOR_COND_MOVE(var, val, cond) \ +do { \ + _Static_assert (__builtin_types_compatible_p (typeof (var), typeof (val))); \ + __auto_type __cond = __builtin_convertvector ((cond), typeof (__mask)); \ + var = VECTOR_MERGE ((val), var, __cond & __mask); \ +} while (0) + +#define VECTOR_IF(cond, cond_var) \ +{ \ + __auto_type cond_var = (cond); \ + __auto_type __inv_cond = ~cond_var; \ + if (!ALL_ZEROES_P (cond_var)) \ + { + +#define VECTOR_ELSEIF(cond, cond_var) \ + } \ + cond_var = __inv_cond & (cond); \ + __inv_cond &= ~(cond); \ + if (!ALL_ZEROES_P (cond_var)) \ + { + +#define VECTOR_ELSE(cond_var) \ + } \ + cond_var = __inv_cond; \ + if (!ALL_ZEROES_P (cond_var)) \ + { + +#define VECTOR_IF2(cond, cond_var, prev_cond_var) \ +{ \ + __auto_type cond_var = (cond) & __builtin_convertvector (prev_cond_var, typeof (cond)); \ + __auto_type __inv_cond = ~(cond); \ + if (!ALL_ZEROES_P (cond_var)) \ + { + +#define VECTOR_ELSEIF2(cond, cond_var, prev_cond_var) \ + } \ + cond_var = (cond) & __inv_cond & __builtin_convertvector (prev_cond_var, typeof (cond)); \ + __inv_cond &= ~(cond); \ + if (!ALL_ZEROES_P (cond_var)) \ + { + +#define VECTOR_ELSE2(cond_var, prev_cond_var) \ + } \ + cond_var = __inv_cond & __builtin_convertvector (prev_cond_var, typeof (__inv_cond)); \ + if (!ALL_ZEROES_P (cond_var)) \ + { + + +#define VECTOR_ENDIF \ + } \ +} + +#define VECTOR_INIT_AUX(x, type) \ +({ \ + typeof (x) __e = (x); \ + type __tmp = { \ + __e, __e, __e, __e, __e, __e, __e, __e, \ + __e, __e, __e, __e, __e, __e, __e, __e, \ + __e, __e, __e, __e, __e, __e, __e, __e, \ + __e, __e, __e, __e, __e, __e, __e, __e, \ + __e, __e, __e, __e, __e, __e, __e, __e, \ + __e, __e, __e, __e, __e, __e, __e, __e, \ + __e, __e, __e, __e, __e, __e, __e, __e, \ + __e, __e, __e, __e, __e, __e, __e, __e }; \ + __tmp; \ +}) + +#define VECTOR_INIT(x) \ + (_Generic ((x), int: VECTOR_INIT_AUX ((x), v64si), \ + unsigned: VECTOR_INIT_AUX ((x), v64usi), \ + long: VECTOR_INIT_AUX ((x), v64di), \ + float: VECTOR_INIT_AUX ((x), v64sf), \ + double: VECTOR_INIT_AUX ((x), v64df))) + +#define VECTOR_WIDTH(TYPE) (sizeof (TYPE) / (V_SF_SI_P (TYPE) ? 4 : 8)) + +#define V_SF_SI_P(TYPE) \ + (__builtin_types_compatible_p (TYPE, v2sf) \ + || __builtin_types_compatible_p (TYPE, v4sf) \ + || __builtin_types_compatible_p (TYPE, v8sf) \ + || __builtin_types_compatible_p (TYPE, v16sf) \ + || __builtin_types_compatible_p (TYPE, v32sf) \ + || __builtin_types_compatible_p (TYPE, v64sf) \ + || __builtin_types_compatible_p (TYPE, v2si) \ + || __builtin_types_compatible_p (TYPE, v4si) \ + || __builtin_types_compatible_p (TYPE, v8si) \ + || __builtin_types_compatible_p (TYPE, v16si) \ + || __builtin_types_compatible_p (TYPE, v32si) \ + || __builtin_types_compatible_p (TYPE, v64si)) + +#define VECTOR_INIT_MASK(TYPE) \ +({ \ + vector_union __mask; \ + __mask.t_v64di = VECTOR_INIT (0L); \ + for (int i = 0; i < VECTOR_WIDTH (TYPE); i++) \ + __mask.t_v64di[i] = -1; \ + __builtin_choose_expr (V_SF_SI_P (TYPE), __mask.t_v64si, __mask.t_v64di); \ +}) + +#define ALL_ZEROES_P(x) (COND_TO_BITMASK(x) == 0) + +#define COND_TO_BITMASK(x) \ +({ \ + long __tmp = 0; \ + __auto_type __x = __builtin_convertvector((x), typeof (__mask)) & __mask; \ + __builtin_choose_expr (sizeof (__mask) == 256, \ + ({ asm ("v_cmp_ne_u32_e64 %0, %1, 0" \ + : "=Sg" (__tmp) \ + : "v" (__x)); }), \ + ({ asm ("v_cmp_ne_u64_e64 %0, %1, 0" \ + : "=Sg" (__tmp) \ + : "v" (__x)); })); \ + __tmp; \ +}) + +#define VECTOR_WHILE(cond, cond_var, prev_cond_var) \ +{ \ + __auto_type cond_var = prev_cond_var; \ + for (;;) { \ + cond_var &= (cond); \ + if (ALL_ZEROES_P (cond_var)) \ + break; + +#define VECTOR_ENDWHILE \ + } \ +} + +#define DEF_VS_MATH_FUNC(rettype, name, args...) \ + rettype v64sf##_##name##_aux (args, v64si __mask) + +#define DEF_VD_MATH_FUNC(rettype, name, args...) \ + rettype v64df##_##name##_aux (args, v64di __mask) + +/* Use this for predicate functions that take a vector of doubles but + return a vector of ints. */ +#define DEF_VD_MATH_PRED(rettype, name, args...) \ + rettype v64df##_##name##_aux (args, v64si __mask) + +#define FUNCTION_INIT(rettype) \ + rettype __ret + +#define FUNCTION_RETURN \ + return __ret + +#define DEF_VARIANT(FUN, TRET, TARG, COUNT) \ +v##COUNT##TRET \ +v##COUNT##TARG##_##FUN (v##COUNT##TARG __arg) \ +{ \ + __auto_type __upsized_arg = RESIZE_VECTOR (v64##TARG, __arg); \ + __auto_type __mask = VECTOR_INIT_MASK (v##COUNT##TRET); \ + __auto_type __result = v64##TARG##_##FUN##_aux (__upsized_arg, __mask); \ + return RESIZE_VECTOR (v##COUNT##TRET, __result); \ +} + +#define DEF_VARIANT2(FUN, TRET, TARG, COUNT) \ +v##COUNT##TRET \ +v##COUNT##TARG##_##FUN (v##COUNT##TARG __arg1, v##COUNT##TARG __arg2) \ +{ \ + __auto_type __upsized_arg1 = RESIZE_VECTOR (v64##TARG, __arg1); \ + __auto_type __upsized_arg2 = RESIZE_VECTOR (v64##TARG, __arg2); \ + __auto_type __mask = VECTOR_INIT_MASK (v##COUNT##TRET); \ + __auto_type __result = v64##TARG##_##FUN##_aux (__upsized_arg1, __upsized_arg2, __mask); \ + return RESIZE_VECTOR (v##COUNT##TRET, __result); \ +} + +#define DEF_VARIANTS(FUN, RETTYPE, ARGTYPE) \ + DEF_VARIANT (FUN, RETTYPE, ARGTYPE, 2) \ + DEF_VARIANT (FUN, RETTYPE, ARGTYPE, 4) \ + DEF_VARIANT (FUN, RETTYPE, ARGTYPE, 8) \ + DEF_VARIANT (FUN, RETTYPE, ARGTYPE, 16) \ + DEF_VARIANT (FUN, RETTYPE, ARGTYPE, 32) \ + DEF_VARIANT (FUN, RETTYPE, ARGTYPE, 64) + +#define DEF_VARIANTS2(FUN, RETTYPE, ARGTYPE) \ + DEF_VARIANT2 (FUN, RETTYPE, ARGTYPE, 2) \ + DEF_VARIANT2 (FUN, RETTYPE, ARGTYPE, 4) \ + DEF_VARIANT2 (FUN, RETTYPE, ARGTYPE, 8) \ + DEF_VARIANT2 (FUN, RETTYPE, ARGTYPE, 16) \ + DEF_VARIANT2 (FUN, RETTYPE, ARGTYPE, 32) \ + DEF_VARIANT2 (FUN, RETTYPE, ARGTYPE, 64) diff --git a/newlib/libm/machine/amdgcn/amdgcnmach.h b/newlib/libm/machine/amdgcn/amdgcnmach.h new file mode 100644 index 0000000000..c9d5e41c43 --- /dev/null +++ b/newlib/libm/machine/amdgcn/amdgcnmach.h @@ -0,0 +1,242 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* Common header file for AMD GCN vector math routines. */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* Copyright (c) 2017-2018 Arm Ltd. All rights reserved. + + SPDX-License-Identifier: BSD-3-Clause + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + 3. The name of the company may not be used to endorse or promote + products derived from this software without specific prior written + permission. + + THIS SOFTWARE IS PROVIDED BY ARM LTD ``AS IS'' AND ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + IN NO EVENT SHALL ARM LTD BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ + +/* This header is partially based on: + + newlib/libm/common/fdlibm.h + newlib/libm/mathfp/zmath.h + newlib/libm/common/math_errf.c + newlib/libm/common/math_config.h */ + +#include +#include +#include +#include "amdgcn_veclib.h" + +/* Vectorized versions of macros from newlib/libm/common/fdlibm.h */ + +#define EXTRACT_WORDS(hi, lo, x) \ +do { \ + vector_union __tmp; \ + __tmp.t_v64df = (x); \ + hi = __builtin_convertvector (__tmp.t_v64di >> 32, typeof (hi)); \ + lo = __builtin_convertvector (__tmp.t_v64di & 0xffffffff, typeof (lo)); \ +} while (0) + +#define INSERT_WORDS(x, hi, lo, cond) \ +do { \ + vector_union __tmp; \ + __tmp.t_v64di = __builtin_convertvector (hi, v64di) << 32 | \ + __builtin_convertvector (lo, v64di) & 0xffffffff; \ + VECTOR_COND_MOVE (x, __tmp.t_v64df, cond); \ +} while (0) + +#define GET_HIGH_WORD(x, y, cond) \ +do { \ + vector_union __tmp; \ + __tmp.t_v64df = (y); \ + VECTOR_COND_MOVE (x, __builtin_convertvector (__tmp.t_v64di >> 32, v64si), \ + (cond)); \ +} while (0) + +#define GET_LOW_WORD(x, y, cond) \ +do { \ + vector_union __tmp; \ + __tmp.t_v64df = (y); \ + VECTOR_COND_MOVE (x, __builtin_convertvector (__tmp.t_v64di & 0xffffffff, \ + v64si), (cond)); \ +} while (0) + +#define SET_HIGH_WORD(x, y, cond) \ +do { \ + vector_union __tmp; \ + __tmp.t_v64df = x; \ + __tmp.t_v64di &= 0xffffffff; \ + __tmp.t_v64di |= __builtin_convertvector (y, v64di) << 32; \ + VECTOR_COND_MOVE (x, __tmp.t_v64df, (cond)); \ +} while (0) + +#define SET_LOW_WORD(x, y, cond) \ +do { \ + vector_union __tmp; \ + __tmp.t_v64df = x; \ + __tmp.t_v64di &= 0xffffffff00000000ULL; \ + __tmp.t_v64di |= __builtin_convertvector (y, v64di); \ + VECTOR_COND_MOVE (x, __tmp.t_v64df, (cond)); \ + } while (0) + +#define GET_FLOAT_WORD(x, y, cond) \ + VECTOR_COND_MOVE(x, CAST_VECTOR(v64si, (y)), (cond)) + +#define SET_FLOAT_WORD(x, y, cond) \ + VECTOR_COND_MOVE(x, CAST_VECTOR(v64sf, (y)), (cond)) + +/* Definitions from newlib/libm/common/fdlibm.h */ + +#ifdef _FLT_LARGEST_EXPONENT_IS_NORMAL +#define FLT_UWORD_IS_FINITE(x) ((x) == (x)) +#define FLT_UWORD_IS_NAN(x) ((x) != (x)) +#define FLT_UWORD_IS_INFINITE(x) ((x) != (x)) +#define FLT_UWORD_MAX 0x7fffffff +#define FLT_UWORD_EXP_MAX 0x43010000 +#define FLT_UWORD_LOG_MAX 0x42b2d4fc +#define FLT_UWORD_LOG_2MAX 0x42b437e0 +#define HUGE ((float)0X1.FFFFFEP128) +#else +#define FLT_UWORD_IS_FINITE(x) ((x)<0x7f800000) +#define FLT_UWORD_IS_NAN(x) ((x)>0x7f800000) +#define FLT_UWORD_IS_INFINITE(x) ((x)==0x7f800000) +#define FLT_UWORD_MAX 0x7f7fffffL +#define FLT_UWORD_EXP_MAX 0x43000000 +#define FLT_UWORD_LOG_MAX 0x42b17217 +#define FLT_UWORD_LOG_2MAX 0x42b2d4fc +#define HUGE ((float)3.40282346638528860e+38) +#endif +#define FLT_UWORD_HALF_MAX (FLT_UWORD_MAX-(1L<<23)) +#define FLT_LARGEST_EXP (FLT_UWORD_MAX>>23) + +#ifdef _FLT_NO_DENORMALS +#define FLT_UWORD_IS_ZERO(x) ((x)<0x00800000) +#define FLT_UWORD_IS_SUBNORMAL(x) ((x) != (x)) +#define FLT_UWORD_MIN 0x00800000 +#define FLT_UWORD_EXP_MIN 0x42fc0000 +#define FLT_UWORD_LOG_MIN 0x42aeac50 +#define FLT_SMALLEST_EXP 1 +#else +#define FLT_UWORD_IS_ZERO(x) ((x)==0) +#define FLT_UWORD_IS_SUBNORMAL(x) ((x)<0x00800000) +#define FLT_UWORD_MIN 0x00000001 +#define FLT_UWORD_EXP_MIN 0x43160000 +#define FLT_UWORD_LOG_MIN 0x42cff1b5 +#define FLT_SMALLEST_EXP -22 +#endif + +/* Definitions from newlib/libm/mathfp/zmath.h */ + +#define NUM 3 +#define NAN 2 +#define INF 1 + +#define __PI 3.14159265358979323846 +#define __SQRT_HALF 0.70710678118654752440 +#define __PI_OVER_TWO 1.57079632679489661923132 +#define __INV_PI_OVER_TWO_2_24 10680707.430881743590348355907974 + +typedef const union +{ + unsigned int l[2]; + double d; +} udouble; + +typedef const union +{ + unsigned int l; + float f; +} ufloat; + +extern double BIGX; +extern double SMALLX; + +extern udouble z_infinity; +extern udouble z_notanum; +extern double z_rooteps; + +extern ufloat z_infinity_f; +extern ufloat z_notanum_f; +extern float z_rooteps_f; + +/* Vectorized versions of functions from newlib/libm/common/math_errf.c */ + +static v64sf v64sf_math_oflowf (v64si sign) +{ + errno = ERANGE; + return VECTOR_MERGE (VECTOR_INIT (-0x1p97f), + VECTOR_INIT (0x1p97f), sign) * 0x1p97f; +} + +static v64sf v64sf_math_uflowf (v64si sign) +{ + errno = ERANGE; + return VECTOR_MERGE (VECTOR_INIT (-0x1p-95f), + VECTOR_INIT (0x1p-95f), sign) * 0x1p-95f; +} + +/* Vectorized versions of functions from newlib/libm/common/math_config.h */ + +static v64si v64sf_issignalingf_inline (v64sf x) +{ + v64si __mask = VECTOR_INIT (-1); + v64si ix; + GET_FLOAT_WORD (ix, x, NO_COND); + /* Use IEEE-754 2008 encoding - i.e. exponent bits all 1, MSB of + significand is 0 for signalling NaN. */ + return ((ix & 0x7f800000) == 0x7f800000) & ((ix & 0x00400000) == 0); +} + +/* Vector extensions to sys/reent.h */ + +struct v64_reent { + v64si _v64si_gamma_signgam; +}; + +extern struct v64_reent *_v64_reent; +#define _V64_REENT _v64_reent + +#define _REENT_V64SI_SIGNGAM(ptr) ((ptr)->_v64si_gamma_signgam) + +/* Vector extensions to math.h */ + +#define v64si_signgam (*__v64si_signgam()) +extern v64si* __v64si_signgam (void); +#define __v64si_signgam_r(ptr) _REENT_V64SI_SIGNGAM(ptr) diff --git a/newlib/libm/machine/amdgcn/v64_mathcnst.c b/newlib/libm/machine/amdgcn/v64_mathcnst.c new file mode 100644 index 0000000000..555df24d52 --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64_mathcnst.c @@ -0,0 +1,52 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * Copyright (c) 1994-2009 Red Hat, Inc. All rights reserved. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the BSD License. This program is distributed in the hope that + * it will be useful, but WITHOUT ANY WARRANTY expressed or implied, + * including the implied warranties of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. A copy of this license is available at + * http://www.opensource.org/licenses. Any Red Hat trademarks that are + * incorporated in the source code or documentation are not subject to + * the BSD License and may only be used or replicated with the express + * permission of Red Hat, Inc. + */ + +/* Based on newlib/libm/mathfp/s_mathcnst.c in Newlib. */ + +#include "amdgcnmach.h" + +double BIGX = 7.09782712893383973096e+02; +double SMALLX = -7.45133219101941108420e+02; +double z_rooteps = 7.4505859692e-9; +float z_rooteps_f = 1.7263349182589107e-4; + +ufloat z_hugeval_f = { 0x7f800000 }; +ufloat z_infinity_f = { 0x7f800000 }; +ufloat z_notanum_f = { 0x7fd00000 }; + +#ifdef __IEEE_BIG_ENDIAN +udouble z_hugeval = { 0x7ff00000, 0 }; +udouble z_infinity = { 0x7ff00000, 0 }; +udouble z_notanum = { 0xeff80000, 0 }; +#else /* __IEEE_LITTLE_ENDIAN */ +udouble z_hugeval = { 0, 0x7ff00000 }; +udouble z_infinity = { 0, 0x7ff00000 }; +udouble z_notanum = { 0, 0x7ff80000 }; +#endif /* __IEEE_LITTLE_ENDIAN */ + diff --git a/libgloss/moxie/sim-lseek.S b/newlib/libm/machine/amdgcn/v64_reent.c similarity index 57% rename from libgloss/moxie/sim-lseek.S rename to newlib/libm/machine/amdgcn/v64_reent.c index 86fb675047..e9c2b35f4e 100644 --- a/libgloss/moxie/sim-lseek.S +++ b/newlib/libm/machine/amdgcn/v64_reent.c @@ -1,12 +1,10 @@ /* - * sim-lseek.S -- write interface for moxie simulator - * - * Copyright (c) 2008 Anthony Green + * Copyright 2023 Siemens * * The authors hereby grant permission to use, copy, modify, distribute, * and license this software and its documentation for any purpose, provided * that existing copyright notices are retained in all copies and that this - * notice is included verbatim in any distributions. No written agreement, + * notice is included verbatim in any distributions. No written agreement, * license, or royalty fee is required for any of the authorized uses. * Modifications to this software may be copyrighted by their authors * and need not follow the licensing terms described here, provided that @@ -14,18 +12,13 @@ * they apply. */ -#include -#include +#include "amdgcnmach.h" -/* - * lseek -- Since a simulated serial port is non-seekable, we return - * an error. - */ -off_t -_lseek (int fd, - off_t offset, - int whence) +static struct v64_reent __reent; +struct v64_reent *_v64_reent = &__reent; + +v64si* +__v64si_signgam (void) { - errno = ESPIPE; - return ((off_t)-1); -} \ No newline at end of file + return &_REENT_V64SI_SIGNGAM(_V64_REENT); +} diff --git a/newlib/libm/machine/amdgcn/v64df_acos.c b/newlib/libm/machine/amdgcn/v64df_acos.c new file mode 100644 index 0000000000..63a34cad2d --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64df_acos.c @@ -0,0 +1,42 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * Copyright (c) 1994-2009 Red Hat, Inc. All rights reserved. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the BSD License. This program is distributed in the hope that + * it will be useful, but WITHOUT ANY WARRANTY expressed or implied, + * including the implied warranties of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. A copy of this license is available at + * http://www.opensource.org/licenses. Any Red Hat trademarks that are + * incorporated in the source code or documentation are not subject to + * the BSD License and may only be used or replicated with the express + * permission of Red Hat, Inc. + */ + +/* Based on newlib/libm/mathfp/s_acos.c in Newlib. */ + +#include "amdgcnmach.h" + +v64df v64df_asine_aux (v64df x, int acosine, v64di); + +DEF_VD_MATH_FUNC (v64df, acos, v64df x) +{ + return v64df_asine_aux(x, 1, __mask); +} + +DEF_VARIANTS (acos, df, df) + diff --git a/newlib/libm/machine/amdgcn/v64df_acosh.c b/newlib/libm/machine/amdgcn/v64df_acosh.c new file mode 100644 index 0000000000..d98d38b117 --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64df_acosh.c @@ -0,0 +1,81 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + * + */ + +/* Based on newlib/libm/mathfp/e_acosh.c in Newlib. */ + +#include "amdgcnmach.h" + +v64df v64df_log_aux (v64df, v64di); +v64df v64df_log1p_aux (v64df, v64di); +v64df v64df_sqrt_aux (v64df, v64di); + +DEF_VD_MATH_FUNC (v64df, acosh, v64df x) +{ + static const double one = 1.0; + static const double ln2 = 6.93147180559945286227e-01; /* 0x3FE62E42, 0xFEFA39EF */ + + FUNCTION_INIT (v64df); + + v64si hx, lx; + EXTRACT_WORDS (hx, lx, x); + + VECTOR_IF (hx < 0x3ff00000, cond) // x < 1 */ + VECTOR_RETURN ((x-x) / (x-x), cond); + VECTOR_ENDIF + VECTOR_IF (hx >=0x41b00000, cond) // x > 2**28 */ + VECTOR_IF2 (hx >=0x7ff00000, cond2, cond) // x is inf of NaN */ + VECTOR_RETURN (x+x, cond2); + VECTOR_ELSE (cond2) + /* acosh(huge)=log(2x) */ + VECTOR_RETURN (v64df_log_aux (x, __mask) + ln2, cond2); + VECTOR_ENDIF + VECTOR_ENDIF + VECTOR_IF (((hx - 0x3ff00000) | lx) == 0, cond) + /* acosh(1) = 0 */ + VECTOR_RETURN (VECTOR_INIT (0.0), cond); + VECTOR_ENDIF + VECTOR_IF (hx > 0x40000000, cond) /* 2**28 > x > 2 */ + { + v64df t = x * x; + VECTOR_RETURN (v64df_log_aux (2.0*x - one / + (x + v64df_sqrt_aux (t - one, __mask)), + __mask), + cond); + } + VECTOR_ELSE (cond) /* 1 0.5, cond) + VECTOR_COND_MOVE (i, VECTOR_INIT (1 - acosine), cond); + + /* Check for range error. */ + VECTOR_IF2 (y > 1.0, cond2, cond) + errno = ERANGE; + VECTOR_RETURN (VECTOR_INIT (z_notanum.d), cond2); + VECTOR_ENDIF + + VECTOR_COND_MOVE (g, (1.0 - y) / 2.0, cond); + VECTOR_COND_MOVE (y, -2.0 * v64df_sqrt_aux (g, __mask), cond); + VECTOR_COND_MOVE (branch, VECTOR_INIT (-1), cond); + VECTOR_ELSE (cond) + VECTOR_COND_MOVE (i, VECTOR_INIT (acosine), cond); + VECTOR_IF2 (y < z_rooteps, cond2, cond) + VECTOR_COND_MOVE (res, y, cond2); + VECTOR_ELSE2 (cond2, cond) + VECTOR_COND_MOVE (g, y * y, cond2); + VECTOR_ENDIF + VECTOR_ENDIF + + VECTOR_IF ((y >= z_rooteps) | __builtin_convertvector(branch, v64di), cond) + { + /* Calculate the Taylor series. */ + v64df P = ((((p[4] * g + p[3]) * g + p[2]) * g + p[1]) * g + p[0]) * g; + v64df Q = ((((g + q[4]) * g + q[3]) * g + q[2]) * g + q[1]) * g + q[0]; + v64df R = P / Q; + + VECTOR_COND_MOVE (res, y + y * R, cond); + } + VECTOR_ENDIF + + v64df a_i = VECTOR_MERGE (VECTOR_INIT (a[1]), VECTOR_INIT (a[0]), i != 0); + + /* Calculate asine or acose. */ + if (acosine == 0) + { + VECTOR_COND_MOVE (res, (a_i + res) + a_i, NO_COND); + VECTOR_IF (x < 0.0, cond) + VECTOR_COND_MOVE (res, -res, cond); + VECTOR_ENDIF + } + else + { + v64df b_i = VECTOR_MERGE (VECTOR_INIT(b[1]), VECTOR_INIT(b[0]), i != 0); + + VECTOR_IF (x < 0.0, cond) + VECTOR_COND_MOVE (res, (b_i + res) + b_i, cond); + VECTOR_ELSE (cond) + VECTOR_COND_MOVE (res, (a_i - res) + a_i, cond); + VECTOR_ENDIF + } + + VECTOR_RETURN (res, NO_COND); + + FUNCTION_RETURN; +} + +#endif diff --git a/newlib/libm/machine/amdgcn/v64df_asinh.c b/newlib/libm/machine/amdgcn/v64df_asinh.c new file mode 100644 index 0000000000..add4a486a6 --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64df_asinh.c @@ -0,0 +1,81 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* Based on newlib/libm/mathfp/s_asinh.c in Newlib. */ + +#include "amdgcnmach.h" + +v64df v64df_log_aux (v64df, v64di); +v64df v64df_log1p_aux (v64df, v64di); +v64df v64df_sqrt_aux (v64df, v64di); + +#if defined (__has_builtin) && __has_builtin (__builtin_gcn_fabsv) + +DEF_VD_MATH_FUNC (v64df, asinh, v64df x) +{ + static const double one = 1.00000000000000000000e+00; /* 0x3FF00000, 0x00000000 */ + static const double ln2 = 6.93147180559945286227e-01; /* 0x3FE62E42, 0xFEFA39EF */ + static const double huge = 1.00000000000000000000e+300; + + FUNCTION_INIT (v64df); + + v64df w; + v64si hx; + GET_HIGH_WORD (hx, x, NO_COND); + v64si ix = hx & 0x7fffffff; + + VECTOR_IF (ix >=0x7ff00000, cond) /* x is inf or NaN */ + VECTOR_RETURN (x + x, cond); + VECTOR_ENDIF + VECTOR_IF (ix < 0x3e300000, cond) /* |x|<2**-28 */ + VECTOR_IF2 (__builtin_convertvector(huge+x > one, v64si), cond2, cond) /* return x inexact except 0 */ + VECTOR_RETURN (x, cond); + VECTOR_ENDIF + VECTOR_ENDIF + VECTOR_IF (ix > 0x41b00000, cond) /* x > 2**28 */ + VECTOR_COND_MOVE (w, v64df_log_aux (__builtin_gcn_fabsv (x), __mask) + ln2, + cond); + VECTOR_ELSEIF (ix > 0x40000000, cond) /* 2**28 > |x| > 2.0 */ + v64df t = __builtin_gcn_fabsv (x); + VECTOR_COND_MOVE (w, v64df_log_aux (2.0 * t + one / (v64df_sqrt_aux (x*x + one, __mask) + t), __mask), + cond); + VECTOR_ELSE (cond) /* 2.0 > |x| > 2**-28 */ + v64df t = x * x; + VECTOR_COND_MOVE (w, v64df_log1p_aux (__builtin_gcn_fabsv (x) + t / (one + v64df_sqrt_aux (one + t, __mask)), __mask), + cond); + VECTOR_ENDIF + + VECTOR_IF (hx > 0, cond) + VECTOR_RETURN (w, cond); + VECTOR_ELSE (cond) + VECTOR_RETURN (-w, cond); + VECTOR_ENDIF + + FUNCTION_RETURN; +} + +DEF_VARIANTS (asinh, df, df) + +#endif diff --git a/newlib/libm/machine/amdgcn/v64df_atan.c b/newlib/libm/machine/amdgcn/v64df_atan.c new file mode 100644 index 0000000000..66b7a8d6cb --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64df_atan.c @@ -0,0 +1,43 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * Copyright (c) 1994-2009 Red Hat, Inc. All rights reserved. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the BSD License. This program is distributed in the hope that + * it will be useful, but WITHOUT ANY WARRANTY expressed or implied, + * including the implied warranties of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. A copy of this license is available at + * http://www.opensource.org/licenses. Any Red Hat trademarks that are + * incorporated in the source code or documentation are not subject to + * the BSD License and may only be used or replicated with the express + * permission of Red Hat, Inc. + */ + +/* Based on newlib/libm/mathfp/s_atan.c in Newlib. */ + +#include "amdgcnmach.h" + +v64df v64df_atangent_aux (v64df, v64df, v64df, int, v64di); + +DEF_VD_MATH_FUNC (v64df, atan, v64df x) +{ + return v64df_atangent_aux (x, + VECTOR_INIT (0.0), + VECTOR_INIT (0.0), 0, __mask); +} + +DEF_VARIANTS (atan, df, df) diff --git a/newlib/libm/machine/amdgcn/v64df_atan2.c b/newlib/libm/machine/amdgcn/v64df_atan2.c new file mode 100644 index 0000000000..18307883ef --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64df_atan2.c @@ -0,0 +1,41 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * Copyright (c) 1994-2009 Red Hat, Inc. All rights reserved. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the BSD License. This program is distributed in the hope that + * it will be useful, but WITHOUT ANY WARRANTY expressed or implied, + * including the implied warranties of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. A copy of this license is available at + * http://www.opensource.org/licenses. Any Red Hat trademarks that are + * incorporated in the source code or documentation are not subject to + * the BSD License and may only be used or replicated with the express + * permission of Red Hat, Inc. + */ + +/* Based on newlib/libm/mathfp/s_atan2.c in Newlib. */ + +#include "amdgcnmach.h" + +v64df v64df_atangent_aux (v64df, v64df, v64df, int, v64di); + +DEF_VD_MATH_FUNC (v64df, atan2, v64df v, v64df u) +{ + return (v64df_atangent_aux (VECTOR_INIT (0.0), v, u, 1, __mask)); +} + +DEF_VARIANTS2 (atan2, df, df) diff --git a/newlib/libm/machine/amdgcn/v64df_atangent.c b/newlib/libm/machine/amdgcn/v64df_atangent.c new file mode 100644 index 0000000000..b5b375679c --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64df_atangent.c @@ -0,0 +1,161 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * Copyright (c) 1994-2009 Red Hat, Inc. All rights reserved. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the BSD License. This program is distributed in the hope that + * it will be useful, but WITHOUT ANY WARRANTY expressed or implied, + * including the implied warranties of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. A copy of this license is available at + * http://www.opensource.org/licenses. Any Red Hat trademarks that are + * incorporated in the source code or documentation are not subject to + * the BSD License and may only be used or replicated with the express + * permission of Red Hat, Inc. + */ + +/****************************************************************** + * The following routines are coded directly from the algorithms + * and coefficients given in "Software Manual for the Elementary + * Functions" by William J. Cody, Jr. and William Waite, Prentice + * Hall, 1980. + ******************************************************************/ + +/* Based on newlib/libm/mathfp/s_atangent.c in Newlib. */ + +#include +#include "amdgcnmach.h" + +#if defined (__has_builtin) \ + && __has_builtin (__builtin_gcn_fabsv) \ + && __has_builtin (__builtin_gcn_frexpv_exp) + +DEF_VD_MATH_FUNC (v64df, atangent, v64df x, v64df v, v64df u, int arctan2) +{ + static const double ROOT3 = 1.73205080756887729353; + static const double a[] = { 0.0, 0.52359877559829887308, 1.57079632679489661923, + 1.04719755119659774615 }; + static const double q[] = { 0.41066306682575781263e+2, + 0.86157349597130242515e+2, + 0.59578436142597344465e+2, + 0.15024001160028576121e+2 }; + static const double p[] = { -0.13688768894191926929e+2, + -0.20505855195861651981e+2, + -0.84946240351320683534e+1, + -0.83758299368150059274 }; + static const float z_rooteps = 7.4505859692e-9; + + FUNCTION_INIT (v64df); + + v64df zero = VECTOR_INIT (0.0); + v64df pi = VECTOR_INIT (__PI); + v64df pi_over_two = VECTOR_INIT (__PI_OVER_TWO); + v64df res; + v64si branch = VECTOR_INIT (0); + + /* Preparation for calculating arctan2. */ + if (arctan2) + { + VECTOR_IF (u == 0.0, cond) + VECTOR_IF2 (v == 0.0, cond2, cond) + errno = ERANGE; + VECTOR_RETURN (VECTOR_INIT (0.0), cond2); + VECTOR_ELSE2 (cond2, cond) + VECTOR_COND_MOVE (branch, VECTOR_INIT (-1), cond2); + VECTOR_COND_MOVE (res, pi_over_two, cond2); + VECTOR_ENDIF + VECTOR_ENDIF + + VECTOR_IF (~branch, cond) + /* Get the exponent values of the inputs. */ + v64si expv = __builtin_gcn_frexpv_exp (v); + v64si expu = __builtin_gcn_frexpv_exp (u); + + /* See if a divide will overflow. */ + v64si e = expv - expu; + + VECTOR_IF2 (e > DBL_MAX_EXP, cond2, cond) + VECTOR_COND_MOVE (branch, VECTOR_INIT (-1), cond2); + VECTOR_COND_MOVE (res, pi_over_two, cond2); + VECTOR_ENDIF + + /* Also check for underflow. */ + VECTOR_IF2 (e < DBL_MIN_EXP, cond2, cond) + VECTOR_COND_MOVE (branch, VECTOR_INIT (-1), cond2); + VECTOR_COND_MOVE (res, zero, cond2); + VECTOR_ENDIF + VECTOR_ENDIF + } + + VECTOR_IF (~branch, cond) + v64df f; + v64si N = VECTOR_INIT (0); + + if (arctan2) + f = __builtin_gcn_fabsv (v / u); + else + f = __builtin_gcn_fabsv (x); + + VECTOR_IF2 (__builtin_convertvector(f > 1.0, v64si), cond2, cond) + VECTOR_COND_MOVE (f, 1.0 / f, cond2); + VECTOR_COND_MOVE (N, VECTOR_INIT (2), cond2); + VECTOR_ENDIF + + VECTOR_IF2 (__builtin_convertvector(f > (2.0 - ROOT3), v64si), cond2, cond) + double A = ROOT3 - 1.0; + VECTOR_COND_MOVE (f, (((A * f - 0.5) - 0.5) + f) / (ROOT3 + f), + cond2); + N += cond2 & 1; + VECTOR_ENDIF + + /* Check for values that are too small. */ + VECTOR_IF2 (__builtin_convertvector((-z_rooteps < f) & (f < z_rooteps), v64si), cond2, cond) + VECTOR_COND_MOVE (res, f, cond2); + + /* Calculate the Taylor series. */ + VECTOR_ELSE2 (cond2, cond) + v64df g = f * f; + v64df P = (((p[3] * g + p[2]) * g + p[1]) * g + p[0]) * g; + v64df Q = (((g + q[3]) * g + q[2]) * g + q[1]) * g + q[0]; + v64df R = P / Q; + + VECTOR_COND_MOVE (res, f + f * R, cond2); + VECTOR_ENDIF + + VECTOR_COND_MOVE (res, -res, cond & (N > 1)); + + res += VECTOR_MERGE (VECTOR_INIT (a[1]), zero, cond & (N == 1)); + res += VECTOR_MERGE (VECTOR_INIT (a[2]), zero, cond & (N == 2)); + res += VECTOR_MERGE (VECTOR_INIT (a[3]), zero, cond & (N == 3)); + VECTOR_ENDIF + + if (arctan2) + { + /*if (u < 0.0)*/ + VECTOR_COND_MOVE (res, pi - res, u < 0.0); + /*if (v < 0.0)*/ + VECTOR_COND_MOVE (res, -res, v < 0.0); + } + /*else if (x < 0.0) */ + else + VECTOR_COND_MOVE (res, -res, x < 0.0); + + VECTOR_RETURN (res, NO_COND); + + FUNCTION_RETURN; +} + +#endif diff --git a/newlib/libm/machine/amdgcn/v64df_atanh.c b/newlib/libm/machine/amdgcn/v64df_atanh.c new file mode 100644 index 0000000000..1ca61a3829 --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64df_atanh.c @@ -0,0 +1,75 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + * + */ + +/* Based on newlib/libm/mathfp/e_atanh.c in Newlib. */ + +#include "amdgcnmach.h" + +v64df v64df_log1p_aux (v64df, v64di); + +DEF_VD_MATH_FUNC (v64df, atanh, v64df x) +{ + static const double zero = 0.0; + static const double one = 1.0, huge = 1e300; + + FUNCTION_INIT (v64df); + + v64df t; + v64si hx, lx; + EXTRACT_WORDS (hx, lx, x); + v64si ix = hx & 0x7fffffff; + + VECTOR_IF ((ix | ((lx | (-lx)) >> 31)) > 0x3ff00000, cond) // |x|>1 + VECTOR_RETURN ((x - x)/(x - x), cond); + VECTOR_ENDIF + + VECTOR_IF (ix == 0x3ff00000, cond) + VECTOR_RETURN (x / zero, cond); + VECTOR_ENDIF + + VECTOR_IF ((ix < 0x3e300000) & __builtin_convertvector((huge + x) > zero, v64si), cond) // x<2**-28 + VECTOR_RETURN (x, cond); + VECTOR_ENDIF + + SET_HIGH_WORD (x, ix, NO_COND); + + VECTOR_IF (ix < 0x3fe00000, cond) // x < 0.5 */ + v64df t2 = x + x; + VECTOR_COND_MOVE (t, 0.5 * v64df_log1p_aux (t2 + t2 * x / (one - x), __mask), cond); + VECTOR_ELSE (cond) + VECTOR_COND_MOVE (t, 0.5 * v64df_log1p_aux ((x + x) / (one - x), __mask), cond); + VECTOR_ENDIF + + VECTOR_IF (hx >= 0, cond) + VECTOR_RETURN (t, cond); + VECTOR_ELSE (cond) + VECTOR_RETURN (-t, cond); + VECTOR_ENDIF + + FUNCTION_RETURN; +} + +DEF_VARIANTS (atanh, df, df) diff --git a/newlib/libm/machine/amdgcn/v64df_copysign.c b/newlib/libm/machine/amdgcn/v64df_copysign.c new file mode 100644 index 0000000000..c57af07dfe --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64df_copysign.c @@ -0,0 +1,43 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* Based on newlib/libm/common/s_copysign.c in Newlib. */ + +#include "amdgcnmach.h" + +DEF_VD_MATH_FUNC (v64df, copysign, v64df x, v64df y) +{ + FUNCTION_INIT (v64df); + + v64si hx, hy; + GET_HIGH_WORD(hx, x, NO_COND); + GET_HIGH_WORD(hy, y, NO_COND); + SET_HIGH_WORD(x, (hx & 0x7fffffff) | (hy & 0x80000000), NO_COND); + VECTOR_RETURN (x, NO_COND); + + FUNCTION_RETURN; +} + +DEF_VARIANTS2 (copysign, df, df) diff --git a/newlib/libm/machine/amdgcn/v64df_cos.c b/newlib/libm/machine/amdgcn/v64df_cos.c new file mode 100644 index 0000000000..6e464ef3da --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64df_cos.c @@ -0,0 +1,41 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * Copyright (c) 1994-2009 Red Hat, Inc. All rights reserved. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the BSD License. This program is distributed in the hope that + * it will be useful, but WITHOUT ANY WARRANTY expressed or implied, + * including the implied warranties of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. A copy of this license is available at + * http://www.opensource.org/licenses. Any Red Hat trademarks that are + * incorporated in the source code or documentation are not subject to + * the BSD License and may only be used or replicated with the express + * permission of Red Hat, Inc. + */ + +/* Based on newlib/libm/mathfp/s_cos.c in Newlib. */ + +#include "amdgcnmach.h" + +v64df v64df_sine_aux (v64df, int, v64di); + +DEF_VD_MATH_FUNC (v64df, cos, v64df x) +{ + return v64df_sine_aux (x, 1, __mask); +} + +DEF_VARIANTS (cos, df, df) diff --git a/newlib/libm/machine/amdgcn/v64df_cosh.c b/newlib/libm/machine/amdgcn/v64df_cosh.c new file mode 100644 index 0000000000..d0268b5b06 --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64df_cosh.c @@ -0,0 +1,41 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * Copyright (c) 1994-2009 Red Hat, Inc. All rights reserved. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the BSD License. This program is distributed in the hope that + * it will be useful, but WITHOUT ANY WARRANTY expressed or implied, + * including the implied warranties of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. A copy of this license is available at + * http://www.opensource.org/licenses. Any Red Hat trademarks that are + * incorporated in the source code or documentation are not subject to + * the BSD License and may only be used or replicated with the express + * permission of Red Hat, Inc. + */ + +/* Based on newlib/libm/mathfp/s_cosh.c in Newlib. */ + +#include "amdgcnmach.h" + +v64df v64df_sineh_aux (v64df, int, v64di); + +DEF_VD_MATH_FUNC (v64df, cosh, v64df x) +{ + return v64df_sineh_aux (x, 1, __mask); +} + +DEF_VARIANTS (cosh, df, df) diff --git a/newlib/libm/machine/amdgcn/v64df_erf.c b/newlib/libm/machine/amdgcn/v64df_erf.c new file mode 100644 index 0000000000..518ac979ab --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64df_erf.c @@ -0,0 +1,185 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* Based on newlib/libm/mathfp/s_erf.c in Newlib. */ + +#include "amdgcnmach.h" + +v64df v64df_exp_aux (v64df, v64di); + +static const double +tiny = 1e-300, +half= 5.00000000000000000000e-01, /* 0x3FE00000, 0x00000000 */ +one = 1.00000000000000000000e+00, /* 0x3FF00000, 0x00000000 */ +two = 2.00000000000000000000e+00, /* 0x40000000, 0x00000000 */ +/* c = (float)0.84506291151 */ +erx = 8.45062911510467529297e-01, /* 0x3FEB0AC1, 0x60000000 */ +/* + * Coefficients for approximation to erf on [0,0.84375] + */ +efx = 1.28379167095512586316e-01, /* 0x3FC06EBA, 0x8214DB69 */ +efx8= 1.02703333676410069053e+00, /* 0x3FF06EBA, 0x8214DB69 */ +pp0 = 1.28379167095512558561e-01, /* 0x3FC06EBA, 0x8214DB68 */ +pp1 = -3.25042107247001499370e-01, /* 0xBFD4CD7D, 0x691CB913 */ +pp2 = -2.84817495755985104766e-02, /* 0xBF9D2A51, 0xDBD7194F */ +pp3 = -5.77027029648944159157e-03, /* 0xBF77A291, 0x236668E4 */ +pp4 = -2.37630166566501626084e-05, /* 0xBEF8EAD6, 0x120016AC */ +qq1 = 3.97917223959155352819e-01, /* 0x3FD97779, 0xCDDADC09 */ +qq2 = 6.50222499887672944485e-02, /* 0x3FB0A54C, 0x5536CEBA */ +qq3 = 5.08130628187576562776e-03, /* 0x3F74D022, 0xC4D36B0F */ +qq4 = 1.32494738004321644526e-04, /* 0x3F215DC9, 0x221C1A10 */ +qq5 = -3.96022827877536812320e-06, /* 0xBED09C43, 0x42A26120 */ +/* + * Coefficients for approximation to erf in [0.84375,1.25] + */ +pa0 = -2.36211856075265944077e-03, /* 0xBF6359B8, 0xBEF77538 */ +pa1 = 4.14856118683748331666e-01, /* 0x3FDA8D00, 0xAD92B34D */ +pa2 = -3.72207876035701323847e-01, /* 0xBFD7D240, 0xFBB8C3F1 */ +pa3 = 3.18346619901161753674e-01, /* 0x3FD45FCA, 0x805120E4 */ +pa4 = -1.10894694282396677476e-01, /* 0xBFBC6398, 0x3D3E28EC */ +pa5 = 3.54783043256182359371e-02, /* 0x3FA22A36, 0x599795EB */ +pa6 = -2.16637559486879084300e-03, /* 0xBF61BF38, 0x0A96073F */ +qa1 = 1.06420880400844228286e-01, /* 0x3FBB3E66, 0x18EEE323 */ +qa2 = 5.40397917702171048937e-01, /* 0x3FE14AF0, 0x92EB6F33 */ +qa3 = 7.18286544141962662868e-02, /* 0x3FB2635C, 0xD99FE9A7 */ +qa4 = 1.26171219808761642112e-01, /* 0x3FC02660, 0xE763351F */ +qa5 = 1.36370839120290507362e-02, /* 0x3F8BEDC2, 0x6B51DD1C */ +qa6 = 1.19844998467991074170e-02, /* 0x3F888B54, 0x5735151D */ +/* + * Coefficients for approximation to erfc in [1.25,1/0.35] + */ +ra0 = -9.86494403484714822705e-03, /* 0xBF843412, 0x600D6435 */ +ra1 = -6.93858572707181764372e-01, /* 0xBFE63416, 0xE4BA7360 */ +ra2 = -1.05586262253232909814e+01, /* 0xC0251E04, 0x41B0E726 */ +ra3 = -6.23753324503260060396e+01, /* 0xC04F300A, 0xE4CBA38D */ +ra4 = -1.62396669462573470355e+02, /* 0xC0644CB1, 0x84282266 */ +ra5 = -1.84605092906711035994e+02, /* 0xC067135C, 0xEBCCABB2 */ +ra6 = -8.12874355063065934246e+01, /* 0xC0545265, 0x57E4D2F2 */ +ra7 = -9.81432934416914548592e+00, /* 0xC023A0EF, 0xC69AC25C */ +sa1 = 1.96512716674392571292e+01, /* 0x4033A6B9, 0xBD707687 */ +sa2 = 1.37657754143519042600e+02, /* 0x4061350C, 0x526AE721 */ +sa3 = 4.34565877475229228821e+02, /* 0x407B290D, 0xD58A1A71 */ +sa4 = 6.45387271733267880336e+02, /* 0x40842B19, 0x21EC2868 */ +sa5 = 4.29008140027567833386e+02, /* 0x407AD021, 0x57700314 */ +sa6 = 1.08635005541779435134e+02, /* 0x405B28A3, 0xEE48AE2C */ +sa7 = 6.57024977031928170135e+00, /* 0x401A47EF, 0x8E484A93 */ +sa8 = -6.04244152148580987438e-02, /* 0xBFAEEFF2, 0xEE749A62 */ +/* + * Coefficients for approximation to erfc in [1/.35,28] + */ +rb0 = -9.86494292470009928597e-03, /* 0xBF843412, 0x39E86F4A */ +rb1 = -7.99283237680523006574e-01, /* 0xBFE993BA, 0x70C285DE */ +rb2 = -1.77579549177547519889e+01, /* 0xC031C209, 0x555F995A */ +rb3 = -1.60636384855821916062e+02, /* 0xC064145D, 0x43C5ED98 */ +rb4 = -6.37566443368389627722e+02, /* 0xC083EC88, 0x1375F228 */ +rb5 = -1.02509513161107724954e+03, /* 0xC0900461, 0x6A2E5992 */ +rb6 = -4.83519191608651397019e+02, /* 0xC07E384E, 0x9BDC383F */ +sb1 = 3.03380607434824582924e+01, /* 0x403E568B, 0x261D5190 */ +sb2 = 3.25792512996573918826e+02, /* 0x40745CAE, 0x221B9F0A */ +sb3 = 1.53672958608443695994e+03, /* 0x409802EB, 0x189D5118 */ +sb4 = 3.19985821950859553908e+03, /* 0x40A8FFB7, 0x688C246A */ +sb5 = 2.55305040643316442583e+03, /* 0x40A3F219, 0xCEDF3BE6 */ +sb6 = 4.74528541206955367215e+02, /* 0x407DA874, 0xE79FE763 */ +sb7 = -2.24409524465858183362e+01; /* 0xC03670E2, 0x42712D62 */ + +#if defined (__has_builtin) && __has_builtin (__builtin_gcn_fabsv) + +DEF_VD_MATH_FUNC (v64df, erf, v64df x) +{ + FUNCTION_INIT (v64df); + + v64si hx; + GET_HIGH_WORD (hx, x, NO_COND); + v64si ix = hx & 0x7fffffff; + + VECTOR_IF (ix >= 0x7ff00000, cond) /* erf(nan)=nan */ + v64si i = (hx >> 31) << 1; + /* erf(+-inf)=+-1 */ + VECTOR_RETURN (__builtin_convertvector (1 - i, v64df) + one / x, cond); + VECTOR_ENDIF + + VECTOR_IF (ix < 0x3feb0000, cond) /* |x|<0.84375 */ + VECTOR_IF2 (ix < 0x3e300000, cond2, cond) /* |x|<2**-28 */ + VECTOR_IF2 (ix < 0x00800000, cond3, cond2) /* avoid underflow */ + VECTOR_RETURN (0.125*(8.0*x + efx8*x), cond3); + VECTOR_ENDIF + VECTOR_RETURN (x + efx*x, cond2); + VECTOR_ENDIF + + v64df z = x*x; + v64df r = pp0+z*(pp1+z*(pp2+z*(pp3+z*pp4))); + v64df s = one+z*(qq1+z*(qq2+z*(qq3+z*(qq4+z*qq5)))); + v64df y = r/s; + + VECTOR_RETURN (x + x*y, cond); + VECTOR_ENDIF + + VECTOR_IF (ix < 0x3ff40000, cond) /* 0.84375 <= |x| < 1.25 */ + v64df s = __builtin_gcn_fabsv (x) - one; + v64df P = pa0+s*(pa1+s*(pa2+s*(pa3+s*(pa4+s*(pa5+s*pa6))))); + v64df Q = one+s*(qa1+s*(qa2+s*(qa3+s*(qa4+s*(qa5+s*qa6))))); + VECTOR_IF2 (hx >= 0, cond2, cond) + VECTOR_RETURN (erx + P/Q, cond2); + VECTOR_ELSE2 (cond2, cond) + VECTOR_RETURN (-erx - P/Q, cond2); + VECTOR_ENDIF + VECTOR_ENDIF + + VECTOR_IF (ix >= 0x40180000, cond) /* inf>|x|>=6 */ + VECTOR_IF2 (hx >= 0, cond2, cond) + VECTOR_RETURN (VECTOR_INIT (1.0 - tiny), cond2); + VECTOR_ELSE2 (cond2, cond) + VECTOR_RETURN (VECTOR_INIT (tiny - 1.0), cond2); + VECTOR_ENDIF + VECTOR_ENDIF + + x = __builtin_gcn_fabsv(x); + v64df s = 1.0 / (x*x); + v64df R, S; + VECTOR_IF (ix < 0x4006DB6E, cond) /* |x| < 1/0.35 */ + VECTOR_COND_MOVE (R, ra0+s*(ra1+s*(ra2+s*(ra3+s*(ra4+s*( + ra5+s*(ra6+s*ra7)))))), cond); + VECTOR_COND_MOVE (S, one+s*(sa1+s*(sa2+s*(sa3+s*(sa4+s*( + sa5+s*(sa6+s*(sa7+s*sa8))))))), cond); + VECTOR_ELSE (cond) /* |x| >= 1/0.35 */ + VECTOR_COND_MOVE (R, rb0+s*(rb1+s*(rb2+s*(rb3+s*(rb4+s*( + rb5+s*rb6))))), cond); + VECTOR_COND_MOVE (S, one+s*(sb1+s*(sb2+s*(sb3+s*(sb4+s*( + sb5+s*(sb6+s*sb7)))))), cond); + VECTOR_ENDIF + + v64df z; + SET_LOW_WORD (z, VECTOR_INIT(0), NO_COND); + v64df r = v64df_exp_aux (-z*z - 0.5625, __mask) + * v64df_exp_aux ((z-x)*(z+x) + R/S, __mask); + VECTOR_RETURN (one - r/x, hx >= 0); + VECTOR_RETURN (r/x - one, hx < 0); + + FUNCTION_RETURN; +} + +DEF_VARIANTS (erf, df, df) + +#endif diff --git a/newlib/libm/machine/amdgcn/v64df_exp.c b/newlib/libm/machine/amdgcn/v64df_exp.c new file mode 100644 index 0000000000..f4890e2df3 --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64df_exp.c @@ -0,0 +1,103 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * Copyright (c) 1994-2009 Red Hat, Inc. All rights reserved. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the BSD License. This program is distributed in the hope that + * it will be useful, but WITHOUT ANY WARRANTY expressed or implied, + * including the implied warranties of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. A copy of this license is available at + * http://www.opensource.org/licenses. Any Red Hat trademarks that are + * incorporated in the source code or documentation are not subject to + * the BSD License and may only be used or replicated with the express + * permission of Red Hat, Inc. + */ + +/****************************************************************** + * The following routines are coded directly from the algorithms + * and coefficients given in "Software Manual for the Elementary + * Functions" by William J. Cody, Jr. and William Waite, Prentice + * Hall, 1980. + ******************************************************************/ + +/* Based on newlib/libm/mathfp/s_exp.c in Newlib. */ + +#include "amdgcnmach.h" + +v64si v64df_ispos (v64df); +v64si v64df_numtest (v64df); + +static const double INV_LN2 = 1.4426950408889634074; +static const double LN2 = 0.6931471805599453094172321; +static const double p[] = { 0.25, 0.75753180159422776666e-2, + 0.31555192765684646356e-4 }; +static const double q[] = { 0.5, 0.56817302698551221787e-1, + 0.63121894374398504557e-3, + 0.75104028399870046114e-6 }; + +#if defined (__has_builtin) && __has_builtin (__builtin_gcn_ldexpv) + +DEF_VD_MATH_FUNC (v64df, exp, v64df x) +{ + FUNCTION_INIT (v64df); + + v64si num_type = v64df_numtest (x); + VECTOR_IF (num_type == NAN, cond) + errno = EDOM; + VECTOR_RETURN (x, cond); + VECTOR_ELSEIF (num_type == INF, cond) + errno = ERANGE; + VECTOR_RETURN (VECTOR_MERGE (VECTOR_INIT (z_infinity.d), + VECTOR_INIT (0.0), + v64df_ispos (x)), + cond); + VECTOR_ELSEIF (num_type == 0, cond) + VECTOR_RETURN (VECTOR_INIT (1.0), cond); + VECTOR_ENDIF + + /* Check for out of bounds. */ + VECTOR_IF ((x > BIGX) | (x < SMALLX), cond) + errno = ERANGE; + VECTOR_RETURN (x, cond); + VECTOR_ENDIF + + /* Check for a value too small to calculate. */ + VECTOR_RETURN (VECTOR_INIT (1.0), + (-z_rooteps_f < x) & (x < z_rooteps_f)); + + /* Calculate the exponent. */ + v64si Nneg = __builtin_convertvector (x * INV_LN2 - 0.5, v64si); + v64si Npos = __builtin_convertvector (x * INV_LN2 + 0.5, v64si); + v64si N = VECTOR_MERGE (Nneg, Npos, x < 0.0); + + /* Construct the mantissa. */ + v64df g = x - __builtin_convertvector (N, v64df) * LN2; + v64df z = g * g; + v64df P = g * ((p[2] * z + p[1]) * z + p[0]); + v64df Q = ((q[3] * z + q[2]) * z + q[1]) * z + q[0]; + v64df R = 0.5 + P / (Q - P); + + /* Return the floating point value. */ + N++; + VECTOR_RETURN (__builtin_gcn_ldexpv (R, N), NO_COND); + + FUNCTION_RETURN; +} + +DEF_VARIANTS (exp, df, df) + +#endif diff --git a/newlib/libm/machine/amdgcn/v64df_exp2.c b/newlib/libm/machine/amdgcn/v64df_exp2.c new file mode 100644 index 0000000000..33ad59705a --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64df_exp2.c @@ -0,0 +1,32 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* Copyright (C) 2002 by Red Hat, Incorporated. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software + * is freely granted, provided that this notice is preserved. + */ + +/* Based on newlib/libm/mathfp/s_exp2.c in Newlib. */ + +#include "amdgcnmach.h" + +v64df v64df_pow_aux (v64df, v64df, v64di); + +DEF_VD_MATH_FUNC (v64df, exp2, v64df x) +{ + return v64df_pow_aux (VECTOR_INIT (2.0), x, __mask); +} + +DEF_VARIANTS (exp2, df, df) diff --git a/newlib/libm/machine/amdgcn/v64df_finite.c b/newlib/libm/machine/amdgcn/v64df_finite.c new file mode 100644 index 0000000000..3eafe07f05 --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64df_finite.c @@ -0,0 +1,38 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* Based on newlib/libm/common/s_finite.c in Newlib. */ + +#include "amdgcnmach.h" + +DEF_VD_MATH_PRED (v64si, finite, v64df x) +{ + FUNCTION_INIT (v64si); + v64si hx; + GET_HIGH_WORD (hx, x, NO_COND); + return (((hx & 0x7fffffff) - 0x7ff00000) >> 31) != 0; +} + +DEF_VARIANTS (finite, si, df) diff --git a/newlib/libm/machine/amdgcn/v64df_fmod.c b/newlib/libm/machine/amdgcn/v64df_fmod.c new file mode 100644 index 0000000000..750546f60a --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64df_fmod.c @@ -0,0 +1,199 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* Based on newlib/libm/mathfp/s_fmod.c in Newlib. */ + +#include "amdgcnmach.h" + +DEF_VD_MATH_FUNC (v64df, fmod, v64df x, v64df y) +{ + FUNCTION_INIT(v64df); + + v64si hx, hy, hz; + v64usi lx, ly, lz; + EXTRACT_WORDS (hx, lx, x); + EXTRACT_WORDS (hy, ly, y); + v64si sx = hx & 0x80000000; /* sign of x */ + hx ^=sx; /* |x| */ + hy &= 0x7fffffff; /* |y| */ + + v64df zeroes = VECTOR_MERGE (VECTOR_INIT (-0.0), + VECTOR_INIT (0.0), + sx != 0); + + /* purge off exception values */ + VECTOR_IF (((hy | ly) == 0) | (hx >= 0x7ff00000) + | ((hy | ((ly | -ly) >> 31)) > 0x7ff00000), cond) // y=0, or x not finite or y is NaN + VECTOR_RETURN ((x * y) / (x * y), cond); + VECTOR_ENDIF + VECTOR_IF (hx <= hy, cond) // |x|<|y| return x + VECTOR_IF2 ((hx < hy) | (lx < ly), cond2, cond) + VECTOR_RETURN (x, cond); + VECTOR_ENDIF + VECTOR_IF2 (lx == ly, cond2, cond) + VECTOR_RETURN (zeroes, cond2); + VECTOR_ENDIF + VECTOR_ENDIF + + /* determine ix = ilogb(x) */ + v64si ix; + VECTOR_IF (hx < 0x00100000, cond) // subnormal x + VECTOR_IF2 (hx == 0, cond2, cond) + ix = VECTOR_INIT (-1043); + for (v64si i = __builtin_convertvector (lx, v64si); + !ALL_ZEROES_P (cond2 & (i > 0)); + i <<= 1) + VECTOR_COND_MOVE (ix, ix - 1, cond2 & (i > 0)); + VECTOR_ELSE2 (cond2, cond) + ix = VECTOR_INIT (-1022); + for (v64si i = __builtin_convertvector (hx << 11, v64si); + !ALL_ZEROES_P (cond2 & (i > 0)); + i <<= 1) + VECTOR_COND_MOVE (ix, ix - 1, cond2 & (i > 0)); + VECTOR_ENDIF + VECTOR_ELSE (cond) + VECTOR_COND_MOVE (ix, (hx >> 20) - 1023, cond); + VECTOR_ENDIF + + /* determine iy = ilogb(y) */ + v64si iy; + VECTOR_IF (hy < 0x00100000, cond) // subnormal y + VECTOR_IF2 (hy == 0, cond2, cond) + iy = VECTOR_INIT (-1043); + for (v64si i = __builtin_convertvector (ly, v64si); + !ALL_ZEROES_P (cond2 & (i > 0)); + i <<= 1) + VECTOR_COND_MOVE (iy, iy - 1, cond2 & (i > 0)); + VECTOR_ELSE2 (cond2, cond) + iy = VECTOR_INIT (-1022); + for (v64si i = __builtin_convertvector (hy << 11, v64si); + !ALL_ZEROES_P (cond2 & (i > 0)); + i <<= 1) + VECTOR_COND_MOVE (iy, iy - 1, cond2 & (i > 0)); + VECTOR_ENDIF + VECTOR_ELSE (cond) + VECTOR_COND_MOVE (iy, (hy >> 20) - 1023, cond); + VECTOR_ENDIF + + +/* set up {hx,lx}, {hy,ly} and align y to x */ + VECTOR_IF (ix >= -1022, cond) + VECTOR_COND_MOVE (hx, 0x00100000 | (0x000fffff & hx), cond); + VECTOR_ELSE (cond) // subnormal x, shift x to normal + { + v64si n = -1022 - ix; + VECTOR_IF2 (n <= 31, cond2, cond) + VECTOR_COND_MOVE (hx, (hx << n) | (lx >> (32 - n)), cond2); + VECTOR_COND_MOVE (lx, lx << n, cond2); + VECTOR_ELSE2 (cond2, cond) + VECTOR_COND_MOVE (hx, __builtin_convertvector (lx << (n - 32), v64si), cond2); + VECTOR_COND_MOVE (lx, VECTOR_INIT (0U), cond2); + VECTOR_ENDIF + } + VECTOR_ENDIF + VECTOR_IF (iy >= -1022, cond) + VECTOR_COND_MOVE (hy, 0x00100000 | (0x000fffff & hy), cond); + VECTOR_ELSE (cond) // subnormal y, shift y to normal + { + v64si n = -1022 - iy; + VECTOR_IF2 (n <= 31, cond2, cond) + VECTOR_COND_MOVE (hy, (hy << n) | (ly >> (32 - n)), cond2); + VECTOR_COND_MOVE (ly, ly << n, cond2); + VECTOR_ELSE2 (cond2, cond) + VECTOR_COND_MOVE (hy, __builtin_convertvector (ly << (n - 32), v64si), cond2); + VECTOR_COND_MOVE (ly, VECTOR_INIT (0U), cond2); + VECTOR_ENDIF + } + VECTOR_ENDIF + +/* fix point fmod */ + v64si n = ix - iy; + v64si cond = n != 0; + + while (!ALL_ZEROES_P (cond)) + { + hz = hx - hy; + lz = lx - ly; + VECTOR_IF2 (lx < ly, cond2, cond) + VECTOR_COND_MOVE (hz, hz - 1, cond2); + VECTOR_ENDIF + VECTOR_IF2 (hz < 0, cond2, cond) + VECTOR_COND_MOVE (hx, hx + hx + (__builtin_convertvector(lx, v64usi) >> 31), cond2); + VECTOR_COND_MOVE (lx, lx + lx, cond2); + VECTOR_ELSE2 (cond2, cond) + VECTOR_IF2 ((hz | lz) == 0, cond3, cond2) // return sign(x)*0 + VECTOR_RETURN (zeroes, cond3); + VECTOR_ENDIF + VECTOR_COND_MOVE (hx, hz + hz + (__builtin_convertvector(lz, v64usi) >> 31), cond2); + VECTOR_COND_MOVE (lx, lz + lz, cond2); + VECTOR_ENDIF + + n += cond; // Active lanes should be -1 + cond &= (n != 0); + } + + hz = hx - hy; + lz = lx - ly; + VECTOR_COND_MOVE (hz, hz - 1, lx < ly); + VECTOR_IF (hz >= 0, cond) + VECTOR_COND_MOVE (hx, hz, cond); + VECTOR_COND_MOVE (lx, lz, cond); + VECTOR_ENDIF + + /* convert back to floating value and restore the sign */ + VECTOR_RETURN (zeroes, (hx | lx) == 0); // return sign(x)*0 + cond = hx < 0x00100000; + while (!ALL_ZEROES_P (cond)) // normalize x + { + VECTOR_COND_MOVE (hx, hx + hx + (lx >> 31), cond); + VECTOR_COND_MOVE (lx, lx + lx, cond); + iy += cond; // Active lanes should be -1 + + cond &= (hx < 0x00100000); + } + VECTOR_IF (iy >= -1022, cond) // normalize output + VECTOR_COND_MOVE (hx, (hx - 0x00100000) | ((iy + 1023) << 20), cond); + INSERT_WORDS (x, hx | sx, lx, cond); + VECTOR_ELSE (cond) // subnormal output */ + n = -1022 - iy; + VECTOR_IF2 (n <= 20, cond2, cond) + VECTOR_COND_MOVE (lx, (lx >> n) | (hx << (32 - n)), cond2); + VECTOR_COND_MOVE (hx, hx >> n, cond2); + VECTOR_ELSEIF2 (n <= 31, cond2, cond) + VECTOR_COND_MOVE (lx, __builtin_convertvector ((hx << (32 - n)) | (lx >> n), v64usi), cond2); + VECTOR_COND_MOVE (hx, sx, cond2); + VECTOR_ELSE2 (cond2, cond) + VECTOR_COND_MOVE (lx, __builtin_convertvector (hx >> (n - 32), v64usi), cond2); + VECTOR_COND_MOVE (hx, sx, cond2); + VECTOR_ENDIF + INSERT_WORDS (x, hx | sx, lx, cond); + x *= VECTOR_INIT (1.0); /* create necessary signal */ + VECTOR_ENDIF + + VECTOR_RETURN (x, NO_COND); /* exact output */ + FUNCTION_RETURN; +} + +DEF_VARIANTS2 (fmod, df, df) diff --git a/newlib/libm/machine/amdgcn/v64df_gamma.c b/newlib/libm/machine/amdgcn/v64df_gamma.c new file mode 100644 index 0000000000..4b5af3e067 --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64df_gamma.c @@ -0,0 +1,38 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + * + */ + +/* Based on newlib/libm/math/w_gamma.c in Newlib. */ + +#include "amdgcnmach.h" + +v64df v64df_lgamma_aux (v64df x, v64di __mask); + +DEF_VD_MATH_FUNC (v64df, gamma, v64df x) +{ + return v64df_lgamma_aux(x, __mask); +} + +DEF_VARIANTS (gamma, df, df) diff --git a/newlib/libm/machine/amdgcn/v64df_hypot.c b/newlib/libm/machine/amdgcn/v64df_hypot.c new file mode 100644 index 0000000000..fde1cb3840 --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64df_hypot.c @@ -0,0 +1,127 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* Based on newlib/libm/mathfp/e_hypot.c in Newlib. */ + +#include "amdgcnmach.h" + +v64df v64df_sqrt_aux (v64df, v64di); + +DEF_VD_MATH_FUNC (v64df, hypot, v64df x, v64df y) +{ + FUNCTION_INIT (v64df); + + v64df a = x; + v64df b = y; + + v64si ha; + GET_HIGH_WORD (ha, x, NO_COND); + ha &= 0x7fffffffL; + v64si hb; + GET_HIGH_WORD (hb, y, NO_COND); + hb &= 0x7fffffffL; + + VECTOR_IF (hb > ha, cond) + VECTOR_COND_MOVE (a, y, cond); + VECTOR_COND_MOVE (b, x, cond); + v64si j = ha; + VECTOR_COND_MOVE (ha, hb, cond); + VECTOR_COND_MOVE (hb, j, cond); + VECTOR_ENDIF + SET_HIGH_WORD (a, ha, NO_COND); /* a <- |a| */ + SET_HIGH_WORD (b, hb, NO_COND); /* b <- |b| */ + VECTOR_IF((ha - hb) > 0x3c00000L, cond) // x/y > 2**60 */ + VECTOR_RETURN (a + b, cond); + VECTOR_ENDIF + + v64si k = VECTOR_INIT (0); + + VECTOR_IF (ha > 0x5f300000L, cond) /* a>2**500 */ + VECTOR_IF2 (ha >= 0x7ff00000L, cond2, cond) /* Inf or NaN */ + v64df w = a + b; // for sNaN */ + v64si low; + GET_LOW_WORD (low, a, cond2); + VECTOR_COND_MOVE (w, a, cond2 & (((ha & 0xfffff) | low) == 0)); + GET_LOW_WORD (low, b, cond2); + VECTOR_COND_MOVE (w, b, cond2 & (((hb & 0xfffff) | low) == 0)); + VECTOR_RETURN (w, cond); + VECTOR_ENDIF + /* scale a and b by 2**-600 */ + VECTOR_COND_MOVE (ha, ha - 0x25800000, cond); + VECTOR_COND_MOVE (hb, hb - 0x25800000, cond); + VECTOR_COND_MOVE (k, k + 600, cond); + SET_HIGH_WORD (a, ha, cond); + SET_HIGH_WORD (b, hb, cond); + VECTOR_ENDIF + VECTOR_IF (hb < 0x20b00000, cond) /* b < 2**-500 */ + VECTOR_IF2 (hb <= 0x000fffff, cond2, cond) /* subnormal b or 0 */ + v64si low; + GET_LOW_WORD (low, b, cond); + VECTOR_RETURN (a, cond2 & ((hb | low) == 0)); + /* t1=2^1022 */ + v64df t1 = VECTOR_INIT (0.0); + SET_HIGH_WORD (t1, VECTOR_INIT (0x7fd00000), cond2); + VECTOR_COND_MOVE (b, b * t1, cond2); + VECTOR_COND_MOVE (a, a * t1, cond2); + VECTOR_COND_MOVE (k, k - 1022, cond2); + VECTOR_ELSE2 (cond2, cond) /* scale a and b by 2^600 */ + VECTOR_COND_MOVE (ha, ha + 0x25800000, cond2); /* a *= 2^600 */ + VECTOR_COND_MOVE (hb, hb + 0x25800000, cond2); /* b *= 2^600 */ + VECTOR_COND_MOVE (k, k - 600, cond2); + SET_HIGH_WORD (a, ha, cond2); + SET_HIGH_WORD (b, hb, cond2); + VECTOR_ENDIF + VECTOR_ENDIF + /* medium size a and b */ + v64df w = a - b; + VECTOR_IF (w > b, cond) + v64df t1 = VECTOR_INIT (0.0); + SET_HIGH_WORD (t1, ha, cond); + v64df t2 = a - t1; + VECTOR_COND_MOVE (w, v64df_sqrt_aux (t1*t1 - (b*(-b) - t2 * (a + t1)), __mask), cond); + VECTOR_ELSE (cond) + VECTOR_COND_MOVE (a, a+a, cond); + v64df y1 = VECTOR_INIT (0.0); + SET_HIGH_WORD (y1, hb, cond); + v64df y2 = b - y1; + v64df t1; + SET_HIGH_WORD (t1, ha + 0x00100000, cond); + v64df t2 = a - t1; + VECTOR_COND_MOVE (w, v64df_sqrt_aux (t1*y1 - (w*(-w) - (t1*y2 + t2*b)), __mask), cond); + VECTOR_ENDIF + VECTOR_IF (k != 0, cond) + v64si high; + v64df t1 = VECTOR_INIT (1.0); + GET_HIGH_WORD (high, t1, cond); + SET_HIGH_WORD (t1, high + (k << 20), cond); + VECTOR_RETURN (t1 * w, cond); + VECTOR_ELSE (cond) + VECTOR_RETURN (w, cond); + VECTOR_ENDIF + + FUNCTION_RETURN; +} + +DEF_VARIANTS2 (hypot, df, df) diff --git a/newlib/libm/machine/amdgcn/v64df_ilogb.c b/newlib/libm/machine/amdgcn/v64df_ilogb.c new file mode 100644 index 0000000000..56eb70089b --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64df_ilogb.c @@ -0,0 +1,59 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* Based on newlib/libm/common/s_ilogb.c in Newlib. */ + +#include "amdgcnmach.h" + +DEF_VD_MATH_PRED (v64si, ilogb, v64df x) +{ + FUNCTION_INIT(v64si); + v64si hx, lx, ix; + EXTRACT_WORDS (hx, lx, x); + hx &= 0x7fffffff; + VECTOR_IF (hx < 0x00100000, cond) + VECTOR_RETURN (VECTOR_INIT (-__INT_MAX__), cond & ((hx | lx) == 0)); // FP_ILOGB0 + VECTOR_IF2 (hx == 0, cond2, cond) + ix = VECTOR_INIT (-1043); + for (v64si i = lx; + !ALL_ZEROES_P (cond2 & (i > 0)); + i <<= 1) + VECTOR_COND_MOVE (ix, ix - 1, cond2 & (i > 0)); + VECTOR_ELSE2 (cond2, cond) + ix = VECTOR_INIT (-1022); + for (v64si i = (hx << 11); + !ALL_ZEROES_P (cond2 & (i > 0)); + i <<= 1) + VECTOR_COND_MOVE (ix, ix - 1, cond2 & (i > 0)); + VECTOR_ENDIF + VECTOR_RETURN (ix, cond); + VECTOR_ENDIF + VECTOR_RETURN ((hx >> 20) - 1023, hx < 0x7ff00000); + VECTOR_RETURN (VECTOR_INIT (__INT_MAX__), NO_COND); + + FUNCTION_RETURN; +} + +DEF_VARIANTS (ilogb, si, df) diff --git a/newlib/libm/machine/amdgcn/v64df_isnan.c b/newlib/libm/machine/amdgcn/v64df_isnan.c new file mode 100644 index 0000000000..033917274c --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64df_isnan.c @@ -0,0 +1,41 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* Based on newlib/libm/common/s_isnan.c in Newlib. */ + +#include "amdgcnmach.h" + +DEF_VD_MATH_PRED (v64si, isnan, v64df x) +{ + v64si hx, lx; + EXTRACT_WORDS (hx, lx, x); + hx &= 0x7fffffff; + hx |= (lx | (-lx)) >> 31; + hx = 0x7ff00000 - hx; + + return (hx >> 31) != 0; +} + +DEF_VARIANTS (isnan, si, df) diff --git a/newlib/libm/machine/amdgcn/v64df_ispos.c b/newlib/libm/machine/amdgcn/v64df_ispos.c new file mode 100644 index 0000000000..ff34598e2a --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64df_ispos.c @@ -0,0 +1,47 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * Copyright (c) 1994-2009 Red Hat, Inc. All rights reserved. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the BSD License. This program is distributed in the hope that + * it will be useful, but WITHOUT ANY WARRANTY expressed or implied, + * including the implied warranties of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. A copy of this license is available at + * http://www.opensource.org/licenses. Any Red Hat trademarks that are + * incorporated in the source code or documentation are not subject to + * the BSD License and may only be used or replicated with the express + * permission of Red Hat, Inc. + */ + +/* Based on newlib/libm/mathfp/s_ispos.c in Newlib. */ + +#include "amdgcnmach.h" + +v64si +v64df_ispos (v64df x) +{ + // Explicitly create mask for internal function. + v64si __mask = VECTOR_INIT (-1); + FUNCTION_INIT (v64si); + + v64si hx; + GET_HIGH_WORD (hx, x, NO_COND); + + VECTOR_RETURN ((hx & 0x80000000) == 0, NO_COND); + + FUNCTION_RETURN; +} diff --git a/newlib/libm/machine/amdgcn/v64df_lgamma.c b/newlib/libm/machine/amdgcn/v64df_lgamma.c new file mode 100644 index 0000000000..8a827ac834 --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64df_lgamma.c @@ -0,0 +1,44 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + * + */ + +/* Based on newlib/libm/math/w_lgamma.c in Newlib. */ + +#include "amdgcnmach.h" + +v64si v64df_finite_aux (v64df x, v64di __mask); +v64df v64df_lgamma_r_aux (v64df x, v64si *signgamp, v64di __mask); + +DEF_VD_MATH_FUNC (v64df, lgamma, v64df x) +{ + v64df y = v64df_lgamma_r_aux(x, &(_REENT_V64SI_SIGNGAM(_V64_REENT)), __mask); + if (ALL_ZEROES_P(v64df_finite_aux(y, __mask)) & !ALL_ZEROES_P(v64df_finite_aux(x, __mask))) { + /* lgamma(finite) overflow */ + errno = ERANGE; + } + return y; +} + +DEF_VARIANTS (lgamma, df, df) diff --git a/newlib/libm/machine/amdgcn/v64df_lgamma_r.c b/newlib/libm/machine/amdgcn/v64df_lgamma_r.c new file mode 100644 index 0000000000..59a895e30c --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64df_lgamma_r.c @@ -0,0 +1,300 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + * + */ + +/* Based on newlib/libm/math/er_lgamma.c in Newlib. */ + +#include "amdgcnmach.h" + +static const double two52= 4.50359962737049600000e+15, /* 0x43300000, 0x00000000 */ +half= 5.00000000000000000000e-01, /* 0x3FE00000, 0x00000000 */ +one = 1.00000000000000000000e+00, /* 0x3FF00000, 0x00000000 */ +pi = 3.14159265358979311600e+00, /* 0x400921FB, 0x54442D18 */ +a0 = 7.72156649015328655494e-02, /* 0x3FB3C467, 0xE37DB0C8 */ +a1 = 3.22467033424113591611e-01, /* 0x3FD4A34C, 0xC4A60FAD */ +a2 = 6.73523010531292681824e-02, /* 0x3FB13E00, 0x1A5562A7 */ +a3 = 2.05808084325167332806e-02, /* 0x3F951322, 0xAC92547B */ +a4 = 7.38555086081402883957e-03, /* 0x3F7E404F, 0xB68FEFE8 */ +a5 = 2.89051383673415629091e-03, /* 0x3F67ADD8, 0xCCB7926B */ +a6 = 1.19270763183362067845e-03, /* 0x3F538A94, 0x116F3F5D */ +a7 = 5.10069792153511336608e-04, /* 0x3F40B6C6, 0x89B99C00 */ +a8 = 2.20862790713908385557e-04, /* 0x3F2CF2EC, 0xED10E54D */ +a9 = 1.08011567247583939954e-04, /* 0x3F1C5088, 0x987DFB07 */ +a10 = 2.52144565451257326939e-05, /* 0x3EFA7074, 0x428CFA52 */ +a11 = 4.48640949618915160150e-05, /* 0x3F07858E, 0x90A45837 */ +tc = 1.46163214496836224576e+00, /* 0x3FF762D8, 0x6356BE3F */ +tf = -1.21486290535849611461e-01, /* 0xBFBF19B9, 0xBCC38A42 */ +/* tt = -(tail of tf) */ +tt = -3.63867699703950536541e-18, /* 0xBC50C7CA, 0xA48A971F */ +t0 = 4.83836122723810047042e-01, /* 0x3FDEF72B, 0xC8EE38A2 */ +t1 = -1.47587722994593911752e-01, /* 0xBFC2E427, 0x8DC6C509 */ +t2 = 6.46249402391333854778e-02, /* 0x3FB08B42, 0x94D5419B */ +t3 = -3.27885410759859649565e-02, /* 0xBFA0C9A8, 0xDF35B713 */ +t4 = 1.79706750811820387126e-02, /* 0x3F9266E7, 0x970AF9EC */ +t5 = -1.03142241298341437450e-02, /* 0xBF851F9F, 0xBA91EC6A */ +t6 = 6.10053870246291332635e-03, /* 0x3F78FCE0, 0xE370E344 */ +t7 = -3.68452016781138256760e-03, /* 0xBF6E2EFF, 0xB3E914D7 */ +t8 = 2.25964780900612472250e-03, /* 0x3F6282D3, 0x2E15C915 */ +t9 = -1.40346469989232843813e-03, /* 0xBF56FE8E, 0xBF2D1AF1 */ +t10 = 8.81081882437654011382e-04, /* 0x3F4CDF0C, 0xEF61A8E9 */ +t11 = -5.38595305356740546715e-04, /* 0xBF41A610, 0x9C73E0EC */ +t12 = 3.15632070903625950361e-04, /* 0x3F34AF6D, 0x6C0EBBF7 */ +t13 = -3.12754168375120860518e-04, /* 0xBF347F24, 0xECC38C38 */ +t14 = 3.35529192635519073543e-04, /* 0x3F35FD3E, 0xE8C2D3F4 */ +u0 = -7.72156649015328655494e-02, /* 0xBFB3C467, 0xE37DB0C8 */ +u1 = 6.32827064025093366517e-01, /* 0x3FE4401E, 0x8B005DFF */ +u2 = 1.45492250137234768737e+00, /* 0x3FF7475C, 0xD119BD6F */ +u3 = 9.77717527963372745603e-01, /* 0x3FEF4976, 0x44EA8450 */ +u4 = 2.28963728064692451092e-01, /* 0x3FCD4EAE, 0xF6010924 */ +u5 = 1.33810918536787660377e-02, /* 0x3F8B678B, 0xBF2BAB09 */ +v1 = 2.45597793713041134822e+00, /* 0x4003A5D7, 0xC2BD619C */ +v2 = 2.12848976379893395361e+00, /* 0x40010725, 0xA42B18F5 */ +v3 = 7.69285150456672783825e-01, /* 0x3FE89DFB, 0xE45050AF */ +v4 = 1.04222645593369134254e-01, /* 0x3FBAAE55, 0xD6537C88 */ +v5 = 3.21709242282423911810e-03, /* 0x3F6A5ABB, 0x57D0CF61 */ +s0 = -7.72156649015328655494e-02, /* 0xBFB3C467, 0xE37DB0C8 */ +s1 = 2.14982415960608852501e-01, /* 0x3FCB848B, 0x36E20878 */ +s2 = 3.25778796408930981787e-01, /* 0x3FD4D98F, 0x4F139F59 */ +s3 = 1.46350472652464452805e-01, /* 0x3FC2BB9C, 0xBEE5F2F7 */ +s4 = 2.66422703033638609560e-02, /* 0x3F9B481C, 0x7E939961 */ +s5 = 1.84028451407337715652e-03, /* 0x3F5E26B6, 0x7368F239 */ +s6 = 3.19475326584100867617e-05, /* 0x3F00BFEC, 0xDD17E945 */ +r1 = 1.39200533467621045958e+00, /* 0x3FF645A7, 0x62C4AB74 */ +r2 = 7.21935547567138069525e-01, /* 0x3FE71A18, 0x93D3DCDC */ +r3 = 1.71933865632803078993e-01, /* 0x3FC601ED, 0xCCFBDF27 */ +r4 = 1.86459191715652901344e-02, /* 0x3F9317EA, 0x742ED475 */ +r5 = 7.77942496381893596434e-04, /* 0x3F497DDA, 0xCA41A95B */ +r6 = 7.32668430744625636189e-06, /* 0x3EDEBAF7, 0xA5B38140 */ +w0 = 4.18938533204672725052e-01, /* 0x3FDACFE3, 0x90C97D69 */ +w1 = 8.33333333333329678849e-02, /* 0x3FB55555, 0x5555553B */ +w2 = -2.77777777728775536470e-03, /* 0xBF66C16C, 0x16B02E5C */ +w3 = 7.93650558643019558500e-04, /* 0x3F4A019F, 0x98CF38B6 */ +w4 = -5.95187557450339963135e-04, /* 0xBF4380CB, 0x8C0FE741 */ +w5 = 8.36339918996282139126e-04, /* 0x3F4B67BA, 0x4CDAD5D1 */ +w6 = -1.63092934096575273989e-03; /* 0xBF5AB89D, 0x0B9E43E4 */ + +static const double zero= 0.00000000000000000000e+00; + +v64df v64df_cos_aux (v64df x, v64di __mask); +v64df v64df_log_aux (v64df x, v64di __mask); +v64df v64df_sin_aux (v64df x, v64di __mask); + +#if defined (__has_builtin) \ + && __has_builtin (__builtin_gcn_floorv) \ + && __has_builtin (__builtin_gcn_fabsv) + +static v64df +v64df_sin_pi (v64df x) +{ + // Explicitly create mask for internal function. + v64di __mask = VECTOR_INIT (-1L); + FUNCTION_INIT (v64df); + + v64df y, z; + v64si n, ix; + + GET_HIGH_WORD (ix, x, NO_COND); + ix &= 0x7fffffff; + + VECTOR_IF (ix < 0x3fd00000, cond) + VECTOR_RETURN (v64df_sin_aux (pi * x, __mask), cond); + VECTOR_ENDIF + y = -x; /* x is assume negative */ + + /* + * argument reduction, make sure inexact flag not raised if input + * is an integer + */ + z = __builtin_gcn_floorv (y); + VECTOR_IF (z != y, cond) + /* inexact anyway */ + VECTOR_COND_MOVE(y, y * 0.5, cond); + VECTOR_COND_MOVE(y, 2.0 * (y - __builtin_gcn_floorv (y)), cond); /* y = |x| mod 2.0 */ + VECTOR_COND_MOVE(n, __builtin_convertvector(y * 4.0, v64si), cond); + VECTOR_ELSE (cond) + VECTOR_IF2 (__builtin_convertvector(ix >= 0x43400000, v64di), cond2, cond) + VECTOR_COND_MOVE(y, VECTOR_INIT(zero), cond2); + VECTOR_COND_MOVE(n, VECTOR_INIT(0), cond2); /* y must be even */ + VECTOR_ELSE2 (cond2, cond) + VECTOR_COND_MOVE(z, y + two52 /* exact */, cond2 & __builtin_convertvector(ix < 0x43300000, v64di)); + GET_LOW_WORD (n, z, cond2); + VECTOR_COND_MOVE(n, n & 1, cond2); + VECTOR_COND_MOVE(y, __builtin_convertvector(n, v64df), cond2); + VECTOR_COND_MOVE(n, n << 2, cond2); + VECTOR_ENDIF + VECTOR_ENDIF + + VECTOR_IF (n == 0, cond) + VECTOR_COND_MOVE(y, v64df_sin_aux (pi * y, __mask), cond); + VECTOR_ELSEIF (n == 1 | n == 2, cond) + VECTOR_COND_MOVE(y, v64df_cos_aux (pi * (0.5 - y), __mask), cond); + VECTOR_ELSEIF (n == 3 | n == 4, cond) + VECTOR_COND_MOVE(y, v64df_sin_aux (pi * (VECTOR_INIT(one) - y), __mask), cond); + VECTOR_ELSEIF (n == 5 | n == 6, cond) + VECTOR_COND_MOVE(y, -v64df_cos_aux (pi * (y - 1.5), __mask), cond); + VECTOR_ELSE (cond) + VECTOR_COND_MOVE(y, v64df_sin_aux (pi * (y - 2.0), __mask), cond); + VECTOR_ENDIF + + VECTOR_RETURN(-y, NO_COND); + FUNCTION_RETURN; +} + +DEF_VD_MATH_FUNC (v64df, lgamma_r, v64df x, v64si *signgamp) +{ + FUNCTION_INIT (v64df); + + v64df t,y,z,nadj = VECTOR_INIT(0.0),p,p1,p2,p3,q,r,w; + v64si i,hx,lx,ix; + + EXTRACT_WORDS(hx,lx,x); + + /* purge off +-inf, NaN, +-0, and negative arguments */ + *signgamp = VECTOR_INIT(1); + ix = hx&0x7fffffff; + VECTOR_IF(ix>=0x7ff00000, cond) + VECTOR_RETURN (x*x, cond); + VECTOR_ENDIF + VECTOR_IF((ix|lx)==0, cond) + VECTOR_COND_MOVE(*signgamp, VECTOR_INIT(-1), cond & (hx<0)); + VECTOR_RETURN(one/(x-x), cond); + VECTOR_ENDIF + VECTOR_IF (ix < 0x3b900000, cond) /* |x|<2**-70, return -log(|x|) */ + VECTOR_IF2(hx<0, cond2, cond) + VECTOR_COND_MOVE(*signgamp, VECTOR_INIT(-1), cond); + VECTOR_RETURN (-v64df_log_aux(-x, __mask), cond2); + VECTOR_ELSE2(cond2, cond) + VECTOR_RETURN (-v64df_log_aux(x, __mask), cond2); + VECTOR_ENDIF + VECTOR_ENDIF + VECTOR_IF (hx < 0, cond) + VECTOR_IF2(ix>=0x43300000, cond2, cond) /* |x|>=2**52, must be -integer */ + VECTOR_RETURN(one/(x-x), cond2); /* -integer */ + VECTOR_ENDIF + VECTOR_COND_MOVE (t, v64df_sin_pi (x), cond); + VECTOR_IF2(__builtin_convertvector(t==zero, v64si), cond2, cond) + VECTOR_RETURN(one/(x-x), cond2); /* -integer */ + VECTOR_ENDIF + VECTOR_COND_MOVE(nadj, v64df_log_aux(VECTOR_INIT(pi)/__builtin_gcn_fabsv(t*x), __mask), cond); + VECTOR_COND_MOVE(*signgamp, VECTOR_INIT(-1), cond & __builtin_convertvector(t < zero, v64si)); + VECTOR_COND_MOVE(x, -x, cond); + VECTOR_ENDIF + + /* purge off 1 and 2 */ + VECTOR_IF((((ix-0x3ff00000)|lx)==0)|(((ix-0x40000000)|lx)==0), cond) + VECTOR_COND_MOVE(r, VECTOR_INIT(0.0), cond); + /* for x < 2.0 */ + VECTOR_ELSEIF(ix<0x40000000, cond) + VECTOR_IF2(ix<=0x3feccccc, cond2, cond) + /* lgamma(x) = lgamma(x+1)-log(x) */ + r = -v64df_log_aux(x, __mask); + VECTOR_IF2(ix>=0x3FE76944, cond3, cond2) + VECTOR_COND_MOVE(y, one-x, cond3); + VECTOR_COND_MOVE(i, VECTOR_INIT(0), cond3); + VECTOR_ELSEIF2(ix>=0x3FCDA661, cond3, cond2) + VECTOR_COND_MOVE(y, x-(tc-one), cond3); + VECTOR_COND_MOVE(i, VECTOR_INIT(1), cond3); + VECTOR_ELSE2(cond3, cond2) + VECTOR_COND_MOVE(y, x, cond3); + VECTOR_COND_MOVE(i, VECTOR_INIT(2), cond3); + VECTOR_ENDIF + VECTOR_ELSE2(cond2, cond) + VECTOR_COND_MOVE(r, VECTOR_INIT(zero), cond2); + VECTOR_IF2(ix>=0x3FFBB4C3, cond3, cond2) /* [1.7316,2] */ + VECTOR_COND_MOVE(y, VECTOR_INIT(2.0)-x, cond3); + VECTOR_COND_MOVE(i, VECTOR_INIT(0), cond3); + VECTOR_ELSEIF2(ix>=0x3FF3B4C4, cond3, cond2) /* [1.23,1.73] */ + VECTOR_COND_MOVE(y, x-tc, cond3); + VECTOR_COND_MOVE(i, VECTOR_INIT(1), cond3); + VECTOR_ELSE2(cond3, cond2) + VECTOR_COND_MOVE(y, x-one, cond3); + VECTOR_COND_MOVE(i, VECTOR_INIT(2), cond3); + VECTOR_ENDIF + VECTOR_ENDIF + + VECTOR_IF2(i==0, cond2, cond) + VECTOR_COND_MOVE(z, y*y, cond2); + VECTOR_COND_MOVE(p1, a0+z*(a2+z*(a4+z*(a6+z*(a8+z*a10)))), cond2); + VECTOR_COND_MOVE(p2, z*(a1+z*(a3+z*(a5+z*(a7+z*(a9+z*a11))))), cond2); + VECTOR_COND_MOVE(p, y*p1+p2, cond2); + VECTOR_COND_MOVE(r, r + (p-0.5*y), cond2); + VECTOR_ELSEIF2(i==1, cond2, cond) + VECTOR_COND_MOVE(z, y*y, cond2); + VECTOR_COND_MOVE(w, z*y, cond2); + VECTOR_COND_MOVE(p1, t0+w*(t3+w*(t6+w*(t9 +w*t12))), cond2); /* parallel comp */ + VECTOR_COND_MOVE(p2, t1+w*(t4+w*(t7+w*(t10+w*t13))), cond2); + VECTOR_COND_MOVE(p3, t2+w*(t5+w*(t8+w*(t11+w*t14))), cond2); + VECTOR_COND_MOVE(p, z*p1-(tt-w*(p2+y*p3)), cond2); + VECTOR_COND_MOVE(r, r + (tf + p), cond2); + VECTOR_ELSEIF2(i==2, cond2, cond) + VECTOR_COND_MOVE(p1, y*(u0+y*(u1+y*(u2+y*(u3+y*(u4+y*u5))))), cond2); + VECTOR_COND_MOVE(p2, one+y*(v1+y*(v2+y*(v3+y*(v4+y*v5)))), cond2); + VECTOR_COND_MOVE(r, r + (-0.5*y + p1/p2), cond2); + VECTOR_ENDIF + VECTOR_ELSEIF(ix<0x40200000, cond) + /* x < 8.0 */ + VECTOR_COND_MOVE(i, __builtin_convertvector(x, v64si), cond); + VECTOR_COND_MOVE(t, VECTOR_INIT(zero), cond); + VECTOR_COND_MOVE(y, x-__builtin_convertvector(i, v64df), cond); + VECTOR_COND_MOVE(p, y*(s0+y*(s1+y*(s2+y*(s3+y*(s4+y*(s5+y*s6)))))), cond); + VECTOR_COND_MOVE(q, one+y*(r1+y*(r2+y*(r3+y*(r4+y*(r5+y*r6))))), cond); + VECTOR_COND_MOVE(r, half*y+p/q, cond); + VECTOR_COND_MOVE(z, VECTOR_INIT(one), cond); /* lgamma(1+s) = log(s) + lgamma(s) */ + VECTOR_IF2(i==7, cond2, cond) + VECTOR_COND_MOVE(z, z * (y+6.0), cond2); + VECTOR_ENDIF + VECTOR_IF2(i==7 | i==6, cond2, cond) + VECTOR_COND_MOVE(z, z * (y+5.0), cond2); + VECTOR_ENDIF + VECTOR_IF2(i<=7 & i>=5, cond2, cond) + VECTOR_COND_MOVE(z, z * (y+4.0), cond2); + VECTOR_ENDIF + VECTOR_IF2(i<=7 & i>=4, cond2, cond) + VECTOR_COND_MOVE(z, z * (y+3.0), cond2); + VECTOR_ENDIF + VECTOR_IF2(i<=7 & i>=3, cond2, cond) + VECTOR_COND_MOVE(z, z * (y+2.0), cond2); + VECTOR_COND_MOVE(r, r + v64df_log_aux(z, __mask), cond2); + VECTOR_ENDIF + /* 8.0 <= x < 2**58 */ + VECTOR_ELSEIF(ix < 0x43900000, cond) + VECTOR_COND_MOVE(t, v64df_log_aux(x, __mask), cond); + VECTOR_COND_MOVE(z, one/x, cond); + VECTOR_COND_MOVE(y, z*z, cond); + VECTOR_COND_MOVE(w, w0+z*(w1+y*(w2+y*(w3+y*(w4+y*(w5+y*w6))))), cond); + VECTOR_COND_MOVE(r, (x-half)*(t-one)+w, cond); + VECTOR_ELSE(cond) + /* 2**58 <= x <= inf */ + VECTOR_COND_MOVE(r, x*(v64df_log_aux(x, __mask)-one), cond); + VECTOR_ENDIF + VECTOR_IF(hx<0, cond) + VECTOR_COND_MOVE(r, nadj - r, cond); + VECTOR_ENDIF + + VECTOR_RETURN(r, NO_COND); + FUNCTION_RETURN; +} + +#endif diff --git a/newlib/libm/machine/amdgcn/v64df_log.c b/newlib/libm/machine/amdgcn/v64df_log.c new file mode 100644 index 0000000000..573bb39787 --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64df_log.c @@ -0,0 +1,111 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * Copyright (c) 1994-2009 Red Hat, Inc. All rights reserved. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the BSD License. This program is distributed in the hope that + * it will be useful, but WITHOUT ANY WARRANTY expressed or implied, + * including the implied warranties of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. A copy of this license is available at + * http://www.opensource.org/licenses. Any Red Hat trademarks that are + * incorporated in the source code or documentation are not subject to + * the BSD License and may only be used or replicated with the express + * permission of Red Hat, Inc. + */ + +/****************************************************************** + * The following routines are coded directly from the algorithms + * and coefficients given in "Software Manual for the Elementary + * Functions" by William J. Cody, Jr. and William Waite, Prentice + * Hall, 1980. + ******************************************************************/ + +/* Based on newlib/libm/mathfp/s_logarithm.c in Newlib. */ + +#include "amdgcnmach.h" + +v64si v64df_finite (v64df); +v64si v64df_isnan (v64df); + +static const double a[] = { -0.64124943423745581147e+02, + 0.16383943563021534222e+02, + -0.78956112887481257267 }; +static const double b[] = { -0.76949932108494879777e+03, + 0.31203222091924532844e+03, + -0.35667977739034646171e+02 }; +static const double C1 = 22713.0 / 32768.0; +static const double C2 = 1.428606820309417232e-06; + +#if defined (__has_builtin) \ + && __has_builtin (__builtin_gcn_frexpv_mant) \ + && __has_builtin (__builtin_gcn_frexpv_exp) \ + +DEF_VD_MATH_FUNC (v64df, log, v64df x) +{ + FUNCTION_INIT (v64df); + + /* Check for domain/range errors here. */ + VECTOR_IF (x == 0.0, cond) + errno = ERANGE; + VECTOR_RETURN (VECTOR_INIT (-z_infinity.d), cond); + VECTOR_ELSEIF (x < 0.0, cond) + errno = EDOM; + VECTOR_RETURN (VECTOR_INIT (z_notanum.d), cond); + VECTOR_ELSEIF (__builtin_convertvector (~v64df_finite (x), v64di), cond) + VECTOR_RETURN (VECTOR_MERGE (VECTOR_INIT (z_notanum.d), + VECTOR_INIT (z_infinity.d), + v64df_isnan (x)), + cond); + VECTOR_ENDIF + + /* Get the exponent and mantissa where x = f * 2^N. */ + v64df f = __builtin_gcn_frexpv_mant (x); + v64si N = __builtin_gcn_frexpv_exp (x); + + v64df z = f - 0.5; + + VECTOR_IF (f > __SQRT_HALF, cond) + VECTOR_COND_MOVE (z, (z - 0.5) / (f * 0.5 + 0.5), cond); + VECTOR_ELSE (cond) + VECTOR_COND_MOVE (N, N - 1, cond); + VECTOR_COND_MOVE (z, z / (z * 0.5 + 0.5), cond); + VECTOR_ENDIF + + v64df w = z * z; + + /* Use Newton's method with 4 terms. */ + z += z * w * ((a[2] * w + a[1]) * w + a[0]) / (((w + b[2]) * w + b[1]) * w + b[0]); + + v64df Nf = __builtin_convertvector (N, v64df); + VECTOR_COND_MOVE (z, (Nf * C2 + z) + Nf * C1, N != 0); + + VECTOR_RETURN (z, NO_COND); + + FUNCTION_RETURN; +} + +DEF_VARIANTS (log, df, df) + +DEF_VD_MATH_FUNC (v64df, log1p, v64df x) +{ + /* TODO: Implement algorithm with better precision. */ + return v64df_log_aux (1 + x, __mask); +} + +DEF_VARIANTS (log1p, df, df) + +#endif diff --git a/newlib/libm/machine/amdgcn/v64df_log10.c b/newlib/libm/machine/amdgcn/v64df_log10.c new file mode 100644 index 0000000000..45237b8950 --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64df_log10.c @@ -0,0 +1,50 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * Copyright (c) 1994-2009 Red Hat, Inc. All rights reserved. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the BSD License. This program is distributed in the hope that + * it will be useful, but WITHOUT ANY WARRANTY expressed or implied, + * including the implied warranties of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. A copy of this license is available at + * http://www.opensource.org/licenses. Any Red Hat trademarks that are + * incorporated in the source code or documentation are not subject to + * the BSD License and may only be used or replicated with the express + * permission of Red Hat, Inc. + */ + +/****************************************************************** + * The following routines are coded directly from the algorithms + * and coefficients given in "Software Manual for the Elementary + * Functions" by William J. Cody, Jr. and William Waite, Prentice + * Hall, 1980. + ******************************************************************/ + +/* Based on newlib/libm/mathfp/s_logarithm.c in Newlib. */ + +#include "amdgcnmach.h" + +v64df v64df_log_aux (v64df, v64di); + +static const double C3 = 0.43429448190325182765; + +DEF_VD_MATH_FUNC (v64df, log10, v64df x) +{ + return v64df_log_aux (x, __mask) * C3; +} + +DEF_VARIANTS (log10, df, df) diff --git a/libgloss/ft32/sim-lseek.S b/newlib/libm/machine/amdgcn/v64df_log2.c similarity index 56% rename from libgloss/ft32/sim-lseek.S rename to newlib/libm/machine/amdgcn/v64df_log2.c index 488edf3dfa..3e7ed1f176 100644 --- a/libgloss/ft32/sim-lseek.S +++ b/newlib/libm/machine/amdgcn/v64df_log2.c @@ -1,12 +1,10 @@ /* - * sim-lseek.S -- write interface for FT32 simulator - * - * Copyright (C) 2015 FTDI (support@ftdichip.com) + * Copyright 2023 Siemens * * The authors hereby grant permission to use, copy, modify, distribute, * and license this software and its documentation for any purpose, provided * that existing copyright notices are retained in all copies and that this - * notice is included verbatim in any distributions. No written agreement, + * notice is included verbatim in any distributions. No written agreement, * license, or royalty fee is required for any of the authorized uses. * Modifications to this software may be copyrighted by their authors * and need not follow the licensing terms described here, provided that @@ -14,18 +12,15 @@ * they apply. */ -#include -#include +#include "amdgcnmach.h" -/* - * lseek -- Since a simulated serial port is non-seekable, we return - * an error. - */ -off_t -_lseek (int fd, - off_t offset, - int whence) +v64df v64df_log_aux (v64df, v64di); + +static const double C3 = 1.4426950408889634073599246810019; + +DEF_VD_MATH_FUNC (v64df, log2, v64df x) { - errno = ESPIPE; - return ((off_t)-1); + return v64df_log_aux (x, __mask) * C3; } + +DEF_VARIANTS (log2, df, df) diff --git a/newlib/libm/machine/amdgcn/v64df_modf.c b/newlib/libm/machine/amdgcn/v64df_modf.c new file mode 100644 index 0000000000..bc0b810b73 --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64df_modf.c @@ -0,0 +1,80 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* Based on newlib/libm/common/s_modf.c in Newlib. */ + +#include "amdgcnmach.h" + +v64si v64df_numtest (v64df); + +DEF_VD_MATH_FUNC (v64df, modf, v64df x, v64df *iptr) +{ + FUNCTION_INIT (v64df); + v64df ret_i; + + v64si i0, i1; + EXTRACT_WORDS(i0, i1, x); + v64si j0 = ((i0 >> 20) & 0x7ff) - 0x3ff; /* exponent of x */ + v64df zero; + v64si i; + INSERT_WORDS (zero, i0 & 0x80000000, VECTOR_INIT (0), NO_COND); + + VECTOR_IF (j0 < 20, cond) /* integer part in x*/ + VECTOR_IF2 (j0 < 0, cond2, cond) /* |x|<1 */ + VECTOR_COND_MOVE (ret_i, zero, cond2); + VECTOR_RETURN (x, cond2); + VECTOR_ELSE2 (cond2, cond) + i = (0x000fffff) >> j0; + + VECTOR_IF2 (((i0 & i) | i1) == 0, cond3, cond2) /* x is integral */ + VECTOR_COND_MOVE (ret_i, x, cond3); + VECTOR_RETURN (zero, cond3); + VECTOR_ELSE2 (cond3, cond2) + INSERT_WORDS (ret_i, i0 & ~i, VECTOR_INIT (0), cond3); + VECTOR_RETURN (x - ret_i, cond3); + VECTOR_ENDIF + VECTOR_ENDIF + VECTOR_ELSEIF (j0 > 51, cond) /* no fraction part */ + VECTOR_COND_MOVE (ret_i, x, cond); + VECTOR_IF2 (v64df_numtest (x) == NAN, cond2, cond) + VECTOR_COND_MOVE (ret_i, x + x, cond2); + VECTOR_RETURN (ret_i, cond2); /* x is NaN, return NaN */ + VECTOR_ENDIF + VECTOR_RETURN (zero, cond); /* return +- 0 */ + VECTOR_ELSE (cond) + i = 0xffffffff >> (j0 - 20); + VECTOR_IF2 ((i1 & i) == 0, cond2, cond) + VECTOR_COND_MOVE (ret_i, x, cond2); + INSERT_WORDS (x, i0 & 0x80000000, VECTOR_INIT (0), cond2); + VECTOR_RETURN (x, cond2); + VECTOR_ELSE2 (cond2, cond) + INSERT_WORDS (ret_i, i0, i1 & ~i, cond2); + VECTOR_RETURN (x - ret_i, cond2); + VECTOR_ENDIF + VECTOR_ENDIF + + *iptr = ret_i; + FUNCTION_RETURN; +} diff --git a/newlib/libm/machine/amdgcn/v64df_numtest.c b/newlib/libm/machine/amdgcn/v64df_numtest.c new file mode 100644 index 0000000000..55f0340f1c --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64df_numtest.c @@ -0,0 +1,60 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * Copyright (c) 1994-2009 Red Hat, Inc. All rights reserved. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the BSD License. This program is distributed in the hope that + * it will be useful, but WITHOUT ANY WARRANTY expressed or implied, + * including the implied warranties of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. A copy of this license is available at + * http://www.opensource.org/licenses. Any Red Hat trademarks that are + * incorporated in the source code or documentation are not subject to + * the BSD License and may only be used or replicated with the express + * permission of Red Hat, Inc. + */ + +/* Based on newlib/libm/mathfp/s_numtest.c in Newlib. */ + +#include "amdgcnmach.h" + +v64si +v64df_numtest (v64df x) +{ + // Explicitly create mask for internal function. + v64si __mask = VECTOR_INIT (-1); + FUNCTION_INIT (v64si); + + v64si hx, lx; + EXTRACT_WORDS (hx, lx, x); + v64si exp = (hx & 0x7ff00000) >> 20; + + /* Check for a zero input. */ + VECTOR_RETURN (VECTOR_INIT (0), x == 0.0); + + /* Check for not a number or infinity. */ + VECTOR_IF (exp == 0x7ff, cond) + VECTOR_RETURN (VECTOR_MERGE (VECTOR_INIT (NAN), + VECTOR_INIT (INF), + ((hx & 0xf0000) != 0) | (lx != 0)), + cond); + /* Otherwise it's a finite value. */ + VECTOR_ELSE (cond) + VECTOR_RETURN (VECTOR_INIT (NUM), cond); + VECTOR_ENDIF + + FUNCTION_RETURN; +} diff --git a/newlib/libm/machine/amdgcn/v64df_pow.c b/newlib/libm/machine/amdgcn/v64df_pow.c new file mode 100644 index 0000000000..1035d0532f --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64df_pow.c @@ -0,0 +1,336 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* Based on newlib/libm/math/e_pow.c in Newlib. */ + +#include "amdgcnmach.h" + +static const double +bp[] = {1.0, 1.5,}, +dp_h[] = { 0.0, 5.84962487220764160156e-01,}, /* 0x3FE2B803, 0x40000000 */ +dp_l[] = { 0.0, 1.35003920212974897128e-08,}, /* 0x3E4CFDEB, 0x43CFD006 */ +zero = 0.0, +one = 1.0, +two = 2.0, +two53 = 9007199254740992.0, /* 0x43400000, 0x00000000 */ + /* poly coefs for (3/2)*(log(x)-2s-2/3*s**3 */ +L1 = 5.99999999999994648725e-01, /* 0x3FE33333, 0x33333303 */ +L2 = 4.28571428578550184252e-01, /* 0x3FDB6DB6, 0xDB6FABFF */ +L3 = 3.33333329818377432918e-01, /* 0x3FD55555, 0x518F264D */ +L4 = 2.72728123808534006489e-01, /* 0x3FD17460, 0xA91D4101 */ +L5 = 2.30660745775561754067e-01, /* 0x3FCD864A, 0x93C9DB65 */ +L6 = 2.06975017800338417784e-01, /* 0x3FCA7E28, 0x4A454EEF */ +P1 = 1.66666666666666019037e-01, /* 0x3FC55555, 0x5555553E */ +P2 = -2.77777777770155933842e-03, /* 0xBF66C16C, 0x16BEBD93 */ +P3 = 6.61375632143793436117e-05, /* 0x3F11566A, 0xAF25DE2C */ +P4 = -1.65339022054652515390e-06, /* 0xBEBBBD41, 0xC5D26BF1 */ +P5 = 4.13813679705723846039e-08, /* 0x3E663769, 0x72BEA4D0 */ +lg2 = 6.93147180559945286227e-01, /* 0x3FE62E42, 0xFEFA39EF */ +lg2_h = 6.93147182464599609375e-01, /* 0x3FE62E43, 0x00000000 */ +lg2_l = -1.90465429995776804525e-09, /* 0xBE205C61, 0x0CA86C39 */ +ovt = 8.0085662595372944372e-0017, /* -(1024-log2(ovfl+.5ulp)) */ +cp = 9.61796693925975554329e-01, /* 0x3FEEC709, 0xDC3A03FD =2/(3ln2) */ +cp_h = 9.61796700954437255859e-01, /* 0x3FEEC709, 0xE0000000 =(float)cp */ +cp_l = -7.02846165095275826516e-09, /* 0xBE3E2FE0, 0x145B01F5 =tail of cp_h*/ +ivln2 = 1.44269504088896338700e+00, /* 0x3FF71547, 0x652B82FE =1/ln2 */ +ivln2_h = 1.44269502162933349609e+00, /* 0x3FF71547, 0x60000000 =24b 1/ln2*/ +ivln2_l = 1.92596299112661746887e-08; /* 0x3E54AE0B, 0xF85DDF44 =1/ln2 tail*/ + +v64df v64df_sqrt_aux (v64df, v64di); +v64df v64df_scalbn_aux (v64df, v64si, v64di); + +static v64df v64df_math_oflow (v64di sign) +{ + errno = ERANGE; + return VECTOR_MERGE (VECTOR_INIT (-0x1p769), + VECTOR_INIT (0x1p769), sign) * 0x1p769; +} + +static v64df v64df_math_uflow (v64di sign) +{ + errno = ERANGE; + return VECTOR_MERGE (VECTOR_INIT (-0x1p-767), + VECTOR_INIT (0x1p-767), sign) * 0x1p-767; +} + +static v64si v64df_issignaling_inline (v64df x) +{ + v64si __mask = VECTOR_INIT (-1); + v64si ix; + GET_HIGH_WORD (ix, x, NO_COND); + /* Use IEEE-754 2008 encoding - i.e. exponent bits all 1, MSB of + significand is 0 for signalling NaN. */ + return ((ix & 0x7ff00000) == 0x7ff00000) & ((ix & 0x00080000) == 0); +} + +#if defined (__has_builtin) && __has_builtin (__builtin_gcn_fabsv) + +DEF_VD_MATH_FUNC (v64df, pow, v64df x, v64df y) +{ + FUNCTION_INIT (v64df); + + v64si hx, hy, lx, ly; + EXTRACT_WORDS(hx,lx,x); + EXTRACT_WORDS(hy,ly,y); + v64si ix = hx&0x7fffffff; + v64si iy = hy&0x7fffffff; + + /* y==zero: x**0 = 1 unless x is snan */ + VECTOR_IF ((iy|ly)==0, cond) + VECTOR_RETURN (x + y, cond & v64df_issignaling_inline(x)); + VECTOR_RETURN (VECTOR_INIT (1.0), cond); + VECTOR_ENDIF + + /* x|y==NaN return NaN unless x==1 then return 1 */ + VECTOR_IF ((ix > 0x7ff00000) | ((ix==0x7ff00000)&(lx!=0)) + | (iy > 0x7ff00000) | ((iy==0x7ff00000)&(ly!=0)), cond) + VECTOR_RETURN (VECTOR_INIT (1.0), cond & ((hx-0x3ff00000)|lx)==0 + & ~v64df_issignaling_inline(y)); + VECTOR_RETURN (x + y, cond); + VECTOR_ENDIF + + /* determine if y is an odd int when x < 0 + * yisint = 0 ... y is not an integer + * yisint = 1 ... y is an odd int + * yisint = 2 ... y is an even int + */ + v64si yisint = VECTOR_INIT (0); + + VECTOR_IF (hx < 0, cond) + VECTOR_IF2(iy>=0x43400000, cond2, cond) + VECTOR_COND_MOVE (yisint, VECTOR_INIT (2), cond2); /* even integer y */ + VECTOR_ELSEIF2 (iy>=0x3ff00000, cond2, cond) + v64si k = (iy>>20)-0x3ff; /* exponent */ + VECTOR_IF2 (k>20, cond3, cond2) + v64si j = ly>>(52-k); + VECTOR_COND_MOVE (yisint, 2-(j&1), cond3 & (j<<(52-k))==ly); + VECTOR_ELSEIF2 (ly==0, cond3, cond2) + v64si j = iy>>(20-k); + VECTOR_COND_MOVE (yisint, 2-(j&1), cond3 & (j<<(20-k))==iy); + VECTOR_ENDIF + VECTOR_ENDIF + VECTOR_ENDIF + + /* special value of y */ + VECTOR_IF (ly==0, cond) + VECTOR_IF2 (iy==0x7ff00000, cond2, cond) /* y is +-inf */ + VECTOR_IF2 (((ix-0x3ff00000)|lx)==0, cond3, cond2) + VECTOR_RETURN (VECTOR_INIT (1.0), cond3); /* +-1**+-inf = 1 */ + VECTOR_ELSEIF2 (ix >= 0x3ff00000, cond3, cond2) /* (|x|>1)**+-inf = inf,0 */ + VECTOR_RETURN (y, cond3 & hy>=0); + VECTOR_RETURN (VECTOR_INIT (0.0), cond3); + VECTOR_ELSE2 (cond3, cond2) /* (|x|<1)**-,+inf = inf,0 */ + VECTOR_RETURN (-y, cond3 & hy<0); + VECTOR_RETURN (VECTOR_INIT (0.0), cond3); + VECTOR_ENDIF + VECTOR_ENDIF + VECTOR_IF2 (iy==0x3ff00000, cond2, cond) /* y is +-1 */ + VECTOR_RETURN (VECTOR_INIT (1.0) / x, cond2 & hy<0); + VECTOR_RETURN (x, cond2); + VECTOR_ENDIF + VECTOR_RETURN (x*x, cond & hy==0x40000000); /* y is 2 */ + /* y is 0.5 */ + /* x >= +0 */ + VECTOR_RETURN (v64df_sqrt_aux (x, __mask), cond & (hy==0x3fe00000) & (hx>=0)); + VECTOR_ENDIF + + v64df ax = __builtin_gcn_fabsv(x); + /* special value of x */ + VECTOR_IF (lx==0, cond) + VECTOR_IF2 ((ix==0x7ff00000)|(ix==0)|(ix==0x3ff00000), cond2, cond) + v64df z = ax; /*x is +-0,+-inf,+-1*/ + VECTOR_COND_MOVE (z, VECTOR_INIT (1.0) / z, cond2 & (hy<0)); /* z = (1/|x|) */ + VECTOR_IF2 (hx<0, cond3, cond2) + VECTOR_IF2 (((ix-0x3ff00000)|yisint)==0, cond4, cond3) + VECTOR_COND_MOVE (z, (z-z)/(z-z), cond4); /* (-1)**non-int is NaN */ + VECTOR_ELSEIF2 (yisint==1, cond4, cond3) + VECTOR_COND_MOVE (z, -z, cond4); /* (x<0)**odd = -(|x|**odd) */ + VECTOR_ENDIF + VECTOR_ENDIF + VECTOR_RETURN (z, cond2); + VECTOR_ENDIF + VECTOR_ENDIF + + /* (x<0)**(non-int) is NaN */ + VECTOR_RETURN ((x-x)/(x-x), ((((hx >> 31) & 1) - 1)|yisint)==0); + + v64df t1, t2; + + /* |y| is huge */ + VECTOR_IF(iy>0x41e00000, cond) /* if |y| > 2**31 */ + VECTOR_IF2 (iy>0x43f00000, cond2, cond) /* if |y| > 2**64, must o/uflow */ + VECTOR_IF2 (ix<=0x3fefffff, cond3, cond2) + VECTOR_RETURN (v64df_math_oflow (VECTOR_INIT (0L)), cond3 & (hy<0)); + VECTOR_RETURN (v64df_math_uflow (VECTOR_INIT (0L)), cond3); + VECTOR_ENDIF + VECTOR_IF2 (ix>=0x3ff00000, cond3, cond2) + VECTOR_RETURN (v64df_math_oflow (VECTOR_INIT (0L)), cond3 & (hy>0)); + VECTOR_RETURN (v64df_math_uflow (VECTOR_INIT (0L)), cond3); + VECTOR_ENDIF + VECTOR_ENDIF + /* over/underflow if x is not close to one */ + VECTOR_IF2 (ix<0x3fefffff, cond2, cond) + VECTOR_RETURN (v64df_math_oflow (VECTOR_INIT (0L)), cond2 & (hy<0)); + VECTOR_RETURN (v64df_math_uflow (VECTOR_INIT (0L)), cond2); + VECTOR_ENDIF + VECTOR_IF2 (ix>0x3ff00000, cond2, cond) + VECTOR_RETURN (v64df_math_oflow (VECTOR_INIT (0L)), cond2 & (hy>0)); + VECTOR_RETURN (v64df_math_uflow (VECTOR_INIT (0L)), cond2); + VECTOR_ENDIF + /* now |1-x| is tiny <= 2**-20, suffice to compute + log(x) by x-x^2/2+x^3/3-x^4/4 */ + v64df t = ax-1; /* t has 20 trailing zeros */ + v64df w = (t*t)*(0.5-t*(0.3333333333333333333333-t*0.25)); + v64df u = ivln2_h*t; /* ivln2_h has 21 sig. bits */ + v64df v = t*ivln2_l-w*ivln2; + VECTOR_COND_MOVE (t1, u+v, cond); + SET_LOW_WORD (t1, VECTOR_INIT (0), cond); + VECTOR_COND_MOVE (t2, v-(t1-u), cond); + VECTOR_ELSE (cond) + v64si n = VECTOR_INIT (0); + /* take care subnormal number */ + VECTOR_IF2 (ix<0x00100000, cond2, cond) + VECTOR_COND_MOVE (ax, ax * two53, cond2); + VECTOR_COND_MOVE (n, n - 53, cond2); + GET_HIGH_WORD (ix, ax, cond2); + VECTOR_ENDIF + n += ((ix)>>20)-0x3ff; + v64si j = ix&0x000fffff; + /* determine interval */ + ix = j|0x3ff00000; /* normalize ix */ + v64si k; + VECTOR_IF2 (j<=0x3988E, cond2, cond) + VECTOR_COND_MOVE (k, VECTOR_INIT (0), cond2); /* |x|>1)|0x20000000)+0x00080000+(k<<18), cond); + v64df t_l = ax - (t_h-bp_k); + v64df s_l = v*((u-s_h*t_h)-s_h*t_l); + /* compute log(ax) */ + v64df s2 = s*s; + v64df r = s2*s2*(L1+s2*(L2+s2*(L3+s2*(L4+s2*(L5+s2*L6))))); + r += s_l*(s_h+s); + s2 = s_h*s_h; + t_h = 3.0+s2+r; + SET_LOW_WORD (t_h, VECTOR_INIT (0), cond); + t_l = r-((t_h-3.0)-s2); + /* u+v = s*(1+...) */ + u = s_h*t_h; + v = s_l*t_h+t_l*s; + /* 2/(3log2)*(s+...) */ + v64df p_h = u+v; + SET_LOW_WORD (p_h, VECTOR_INIT (0), cond); + v64df p_l = v-(p_h-u); + v64df z_h = cp_h*p_h; /* cp_h+cp_l = 2/(3*log2) */ + v64df dp_l_k = VECTOR_MERGE (VECTOR_INIT (dp_l[1]), VECTOR_INIT (dp_l[0]), k == 1); + v64df z_l = cp_l*p_h+p_l*cp+dp_l_k; + /* log2(ax) = (s+..)*2/(3*log2) = n + dp_h + z_h + z_l */ + v64df t = __builtin_convertvector (n, v64df); + v64df dp_h_k = VECTOR_MERGE (VECTOR_INIT (dp_h[1]), VECTOR_INIT (dp_h[0]), k == 1); + VECTOR_COND_MOVE (t1, ((z_h+z_l)+dp_h_k)+t, cond); + SET_LOW_WORD (t1, VECTOR_INIT (0), cond); + VECTOR_COND_MOVE (t2, z_l-(((t1-t)-dp_h_k)-z_h), cond); + VECTOR_ENDIF + + v64df s = VECTOR_INIT (1.0); /* s (sign of result -ve**odd) = -1 else = 1 */ + VECTOR_COND_MOVE (s, VECTOR_INIT (-1.0), /* (-ve)**(odd int) */ + ((hx>>31) != 0)&(yisint == 1)); + + /* split up y into y1+y2 and compute (y1+y2)*(t1+t2) */ + v64df y1 = y; + SET_LOW_WORD (y1, VECTOR_INIT (0), NO_COND); + v64df p_l = (y-y1)*t1+y*t2; + v64df p_h = y1*t1; + v64df z = p_l+p_h; + v64si i, j; + EXTRACT_WORDS(j, i, z); + VECTOR_IF (j>=0x40900000, cond) /* z >= 1024 */ + /* if z > 1024 */ + v64di cond_di = __builtin_convertvector (cond, v64di); + VECTOR_RETURN (v64df_math_oflow(s<0), cond & (((j-0x40900000)|i)!=0)); /* overflow */ + VECTOR_RETURN (v64df_math_oflow(s<0), cond_di & (p_l+ovt>z-p_h)); /* overflow */ + VECTOR_ELSEIF ((j&0x7fffffff)>=0x4090cc00, cond) /* z <= -1075 */ + /* z < -1075 */ + v64di cond_di = __builtin_convertvector (cond, v64di); + VECTOR_RETURN (v64df_math_uflow(s<0), cond & (((j-0xc090cc00)|i)!=0)); /* underflow */ + VECTOR_RETURN (v64df_math_uflow(s<0), cond_di & (p_l<=z-p_h)); /* underflow */ + VECTOR_ENDIF + + /* + * compute 2**(p_h+p_l) + */ + i = j&0x7fffffff; + v64si k = (i>>20)-0x3ff; + v64si n = VECTOR_INIT (0); + VECTOR_IF (i>0x3fe00000, cond) /* if |z| > 0.5, set n = [z+0.5] */ + VECTOR_COND_MOVE (n, j+(0x00100000>>(k+1)), cond); + k = ((n&0x7fffffff)>>20)-0x3ff; /* new k for n */ + v64df t = VECTOR_INIT (0.0); + SET_HIGH_WORD(t, n&~(0x000fffff>>k), cond); + VECTOR_COND_MOVE (n, ((n&0x000fffff)|0x00100000)>>(20-k), cond); + VECTOR_COND_MOVE (n, -n, cond & (j<0)); + VECTOR_COND_MOVE (p_h, p_h - t, cond); + VECTOR_ENDIF + v64df t = p_l+p_h; + SET_LOW_WORD(t, VECTOR_INIT (0), NO_COND); + v64df u = t*lg2_h; + v64df v = (p_l-(t-p_h))*lg2+t*lg2_l; + z = u+v; + v64df w = v-(z-u); + t = z*z; + t1 = z - t*(P1+t*(P2+t*(P3+t*(P4+t*P5)))); + v64df r = (z*t1)/(t1-two)-(w+z*w); + z = VECTOR_INIT (1.0)-(r-z); + GET_HIGH_WORD(j,z, NO_COND); + j += (n<<20); + VECTOR_IF ((j>>20)<=0, cond) + VECTOR_COND_MOVE (z, v64df_scalbn_aux (z, n, __mask), cond); /* subnormal output */ + VECTOR_ELSE (cond) + SET_HIGH_WORD(z,j, cond); + VECTOR_ENDIF + VECTOR_RETURN (s*z, NO_COND); + + FUNCTION_RETURN; +} + +DEF_VARIANTS2 (pow, df, df) + +#endif diff --git a/newlib/libm/machine/amdgcn/v64df_remainder.c b/newlib/libm/machine/amdgcn/v64df_remainder.c new file mode 100644 index 0000000000..01fda8e1b6 --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64df_remainder.c @@ -0,0 +1,82 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* Based on newlib/libm/mathfp/e_remainder.c in Newlib. */ + +#include "amdgcnmach.h" + +v64df v64df_fmod_aux (v64df, v64df, v64di); + +#if defined (__has_builtin) && __has_builtin (__builtin_gcn_fabsv) + +DEF_VD_MATH_FUNC (v64df, remainder, v64df x, v64df p) +{ + FUNCTION_INIT (v64df); + + v64si hx, lx; + EXTRACT_WORDS (hx, lx, x); + v64si hp, lp; + EXTRACT_WORDS (hp, lp, p); + v64si sx = hx & 0x80000000; + hp &= 0x7fffffff; + hx &= 0x7fffffff; + + /* purge off exception values */ + VECTOR_RETURN ((x * p) / (x * p), ((hp | lp) == 0) | ((hx >= 0x7ff00000) + | /* x not finite */ + ((hp >= 0x7ff00000) & /* p is NaN */ + (((hp - 0x7ff00000) | lp) != 0)))); + + VECTOR_COND_MOVE (x, v64df_fmod_aux (x, p+p, __mask), hp <= 0x7fdfffff); // now x < 2p + + VECTOR_RETURN (0.0 * x, ((hx-hp)|(lx-lp))==0); + + x = __builtin_gcn_fabsv (x); + p = __builtin_gcn_fabsv (p); + + VECTOR_IF (hp < 0x00200000, cond) + VECTOR_IF2 (x + x > p, cond2, __builtin_convertvector(cond, v64di)) + VECTOR_COND_MOVE (x, x - p, cond2); + VECTOR_COND_MOVE (x, x - p, cond2 & (x + x >= p)); + VECTOR_ENDIF + VECTOR_ELSE (cond) + v64df p_half = 0.5 * p; + VECTOR_IF2 (x > p_half, cond2, __builtin_convertvector(cond, v64di)) + VECTOR_COND_MOVE (x, x - p, cond2); + VECTOR_COND_MOVE (x, x - p, cond2 & (x >= p_half)); + VECTOR_ENDIF + VECTOR_ENDIF + + GET_HIGH_WORD (hx, x, NO_COND); + SET_HIGH_WORD (x, hx ^ sx, NO_COND); + + VECTOR_RETURN (x, NO_COND); + + FUNCTION_RETURN; +} + +DEF_VARIANTS2 (remainder, df, df) + +#endif diff --git a/newlib/libm/machine/amdgcn/v64df_rint.c b/newlib/libm/machine/amdgcn/v64df_rint.c new file mode 100644 index 0000000000..18f6b318fc --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64df_rint.c @@ -0,0 +1,83 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* Based on newlib/libm/common/s_rint.c in Newlib. */ + +#include "amdgcnmach.h" + +static const double TWO52[2] = { + 4.50359962737049600000e+15, /* 0x43300000, 0x00000000 */ + -4.50359962737049600000e+15, /* 0xC3300000, 0x00000000 */ +}; + +DEF_VD_MATH_FUNC (v64df, rint, v64df x) +{ + FUNCTION_INIT (v64df); + + v64si i0, i1; + EXTRACT_WORDS (i0, i1, x); + v64si sx = (i0 >> 31) & 1; + v64df two52 = VECTOR_MERGE (VECTOR_INIT (TWO52[1]), VECTOR_INIT (TWO52[0]), sx != 0); + v64si j0 = ((i0 >> 20) & 0x7ff) - 0x3ff; + v64si i; + VECTOR_IF (j0 < 20, cond) + VECTOR_IF2 (j0 < 0, cond2, cond) + VECTOR_RETURN (x, cond2 & (((i0 & 0x7fffffff) | i1) == 0)); + VECTOR_COND_MOVE (i1, i1 | (i0 & 0x0fffff), cond2); + VECTOR_COND_MOVE (i0, i0 & 0xfffe0000, cond2); + VECTOR_COND_MOVE (i0, i0 | (((i1 | -i1) >> 12) & 0x80000), cond2); + SET_HIGH_WORD (x, i0, cond2); + v64df w = two52 + x; + v64df t = w - two52; + GET_HIGH_WORD (i0, t, cond2); + SET_HIGH_WORD (t, (i0&0x7fffffff)|(sx<<31), cond2); + VECTOR_RETURN (t, cond2); + VECTOR_ELSE2 (cond2, cond) + i = (0x000fffff) >> j0; + VECTOR_RETURN (x, cond2 & (((i0 & i) | i1) == 0)); /* x is integral */ + i >>= 1; + VECTOR_IF2 (((i0 & i) | i1) != 0, cond3, cond2) + VECTOR_COND_MOVE (i1, CAST_VECTOR(v64si, VECTOR_INIT (0x80000000)), cond3 & (j0 == 19)); + VECTOR_COND_MOVE (i1, VECTOR_INIT (0), cond3 & (j0 != 19)); + VECTOR_COND_MOVE (i0, (i0 & (~i)) | ((0x40000) >> j0), cond3); + VECTOR_ENDIF + VECTOR_ENDIF + VECTOR_ELSEIF (j0 > 51, cond) + VECTOR_RETURN (x + x, cond & (j0 == 0x400)); + VECTOR_RETURN (x, cond); + VECTOR_ELSE (cond) + i = CAST_VECTOR (v64si, VECTOR_INIT (0xffffffff) >> (j0 - 20)); + VECTOR_RETURN (x, cond & ((i1 & i) == 0)); + i >>= 1; + VECTOR_COND_MOVE (i1, (i1 & (~i)) | (0x40000000 >> (j0 - 20)), cond & ((i1 & i) != 0)); + VECTOR_ENDIF + INSERT_WORDS (x, i0, i1, NO_COND); + v64df w = two52 + x; + VECTOR_RETURN (w - two52, NO_COND); + + FUNCTION_RETURN; +} + +DEF_VARIANTS (rint, df, df) diff --git a/newlib/libm/machine/amdgcn/v64df_scalb.c b/newlib/libm/machine/amdgcn/v64df_scalb.c new file mode 100644 index 0000000000..a7e68fefec --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64df_scalb.c @@ -0,0 +1,64 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* Based on newlib/libm/mathfp/e_scalb.c in Newlib. */ + +#include "amdgcnmach.h" + +v64si v64df_isnan (v64df); +v64si v64df_finite (v64df); +v64df v64df_rint_aux (v64df, v64di); +v64df v64df_scalbn_aux (v64df, v64si, v64di); + +DEF_VD_MATH_FUNC (v64df, scalb, v64df x, v64df fn) +{ + FUNCTION_INIT (v64df); + + VECTOR_IF (v64df_isnan(x) | v64df_isnan(fn), cond) + VECTOR_RETURN (x * fn, cond); + VECTOR_ENDIF + VECTOR_IF (~v64df_finite (fn), cond) + VECTOR_IF2 (fn > 0.0, cond2, cond) + VECTOR_RETURN (x * fn, cond2); + VECTOR_ELSE2 (cond2, cond) + VECTOR_RETURN (x / (-fn), cond2); + VECTOR_ENDIF + VECTOR_ENDIF + VECTOR_IF (v64df_rint_aux (fn, __mask) != fn, cond) + VECTOR_RETURN ((fn-fn)/(fn-fn), cond); + VECTOR_ENDIF + VECTOR_IF (fn > 65000.0, cond) + VECTOR_RETURN (v64df_scalbn_aux (x, VECTOR_INIT (65000), __mask), cond); + VECTOR_ENDIF + VECTOR_IF (-fn > 65000.0, cond) + VECTOR_RETURN (v64df_scalbn_aux (x, VECTOR_INIT (-65000), __mask), cond); + VECTOR_ENDIF + VECTOR_RETURN (v64df_scalbn_aux (x, __builtin_convertvector (fn, v64si), __mask), + NO_COND); + + FUNCTION_RETURN; +} + +DEF_VARIANTS2 (scalb, df, df) diff --git a/newlib/libm/machine/amdgcn/v64df_scalbn.c b/newlib/libm/machine/amdgcn/v64df_scalbn.c new file mode 100644 index 0000000000..44d91799a3 --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64df_scalbn.c @@ -0,0 +1,72 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* Based on newlib/libm/common/s_scalbn.c in Newlib. */ + +#include "amdgcnmach.h" +#include +#include + +static const double +two54 = 1.80143985094819840000e+16, /* 0x43500000, 0x00000000 */ +twom54 = 5.55111512312578270212e-17, /* 0x3C900000, 0x00000000 */ +huge = 1.0e+300, +tiny = 1.0e-300; + +v64df v64df_copysign_aux (v64df, v64df, v64di); + +DEF_VD_MATH_FUNC (v64df, scalbn, v64df x, v64si n) +{ + FUNCTION_INIT (v64df); + + const v64df huge_v = VECTOR_INIT ((double) huge); + const v64df tiny_v = VECTOR_INIT ((double) tiny); + + v64si hx, lx; + EXTRACT_WORDS (hx, lx, x); + v64si k =(hx&0x7ff00000)>>20; /* extract exponent */ + VECTOR_IF (k == 0, cond) /* 0 or subnormal x */ + VECTOR_RETURN (x, cond & ((lx|(hx&0x7fffffff))==0)); /* +- 0 */ + VECTOR_COND_MOVE (x, x * two54, cond); + GET_HIGH_WORD (hx, x, cond); + VECTOR_COND_MOVE (k, ((hx&0x7ff00000)>>20) - 54, cond); + VECTOR_RETURN (tiny*x, cond & (n < -50000)); /*underflow*/ + VECTOR_ENDIF + VECTOR_RETURN (x+x, k == 0x7ff); /* NaN or Inf */ + /* in case integer overflow in n+k */ + VECTOR_RETURN (huge_v * v64df_copysign_aux (huge_v, x, __mask), n > 50000); + k = k + n; + VECTOR_RETURN (huge_v * v64df_copysign_aux (huge_v, x, __mask), k > 0x7fe); + VECTOR_IF (k > 0, cond) /* normal result */ + SET_HIGH_WORD (x, (hx&0x800fffff)|(k<<20), cond); + VECTOR_RETURN (x, cond); + VECTOR_ENDIF + VECTOR_RETURN (tiny_v * v64df_copysign_aux (tiny_v, x, __mask), k <= -54); /*underflow*/ + k += 54; /* subnormal result */ + SET_HIGH_WORD (x, (hx&0x800fffff)|(k<<20), NO_COND); + VECTOR_RETURN (x * twom54, NO_COND); + + FUNCTION_RETURN; +} diff --git a/newlib/libm/machine/amdgcn/v64df_signif.c b/newlib/libm/machine/amdgcn/v64df_signif.c new file mode 100644 index 0000000000..e112e1cf1f --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64df_signif.c @@ -0,0 +1,39 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* Based on newlib/libm/mathfp/s_signif.c in Newlib. */ + +#include "amdgcnmach.h" + +v64df v64df_scalb_aux (v64df x, v64df fn, v64di); +v64si v64df_ilogb_aux (v64df x, v64si); + +DEF_VD_MATH_FUNC (v64df, significand, v64df x) +{ + v64si si_mask = __builtin_convertvector (__mask, v64si); + return v64df_scalb_aux (x, -__builtin_convertvector (v64df_ilogb_aux (x, si_mask), v64df), __mask); +} + +DEF_VARIANTS (significand, df, df) diff --git a/newlib/libm/machine/amdgcn/v64df_sin.c b/newlib/libm/machine/amdgcn/v64df_sin.c new file mode 100644 index 0000000000..db91c72cf3 --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64df_sin.c @@ -0,0 +1,41 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * Copyright (c) 1994-2009 Red Hat, Inc. All rights reserved. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the BSD License. This program is distributed in the hope that + * it will be useful, but WITHOUT ANY WARRANTY expressed or implied, + * including the implied warranties of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. A copy of this license is available at + * http://www.opensource.org/licenses. Any Red Hat trademarks that are + * incorporated in the source code or documentation are not subject to + * the BSD License and may only be used or replicated with the express + * permission of Red Hat, Inc. + */ + +/* Based on newlib/libm/mathfp/s_sin.c in Newlib. */ + +#include "amdgcnmach.h" + +v64df v64df_sine_aux (v64df, int, v64di); + +DEF_VD_MATH_FUNC (v64df, sin, v64df x) +{ + return v64df_sine_aux (x, 0, __mask); +} + +DEF_VARIANTS (sin, df, df) diff --git a/newlib/libm/machine/amdgcn/v64df_sine.c b/newlib/libm/machine/amdgcn/v64df_sine.c new file mode 100644 index 0000000000..f70d23481c --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64df_sine.c @@ -0,0 +1,126 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * Copyright (c) 1994-2009 Red Hat, Inc. All rights reserved. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the BSD License. This program is distributed in the hope that + * it will be useful, but WITHOUT ANY WARRANTY expressed or implied, + * including the implied warranties of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. A copy of this license is available at + * http://www.opensource.org/licenses. Any Red Hat trademarks that are + * incorporated in the source code or documentation are not subject to + * the BSD License and may only be used or replicated with the express + * permission of Red Hat, Inc. + */ + +/****************************************************************** + * The following routines are coded directly from the algorithms + * and coefficients given in "Software Manual for the Elementary + * Functions" by William J. Cody, Jr. and William Waite, Prentice + * Hall, 1980. + ******************************************************************/ + +/* Based on newlib/libm/mathfp/s_sine.c in Newlib. */ + +#include "amdgcnmach.h" + +v64si v64df_numtest (v64df x); + +static const double HALF_PI = 1.57079632679489661923; +static const double ONE_OVER_PI = 0.31830988618379067154; +static const double r[] = { -0.16666666666666665052, + 0.83333333333331650314e-02, + -0.19841269841201840457e-03, + 0.27557319210152756119e-05, + -0.25052106798274584544e-07, + 0.16058936490371589114e-09, + -0.76429178068910467734e-12, + 0.27204790957888846175e-14 }; + +#if defined (__has_builtin) && __has_builtin (__builtin_gcn_fabsv) + +DEF_VD_MATH_FUNC(v64df, sine, v64df x, int cosine) +{ + const double YMAX = 210828714.0; + + FUNCTION_INIT (v64df); + + v64si num_type = v64df_numtest (x); + VECTOR_IF (num_type == NAN, cond) + errno = EDOM; + VECTOR_RETURN (x, cond); + VECTOR_ELSEIF (num_type == INF, cond) + errno = EDOM; + VECTOR_RETURN (VECTOR_INIT (z_notanum.d), cond); + VECTOR_ENDIF + + /* Use sin and cos properties to ease computations. */ + v64di sgn; + v64df y; + + if (cosine) + { + sgn = VECTOR_INIT (0L); + y = __builtin_gcn_fabsv (x) + HALF_PI; + } + else + { + sgn = x < 0.0; + y = VECTOR_MERGE (-x, x, x < 0.0); + } + + /* Check for values of y that will overflow here. */ + VECTOR_IF (y > YMAX, cond) + errno = ERANGE; + VECTOR_RETURN (x, cond); + VECTOR_ENDIF + + /* Calculate the exponent. */ + v64si Nneg = __builtin_convertvector (y * ONE_OVER_PI - 0.5, v64si); + v64si Npos = __builtin_convertvector (y * ONE_OVER_PI + 0.5, v64si); + v64si N = VECTOR_MERGE (Nneg, Npos, y < 0.0); + v64df XN = __builtin_convertvector (N, v64df); + + VECTOR_COND_MOVE (sgn, ~sgn, (N & 1) != 0); + + if (cosine) + XN -= 0.5; + + y = __builtin_gcn_fabsv (x) - XN * __PI; + + v64df res; + + VECTOR_IF ((-z_rooteps < y) & (y < z_rooteps), cond) + VECTOR_COND_MOVE (res, y, cond); + VECTOR_ELSE (cond) + v64df g = y * y; + + /* Calculate the Taylor series. */ + v64df R = (((((((r[6] * g + r[5]) * g + r[4]) * g + r[3]) * g + r[2]) * g + r[1]) * g + r[0]) * g); + + /* Finally, compute the result. */ + VECTOR_COND_MOVE (res, y + y * R, cond); + VECTOR_ENDIF + + VECTOR_COND_MOVE (res, -res, sgn); + + VECTOR_RETURN (res, NO_COND); + + FUNCTION_RETURN; +} + +#endif diff --git a/newlib/libm/machine/amdgcn/v64df_sineh.c b/newlib/libm/machine/amdgcn/v64df_sineh.c new file mode 100644 index 0000000000..b46bebb2e1 --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64df_sineh.c @@ -0,0 +1,130 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * Copyright (c) 1994-2009 Red Hat, Inc. All rights reserved. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the BSD License. This program is distributed in the hope that + * it will be useful, but WITHOUT ANY WARRANTY expressed or implied, + * including the implied warranties of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. A copy of this license is available at + * http://www.opensource.org/licenses. Any Red Hat trademarks that are + * incorporated in the source code or documentation are not subject to + * the BSD License and may only be used or replicated with the express + * permission of Red Hat, Inc. + */ + +/****************************************************************** + * The following routines are coded directly from the algorithms + * and coefficients given in "Software Manual for the Elementary + * Functions" by William J. Cody, Jr. and William Waite, Prentice + * Hall, 1980. + ******************************************************************/ + +/* Based on newlib/libm/mathfp/s_sineh.c in Newlib. */ + +#include "amdgcnmach.h" + +v64df v64df_exp_aux (v64df, v64di); +v64si v64df_numtest (v64df); +v64si v64df_ispos (v64df); + +static const double q[] = { -0.21108770058106271242e+7, + 0.36162723109421836460e+5, + -0.27773523119650701667e+3 }; +static const double p[] = { -0.35181283430177117881e+6, + -0.11563521196851768270e+5, + -0.16375798202630751372e+3, + -0.78966127417357099479 }; +static const double LNV = 0.6931610107421875000; +static const double INV_V2 = 0.24999308500451499336; +static const double V_OVER2_MINUS1 = 0.13830277879601902638e-4; + +#if defined (__has_builtin) && __has_builtin (__builtin_gcn_fabsv) + +DEF_VD_MATH_FUNC (v64df, sineh, v64df x, int cosineh) +{ + const double WBAR = 18.55; + + FUNCTION_INIT (v64df); + + v64si sgn = VECTOR_INIT (0); + v64di v_cosineh = VECTOR_INIT (cosineh ? -1L : 0L); + + /* Check for special values. */ + v64si num_type = v64df_numtest (x); + VECTOR_IF (num_type == NAN, cond) + errno = EDOM; + VECTOR_RETURN (x, cond); + VECTOR_ELSEIF (num_type == INF, cond) + errno = ERANGE; + VECTOR_RETURN (VECTOR_MERGE (VECTOR_INIT (z_infinity.d), + VECTOR_INIT (-z_infinity.d), + v64df_ispos (x)), + cond); + VECTOR_ENDIF + + v64df y = __builtin_gcn_fabsv (x); + + if (!cosineh) + VECTOR_COND_MOVE (sgn, VECTOR_INIT (-1), x < 0.0); + + v64df res; + + VECTOR_IF (((y > 1.0) & ~v_cosineh) | v_cosineh, cond) + VECTOR_IF2 (y > BIGX, cond2, cond) + v64df w = y - LNV; + + /* Check for w > maximum here. */ + VECTOR_IF2 (w > BIGX, cond3, cond2) + errno = ERANGE; + VECTOR_RETURN (x, cond3); + VECTOR_ENDIF + + v64df z = v64df_exp_aux (w, __mask); + + VECTOR_COND_MOVE (res, z * (V_OVER2_MINUS1 + 1.0), + cond2 & (w > WBAR)); + VECTOR_ELSE2 (cond2, cond) + v64df z = v64df_exp_aux (y, __mask); + if (cosineh) + VECTOR_COND_MOVE (res, (z + 1 / z) * 0.5, cond2); + else + VECTOR_COND_MOVE (res, (z - 1 / z) * 0.5, cond2); + VECTOR_ENDIF + + VECTOR_COND_MOVE (res, -res, sgn); + VECTOR_ELSE (cond) + /* Check for y being too small. */ + VECTOR_IF2 (y < z_rooteps, cond2, cond); + VECTOR_COND_MOVE (res, x, cond2); + VECTOR_ELSE2 (cond2, cond) + /* Calculate the Taylor series. */ + v64df f = x * x; + v64df Q = ((f + q[2]) * f + q[1]) * f + q[0]; + v64df P = ((p[3] * f + p[2]) * f + p[1]) * f + p[0]; + v64df R = f * (P / Q); + + VECTOR_COND_MOVE (res, x + x * R, cond2); + VECTOR_ENDIF + VECTOR_ENDIF + + VECTOR_RETURN (res, NO_COND); + + FUNCTION_RETURN; +} + +#endif diff --git a/newlib/libm/machine/amdgcn/v64df_sinh.c b/newlib/libm/machine/amdgcn/v64df_sinh.c new file mode 100644 index 0000000000..e91b4e3594 --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64df_sinh.c @@ -0,0 +1,41 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * Copyright (c) 1994-2009 Red Hat, Inc. All rights reserved. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the BSD License. This program is distributed in the hope that + * it will be useful, but WITHOUT ANY WARRANTY expressed or implied, + * including the implied warranties of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. A copy of this license is available at + * http://www.opensource.org/licenses. Any Red Hat trademarks that are + * incorporated in the source code or documentation are not subject to + * the BSD License and may only be used or replicated with the express + * permission of Red Hat, Inc. + */ + +/* Based on newlib/libm/mathfp/s_sinh.c. */ + +#include "amdgcnmach.h" + +v64df v64df_sineh_aux (v64df, int, v64di); + +DEF_VD_MATH_FUNC (v64df, sinh, v64df x) +{ + return v64df_sineh_aux (x, 0, __mask); +} + +DEF_VARIANTS (sinh, df, df) diff --git a/newlib/libm/machine/amdgcn/v64df_sqrt.c b/newlib/libm/machine/amdgcn/v64df_sqrt.c new file mode 100644 index 0000000000..d3390e5645 --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64df_sqrt.c @@ -0,0 +1,104 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * Copyright (c) 1994-2009 Red Hat, Inc. All rights reserved. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the BSD License. This program is distributed in the hope that + * it will be useful, but WITHOUT ANY WARRANTY expressed or implied, + * including the implied warranties of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. A copy of this license is available at + * http://www.opensource.org/licenses. Any Red Hat trademarks that are + * incorporated in the source code or documentation are not subject to + * the BSD License and may only be used or replicated with the express + * permission of Red Hat, Inc. + */ + +/***************************************************************** + * The following routines are coded directly from the algorithms + * and coefficients given in "Software Manual for the Elementary + * Functions" by William J. Cody, Jr. and William Waite, Prentice + * Hall, 1980. + *****************************************************************/ + +/* Based on newlib/libm/mathfp/s_sqrt.c in Newlib. */ + +#include "amdgcnmach.h" + +v64si v64df_numtest (v64df); +v64si v64df_ispos (v64df); + +#if defined (__has_builtin) \ + && __has_builtin (__builtin_gcn_frexpv_mant) \ + && __has_builtin (__builtin_gcn_frexpv_exp) \ + && __has_builtin (__builtin_gcn_ldexpv) + +DEF_VD_MATH_FUNC (v64df, sqrt, v64df x) +{ + FUNCTION_INIT (v64df); + + /* Check for special values. */ + v64si num_type = v64df_numtest (x); + VECTOR_IF (num_type == NAN, cond) + errno = EDOM; + VECTOR_RETURN (x, cond); + VECTOR_ELSEIF (num_type == INF, cond) + VECTOR_IF2 (v64df_ispos (x), cond2, cond) + errno = EDOM; + VECTOR_RETURN (VECTOR_INIT (z_notanum.d), cond2); + VECTOR_ELSE2 (cond2,cond) + errno = ERANGE; + VECTOR_RETURN (VECTOR_INIT (z_infinity.d), cond); + VECTOR_ENDIF + VECTOR_ENDIF + + /* Initial checks are performed here. */ + VECTOR_IF (x == 0.0, cond) + VECTOR_RETURN (VECTOR_INIT (0.0), cond); + VECTOR_ENDIF + VECTOR_IF (x < 0.0, cond) + errno = EDOM; + VECTOR_RETURN (VECTOR_INIT (z_notanum.d), cond); + VECTOR_ENDIF + + /* Find the exponent and mantissa for the form x = f * 2^exp. */ + v64df f = __builtin_gcn_frexpv_mant (x); + v64si exp = __builtin_gcn_frexpv_exp (x); + v64si odd = (exp & 1) != 0; + + /* Get the initial approximation. */ + v64df y = 0.41731 + 0.59016 * f; + + f *= 0.5f; + /* Calculate the remaining iterations. */ + y = y * 0.5f + f / y; + y = y * 0.5f + f / y; + y = y * 0.5f + f / y; + + /* Calculate the final value. */ + VECTOR_COND_MOVE (y, y * __SQRT_HALF, odd); + VECTOR_COND_MOVE (exp, exp + 1, odd); + exp >>= 1; + y = __builtin_gcn_ldexpv (y, exp); + + VECTOR_RETURN (y, NO_COND); + + FUNCTION_RETURN; +} + +DEF_VARIANTS (sqrt, df, df) + +#endif diff --git a/newlib/libm/machine/amdgcn/v64df_tan.c b/newlib/libm/machine/amdgcn/v64df_tan.c new file mode 100644 index 0000000000..88fe757a34 --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64df_tan.c @@ -0,0 +1,156 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* Based on newlib/libm/math/kf_tan.c in Newlib. */ + +#include "amdgcnmach.h" + +static const double +pio4 = 7.85398163397448278999e-01, /* 0x3FE921FB, 0x54442D18 */ +pio4lo= 3.06161699786838301793e-17, /* 0x3C81A626, 0x33145C07 */ +T[] = { + 3.33333333333334091986e-01, /* 0x3FD55555, 0x55555563 */ + 1.33333333333201242699e-01, /* 0x3FC11111, 0x1110FE7A */ + 5.39682539762260521377e-02, /* 0x3FABA1BA, 0x1BB341FE */ + 2.18694882948595424599e-02, /* 0x3F9664F4, 0x8406D637 */ + 8.86323982359930005737e-03, /* 0x3F8226E3, 0xE96E8493 */ + 3.59207910759131235356e-03, /* 0x3F6D6D22, 0xC9560328 */ + 1.45620945432529025516e-03, /* 0x3F57DBC8, 0xFEE08315 */ + 5.88041240820264096874e-04, /* 0x3F4344D8, 0xF2F26501 */ + 2.46463134818469906812e-04, /* 0x3F3026F7, 0x1A8D1068 */ + 7.81794442939557092300e-05, /* 0x3F147E88, 0xA03792A6 */ + 7.14072491382608190305e-05, /* 0x3F12B80F, 0x32F0A7E9 */ + -1.85586374855275456654e-05, /* 0xBEF375CB, 0xDB605373 */ + 2.59073051863633712884e-05, /* 0x3EFB2A70, 0x74BF7AD4 */ +}; + +#if defined (__has_builtin) && __has_builtin (__builtin_gcn_fabsv) + +static v64df +v64df_kernel_tan (v64df x, v64df y, v64si iy, v64di __mask) +{ + FUNCTION_INIT (v64df); + + v64si hx; + GET_HIGH_WORD(hx, x, NO_COND); + v64si ix = hx & 0x7fffffff; /* high word of |x| */ + + VECTOR_IF (ix < 0x3e300000, cond) /* x < 2**-28 */ + VECTOR_IF2(__builtin_convertvector (x, v64si)==0, cond2, cond) /* generate inexact */ + v64si low; + GET_LOW_WORD (low, x, cond2); + VECTOR_RETURN (1.0 / __builtin_gcn_fabsv (x), ((ix|low)|(iy+1))==0); + VECTOR_RETURN (x, cond2 & (iy == 1)); + v64df z, w; + z = w = x + y; + SET_LOW_WORD (z, VECTOR_INIT (0.0), cond2); + v64df v = y - (z - x); + v64df t, a; + t = a = -1.0 / w; + SET_LOW_WORD(t, VECTOR_INIT (0.0), cond2); + v64df s = 1.0 + t * z; + VECTOR_RETURN ( t + a * (s + t * v), cond2); + VECTOR_ENDIF + VECTOR_ENDIF + VECTOR_IF(ix>=0x3FE59428, cond) /* |x|>=0.6744 */ + VECTOR_COND_MOVE (x, -x, cond & (hx < 0)); + VECTOR_COND_MOVE (y, -y, cond & (hx < 0)); + v64df z = pio4-x; + v64df w = pio4lo-y; + VECTOR_COND_MOVE (x, z+w, cond); + VECTOR_COND_MOVE (y, VECTOR_INIT (0.0), cond); + VECTOR_ENDIF + v64df z = x*x; + v64df w = z*z; + /* Break x^5*(T[1]+x^2*T[2]+...) into + * x^5(T[1]+x^4*T[3]+...+x^20*T[11]) + + * x^5(x^2*(T[2]+x^4*T[4]+...+x^22*[T12])) + */ + v64df r = T[1]+w*(T[3]+w*(T[5]+w*(T[7]+w*(T[9]+w*T[11])))); + v64df v = z*(T[2]+w*(T[4]+w*(T[6]+w*(T[8]+w*(T[10]+w*T[12]))))); + v64df s = z*x; + r = y + z*(s*(r+v)+y); + r += T[0]*s; + w = x+r; + VECTOR_IF(ix>=0x3FE59428, cond) + v = __builtin_convertvector (iy, v64df); + VECTOR_RETURN (__builtin_convertvector (1-((hx>>30)&2), v64df) + * (v-2.0*(x-(w*w/(w+v)-r))), cond); + VECTOR_ENDIF + VECTOR_RETURN (w, iy == 1); + /* if allow error up to 2 ulp, + simply return -1.0/(x+r) here */ + /* compute -1.0/(x+r) accurately */ + z = w; + SET_LOW_WORD (z, VECTOR_INIT (0), NO_COND); + v = r - (z - x); /* z+v = r+x */ + v64df a, t; + t = a = -1.0/w; /* a = -1.0/w */ + SET_LOW_WORD(t, VECTOR_INIT (0), NO_COND); + s = 1.0+t*z; + VECTOR_RETURN (t+a*(s+t*v), NO_COND); + + FUNCTION_RETURN; +} + +static v64si +v64df_rem_pio2 (v64df x, v64df *y) +{ + v64df r = x * __INV_PI_OVER_TWO_2_24; + v64si n = (__builtin_convertvector (r, v64si) + 0x800000) >> 24; + x = x - __builtin_convertvector (n, v64df) * __PI_OVER_TWO; + + y[0] = x; + y[1] = x - y[0]; + return n; +} + +DEF_VD_MATH_FUNC (v64df, tan, v64df x) +{ + FUNCTION_INIT (v64df); + + v64si ix; + GET_HIGH_WORD (ix, x, NO_COND); + + /* |x| ~< pi/4 */ + ix &= 0x7fffffff; + VECTOR_RETURN (v64df_kernel_tan (x, VECTOR_INIT (0.0), VECTOR_INIT (1), __mask), + ix <= 0x3fe921fb); + + /* tan(Inf or NaN) is NaN */ + VECTOR_RETURN (x-x, ix >= 0x7ff00000); /* NaN */ + + /* argument reduction needed */ + v64df y[2]; + v64si n = v64df_rem_pio2 (x,y); + VECTOR_RETURN (v64df_kernel_tan (y[0], y[1], 1-((n&1)<<1), __mask), // 1 -- n even + NO_COND); // -1 -- n odd + + FUNCTION_RETURN; +} + +DEF_VARIANTS (tan, df, df) + +#endif diff --git a/newlib/libm/machine/amdgcn/v64df_tanh.c b/newlib/libm/machine/amdgcn/v64df_tanh.c new file mode 100644 index 0000000000..b17cac3a6e --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64df_tanh.c @@ -0,0 +1,92 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * Copyright (c) 1994-2009 Red Hat, Inc. All rights reserved. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the BSD License. This program is distributed in the hope that + * it will be useful, but WITHOUT ANY WARRANTY expressed or implied, + * including the implied warranties of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. A copy of this license is available at + * http://www.opensource.org/licenses. Any Red Hat trademarks that are + * incorporated in the source code or documentation are not subject to + * the BSD License and may only be used or replicated with the express + * permission of Red Hat, Inc. + */ + +/***************************************************************** + * The following routines are coded directly from the algorithms + * and coefficients given in "Software Manual for the Elementary + * Functions" by William J. Cody, Jr. and William Waite, Prentice + * Hall, 1980. + *****************************************************************/ + +/* Based on newlib/libm/mathfp/s_tanh.c in Newlib. */ + +#include "amdgcnmach.h" + +v64df v64df_exp_aux (v64df, v64di); + +static const double LN3_OVER2 = 0.54930614433405484570; +static const double p[] = { -0.16134119023996228053e+4, + -0.99225929672236083313e+2, + -0.96437492777225469787 }; +static const double q[] = { 0.48402357071988688686e+4, + 0.22337720718962312926e+4, + 0.11274474380534949335e+3 }; + +#if defined (__has_builtin) && __has_builtin (__builtin_gcn_fabsv) + +DEF_VD_MATH_FUNC (v64df, tanh, v64df x) +{ + FUNCTION_INIT (v64df); + + v64df f = __builtin_gcn_fabsv (x); + v64df res; + + /* Check if the input is too big. */ + VECTOR_IF (f > BIGX, cond) + VECTOR_COND_MOVE (res, VECTOR_INIT (1.0), cond); + + VECTOR_ELSEIF (f > LN3_OVER2, cond) + VECTOR_COND_MOVE (res, 1.0 - 2.0 / (v64df_exp_aux (2 * f, __mask) + 1.0), + cond); + + /* Check if the input is too small. */ + VECTOR_ELSEIF (f < z_rooteps, cond) + VECTOR_COND_MOVE (res, f, cond); + + /* Calculate the Taylor series. */ + VECTOR_ELSE (cond) + v64df g = f * f; + + v64df P = (p[2] * g + p[1]) * g + p[0]; + v64df Q = ((g + q[2]) * g + q[1]) * g + q[0]; + v64df R = g * (P / Q); + + VECTOR_COND_MOVE (res, f + f * R, cond); + VECTOR_ENDIF + + VECTOR_COND_MOVE (res, -res, x < 0.0); + + VECTOR_RETURN (res, NO_COND); + + FUNCTION_RETURN; +} + +DEF_VARIANTS (tanh, df, df) + +#endif diff --git a/newlib/libm/machine/amdgcn/v64df_tgamma.c b/newlib/libm/machine/amdgcn/v64df_tgamma.c new file mode 100644 index 0000000000..f8d811055d --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64df_tgamma.c @@ -0,0 +1,42 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + * + */ + +/* Based on newlib/libm/math/e_tgamma.c in Newlib. */ + +#include "amdgcnmach.h" + +v64df v64df_exp_aux (v64df x, v64di __mask); +v64df v64df_lgamma_r_aux (v64df x, v64si *signgamp, v64di __mask); + +DEF_VD_MATH_FUNC (v64df, tgamma, v64df x) +{ + v64si signgam_local; + v64df y = v64df_exp_aux(v64df_lgamma_r_aux(x, &signgam_local, __mask), __mask); + VECTOR_COND_MOVE(y, -y, signgam_local < 0); + return y; +} + +DEF_VARIANTS (tgamma, df, df) diff --git a/newlib/libm/machine/amdgcn/v64sf_acos.c b/newlib/libm/machine/amdgcn/v64sf_acos.c new file mode 100644 index 0000000000..1a0b67c24b --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64sf_acos.c @@ -0,0 +1,41 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * Copyright (c) 1994-2009 Red Hat, Inc. All rights reserved. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the BSD License. This program is distributed in the hope that + * it will be useful, but WITHOUT ANY WARRANTY expressed or implied, + * including the implied warranties of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. A copy of this license is available at + * http://www.opensource.org/licenses. Any Red Hat trademarks that are + * incorporated in the source code or documentation are not subject to + * the BSD License and may only be used or replicated with the express + * permission of Red Hat, Inc. + */ + +/* Based on newlib/libm/mathfp/sf_acos.c in Newlib. */ + +#include "amdgcnmach.h" + +v64sf v64sf_asinef_aux (v64sf, int, v64si); + +DEF_VS_MATH_FUNC (v64sf, acosf, v64sf x) +{ + return v64sf_asinef_aux(x, 1, __mask); +} + +DEF_VARIANTS (acosf, sf, sf) diff --git a/newlib/libm/machine/amdgcn/v64sf_acosh.c b/newlib/libm/machine/amdgcn/v64sf_acosh.c new file mode 100644 index 0000000000..99b3939eff --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64sf_acosh.c @@ -0,0 +1,80 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + * + */ + +/* Based on newlib/libm/mathfp/ef_acosh.c in Newlib. */ + +#include "amdgcnmach.h" + +v64sf v64sf_logf_aux (v64sf, v64si); +v64sf v64sf_log1pf_aux (v64sf, v64si); +v64sf v64sf_sqrtf_aux (v64sf, v64si); + +DEF_VS_MATH_FUNC (v64sf, acoshf, v64sf x) +{ + static const float one = 1.0; + static const float ln2 = 6.9314718246e-01; /* 0x3f317218 */ + + FUNCTION_INIT (v64sf); + + v64si hx; + GET_FLOAT_WORD (hx, x, NO_COND); + + VECTOR_IF (hx < 0x3f800000, cond) // x < 1 */ + VECTOR_RETURN ((x-x) / (x-x), cond); + VECTOR_ENDIF + VECTOR_IF (hx >=0x4d800000, cond) // x > 2**28 */ + VECTOR_IF2 (hx >=0x7f800000, cond2, cond) // x is inf of NaN */ + VECTOR_RETURN (x+x, cond2); + VECTOR_ELSE (cond2) + /* acosh(huge)=log(2x) */ + VECTOR_RETURN (v64sf_logf_aux (x, __mask) + ln2, cond2); + VECTOR_ENDIF + VECTOR_ENDIF + VECTOR_IF (hx == 0x3f800000, cond) + /* acosh(1) = 0 */ + VECTOR_RETURN (VECTOR_INIT (0.0f), cond); + VECTOR_ENDIF + VECTOR_IF (hx > 0x40000000, cond) /* 2**28 > x > 2 */ + { + v64sf t = x * x; + VECTOR_RETURN (v64sf_logf_aux (2.0f*x - 1.0f / + (x + v64sf_sqrtf_aux (t - 1.0f, __mask)), + __mask), + cond); + } + VECTOR_ELSE (cond) /* 1 0.5f, cond) + VECTOR_COND_MOVE (i, VECTOR_INIT (1 - acosine), cond); + + /* Check for range error. */ + VECTOR_IF2 (y > 1.0f, cond2, cond) + errno = ERANGE; + VECTOR_RETURN (VECTOR_INIT (z_notanum_f.f), cond2); + VECTOR_ENDIF + + VECTOR_COND_MOVE (g, (1.0f - y) / 2.0f, cond); + VECTOR_COND_MOVE (y, -2.0f * v64sf_sqrtf (g), cond); + VECTOR_COND_MOVE (branch, VECTOR_INIT (-1), cond); + VECTOR_ELSE (cond) + VECTOR_COND_MOVE (i, VECTOR_INIT (acosine), cond); + VECTOR_IF2 (y < z_rooteps_f, cond2, cond) + VECTOR_COND_MOVE (res, y, cond2); + VECTOR_ELSE2 (cond2, cond) + VECTOR_COND_MOVE (g, y * y, cond2); + VECTOR_ENDIF + VECTOR_ENDIF + + VECTOR_IF ((y >= z_rooteps_f) | branch, cond) + { + /* Calculate the Taylor series. */ + v64sf P = (p[1] * g + p[0]) * g; + v64sf Q = (g + q[1]) * g + q[0]; + v64sf R = P / Q; + + VECTOR_COND_MOVE (res, y + y * R, cond); + } + VECTOR_ENDIF + + v64sf a_i = VECTOR_MERGE (VECTOR_INIT (a[1]), VECTOR_INIT (a[0]), i != 0); + + /* Calculate asine or acose. */ + if (acosine == 0) + { + VECTOR_COND_MOVE (res, (a_i + res) + a_i, NO_COND); + VECTOR_IF (x < 0.0f, cond) + VECTOR_COND_MOVE (res, -res, cond); + VECTOR_ENDIF + } + else + { + v64sf b_i = VECTOR_MERGE (VECTOR_INIT(b[1]), VECTOR_INIT(b[0]), i != 0); + + VECTOR_IF (x < 0.0f, cond) + VECTOR_COND_MOVE (res, (b_i + res) + b_i, cond); + VECTOR_ELSE (cond) + VECTOR_COND_MOVE (res, (a_i - res) + a_i, cond); + VECTOR_ENDIF + } + + VECTOR_RETURN (res, NO_COND); + + FUNCTION_RETURN; +} + +#endif diff --git a/newlib/libm/machine/amdgcn/v64sf_asinh.c b/newlib/libm/machine/amdgcn/v64sf_asinh.c new file mode 100644 index 0000000000..e82bd1a551 --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64sf_asinh.c @@ -0,0 +1,82 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* Based on newlib/libm/mathfp/sf_asinh.c in Newlib. */ + +#include "amdgcnmach.h" + +v64sf v64sf_logf_aux (v64sf, v64si); +v64sf v64sf_log1pf_aux (v64sf, v64si); +v64sf v64sf_sqrtf_aux (v64sf, v64si); + +#if defined (__has_builtin) && __has_builtin (__builtin_gcn_fabsvf) + +DEF_VS_MATH_FUNC (v64sf, asinhf, v64sf x) +{ + static const float one = 1.0000000000e+00; /* 0x3F800000 */ + static const float ln2 = 6.9314718246e-01; /* 0x3f317218 */ + static const float huge = 1.0000000000e+30; + + FUNCTION_INIT (v64sf); + + v64sf w; + v64si hx; + GET_FLOAT_WORD (hx, x, NO_COND); + v64si ix = hx & 0x7fffffff; + + VECTOR_IF (ix >=0x7f800000, cond) /* x is inf or NaN */ + VECTOR_RETURN (x + x, cond); + VECTOR_ENDIF + VECTOR_IF (ix < 0x31800000, cond) /* |x|<2**-28 */ + VECTOR_IF2 (huge+x > one, cond2, cond) /* return x inexact except 0 */ + VECTOR_RETURN (x, cond); + VECTOR_ENDIF + VECTOR_ENDIF + VECTOR_IF (ix > 0x4d800000, cond) /* x > 2**28 */ + VECTOR_COND_MOVE (w, v64sf_logf_aux (__builtin_gcn_fabsvf (x), __mask) + + ln2, + cond); + VECTOR_ELSEIF (ix > 0x40000000, cond) /* 2**28 > |x| > 2.0 */ + v64sf t = __builtin_gcn_fabsvf (x); + VECTOR_COND_MOVE (w, v64sf_logf_aux (2.0f * t + 1.0f / (v64sf_sqrtf_aux (x*x + 1.0f, __mask) + t), __mask), + cond); + VECTOR_ELSE (cond) /* 2.0 > |x| > 2**-28 */ + v64sf t = x * x; + VECTOR_COND_MOVE (w, v64sf_log1pf_aux (__builtin_gcn_fabsvf (x) + t / (1.0f + v64sf_sqrtf_aux (1.0f + t, __mask)), __mask), + cond); + VECTOR_ENDIF + + VECTOR_IF (hx > 0, cond) + VECTOR_RETURN (w, cond); + VECTOR_ELSE (cond) + VECTOR_RETURN (-w, cond); + VECTOR_ENDIF + + FUNCTION_RETURN; +} + +DEF_VARIANTS (asinhf, sf, sf) + +#endif diff --git a/newlib/libm/machine/amdgcn/v64sf_atan.c b/newlib/libm/machine/amdgcn/v64sf_atan.c new file mode 100644 index 0000000000..552d9b3838 --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64sf_atan.c @@ -0,0 +1,42 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * Copyright (c) 1994-2009 Red Hat, Inc. All rights reserved. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the BSD License. This program is distributed in the hope that + * it will be useful, but WITHOUT ANY WARRANTY expressed or implied, + * including the implied warranties of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. A copy of this license is available at + * http://www.opensource.org/licenses. Any Red Hat trademarks that are + * incorporated in the source code or documentation are not subject to + * the BSD License and may only be used or replicated with the express + * permission of Red Hat, Inc. + */ + +/* Based on newlib/libm/mathfp/sf_atan.c in Newlib. */ + +#include "amdgcnmach.h" + +v64sf v64sf_atangentf_aux (v64sf, v64sf, v64sf, int, v64si); + +DEF_VS_MATH_FUNC (v64sf, atanf, v64sf x) +{ + return (v64sf_atangentf_aux (x, VECTOR_INIT (0.0f), VECTOR_INIT (0.0f), + 0, __mask)); +} + +DEF_VARIANTS (atanf, sf, sf) diff --git a/newlib/libm/machine/amdgcn/v64sf_atan2.c b/newlib/libm/machine/amdgcn/v64sf_atan2.c new file mode 100644 index 0000000000..17e84710a2 --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64sf_atan2.c @@ -0,0 +1,41 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * Copyright (c) 1994-2009 Red Hat, Inc. All rights reserved. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the BSD License. This program is distributed in the hope that + * it will be useful, but WITHOUT ANY WARRANTY expressed or implied, + * including the implied warranties of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. A copy of this license is available at + * http://www.opensource.org/licenses. Any Red Hat trademarks that are + * incorporated in the source code or documentation are not subject to + * the BSD License and may only be used or replicated with the express + * permission of Red Hat, Inc. + */ + +/* Based on newlib/libm/mathfp/sf_atan2.c in Newlib. */ + +#include "amdgcnmach.h" + +v64sf v64sf_atangentf_aux (v64sf, v64sf, v64sf, int, v64si); + +DEF_VS_MATH_FUNC (v64sf, atan2f, v64sf v, v64sf u) +{ + return v64sf_atangentf_aux (VECTOR_INIT (0.0f), v, u, 1, __mask); +} + +DEF_VARIANTS2 (atan2f, sf, sf) diff --git a/newlib/libm/machine/amdgcn/v64sf_atangent.c b/newlib/libm/machine/amdgcn/v64sf_atangent.c new file mode 100644 index 0000000000..9d6b7b1366 --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64sf_atangent.c @@ -0,0 +1,152 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * Copyright (c) 1994-2009 Red Hat, Inc. All rights reserved. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the BSD License. This program is distributed in the hope that + * it will be useful, but WITHOUT ANY WARRANTY expressed or implied, + * including the implied warranties of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. A copy of this license is available at + * http://www.opensource.org/licenses. Any Red Hat trademarks that are + * incorporated in the source code or documentation are not subject to + * the BSD License and may only be used or replicated with the express + * permission of Red Hat, Inc. + */ + +/****************************************************************** + * The following routines are coded directly from the algorithms + * and coefficients given in "Software Manual for the Elementary + * Functions" by William J. Cody, Jr. and William Waite, Prentice + * Hall, 1980. + ******************************************************************/ + +/* Based on newlib/libm/mathfp/sf_atangent.c in Newlib. */ + +#include +#include "amdgcnmach.h" + +static const float ROOT3 = 1.732050807; +static const float a[] = { 0.0, 0.523598775, 1.570796326, + 1.047197551 }; +static const float q[] = { 0.1412500740e+1 }; +static const float p[] = { -0.4708325141, -0.5090958253e-1 }; + +#if defined (__has_builtin) \ + && __has_builtin (__builtin_gcn_frexpvf_exp) \ + && __has_builtin (__builtin_gcn_fabsvf) + +DEF_VS_MATH_FUNC (v64sf, atangentf, v64sf x, v64sf v, v64sf u, int arctan2) +{ + FUNCTION_INIT (v64sf); + + v64sf zero = VECTOR_INIT (0.0f); + v64sf res; + v64si branch = VECTOR_INIT (0); + + /* Preparation for calculating arctan2. */ + if (arctan2) + { + VECTOR_IF (u == 0.0f, cond) + VECTOR_IF2 (v == 0.0f, cond2, cond) + errno = ERANGE; + VECTOR_RETURN (VECTOR_INIT (0.0f), cond2); + VECTOR_ELSE2 (cond2, cond) + VECTOR_COND_MOVE (branch, VECTOR_INIT (-1), cond2); + VECTOR_COND_MOVE (res, VECTOR_INIT ((float) __PI_OVER_TWO), cond2); + VECTOR_ENDIF + VECTOR_ENDIF + + VECTOR_IF (~branch, cond) + /* Get the exponent values of the inputs. */ + v64si expv = __builtin_gcn_frexpvf_exp (v); + v64si expu = __builtin_gcn_frexpvf_exp (u); + + /* See if a divide will overflow. */ + v64si e = expv - expu; + + VECTOR_IF2 (e > FLT_MAX_EXP, cond2, cond) + VECTOR_COND_MOVE (branch, VECTOR_INIT (-1), cond2); + VECTOR_COND_MOVE (res, VECTOR_INIT ((float) __PI_OVER_TWO), cond2); + VECTOR_ENDIF + + /* Also check for underflow. */ + VECTOR_IF2 (e < FLT_MIN_EXP, cond2, cond) + VECTOR_COND_MOVE (branch, VECTOR_INIT (-1), cond2); + VECTOR_COND_MOVE (res, zero, cond2); + VECTOR_ENDIF + VECTOR_ENDIF + } + + VECTOR_IF (~branch, cond) + v64sf f; + v64si N = VECTOR_INIT (0); + + if (arctan2) + f = __builtin_gcn_fabsvf (v / u); + else + f = __builtin_gcn_fabsvf (x); + + VECTOR_IF2 (f > 1.0f, cond2, cond) + VECTOR_COND_MOVE (f, 1.0f / f, cond2); + VECTOR_COND_MOVE (N, VECTOR_INIT (2), cond2); + VECTOR_ENDIF + + VECTOR_IF2 (f > (2.0f - ROOT3), cond2, cond) + float A = ROOT3 - 1.0f; + VECTOR_COND_MOVE (f, (((A * f - 0.5f) - 0.5f) + f) / (ROOT3 + f), + cond2); + N += cond2 & 1; + VECTOR_ENDIF + + /* Check for values that are too small. */ + VECTOR_IF2 ((-z_rooteps_f < f) & (f < z_rooteps_f), cond2, cond) + VECTOR_COND_MOVE (res, f, cond2); + + /* Calculate the Taylor series. */ + VECTOR_ELSE2 (cond2, cond) + v64sf g = f * f; + v64sf P = (p[1] * g + p[0]) * g; + v64sf Q = g + q[0]; + v64sf R = P / Q; + + VECTOR_COND_MOVE (res, f + f * R, cond2); + VECTOR_ENDIF + + VECTOR_COND_MOVE (res, -res, cond & (N > 1)); + + res += VECTOR_MERGE (VECTOR_INIT (a[1]), zero, cond & (N == 1)); + res += VECTOR_MERGE (VECTOR_INIT (a[2]), zero, cond & (N == 2)); + res += VECTOR_MERGE (VECTOR_INIT (a[3]), zero, cond & (N == 3)); + VECTOR_ENDIF + + if (arctan2) + { + /*if (u < 0.0)*/ + VECTOR_COND_MOVE (res, (float) __PI - res, u < 0.0f); + /*if (v < 0.0)*/ + VECTOR_COND_MOVE (res, -res, v < 0.0f); + } + /*else if (x < 0.0) */ + else + VECTOR_COND_MOVE (res, -res, x < 0.0f); + + VECTOR_RETURN (res, NO_COND); + + FUNCTION_RETURN; +} + +#endif diff --git a/newlib/libm/machine/amdgcn/v64sf_atanh.c b/newlib/libm/machine/amdgcn/v64sf_atanh.c new file mode 100644 index 0000000000..b3bc012652 --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64sf_atanh.c @@ -0,0 +1,75 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + * + */ + +/* Based on newlib/libm/mathfp/ef_atanh.c in Newlib. */ + +#include "amdgcnmach.h" + +v64sf v64sf_log1pf_aux (v64sf, v64si); + +DEF_VS_MATH_FUNC (v64sf, atanhf, v64sf x) +{ + static const float zero = 0.0; + static const float one = 1.0, huge = 1e30; + + FUNCTION_INIT (v64sf); + + v64sf t; + v64si hx; + GET_FLOAT_WORD (hx, x, NO_COND); + v64si ix = hx & 0x7fffffff; + + VECTOR_IF (ix > 0x3f800000, cond) // |x|>1 + VECTOR_RETURN ((x - x)/(x - x), cond); + VECTOR_ENDIF + + VECTOR_IF (ix == 0x3f800000, cond) + VECTOR_RETURN (x / zero, cond); + VECTOR_ENDIF + + VECTOR_IF ((ix < 0x31800000) & ((huge + x) > zero), cond) // x<2**-28 + VECTOR_RETURN (x, cond); + VECTOR_ENDIF + + SET_FLOAT_WORD (x, ix, NO_COND); + + VECTOR_IF (ix < 0x3f000000, cond) // x < 0.5 */ + v64sf t2 = x + x; + VECTOR_COND_MOVE (t, 0.5f * v64sf_log1pf_aux (t2 + t2 * x / (one - x), __mask), cond); + VECTOR_ELSE (cond) + VECTOR_COND_MOVE (t, 0.5f * v64sf_log1pf_aux ((x + x) / (one - x), __mask), cond); + VECTOR_ENDIF + + VECTOR_IF (hx >= 0, cond) + VECTOR_RETURN (t, cond); + VECTOR_ELSE (cond) + VECTOR_RETURN (-t, cond); + VECTOR_ENDIF + + FUNCTION_RETURN; +} + +DEF_VARIANTS (atanhf, sf, sf) diff --git a/newlib/libm/machine/amdgcn/v64sf_copysign.c b/newlib/libm/machine/amdgcn/v64sf_copysign.c new file mode 100644 index 0000000000..03cf2ff9e7 --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64sf_copysign.c @@ -0,0 +1,43 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* Based on newlib/libm/common/sf_copysign.c in Newlib. */ + +#include "amdgcnmach.h" + +DEF_VS_MATH_FUNC (v64sf, copysignf, v64sf x, v64sf y) +{ + FUNCTION_INIT (v64sf); + + v64si ix, iy; + GET_FLOAT_WORD (ix, x, NO_COND); + GET_FLOAT_WORD (iy, y, NO_COND); + SET_FLOAT_WORD (x, (ix & 0x7fffffff) | (iy & 0x80000000), NO_COND); + VECTOR_RETURN (x, NO_COND); + + FUNCTION_RETURN; +} + +DEF_VARIANTS2 (copysignf, sf, sf) diff --git a/newlib/libm/machine/amdgcn/v64sf_cos.c b/newlib/libm/machine/amdgcn/v64sf_cos.c new file mode 100644 index 0000000000..c3f1e5a4b3 --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64sf_cos.c @@ -0,0 +1,41 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * Copyright (c) 1994-2009 Red Hat, Inc. All rights reserved. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the BSD License. This program is distributed in the hope that + * it will be useful, but WITHOUT ANY WARRANTY expressed or implied, + * including the implied warranties of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. A copy of this license is available at + * http://www.opensource.org/licenses. Any Red Hat trademarks that are + * incorporated in the source code or documentation are not subject to + * the BSD License and may only be used or replicated with the express + * permission of Red Hat, Inc. + */ + +/* Based on newlib/libm/mathfp/sf_cos.c in Newlib. */ + +#include "amdgcnmach.h" + +v64sf v64sf_sinef_aux (v64sf, int, v64si); + +DEF_VS_MATH_FUNC (v64sf, cosf, v64sf x) +{ + return v64sf_sinef_aux (x, 1, __mask); +} + +DEF_VARIANTS (cosf, sf, sf) diff --git a/newlib/libm/machine/amdgcn/v64sf_cosh.c b/newlib/libm/machine/amdgcn/v64sf_cosh.c new file mode 100644 index 0000000000..f928c3e5ad --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64sf_cosh.c @@ -0,0 +1,41 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * Copyright (c) 1994-2009 Red Hat, Inc. All rights reserved. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the BSD License. This program is distributed in the hope that + * it will be useful, but WITHOUT ANY WARRANTY expressed or implied, + * including the implied warranties of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. A copy of this license is available at + * http://www.opensource.org/licenses. Any Red Hat trademarks that are + * incorporated in the source code or documentation are not subject to + * the BSD License and may only be used or replicated with the express + * permission of Red Hat, Inc. + */ + +/* Based on newlib/libm/mathfp/sf_cosh.c in Newlib. */ + +#include "amdgcnmach.h" + +v64sf v64sf_sinehf_aux (v64sf, int, v64si); + +DEF_VS_MATH_FUNC (v64sf, coshf, v64sf x) +{ + return v64sf_sinehf_aux (x, 1, __mask); +} + +DEF_VARIANTS (coshf, sf, sf) diff --git a/newlib/libm/machine/amdgcn/v64sf_erf.c b/newlib/libm/machine/amdgcn/v64sf_erf.c new file mode 100644 index 0000000000..f7a06f0ab5 --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64sf_erf.c @@ -0,0 +1,186 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* Based on newlib/libm/mathfp/sf_erf.c in Newlib. */ + +#include "amdgcnmach.h" + +v64sf v64sf_expf_aux (v64sf, v64si); + +static const float +tiny = 1e-30, +half= 5.0000000000e-01, /* 0x3F000000 */ +one = 1.0000000000e+00, /* 0x3F800000 */ +two = 2.0000000000e+00, /* 0x40000000 */ + /* c = (subfloat)0.84506291151 */ +erx = 8.4506291151e-01, /* 0x3f58560b */ +/* + * Coefficients for approximation to erf on [0,0.84375] + */ +efx = 1.2837916613e-01, /* 0x3e0375d4 */ +efx8= 1.0270333290e+00, /* 0x3f8375d4 */ +pp0 = 1.2837916613e-01, /* 0x3e0375d4 */ +pp1 = -3.2504209876e-01, /* 0xbea66beb */ +pp2 = -2.8481749818e-02, /* 0xbce9528f */ +pp3 = -5.7702702470e-03, /* 0xbbbd1489 */ +pp4 = -2.3763017452e-05, /* 0xb7c756b1 */ +qq1 = 3.9791721106e-01, /* 0x3ecbbbce */ +qq2 = 6.5022252500e-02, /* 0x3d852a63 */ +qq3 = 5.0813062117e-03, /* 0x3ba68116 */ +qq4 = 1.3249473704e-04, /* 0x390aee49 */ +qq5 = -3.9602282413e-06, /* 0xb684e21a */ +/* + * Coefficients for approximation to erf in [0.84375,1.25] + */ +pa0 = -2.3621185683e-03, /* 0xbb1acdc6 */ +pa1 = 4.1485610604e-01, /* 0x3ed46805 */ +pa2 = -3.7220788002e-01, /* 0xbebe9208 */ +pa3 = 3.1834661961e-01, /* 0x3ea2fe54 */ +pa4 = -1.1089469492e-01, /* 0xbde31cc2 */ +pa5 = 3.5478305072e-02, /* 0x3d1151b3 */ +pa6 = -2.1663755178e-03, /* 0xbb0df9c0 */ +qa1 = 1.0642088205e-01, /* 0x3dd9f331 */ +qa2 = 5.4039794207e-01, /* 0x3f0a5785 */ +qa3 = 7.1828655899e-02, /* 0x3d931ae7 */ +qa4 = 1.2617121637e-01, /* 0x3e013307 */ +qa5 = 1.3637083583e-02, /* 0x3c5f6e13 */ +qa6 = 1.1984500103e-02, /* 0x3c445aa3 */ +/* + * Coefficients for approximation to erfc in [1.25,1/0.35] + */ +ra0 = -9.8649440333e-03, /* 0xbc21a093 */ +ra1 = -6.9385856390e-01, /* 0xbf31a0b7 */ +ra2 = -1.0558626175e+01, /* 0xc128f022 */ +ra3 = -6.2375331879e+01, /* 0xc2798057 */ +ra4 = -1.6239666748e+02, /* 0xc322658c */ +ra5 = -1.8460508728e+02, /* 0xc3389ae7 */ +ra6 = -8.1287437439e+01, /* 0xc2a2932b */ +ra7 = -9.8143291473e+00, /* 0xc11d077e */ +sa1 = 1.9651271820e+01, /* 0x419d35ce */ +sa2 = 1.3765776062e+02, /* 0x4309a863 */ +sa3 = 4.3456588745e+02, /* 0x43d9486f */ +sa4 = 6.4538726807e+02, /* 0x442158c9 */ +sa5 = 4.2900814819e+02, /* 0x43d6810b */ +sa6 = 1.0863500214e+02, /* 0x42d9451f */ +sa7 = 6.5702495575e+00, /* 0x40d23f7c */ +sa8 = -6.0424413532e-02, /* 0xbd777f97 */ +/* + * Coefficients for approximation to erfc in [1/.35,28] + */ +rb0 = -9.8649431020e-03, /* 0xbc21a092 */ +rb1 = -7.9928326607e-01, /* 0xbf4c9dd4 */ +rb2 = -1.7757955551e+01, /* 0xc18e104b */ +rb3 = -1.6063638306e+02, /* 0xc320a2ea */ +rb4 = -6.3756646729e+02, /* 0xc41f6441 */ +rb5 = -1.0250950928e+03, /* 0xc480230b */ +rb6 = -4.8351919556e+02, /* 0xc3f1c275 */ +sb1 = 3.0338060379e+01, /* 0x41f2b459 */ +sb2 = 3.2579251099e+02, /* 0x43a2e571 */ +sb3 = 1.5367296143e+03, /* 0x44c01759 */ +sb4 = 3.1998581543e+03, /* 0x4547fdbb */ +sb5 = 2.5530502930e+03, /* 0x451f90ce */ +sb6 = 4.7452853394e+02, /* 0x43ed43a7 */ +sb7 = -2.2440952301e+01; /* 0xc1b38712 */ + +#if defined (__has_builtin) && __has_builtin (__builtin_gcn_fabsvf) + +DEF_VS_MATH_FUNC (v64sf, erff, v64sf x) +{ + FUNCTION_INIT (v64sf); + + v64si hx; + GET_FLOAT_WORD (hx, x, NO_COND); + v64si ix = hx & 0x7fffffff; + + VECTOR_IF (ix >= 0x7f800000, cond) /* erf(nan)=nan */ + v64si i = (hx >> 31) << 1; + /* erf(+-inf)=+-1 */ + VECTOR_RETURN (__builtin_convertvector (1 - i, v64sf) + 1.0f / x, cond); + VECTOR_ENDIF + + VECTOR_IF (ix < 0x3f580000, cond) /* |x|<0.84375 */ + VECTOR_IF2 (ix < 0x31800000, cond2, cond) /* |x|<2**-28 */ + VECTOR_IF2 (ix < 0x04000000, cond3, cond2) /* avoid underflow */ + VECTOR_RETURN (0.125f*(8.0f*x + efx8*x), cond3); + VECTOR_ENDIF + VECTOR_RETURN (x + efx*x, cond2); + VECTOR_ENDIF + + v64sf z = x*x; + v64sf r = pp0+z*(pp1+z*(pp2+z*(pp3+z*pp4))); + v64sf s = one+z*(qq1+z*(qq2+z*(qq3+z*(qq4+z*qq5)))); + v64sf y = r/s; + + VECTOR_RETURN (x + x*y, cond); + VECTOR_ENDIF + + VECTOR_IF (ix < 0x3fa00000, cond) /* 0.84375 <= |x| < 1.25 */ + v64sf s = __builtin_gcn_fabsvf (x) - 1.0f; + v64sf P = pa0+s*(pa1+s*(pa2+s*(pa3+s*(pa4+s*(pa5+s*pa6))))); + v64sf Q = one+s*(qa1+s*(qa2+s*(qa3+s*(qa4+s*(qa5+s*qa6))))); + VECTOR_IF2 (hx >= 0, cond2, cond) + VECTOR_RETURN (erx + P/Q, cond2); + VECTOR_ELSE2 (cond2, cond) + VECTOR_RETURN (-erx - P/Q, cond2); + VECTOR_ENDIF + VECTOR_ENDIF + + VECTOR_IF (ix >= 0x40c00000, cond) /* inf>|x|>=6 */ + VECTOR_IF2 (hx >= 0, cond2, cond) + VECTOR_RETURN (VECTOR_INIT (1.0f - tiny), cond2); + VECTOR_ELSE2 (cond2, cond) + VECTOR_RETURN (VECTOR_INIT (tiny - 1.0f), cond2); + VECTOR_ENDIF + VECTOR_ENDIF + + x = __builtin_gcn_fabsvf(x); + v64sf s = 1.0f / (x*x); + v64sf R, S; + VECTOR_IF (ix < 0x4036DB6E, cond) /* |x| < 1/0.35 */ + VECTOR_COND_MOVE (R, ra0+s*(ra1+s*(ra2+s*(ra3+s*(ra4+s*( + ra5+s*(ra6+s*ra7)))))), cond); + VECTOR_COND_MOVE (S, one+s*(sa1+s*(sa2+s*(sa3+s*(sa4+s*( + sa5+s*(sa6+s*(sa7+s*sa8))))))), cond); + VECTOR_ELSE (cond) /* |x| >= 1/0.35 */ + VECTOR_COND_MOVE (R, rb0+s*(rb1+s*(rb2+s*(rb3+s*(rb4+s*( + rb5+s*rb6))))), cond); + VECTOR_COND_MOVE (S, one+s*(sb1+s*(sb2+s*(sb3+s*(sb4+s*( + sb5+s*(sb6+s*sb7)))))), cond); + VECTOR_ENDIF + + GET_FLOAT_WORD (ix, x, NO_COND); + v64sf z; + SET_FLOAT_WORD (z, ix & 0xfffff000, NO_COND); + v64sf r = v64sf_expf_aux (-z*z - 0.5625f, __mask) + * v64sf_expf_aux ((z-x)*(z+x) + R/S, __mask); + VECTOR_RETURN (one - r/x, hx >= 0); + VECTOR_RETURN (r/x - one, hx < 0); + + FUNCTION_RETURN; +} + +DEF_VARIANTS (erff, sf, sf) + +#endif diff --git a/newlib/libm/machine/amdgcn/v64sf_exp.c b/newlib/libm/machine/amdgcn/v64sf_exp.c new file mode 100644 index 0000000000..b4ddd2a5f5 --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64sf_exp.c @@ -0,0 +1,102 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* Based on newlib/libm/math/ef_exp.c in Newlib. */ + +#include "amdgcnmach.h" + +static const float +huge = 1.0e+30, +twom100 = 7.8886090522e-31, /* 2**-100=0x0d800000 */ +ln2HI[2] ={ 6.9313812256e-01, /* 0x3f317180 */ + -6.9313812256e-01,}, /* 0xbf317180 */ +ln2LO[2] ={ 9.0580006145e-06, /* 0x3717f7d1 */ + -9.0580006145e-06,}, /* 0xb717f7d1 */ +invln2 = 1.4426950216e+00, /* 0x3fb8aa3b */ +P1 = 1.6666667163e-01, /* 0x3e2aaaab */ +P2 = -2.7777778450e-03, /* 0xbb360b61 */ +P3 = 6.6137559770e-05, /* 0x388ab355 */ +P4 = -1.6533901999e-06, /* 0xb5ddea0e */ +P5 = 4.1381369442e-08; /* 0x3331bb4c */ + +DEF_VS_MATH_FUNC (v64sf, expf, v64sf x) +{ + FUNCTION_INIT (v64sf); + + v64si k = VECTOR_INIT (0); + v64si sx; + GET_FLOAT_WORD(sx, x, NO_COND); + v64si xsb = (sx>>31)&1; /* sign bit of x */ + v64si hx = sx & 0x7fffffff; /* high word of |x| */ + + /* filter out non-finite argument */ + VECTOR_RETURN (x+x, FLT_UWORD_IS_NAN(hx)); /* NaN */ + VECTOR_RETURN (x, FLT_UWORD_IS_INFINITE(hx) & (xsb == 0)); + VECTOR_RETURN (VECTOR_INIT (0.0f), FLT_UWORD_IS_INFINITE (hx)); /* exp(+-inf)={inf,0} */ + VECTOR_RETURN (v64sf_math_oflowf (VECTOR_INIT (0)), sx > FLT_UWORD_LOG_MAX); /* overflow */ + VECTOR_RETURN (v64sf_math_uflowf (VECTOR_INIT (0)), (sx < 0) & (hx > FLT_UWORD_LOG_MIN)); /* underflow */ + + /* argument reduction */ + v64sf hi, lo; + VECTOR_IF (hx > 0x3eb17218, cond) /* if |x| > 0.5 ln2 */ + VECTOR_IF2 (hx < 0x3F851592, cond2, cond) /* and |x| < 1.5 ln2 */ + VECTOR_COND_MOVE (hi, x-ln2HI[0], cond2 & (xsb == 0)); + VECTOR_COND_MOVE (hi, x-ln2HI[1], cond2 & (xsb == 1)); + VECTOR_COND_MOVE (lo, VECTOR_INIT (ln2LO[0]), cond2 & (xsb == 0)); + VECTOR_COND_MOVE (lo, VECTOR_INIT (ln2LO[1]), cond2 & (xsb == 1)); + VECTOR_COND_MOVE (k, 1-xsb-xsb, cond2); + VECTOR_ELSE2 (cond2, cond) + VECTOR_COND_MOVE (k, __builtin_convertvector (invln2*x + 0.5f, v64si), cond2 & (xsb == 0)); + VECTOR_COND_MOVE (k, __builtin_convertvector (invln2*x - 0.5f, v64si), cond2 & (xsb == 1)); + v64sf t = __builtin_convertvector (k, v64sf); + VECTOR_COND_MOVE (hi, x - t*ln2HI[0], cond2); /* t*ln2HI is exact here */ + VECTOR_COND_MOVE (lo, t*ln2LO[0], cond2); + VECTOR_ENDIF + VECTOR_COND_MOVE (x, hi - lo, cond); + VECTOR_ELSEIF (hx < 0x34000000, cond) /* when |x|<2**-23 */ + VECTOR_RETURN (1.0f+x, cond & (huge+x > 1.0f)); /* trigger inexact */ + VECTOR_ENDIF + + /* x is now in primary range */ + v64sf t = x*x; + v64sf c = x - t*(P1+t*(P2+t*(P3+t*(P4+t*P5)))); + VECTOR_RETURN (1.0f - ((x*c)/(c-2.0f)-x), k==0); + v64sf y = 1.0f - ((lo-(x*c)/(2.0f-c))-hi); + VECTOR_IF (k >= -125, cond) + v64si hy; + GET_FLOAT_WORD(hy, y, cond); + SET_FLOAT_WORD(y,hy+(k<<23), cond); /* add k to y's exponent */ + VECTOR_RETURN (y, cond); + VECTOR_ELSE (cond) + v64si hy; + GET_FLOAT_WORD(hy, y, cond); + SET_FLOAT_WORD(y, hy+((k+100)<<23), cond); /* add k to y's exponent */ + VECTOR_RETURN (y*twom100, cond); + VECTOR_ENDIF + + FUNCTION_RETURN; +} + +DEF_VARIANTS (expf, sf, sf) diff --git a/newlib/libm/machine/amdgcn/v64sf_exp2.c b/newlib/libm/machine/amdgcn/v64sf_exp2.c new file mode 100644 index 0000000000..27039e4c4e --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64sf_exp2.c @@ -0,0 +1,32 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* Copyright (C) 2002 by Red Hat, Incorporated. All rights reserved. + * + * Permission to use, copy, modify, and distribute this software + * is freely granted, provided that this notice is preserved. + */ + +/* Based on newlib/libm/mathfp/sf_exp2.c in Newlib. */ + +#include "amdgcnmach.h" + +v64sf v64sf_powf_aux (v64sf, v64sf, v64si); + +DEF_VS_MATH_FUNC (v64sf, exp2f, v64sf x) +{ + return v64sf_powf_aux (VECTOR_INIT (2.0f), x, __mask); +} + +DEF_VARIANTS (exp2f, sf, sf) diff --git a/newlib/libm/machine/amdgcn/v64sf_finite.c b/newlib/libm/machine/amdgcn/v64sf_finite.c new file mode 100644 index 0000000000..54df31f370 --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64sf_finite.c @@ -0,0 +1,37 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* Based on newlib/libm/common/v64sf_finite.c in Newlib. */ + +#include "amdgcnmach.h" + +DEF_VS_MATH_FUNC (v64si, finitef, v64sf x) +{ + v64si ix = CAST_VECTOR (v64si, x); + ix &= 0x7fffffff; + return FLT_UWORD_IS_FINITE(ix); +} + +DEF_VARIANTS (finitef, si, sf) diff --git a/newlib/libm/machine/amdgcn/v64sf_fmod.c b/newlib/libm/machine/amdgcn/v64sf_fmod.c new file mode 100644 index 0000000000..7302420ad3 --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64sf_fmod.c @@ -0,0 +1,147 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* Based on newlib/libm/mathfp/sf_fmod.c in Newlib. */ + +#include "amdgcnmach.h" + +DEF_VS_MATH_FUNC (v64sf, fmodf, v64sf x, v64sf y) +{ + FUNCTION_INIT(v64sf); + + v64si hx, hy, hz; + GET_FLOAT_WORD (hx, x, NO_COND); + GET_FLOAT_WORD (hy, y, NO_COND); + v64si sx = hx & 0x80000000; /* sign of x */ + hx ^=sx; /* |x| */ + hy &= 0x7fffffff; /* |y| */ + + v64sf zeroes = VECTOR_MERGE (VECTOR_INIT (-0.0f), + VECTOR_INIT (0.0f), + sx != 0); + + /* purge off exception values */ + VECTOR_IF ((hy == 0) | (hx >= 0x7f800000) + | (hy > 0x7f800000), cond) // y=0, or x not finite or y is NaN + VECTOR_RETURN ((x * y) / (x * y), cond); + VECTOR_ENDIF + VECTOR_IF (hx < hy, cond) // |x|<|y| return x + VECTOR_RETURN (x, cond); + VECTOR_ENDIF + VECTOR_IF (hx == hy, cond) + VECTOR_RETURN (zeroes, hx == hy); // |x|=|y| return x*0 + VECTOR_ENDIF + + /* determine ix = ilogb(x) */ + v64si ix; + VECTOR_IF (hx < 0x00800000, cond) // subnormal x + ix = VECTOR_INIT (-126); + for (v64si i = (hx << 8); + !ALL_ZEROES_P (cond & (i > 0)); + i <<= 1) + VECTOR_COND_MOVE (ix, ix - 1, cond & (i > 0)); + VECTOR_ELSE (cond) + VECTOR_COND_MOVE (ix, (hx >> 23) - 127, cond); + VECTOR_ENDIF + + /* determine iy = ilogb(y) */ + v64si iy; + VECTOR_IF (hy < 0x00800000, cond) // subnormal y + iy = VECTOR_INIT (-126); + for (v64si i = (hy << 8); !ALL_ZEROES_P (cond & (i >= 0)); i <<= 1) + VECTOR_COND_MOVE (iy, iy - 1, cond & (i >= 0)); + VECTOR_ELSE (cond) + VECTOR_COND_MOVE (iy, (hy >> 23) - 127, cond); + VECTOR_ENDIF + +/* set up {hx,lx}, {hy,ly} and align y to x */ + VECTOR_IF (ix >= -126, cond) + VECTOR_COND_MOVE (hx, 0x00800000 | (0x007fffff & hx), cond); + VECTOR_ELSE (cond) // subnormal x, shift x to normal + { + v64si n = -126 - ix; + VECTOR_COND_MOVE (hx, hx << n, cond); + } + VECTOR_ENDIF + VECTOR_IF (iy >= -126, cond) + VECTOR_COND_MOVE (hy, 0x00800000 | (0x007fffff & hy), cond); + VECTOR_ELSE (cond) // subnormal y, shift y to normal + { + v64si n = -126 - iy; + VECTOR_COND_MOVE (hy, hy << n, cond); + } + VECTOR_ENDIF + +/* fix point fmod */ + v64si n = ix - iy; + v64si cond = n != 0; + + while (!ALL_ZEROES_P (cond)) + { + hz = hx - hy; + VECTOR_IF2 (hz < 0, cond2, cond) + VECTOR_COND_MOVE (hx, hx + hx, cond2); + VECTOR_ELSE2 (cond2, cond) + VECTOR_IF2 (hz == 0, cond3, cond2) // return sign(x)*0 + VECTOR_RETURN (zeroes, cond3); + VECTOR_ELSE2 (cond3, cond2) + VECTOR_COND_MOVE (hx, hz + hz, cond2); + VECTOR_ENDIF + VECTOR_ENDIF + + n += cond; // Active lanes should be -1 + cond &= (n != 0); + } + + hz = hx - hy; + VECTOR_COND_MOVE (hx, hz, hz >= 0); + + /* convert back to floating value and restore the sign */ + VECTOR_RETURN (zeroes, hx == 0); // return sign(x)*0 + + cond = hx < 0x00800000; + while (!ALL_ZEROES_P (cond)) // normalize x + { + VECTOR_COND_MOVE (hx, hx + hx, cond); + iy += cond; // Active lanes should be -1 + + cond &= (hx < 0x00800000); + } + VECTOR_IF (iy >= -126, cond) // normalize output + VECTOR_COND_MOVE (hx, (hx - 0x00800000) | ((iy + 127) << 23), cond); + SET_FLOAT_WORD (x, hx | sx, cond); + VECTOR_ELSE (cond) // subnormal output */ + n = -126 - iy; + hx >>= n; + SET_FLOAT_WORD (x, hx | sx, cond); + x *= VECTOR_INIT (1.0f); /* create necessary signal */ + VECTOR_ENDIF + + VECTOR_RETURN (x, NO_COND); /* exact output */ + + FUNCTION_RETURN; +} + +DEF_VARIANTS2 (fmodf, sf, sf) diff --git a/newlib/libm/machine/amdgcn/v64sf_gamma.c b/newlib/libm/machine/amdgcn/v64sf_gamma.c new file mode 100644 index 0000000000..99e69cbab8 --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64sf_gamma.c @@ -0,0 +1,38 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + * + */ + +/* Based on newlib/libm/math/wf_gamma.c in Newlib. */ + +#include "amdgcnmach.h" + +v64sf v64sf_lgammaf_aux (v64sf x, v64si __mask); + +DEF_VS_MATH_FUNC (v64sf, gammaf, v64sf x) +{ + return v64sf_lgammaf_aux(x, __mask); +} + +DEF_VARIANTS (gammaf, sf, sf) diff --git a/newlib/libm/machine/amdgcn/v64sf_hypot.c b/newlib/libm/machine/amdgcn/v64sf_hypot.c new file mode 100644 index 0000000000..4d4925a215 --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64sf_hypot.c @@ -0,0 +1,118 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* Based on newlib/libm/mathfp/ef_hypot.c in Newlib. */ + +#include "amdgcnmach.h" + +v64sf v64sf_sqrtf_aux (v64sf, v64si); + +DEF_VS_MATH_FUNC (v64sf, hypotf, v64sf x, v64sf y) +{ + FUNCTION_INIT (v64sf); + + v64sf a = x; + v64sf b = y; + + v64si ha; + GET_FLOAT_WORD (ha, x, NO_COND); + ha &= 0x7fffffffL; + v64si hb; + GET_FLOAT_WORD (hb, y, NO_COND); + hb &= 0x7fffffffL; + + VECTOR_IF (hb > ha, cond) + v64si j = ha; + VECTOR_COND_MOVE (ha, hb, cond); + VECTOR_COND_MOVE (hb, j, cond); + VECTOR_ENDIF + SET_FLOAT_WORD (a, ha, NO_COND); /* a <- |a| */ + SET_FLOAT_WORD (b, hb, NO_COND); /* b <- |b| */ + VECTOR_IF((ha - hb) > 0xf000000L, cond) // x/y > 2**30 */ + VECTOR_RETURN (a + b, cond); + VECTOR_ENDIF + + v64si k = VECTOR_INIT (0); + + VECTOR_IF (ha > 0x58800000L, cond) /* a>2**50 */ + VECTOR_IF2 (ha >= 0x7f800000L, cond2, cond) /* Inf or NaN */ + v64sf w = a + b; // for sNaN */ + VECTOR_COND_MOVE (w, a, cond2 & (ha == 0x7f800000)); + VECTOR_COND_MOVE (w, b, cond2 & (hb == 0x7f800000)); + VECTOR_RETURN (w, cond); + VECTOR_ENDIF + /* scale a and b by 2**-60 */ + VECTOR_COND_MOVE (ha, ha - 0x5d800000, cond); + VECTOR_COND_MOVE (hb, hb - 0x5d800000, cond); + VECTOR_COND_MOVE (k, k + 60, cond); + SET_FLOAT_WORD (a, ha, cond); + SET_FLOAT_WORD (b, hb, cond); + VECTOR_ENDIF + VECTOR_IF (hb < 0x26800000, cond) /* b < 2**-50 */ + VECTOR_IF2 (hb <= 0x007fffff, cond2, cond) /* subnormal b or 0 */ + VECTOR_RETURN (a, cond2 & (hb == 0)); + /* t1=2^126 */ + v64sf t1; + SET_FLOAT_WORD (t1, VECTOR_INIT (0x3f000000), cond2); + VECTOR_COND_MOVE (b, b * t1, cond2); + VECTOR_COND_MOVE (a, a * t1, cond2); + VECTOR_COND_MOVE (k, k - 126, cond2); + VECTOR_ELSE2 (cond2, cond) /* scale a and b by 2^60 */ + VECTOR_COND_MOVE (ha, ha + 0x5d800000, cond2); /* a *= 2^60 */ + VECTOR_COND_MOVE (hb, hb + 0x5d800000, cond2); /* b *= 2^60 */ + VECTOR_COND_MOVE (k, k - 60, cond2); + SET_FLOAT_WORD (a, ha, cond2); + SET_FLOAT_WORD (b, hb, cond2); + VECTOR_ENDIF + VECTOR_ENDIF + /* medium size a and b */ + v64sf w = a - b; + VECTOR_IF (w > b, cond) + v64sf t1; + SET_FLOAT_WORD (t1, ha & 0xfffff000, cond); + v64sf t2 = a - t1; + VECTOR_COND_MOVE (w, v64sf_sqrtf_aux (t1*t1 - (b*(-b) - t2 * (a + t1)), __mask), cond); + VECTOR_ELSE (cond) + VECTOR_COND_MOVE (a, a+a, cond); + v64sf y1; + SET_FLOAT_WORD (y1, hb & 0xfffff000, cond); + v64sf y2 = b - y1; + v64sf t1; + SET_FLOAT_WORD (t1, ha + 0x00800000, cond); + v64sf t2 = a - t1; + VECTOR_COND_MOVE (w, v64sf_sqrtf_aux (t1*y1 - (w*(-w) - (t1*y2 + t2*b)), __mask), cond); + VECTOR_ENDIF + VECTOR_IF (k != 0, cond) + v64sf t1; + SET_FLOAT_WORD (t1, 0x3f800000 + (k << 23), cond); + VECTOR_RETURN (t1 * w, cond); + VECTOR_ELSE (cond) + VECTOR_RETURN (w, cond); + VECTOR_ENDIF + + FUNCTION_RETURN; +} + +DEF_VARIANTS2 (hypotf, sf, sf) diff --git a/newlib/libm/machine/amdgcn/v64sf_ilogb.c b/newlib/libm/machine/amdgcn/v64sf_ilogb.c new file mode 100644 index 0000000000..2f2a7cac70 --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64sf_ilogb.c @@ -0,0 +1,56 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* Based on newlib/libm/common/sf_ilogb.c in Newlib. */ + +#include "amdgcnmach.h" + +DEF_VS_MATH_FUNC (v64si, ilogbf, v64sf x) +{ + FUNCTION_INIT(v64si); + + v64si hx, ix; + GET_FLOAT_WORD (hx, x, NO_COND); + hx &= 0x7fffffff; + VECTOR_IF (FLT_UWORD_IS_ZERO (hx), cond) + VECTOR_RETURN (VECTOR_INIT (-__INT_MAX__), cond); // FP_ILOGB0 + VECTOR_ENDIF + VECTOR_IF (FLT_UWORD_IS_SUBNORMAL (hx), cond) + ix = VECTOR_INIT (-126); + for (v64si i = (hx << 8); + !ALL_ZEROES_P (cond & (i > 0)); + i <<= 1) + VECTOR_COND_MOVE (ix, ix - 1, cond & (i > 0)); + VECTOR_RETURN (ix, cond); + VECTOR_ELSEIF (~FLT_UWORD_IS_FINITE (hx), cond) + VECTOR_RETURN (VECTOR_INIT (__INT_MAX__), cond); + VECTOR_ENDIF + + VECTOR_RETURN ((hx >> 23) - 127, NO_COND); + + FUNCTION_RETURN; +} + +DEF_VARIANTS (ilogbf, si, sf) diff --git a/newlib/libm/machine/amdgcn/v64sf_isnan.c b/newlib/libm/machine/amdgcn/v64sf_isnan.c new file mode 100644 index 0000000000..a84f064bc3 --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64sf_isnan.c @@ -0,0 +1,37 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* Based on newlib/libm/common/sf_isnan.c in Newlib. */ + +#include "amdgcnmach.h" + +DEF_VS_MATH_FUNC (v64si, isnanf, v64sf x) +{ + v64si ix = CAST_VECTOR (v64si, x); + ix &= 0x7fffffff; + return FLT_UWORD_IS_NAN (ix); +} + +DEF_VARIANTS (isnanf, si, sf) diff --git a/newlib/libm/machine/amdgcn/v64sf_ispos.c b/newlib/libm/machine/amdgcn/v64sf_ispos.c new file mode 100644 index 0000000000..5ba15d6fa9 --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64sf_ispos.c @@ -0,0 +1,40 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * Copyright (c) 1994-2009 Red Hat, Inc. All rights reserved. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the BSD License. This program is distributed in the hope that + * it will be useful, but WITHOUT ANY WARRANTY expressed or implied, + * including the implied warranties of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. A copy of this license is available at + * http://www.opensource.org/licenses. Any Red Hat trademarks that are + * incorporated in the source code or documentation are not subject to + * the BSD License and may only be used or replicated with the express + * permission of Red Hat, Inc. + */ + +/* Based on newlib/libm/mathfp/sf_ispos.c in Newlib. */ + +#include "amdgcnmach.h" + +v64si +v64sf_isposf (v64sf x) +{ + v64si wx = CAST_VECTOR (v64si, x); + + return (wx & 0x80000000) == 0; +} diff --git a/newlib/libm/machine/amdgcn/v64sf_lgamma.c b/newlib/libm/machine/amdgcn/v64sf_lgamma.c new file mode 100644 index 0000000000..79a2d6da50 --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64sf_lgamma.c @@ -0,0 +1,44 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + * + */ + +/* Based on newlib/libm/math/wf_lgamma.c in Newlib. */ + +#include "amdgcnmach.h" + +v64si v64sf_finitef_aux (v64sf x, v64si __mask); +v64sf v64sf_lgammaf_r_aux (v64sf x, v64si *signgamp, v64si __mask); + +DEF_VS_MATH_FUNC (v64sf, lgammaf, v64sf x) +{ + v64sf y = v64sf_lgammaf_r_aux(x, &(_REENT_V64SI_SIGNGAM(_V64_REENT)), __mask); + if (ALL_ZEROES_P(v64sf_finitef_aux(y, __mask)) & !ALL_ZEROES_P(v64sf_finitef_aux(x, __mask))) { + /* lgamma(finite) overflow */ + errno = ERANGE; + } + return y; +} + +DEF_VARIANTS (lgammaf, sf, sf) diff --git a/newlib/libm/machine/amdgcn/v64sf_lgamma_r.c b/newlib/libm/machine/amdgcn/v64sf_lgamma_r.c new file mode 100644 index 0000000000..0a18f87c30 --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64sf_lgamma_r.c @@ -0,0 +1,300 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + * + */ + +/* Based on newlib/libm/math/erf_lgamma.c in Newlib. */ + +#include "amdgcnmach.h" + +static const float two23= 8.3886080000e+06, /* 0x4b000000 */ +half= 5.0000000000e-01, /* 0x3f000000 */ +one = 1.0000000000e+00, /* 0x3f800000 */ +pi = 3.1415927410e+00, /* 0x40490fdb */ +a0 = 7.7215664089e-02, /* 0x3d9e233f */ +a1 = 3.2246702909e-01, /* 0x3ea51a66 */ +a2 = 6.7352302372e-02, /* 0x3d89f001 */ +a3 = 2.0580807701e-02, /* 0x3ca89915 */ +a4 = 7.3855509982e-03, /* 0x3bf2027e */ +a5 = 2.8905137442e-03, /* 0x3b3d6ec6 */ +a6 = 1.1927076848e-03, /* 0x3a9c54a1 */ +a7 = 5.1006977446e-04, /* 0x3a05b634 */ +a8 = 2.2086278477e-04, /* 0x39679767 */ +a9 = 1.0801156895e-04, /* 0x38e28445 */ +a10 = 2.5214456400e-05, /* 0x37d383a2 */ +a11 = 4.4864096708e-05, /* 0x383c2c75 */ +tc = 1.4616321325e+00, /* 0x3fbb16c3 */ +tf = -1.2148628384e-01, /* 0xbdf8cdcd */ +/* tt = -(tail of tf) */ +tt = 6.6971006518e-09, /* 0x31e61c52 */ +t0 = 4.8383611441e-01, /* 0x3ef7b95e */ +t1 = -1.4758771658e-01, /* 0xbe17213c */ +t2 = 6.4624942839e-02, /* 0x3d845a15 */ +t3 = -3.2788541168e-02, /* 0xbd064d47 */ +t4 = 1.7970675603e-02, /* 0x3c93373d */ +t5 = -1.0314224288e-02, /* 0xbc28fcfe */ +t6 = 6.1005386524e-03, /* 0x3bc7e707 */ +t7 = -3.6845202558e-03, /* 0xbb7177fe */ +t8 = 2.2596477065e-03, /* 0x3b141699 */ +t9 = -1.4034647029e-03, /* 0xbab7f476 */ +t10 = 8.8108185446e-04, /* 0x3a66f867 */ +t11 = -5.3859531181e-04, /* 0xba0d3085 */ +t12 = 3.1563205994e-04, /* 0x39a57b6b */ +t13 = -3.1275415677e-04, /* 0xb9a3f927 */ +t14 = 3.3552918467e-04, /* 0x39afe9f7 */ +u0 = -7.7215664089e-02, /* 0xbd9e233f */ +u1 = 6.3282704353e-01, /* 0x3f2200f4 */ +u2 = 1.4549225569e+00, /* 0x3fba3ae7 */ +u3 = 9.7771751881e-01, /* 0x3f7a4bb2 */ +u4 = 2.2896373272e-01, /* 0x3e6a7578 */ +u5 = 1.3381091878e-02, /* 0x3c5b3c5e */ +v1 = 2.4559779167e+00, /* 0x401d2ebe */ +v2 = 2.1284897327e+00, /* 0x4008392d */ +v3 = 7.6928514242e-01, /* 0x3f44efdf */ +v4 = 1.0422264785e-01, /* 0x3dd572af */ +v5 = 3.2170924824e-03, /* 0x3b52d5db */ +s0 = -7.7215664089e-02, /* 0xbd9e233f */ +s1 = 2.1498242021e-01, /* 0x3e5c245a */ +s2 = 3.2577878237e-01, /* 0x3ea6cc7a */ +s3 = 1.4635047317e-01, /* 0x3e15dce6 */ +s4 = 2.6642270386e-02, /* 0x3cda40e4 */ +s5 = 1.8402845599e-03, /* 0x3af135b4 */ +s6 = 3.1947532989e-05, /* 0x3805ff67 */ +r1 = 1.3920053244e+00, /* 0x3fb22d3b */ +r2 = 7.2193557024e-01, /* 0x3f38d0c5 */ +r3 = 1.7193385959e-01, /* 0x3e300f6e */ +r4 = 1.8645919859e-02, /* 0x3c98bf54 */ +r5 = 7.7794247773e-04, /* 0x3a4beed6 */ +r6 = 7.3266842264e-06, /* 0x36f5d7bd */ +w0 = 4.1893854737e-01, /* 0x3ed67f1d */ +w1 = 8.3333335817e-02, /* 0x3daaaaab */ +w2 = -2.7777778450e-03, /* 0xbb360b61 */ +w3 = 7.9365057172e-04, /* 0x3a500cfd */ +w4 = -5.9518753551e-04, /* 0xba1c065c */ +w5 = 8.3633989561e-04, /* 0x3a5b3dd2 */ +w6 = -1.6309292987e-03; /* 0xbad5c4e8 */ +static const float zero= 0.0000000000e+00; + +v64sf v64sf_cosf_aux (v64sf x, v64si __mask); +v64sf v64sf_logf_aux (v64sf x, v64si __mask); +v64sf v64sf_sinf_aux (v64sf x, v64si __mask); + +#if defined (__has_builtin) \ + && __has_builtin (__builtin_gcn_floorvf) \ + && __has_builtin (__builtin_gcn_fabsvf) + +static v64sf +v64sf_sin_pif (v64sf x) +{ + // Explicitly create mask for internal function. + v64si __mask = VECTOR_INIT (-1); + FUNCTION_INIT (v64sf); + + v64sf y, z; + v64si n, ix; + + GET_FLOAT_WORD (ix, x, NO_COND); + ix &= 0x7fffffff; + + VECTOR_IF (ix < 0x3e800000, cond) + VECTOR_RETURN (v64sf_sinf_aux (pi * x, __mask), cond); + VECTOR_ENDIF + y = -x; /* x is assume negative */ + + /* + * argument reduction, make sure inexact flag not raised if input + * is an integer + */ + z = __builtin_gcn_floorvf (y); + VECTOR_IF (z != y, cond) + /* inexact anyway */ + VECTOR_COND_MOVE(y, y * 0.5F, cond); + VECTOR_COND_MOVE(y, 2.0F * (y - __builtin_gcn_floorvf (y)), cond); /* y = |x| mod 2.0 */ + VECTOR_COND_MOVE(n, __builtin_convertvector(y * 4.0F, v64si), cond); + VECTOR_ELSE (cond) + VECTOR_IF2 (ix >= 0x4b800000, cond2, cond) + VECTOR_COND_MOVE(y, VECTOR_INIT(zero), cond2); + VECTOR_COND_MOVE(n, VECTOR_INIT(0), cond2); /* y must be even */ + VECTOR_ELSE2 (cond2, cond) + VECTOR_COND_MOVE(z, y + two23 /* exact */, cond2 & (ix < 0x4b000000)); + GET_FLOAT_WORD (n, z, cond2); + VECTOR_COND_MOVE(n, n & 1, cond2); + VECTOR_COND_MOVE(y, __builtin_convertvector(n, v64sf), cond2); + VECTOR_COND_MOVE(n, n << 2, cond2); + VECTOR_ENDIF + VECTOR_ENDIF + + VECTOR_IF (n == 0, cond) + VECTOR_COND_MOVE(y, v64sf_sinf_aux (pi * y, __mask), cond); + VECTOR_ELSEIF (n == 1 | n == 2, cond) + VECTOR_COND_MOVE(y, v64sf_cosf_aux (pi * (0.5F - y), __mask), cond); + VECTOR_ELSEIF (n == 3 | n == 4, cond) + VECTOR_COND_MOVE(y, v64sf_sinf_aux (pi * (VECTOR_INIT(one) - y), __mask), cond); + VECTOR_ELSEIF (n == 5 | n == 6, cond) + VECTOR_COND_MOVE(y, -v64sf_cosf_aux (pi * (y - 1.5F), __mask), cond); + VECTOR_ELSE (cond) + VECTOR_COND_MOVE(y, v64sf_sinf_aux (pi * (y - 2.0F), __mask), cond); + VECTOR_ENDIF + + VECTOR_RETURN(-y, NO_COND); + FUNCTION_RETURN; +} + +DEF_VS_MATH_FUNC (v64sf, lgammaf_r, v64sf x, v64si *signgamp) +{ + FUNCTION_INIT (v64sf); + + v64sf t,y,z,nadj = VECTOR_INIT(0.0F),p,p1,p2,p3,q,r,w; + v64si i,hx,ix; + + GET_FLOAT_WORD(hx,x,NO_COND); + + /* purge off +-inf, NaN, +-0, and negative arguments */ + *signgamp = VECTOR_INIT(1); + ix = hx&0x7fffffff; + VECTOR_IF(ix>=0x7f800000, cond) + VECTOR_RETURN (x*x, cond); + VECTOR_ENDIF + VECTOR_IF(ix==0, cond) + VECTOR_COND_MOVE(*signgamp, VECTOR_INIT(-1), cond & (hx<0)); + VECTOR_RETURN(one/(x-x), cond); + VECTOR_ENDIF + VECTOR_IF (ix < 0x30800000, cond) /* |x|<2**-30, return -log(|x|) */ + VECTOR_IF2(hx<0, cond2, cond) + VECTOR_COND_MOVE(*signgamp, VECTOR_INIT(-1), cond); + VECTOR_RETURN (-v64sf_logf_aux(-x, __mask), cond2); + VECTOR_ELSE2(cond2, cond) + VECTOR_RETURN (-v64sf_logf_aux(x, __mask), cond2); + VECTOR_ENDIF + VECTOR_ENDIF + VECTOR_IF (hx < 0, cond) + VECTOR_IF2(ix>=0x4b000000, cond2, cond) /* |x|>=2**23, must be -integer */ + VECTOR_RETURN(one/(x-x), cond2); + VECTOR_ENDIF + VECTOR_COND_MOVE (t, v64sf_sin_pif (x), cond); + VECTOR_IF2(t==zero, cond2, cond) + /* tgamma wants NaN instead of INFINITY */ + VECTOR_RETURN(one/(x-x), cond2); /* -integer */ + VECTOR_ENDIF + VECTOR_COND_MOVE(nadj, v64sf_logf_aux(VECTOR_INIT(pi)/__builtin_gcn_fabsvf(t*x), __mask), cond); + VECTOR_COND_MOVE(*signgamp, VECTOR_INIT(-1), cond & (t < zero)); + VECTOR_COND_MOVE(x, -x, cond); + VECTOR_ENDIF + + /* purge off 1 and 2 */ + VECTOR_IF(ix==0x3f800000|ix==0x40000000, cond) + VECTOR_COND_MOVE(r, VECTOR_INIT(0.0F), cond); + /* for x < 2.0 */ + VECTOR_ELSEIF(ix<0x40000000, cond) + VECTOR_IF2(ix<=0x3f666666, cond2, cond) + /* lgamma(x) = lgamma(x+1)-log(x) */ + r = -v64sf_logf_aux(x, __mask); + VECTOR_IF2(ix>=0x3f3b4a20, cond3, cond2) + VECTOR_COND_MOVE(y, one-x, cond3); + VECTOR_COND_MOVE(i, VECTOR_INIT(0), cond3); + VECTOR_ELSEIF2(ix>=0x3e6d3308, cond3, cond2) + VECTOR_COND_MOVE(y, x-(tc-one), cond3); + VECTOR_COND_MOVE(i, VECTOR_INIT(1), cond3); + VECTOR_ELSE2(cond3, cond2) + VECTOR_COND_MOVE(y, x, cond3); + VECTOR_COND_MOVE(i, VECTOR_INIT(2), cond3); + VECTOR_ENDIF + VECTOR_ELSE2(cond2, cond) + VECTOR_COND_MOVE(r, VECTOR_INIT(zero), cond2); + VECTOR_IF2(ix>=0x3fdda618, cond3, cond2) /* [1.7316,2] */ + VECTOR_COND_MOVE(y, VECTOR_INIT(2.0F)-x, cond3); + VECTOR_COND_MOVE(i, VECTOR_INIT(0), cond3); + VECTOR_ELSEIF2(ix>=0x3F9da620, cond3, cond2) /* [1.23,1.73] */ + VECTOR_COND_MOVE(y, x-tc, cond3); + VECTOR_COND_MOVE(i, VECTOR_INIT(1), cond3); + VECTOR_ELSE2(cond3, cond2) + VECTOR_COND_MOVE(y, x-one, cond3); + VECTOR_COND_MOVE(i, VECTOR_INIT(2), cond3); + VECTOR_ENDIF + VECTOR_ENDIF + + VECTOR_IF2(i==0, cond2, cond) + VECTOR_COND_MOVE(z, y*y, cond2); + VECTOR_COND_MOVE(p1, a0+z*(a2+z*(a4+z*(a6+z*(a8+z*a10)))), cond2); + VECTOR_COND_MOVE(p2, z*(a1+z*(a3+z*(a5+z*(a7+z*(a9+z*a11))))), cond2); + VECTOR_COND_MOVE(p, y*p1+p2, cond2); + VECTOR_COND_MOVE(r, r + (p-(float)0.5*y), cond2); + VECTOR_ELSEIF2(i==1, cond2, cond) + VECTOR_COND_MOVE(z, y*y, cond2); + VECTOR_COND_MOVE(w, z*y, cond2); + VECTOR_COND_MOVE(p1, t0+w*(t3+w*(t6+w*(t9 +w*t12))), cond2); /* parallel comp */ + VECTOR_COND_MOVE(p2, t1+w*(t4+w*(t7+w*(t10+w*t13))), cond2); + VECTOR_COND_MOVE(p3, t2+w*(t5+w*(t8+w*(t11+w*t14))), cond2); + VECTOR_COND_MOVE(p, z*p1-(tt-w*(p2+y*p3)), cond2); + VECTOR_COND_MOVE(r, r + (tf + p), cond2); + VECTOR_ELSEIF2(i==2, cond2, cond) + VECTOR_COND_MOVE(p1, y*(u0+y*(u1+y*(u2+y*(u3+y*(u4+y*u5))))), cond2); + VECTOR_COND_MOVE(p2, one+y*(v1+y*(v2+y*(v3+y*(v4+y*v5)))), cond2); + VECTOR_COND_MOVE(r, r + (-(float)0.5*y + p1/p2), cond2); + VECTOR_ENDIF + VECTOR_ELSEIF(ix<0x41000000, cond) + /* x < 8.0 */ + VECTOR_COND_MOVE(i, __builtin_convertvector(x, v64si), cond); + VECTOR_COND_MOVE(t, VECTOR_INIT(zero), cond); + VECTOR_COND_MOVE(y, x-__builtin_convertvector(i, v64sf), cond); + VECTOR_COND_MOVE(p, y*(s0+y*(s1+y*(s2+y*(s3+y*(s4+y*(s5+y*s6)))))), cond); + VECTOR_COND_MOVE(q, one+y*(r1+y*(r2+y*(r3+y*(r4+y*(r5+y*r6))))), cond); + VECTOR_COND_MOVE(r, half*y+p/q, cond); + VECTOR_COND_MOVE(z, VECTOR_INIT(one), cond); /* lgamma(1+s) = log(s) + lgamma(s) */ + VECTOR_IF2(i==7, cond2, cond) + VECTOR_COND_MOVE(z, z * (y+(float)6.0), cond2); + VECTOR_ENDIF + VECTOR_IF2(i==7 | i==6, cond2, cond) + VECTOR_COND_MOVE(z, z * (y+(float)5.0), cond2); + VECTOR_ENDIF + VECTOR_IF2(i<=7 & i>=5, cond2, cond) + VECTOR_COND_MOVE(z, z * (y+(float)4.0), cond2); + VECTOR_ENDIF + VECTOR_IF2(i<=7 & i>=4, cond2, cond) + VECTOR_COND_MOVE(z, z * (y+(float)3.0), cond2); + VECTOR_ENDIF + VECTOR_IF2(i<=7 & i>=3, cond2, cond) + VECTOR_COND_MOVE(z, z * (y+(float)2.0), cond2); + VECTOR_COND_MOVE(r, r + v64sf_logf_aux(z, __mask), cond2); + VECTOR_ENDIF + /* 8.0 <= x < 2**58 */ + VECTOR_ELSEIF(ix < 0x5c800000, cond) + VECTOR_COND_MOVE(t, v64sf_logf_aux(x, __mask), cond); + VECTOR_COND_MOVE(z, one/x, cond); + VECTOR_COND_MOVE(y, z*z, cond); + VECTOR_COND_MOVE(w, w0+z*(w1+y*(w2+y*(w3+y*(w4+y*(w5+y*w6))))), cond); + VECTOR_COND_MOVE(r, (x-half)*(t-one)+w, cond); + VECTOR_ELSE(cond) + /* 2**58 <= x <= inf */ + VECTOR_COND_MOVE(r, x*(v64sf_logf_aux(x, __mask)-one), cond); + VECTOR_ENDIF + VECTOR_IF(hx<0, cond) + VECTOR_COND_MOVE(r, nadj - r, cond); + VECTOR_ENDIF + + VECTOR_RETURN(r, NO_COND); + FUNCTION_RETURN; +} + +#endif diff --git a/newlib/libm/machine/amdgcn/v64sf_log.c b/newlib/libm/machine/amdgcn/v64sf_log.c new file mode 100644 index 0000000000..630ce2a733 --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64sf_log.c @@ -0,0 +1,111 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * Copyright (c) 1994-2009 Red Hat, Inc. All rights reserved. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the BSD License. This program is distributed in the hope that + * it will be useful, but WITHOUT ANY WARRANTY expressed or implied, + * including the implied warranties of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. A copy of this license is available at + * http://www.opensource.org/licenses. Any Red Hat trademarks that are + * incorporated in the source code or documentation are not subject to + * the BSD License and may only be used or replicated with the express + * permission of Red Hat, Inc. + */ + +/****************************************************************** + * The following routines are coded directly from the algorithms + * and coefficients given in "Software Manual for the Elementary + * Functions" by William J. Cody, Jr. and William Waite, Prentice + * Hall, 1980. + ******************************************************************/ + +/* Based on newlib/libm/mathfp/sf_logarithm.c in Newlib. */ + +#include "amdgcnmach.h" + +v64si v64sf_finitef_aux (v64sf, v64si); +v64si v64sf_isnanf_aux (v64sf, v64si); + +static const float a[] = { -0.64124943423745581147e+02, + 0.16383943563021534222e+02, + -0.78956112887481257267 }; +static const float b[] = { -0.76949932108494879777e+03, + 0.31203222091924532844e+03, + -0.35667977739034646171e+02 }; +static const float C1 = 0.693145752; +static const float C2 = 1.428606820e-06; + +#if defined (__has_builtin) \ + && __has_builtin (__builtin_gcn_frexpvf_mant) \ + && __has_builtin (__builtin_gcn_frexpvf_exp) + +DEF_VS_MATH_FUNC (v64sf, logf, v64sf x) +{ + FUNCTION_INIT (v64sf); + + /* Check for domain/range errors here. */ + VECTOR_IF (x == 0.0f, cond) + errno = ERANGE; + VECTOR_RETURN (VECTOR_INIT (-z_infinity_f.f), cond); + VECTOR_ELSEIF (x < 0.0f, cond) + errno = EDOM; + VECTOR_RETURN (VECTOR_INIT (z_notanum_f.f), cond); + VECTOR_ELSEIF (~v64sf_finitef_aux (x, __mask), cond) + VECTOR_RETURN (VECTOR_MERGE (VECTOR_INIT (z_notanum_f.f), + VECTOR_INIT (z_infinity_f.f), + v64sf_isnanf_aux (x, __mask)), + cond); + VECTOR_ENDIF + + /* Get the exponent and mantissa where x = f * 2^N. */ + v64sf f = __builtin_gcn_frexpvf_mant (x); + v64si N = __builtin_gcn_frexpvf_exp (x); + + v64sf z = f - 0.5f; + + VECTOR_IF (f > (float) __SQRT_HALF, cond) + VECTOR_COND_MOVE (z, (z - 0.5f) / (f * 0.5f + 0.5f), cond); + VECTOR_ELSE (cond) + VECTOR_COND_MOVE (N, N - 1, cond); + VECTOR_COND_MOVE (z, z / (z * 0.5f + 0.5f), cond); + VECTOR_ENDIF + + v64sf w = z * z; + + /* Use Newton's method with 4 terms. */ + z += z * w * ((a[2] * w + a[1]) * w + a[0]) / (((w + b[2]) * w + b[1]) * w + b[0]); + + v64sf Nf = __builtin_convertvector(N, v64sf); + VECTOR_COND_MOVE (z, (Nf * C2 + z) + Nf * C1, N != 0); + + VECTOR_RETURN (z, NO_COND); + + FUNCTION_RETURN; +} + +DEF_VARIANTS (logf, sf, sf) + +DEF_VS_MATH_FUNC (v64sf, log1pf, v64sf x) +{ + /* TODO: Implement algorithm with better precision. */ + return v64sf_logf_aux (1 + x, __mask); +} + +DEF_VARIANTS (log1pf, sf, sf) + +#endif diff --git a/newlib/libm/machine/amdgcn/v64sf_log10.c b/newlib/libm/machine/amdgcn/v64sf_log10.c new file mode 100644 index 0000000000..863836c08b --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64sf_log10.c @@ -0,0 +1,50 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * Copyright (c) 1994-2009 Red Hat, Inc. All rights reserved. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the BSD License. This program is distributed in the hope that + * it will be useful, but WITHOUT ANY WARRANTY expressed or implied, + * including the implied warranties of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. A copy of this license is available at + * http://www.opensource.org/licenses. Any Red Hat trademarks that are + * incorporated in the source code or documentation are not subject to + * the BSD License and may only be used or replicated with the express + * permission of Red Hat, Inc. + */ + +/****************************************************************** + * The following routines are coded directly from the algorithms + * and coefficients given in "Software Manual for the Elementary + * Functions" by William J. Cody, Jr. and William Waite, Prentice + * Hall, 1980. + ******************************************************************/ + +/* Based on newlib/libm/mathfp/sf_logarithm.c in Newlib. */ + +#include "amdgcnmach.h" + +v64sf v64sf_logf_aux (v64sf, v64si); + +static const float C3 = 0.4342944819; + +DEF_VS_MATH_FUNC (v64sf, log10f, v64sf x) +{ + return v64sf_logf_aux (x, __mask) * C3; +} + +DEF_VARIANTS (log10f, sf, sf) diff --git a/newlib/libm/machine/amdgcn/v64sf_log2.c b/newlib/libm/machine/amdgcn/v64sf_log2.c new file mode 100644 index 0000000000..290b8a34fd --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64sf_log2.c @@ -0,0 +1,26 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +#include "amdgcnmach.h" + +v64sf v64sf_logf_aux (v64sf, v64si); + +static const float C3 = 1.4426950408889634073599246810019; + +DEF_VS_MATH_FUNC (v64sf, log2f, v64sf x) +{ + return v64sf_logf_aux (x, __mask) * C3; +} + +DEF_VARIANTS (log2f, sf, sf) diff --git a/newlib/libm/machine/amdgcn/v64sf_modf.c b/newlib/libm/machine/amdgcn/v64sf_modf.c new file mode 100644 index 0000000000..d0d1dfe176 --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64sf_modf.c @@ -0,0 +1,69 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* Based on newlib/libm/common/sf_modf.c in Newlib. */ + +#include "amdgcnmach.h" + +v64si v64sf_numtestf (v64sf); + +DEF_VS_MATH_FUNC (v64sf, modff, v64sf x, v64sf *iptr) +{ + FUNCTION_INIT (v64sf); + v64sf ret_i; + + v64si i0; + GET_FLOAT_WORD (i0, x, NO_COND); + v64si j0 = ((i0 >> 23) & 0xff) - 0x7f; /* exponent of x */ + v64sf zero; + SET_FLOAT_WORD (zero, i0 & 0x80000000,NO_COND); + + VECTOR_IF (j0 < 23, cond) /* integer part in x*/ + VECTOR_IF2 (j0 < 0, cond2, cond) /* |x|<1 */ + VECTOR_COND_MOVE (ret_i, zero, cond2); + VECTOR_RETURN (x, cond2); + VECTOR_ELSE2 (cond2, cond) + v64si i = (0x007fffff) >> j0; + + VECTOR_IF2 ((i0 & i) == 0, cond3, cond2) /* x is integral */ + VECTOR_COND_MOVE (ret_i, x, cond3); + VECTOR_RETURN (zero, cond3); + VECTOR_ELSE2 (cond3, cond2) + SET_FLOAT_WORD (ret_i, i0 & ~i, cond3); + VECTOR_RETURN (x - ret_i, cond3); + VECTOR_ENDIF + VECTOR_ENDIF + VECTOR_ELSE (cond) /* no fraction part */ + VECTOR_COND_MOVE (ret_i, x, cond); + VECTOR_IF2 (v64sf_numtestf (x) == NAN, cond2, cond) + VECTOR_COND_MOVE (ret_i, x + x, cond2); + VECTOR_RETURN (ret_i, cond2); /* x is NaN, return NaN */ + VECTOR_ENDIF + VECTOR_RETURN (zero, cond); /* return +- 0 */ + VECTOR_ENDIF + + *iptr = ret_i; + FUNCTION_RETURN; +} diff --git a/newlib/libm/machine/amdgcn/v64sf_numtest.c b/newlib/libm/machine/amdgcn/v64sf_numtest.c new file mode 100644 index 0000000000..1f3fbe936b --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64sf_numtest.c @@ -0,0 +1,59 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * Copyright (c) 1994-2009 Red Hat, Inc. All rights reserved. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the BSD License. This program is distributed in the hope that + * it will be useful, but WITHOUT ANY WARRANTY expressed or implied, + * including the implied warranties of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. A copy of this license is available at + * http://www.opensource.org/licenses. Any Red Hat trademarks that are + * incorporated in the source code or documentation are not subject to + * the BSD License and may only be used or replicated with the express + * permission of Red Hat, Inc. + */ + +/* Based on newlib/libm/mathfp/sf_numtest.c in Newlib. */ + +#include "amdgcnmach.h" + +v64si +v64sf_numtestf (v64sf x) +{ + // Explicitly create mask for internal function. + v64si __mask = VECTOR_INIT (-1); + FUNCTION_INIT (v64si); + + v64si wx; + GET_FLOAT_WORD (wx, x, NO_COND); + v64si exp = (wx & 0x7f800000) >> 23; + + /* Check for a zero input. */ + VECTOR_RETURN (VECTOR_INIT (0), x == 0.0); + + /* Check for not a number or infinity. */ + VECTOR_IF (exp == 0xff, cond) + VECTOR_RETURN (VECTOR_MERGE (VECTOR_INIT (NAN), VECTOR_INIT (INF), + wx & 0x7fffff), + cond); + /* Otherwise it's a finite value. */ + VECTOR_ELSE (cond) + VECTOR_RETURN (VECTOR_INIT (NUM), cond); + VECTOR_ENDIF + + FUNCTION_RETURN; +} diff --git a/newlib/libm/machine/amdgcn/v64sf_pow.c b/newlib/libm/machine/amdgcn/v64sf_pow.c new file mode 100644 index 0000000000..9cb1cc231d --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64sf_pow.c @@ -0,0 +1,306 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* Based on newlib/libm/math/ef_pow.c in Newlib. */ + +#include "amdgcnmach.h" + +static const float +bp[] = {1.0, 1.5,}, +dp_h[] = { 0.0, 5.84960938e-01,}, /* 0x3f15c000 */ +dp_l[] = { 0.0, 1.56322085e-06,}, /* 0x35d1cfdc */ +zero = 0.0, +one = 1.0, +two = 2.0, +two24 = 16777216.0, /* 0x4b800000 */ + /* poly coefs for (3/2)*(log(x)-2s-2/3*s**3 */ +L1 = 6.0000002384e-01, /* 0x3f19999a */ +L2 = 4.2857143283e-01, /* 0x3edb6db7 */ +L3 = 3.3333334327e-01, /* 0x3eaaaaab */ +L4 = 2.7272811532e-01, /* 0x3e8ba305 */ +L5 = 2.3066075146e-01, /* 0x3e6c3255 */ +L6 = 2.0697501302e-01, /* 0x3e53f142 */ +P1 = 1.6666667163e-01, /* 0x3e2aaaab */ +P2 = -2.7777778450e-03, /* 0xbb360b61 */ +P3 = 6.6137559770e-05, /* 0x388ab355 */ +P4 = -1.6533901999e-06, /* 0xb5ddea0e */ +P5 = 4.1381369442e-08, /* 0x3331bb4c */ +lg2 = 6.9314718246e-01, /* 0x3f317218 */ +lg2_h = 6.93145752e-01, /* 0x3f317200 */ +lg2_l = 1.42860654e-06, /* 0x35bfbe8c */ +ovt = 4.2995665694e-08, /* -(128-log2(ovfl+.5ulp)) */ +cp = 9.6179670095e-01, /* 0x3f76384f =2/(3ln2) */ +cp_h = 9.6179199219e-01, /* 0x3f763800 =head of cp */ +cp_l = 4.7017383622e-06, /* 0x369dc3a0 =tail of cp_h */ +ivln2 = 1.4426950216e+00, /* 0x3fb8aa3b =1/ln2 */ +ivln2_h = 1.4426879883e+00, /* 0x3fb8aa00 =16b 1/ln2*/ +ivln2_l = 7.0526075433e-06; /* 0x36eca570 =1/ln2 tail*/ + +v64sf v64sf_sqrtf_aux (v64sf, v64si); +v64sf v64sf_scalbnf_aux (v64sf, v64si, v64si); + +#if defined (__has_builtin) && __has_builtin (__builtin_gcn_fabsvf) + +DEF_VS_MATH_FUNC (v64sf, powf, v64sf x, v64sf y) +{ + FUNCTION_INIT (v64sf); + + v64si hx, hy; + GET_FLOAT_WORD (hx,x, NO_COND); + GET_FLOAT_WORD (hy,y, NO_COND); + v64si ix = hx&0x7fffffff; + v64si iy = hy&0x7fffffff; + + /* y==zero: x**0 = 1 */ + VECTOR_IF (FLT_UWORD_IS_ZERO(iy), cond) + VECTOR_RETURN (x + y, cond & v64sf_issignalingf_inline(x)); + VECTOR_RETURN (VECTOR_INIT (1.0f), cond); + VECTOR_ENDIF + + /* x|y==NaN return NaN unless x==1 then return 1 */ + VECTOR_IF (FLT_UWORD_IS_NAN(ix) | FLT_UWORD_IS_NAN(iy), cond) + VECTOR_IF2 (hx==0x3f800000 & ~v64sf_issignalingf_inline(y), cond2, cond) + VECTOR_RETURN (VECTOR_INIT (1.0f), cond2); + VECTOR_ELSE2 (cond2, cond) + VECTOR_RETURN (x + y, cond2); + VECTOR_ENDIF + VECTOR_ENDIF + + /* determine if y is an odd int when x < 0 + * yisint = 0 ... y is not an integer + * yisint = 1 ... y is an odd int + * yisint = 2 ... y is an even int + */ + v64si yisint = VECTOR_INIT (0); + + VECTOR_IF (hx < 0, cond) + VECTOR_IF2 (iy >= 0x4b800000, cond2, cond) + VECTOR_COND_MOVE (yisint, VECTOR_INIT (2), cond2); /* even integer y */ + VECTOR_ELSEIF2 (iy >= 0x3f800000, cond2, cond) + v64si k = (iy>>23)-0x7f; /* exponent */ + v64si j = iy>>(23-k); + VECTOR_COND_MOVE (yisint, 2-(j&1), cond2 & (j<<(23-k))==iy); + VECTOR_ENDIF + VECTOR_ENDIF + + /* special value of y */ + VECTOR_IF (FLT_UWORD_IS_INFINITE(iy), cond) /* y is +-inf */ + VECTOR_IF2 (ix==0x3f800000, cond2, cond) + VECTOR_RETURN (VECTOR_INIT (1.0f), cond2); /* +-1**+-inf = 1 */ + VECTOR_ELSEIF2 (ix > 0x3f800000, cond2, cond) /* (|x|>1)**+-inf = inf,0 */ + VECTOR_RETURN (y, cond2 & (hy >= 0)); + VECTOR_RETURN (VECTOR_INIT (0.0f), cond2); + VECTOR_ELSE2 (cond2, cond) /* (|x|<1)**-,+inf = inf,0 */ + VECTOR_RETURN (-y, cond2 & (hy<0)); + VECTOR_RETURN (VECTOR_INIT (0.0f), cond2); + VECTOR_ENDIF + VECTOR_ENDIF + VECTOR_IF (iy==0x3f800000, cond) /* y is +-1 */ + VECTOR_RETURN (VECTOR_INIT (1.0f) / x, cond & (hy<0)); + VECTOR_RETURN (x, cond); + VECTOR_ENDIF + + VECTOR_RETURN (x*x, hy==0x40000000); /* y is 2 */ + /* y is 0.5 */ + /* x >= +0 */ + VECTOR_RETURN (v64sf_sqrtf_aux (x, __mask), (hy==0x3f000000) & (hx >= 0)); + + v64sf ax = __builtin_gcn_fabsvf(x); + /* special value of x */ + VECTOR_IF (FLT_UWORD_IS_INFINITE(ix)|FLT_UWORD_IS_ZERO(ix)|ix==0x3f800000, cond) + v64sf z = ax; /*x is +-0,+-inf,+-1*/ + VECTOR_COND_MOVE (z, VECTOR_INIT (1.0f) / z, cond & (hy < 0)); /* z = (1/|x|) */ + VECTOR_IF2 (hx<0, cond2, cond) + VECTOR_IF2 (((ix-0x3f800000)|yisint)==0, cond3, cond2) + /* (-1)**non-int is NaN */ + VECTOR_COND_MOVE (z, (z-z)/(z-z), cond3); + VECTOR_ELSEIF2 (yisint==1, cond3, cond2) + /* (x<0)**odd = -(|x|**odd) */ + VECTOR_COND_MOVE (z, -z, cond3); + VECTOR_ENDIF + VECTOR_ENDIF + VECTOR_RETURN (z, cond); + VECTOR_ENDIF + + /* (x<0)**(non-int) is NaN */ + VECTOR_RETURN ((x-x)/(x-x), ((((hx >> 31) & 1) - 1)|yisint)==0); + + v64sf t1, t2; + + /* |y| is huge */ + VECTOR_IF (iy>0x4d000000, cond) /* if |y| > 2**27 */ + /* over/underflow if x is not close to one */ + VECTOR_IF2(ix<0x3f7ffff4, cond2, cond) + VECTOR_RETURN (v64sf_math_oflowf(VECTOR_INIT (0)), cond2 & (hy < 0)); + VECTOR_RETURN (v64sf_math_uflowf(VECTOR_INIT (0)), cond2); + VECTOR_ENDIF + VECTOR_IF2(ix>0x3f800007, cond2, cond) + VECTOR_RETURN (v64sf_math_oflowf(VECTOR_INIT (0)), cond2 & (hy > 0)); + VECTOR_RETURN (v64sf_math_uflowf(VECTOR_INIT (0)), cond2); + VECTOR_ENDIF + /* now |1-x| is tiny <= 2**-20, suffice to compute + log(x) by x-x^2/2+x^3/3-x^4/4 */ + v64sf t = ax-1; /* t has 20 trailing zeros */ + v64sf w = (t*t)*(0.5f-t*(0.333333333333f-t*0.25f)); + v64sf u = ivln2_h*t; /* ivln2_h has 16 sig. bits */ + v64sf v = t*ivln2_l-w*ivln2; + VECTOR_COND_MOVE (t1, u+v, cond); + v64si is; + GET_FLOAT_WORD(is,t1, cond); + SET_FLOAT_WORD(t1,is&0xfffff000, cond); + VECTOR_COND_MOVE (t2, v-(t1-u), cond); + VECTOR_RETURN (VECTOR_INIT (0.123456f), cond); + VECTOR_ELSE (cond) + v64si n = VECTOR_INIT (0); + /* take care subnormal number */ + VECTOR_IF2 (FLT_UWORD_IS_SUBNORMAL(ix), cond2, cond) + VECTOR_COND_MOVE (ax, ax * two24, cond); + VECTOR_COND_MOVE (n, n - 24, cond2); + GET_FLOAT_WORD(ix,ax, cond2); + VECTOR_ENDIF + n += (ix>>23)-0x7f; + v64si j = ix&0x007fffff; + /* determine interval */ + v64si ix = j|0x3f800000; /* normalize ix */ + v64si k; + VECTOR_IF2 (j<=0x1cc471, cond2, cond) + VECTOR_COND_MOVE (k, VECTOR_INIT (0), cond2); /* |x|>1)|0x20000000)+0x0040000+(k<<21), cond); + v64sf t_l = ax - (t_h-bp_k); + v64sf s_l = v*((u-s_h*t_h)-s_h*t_l); + /* compute log(ax) */ + v64sf s2 = s*s; + v64sf r = s2*s2*(L1+s2*(L2+s2*(L3+s2*(L4+s2*(L5+s2*L6))))); + r += s_l*(s_h+s); + s2 = s_h*s_h; + t_h = __builtin_convertvector(3.0f+s2+r, v64sf); + GET_FLOAT_WORD(is,t_h, cond); + SET_FLOAT_WORD(t_h,is&0xfffff000, cond); + t_l = r-((t_h-3.0f)-s2); + /* u+v = s*(1+...) */ + u = s_h*t_h; + v = s_l*t_h+t_l*s; + /* 2/(3log2)*(s+...) */ + v64sf p_h = u+v; + GET_FLOAT_WORD(is,p_h, cond); + SET_FLOAT_WORD(p_h,is&0xfffff000, cond); + v64sf p_l = v-(p_h-u); + v64sf z_h = cp_h*p_h; /* cp_h+cp_l = 2/(3*log2) */ + v64sf dp_l_k = VECTOR_MERGE (VECTOR_INIT (dp_l[1]), VECTOR_INIT (dp_l[0]), k == 1); + v64sf z_l = cp_l*p_h+p_l*cp+dp_l_k; + /* log2(ax) = (s+..)*2/(3*log2) = n + dp_h + z_h + z_l */ + v64sf t = __builtin_convertvector (n, v64sf); + v64sf dp_h_k = VECTOR_MERGE (VECTOR_INIT (dp_h[1]), VECTOR_INIT (dp_h[0]), k == 1); + VECTOR_COND_MOVE (t1, (((z_h+z_l)+dp_h_k)+t), cond); + GET_FLOAT_WORD(is,t1, cond); + SET_FLOAT_WORD(t1,is&0xfffff000, cond); + VECTOR_COND_MOVE (t2, z_l-(((t1-t)-dp_h_k)-z_h), cond); + VECTOR_ENDIF + + v64sf s = VECTOR_INIT (1.0f); /* s (sign of result -ve**odd) = -1 else = 1 */ + VECTOR_COND_MOVE (s, VECTOR_INIT (-1.0f), /* (-ve)**(odd int) */ + ((hx>>31) != 0)&(yisint == 1)); + + /* split up y into y1+y2 and compute (y1+y2)*(t1+t2) */ + v64si is; + GET_FLOAT_WORD(is,y, NO_COND); + v64sf y1; + SET_FLOAT_WORD(y1,is&0xfffff000, NO_COND); + v64sf p_l = (y-y1)*t1+y*t2; + v64sf p_h = y1*t1; + v64sf z = p_l+p_h; + v64si j; + GET_FLOAT_WORD(j,z, NO_COND); + v64si i = j&0x7fffffff; + VECTOR_IF (j>0, cond) + VECTOR_RETURN (v64sf_math_oflowf(s<0), cond & i>FLT_UWORD_EXP_MAX); /* overflow */ + VECTOR_RETURN (v64sf_math_oflowf(s<0), cond & (i==FLT_UWORD_EXP_MAX) + & (p_l+ovt>z-p_h)); /* overflow */ + VECTOR_ELSE (cond) + VECTOR_RETURN (v64sf_math_uflowf(s<0), cond & (i>FLT_UWORD_EXP_MIN)); /* underflow */ + VECTOR_RETURN (v64sf_math_uflowf(s<0), cond & (i==FLT_UWORD_EXP_MIN) + & (p_l<=z-p_h)); /* underflow */ + VECTOR_ENDIF + /* + * compute 2**(p_h+p_l) + */ + v64si k = (i>>23)-0x7f; + v64si n = VECTOR_INIT (0); + VECTOR_IF (i>0x3f000000, cond) /* if |z| > 0.5, set n = [z+0.5] */ + VECTOR_COND_MOVE (n, j+(0x00800000>>(k+1)), cond); + k = ((n&0x7fffffff)>>23)-0x7f; /* new k for n */ + v64sf t; + SET_FLOAT_WORD(t,n&~(0x007fffff>>k), cond); + VECTOR_COND_MOVE (n, ((n&0x007fffff)|0x00800000)>>(23-k), cond); + VECTOR_COND_MOVE (n, -n, cond & (j<0)); + VECTOR_COND_MOVE (p_h, p_h - t, cond); + VECTOR_ENDIF + v64sf t = p_l+p_h; + GET_FLOAT_WORD(is,t, NO_COND); + SET_FLOAT_WORD(t,is&0xfffff000, NO_COND); + v64sf u = t*lg2_h; + v64sf v = (p_l-(t-p_h))*lg2+t*lg2_l; + z = u+v; + v64sf w = v-(z-u); + t = z*z; + t1 = z - t*(P1+t*(P2+t*(P3+t*(P4+t*P5)))); + v64sf r = (z*t1)/(t1-2.0f)-(w+z*w); + z = VECTOR_INIT (1.0f)-(r-z); + GET_FLOAT_WORD(j,z, NO_COND); + j += (n<<23); + VECTOR_IF ((j>>23)<=0, cond) + VECTOR_COND_MOVE (z, v64sf_scalbnf_aux(z, n, __mask), cond); /* subnormal output */ + VECTOR_ELSE (cond) + SET_FLOAT_WORD(z, j, cond); + VECTOR_ENDIF + VECTOR_RETURN (s*z, NO_COND); + + FUNCTION_RETURN; +} + +DEF_VARIANTS2 (powf, sf, sf) + +#endif diff --git a/newlib/libm/machine/amdgcn/v64sf_remainder.c b/newlib/libm/machine/amdgcn/v64sf_remainder.c new file mode 100644 index 0000000000..5820498ac3 --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64sf_remainder.c @@ -0,0 +1,85 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* Based on newlib/libm/mathfp/ef_remainder.c in Newlib. */ + +#include "amdgcnmach.h" + +v64sf v64sf_fmodf_aux (v64sf, v64sf, v64si); + +#if defined (__has_builtin) && __has_builtin (__builtin_gcn_fabsvf) + +DEF_VS_MATH_FUNC (v64sf, remainderf, v64sf x, v64sf p) +{ + FUNCTION_INIT (v64sf); + + v64si hx; + GET_FLOAT_WORD (hx, x, NO_COND); + v64si hp; + GET_FLOAT_WORD (hp, p, NO_COND); + v64si sx = hx & 0x80000000; + hp &= 0x7fffffff; + hx &= 0x7fffffff; + + /* purge off exception values */ + /*if(hp==0) // p = 0 */ + /*if((hx>=0x7f800000)|| // x not finite + ((hp>0x7f800000))) // p is NaN */ + VECTOR_RETURN ((x*p) / (x*p), + (hp == 0) | (hx >= 0x7f800000) | (hp > 0x7f800000)); + + /* if (hp<=0x7effffff) // now x < 2p */ + VECTOR_COND_MOVE (x, v64sf_fmodf_aux (x, p+p, __mask), hp <= 0x7effffff); + + /*if ((hx-hp)==0) */ + VECTOR_RETURN (0.0f * x, (hx-hp) == 0); + + x = __builtin_gcn_fabsvf (x); + p = __builtin_gcn_fabsvf (p); + + VECTOR_IF (hp < 0x01000000, cond) + VECTOR_IF2 (x + x > p, cond2, cond) + VECTOR_COND_MOVE (x, x - p, cond2); + VECTOR_COND_MOVE (x, x - p, cond2 & (x + x >= p)); + VECTOR_ENDIF + VECTOR_ELSE (cond) + v64sf p_half = 0.5f * p; + VECTOR_IF2 (x > p_half, cond2, cond) + VECTOR_COND_MOVE (x, x - p, cond2); + VECTOR_COND_MOVE (x, x - p, cond2 & (x >= p_half)); + VECTOR_ENDIF + VECTOR_ENDIF + + GET_FLOAT_WORD (hx, x, NO_COND); + SET_FLOAT_WORD (x, hx ^ sx, NO_COND); + + VECTOR_RETURN (x, NO_COND); + + FUNCTION_RETURN; +} + +DEF_VARIANTS2 (remainderf, sf, sf) + +#endif diff --git a/newlib/libm/machine/amdgcn/v64sf_rint.c b/newlib/libm/machine/amdgcn/v64sf_rint.c new file mode 100644 index 0000000000..f076020634 --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64sf_rint.c @@ -0,0 +1,76 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* Based on newlib/libm/common/sf_rint.c in Newlib. */ + +#include "amdgcnmach.h" + +static const float TWO23[2] = { + 8.3886080000e+06, /* 0x4b000000 */ + -8.3886080000e+06, /* 0xcb000000 */ +}; + +DEF_VS_MATH_FUNC (v64sf, rintf, v64sf x) +{ + FUNCTION_INIT (v64sf); + + v64si i0; + GET_FLOAT_WORD (i0, x, NO_COND); + v64si sx = (i0 >> 31) & 1; + v64sf two23 = VECTOR_MERGE (TWO23[1] + x, TWO23[0] + x, sx != 0); + v64si ix = (i0 & 0x7fffffff); + v64si j0 = (ix >> 23) - 0x7f; + VECTOR_IF (j0 < 23, cond) + VECTOR_RETURN (x, cond & FLT_UWORD_IS_ZERO (ix)); + VECTOR_IF2 (j0 < 0, cond2, cond) + v64si i1 = (i0 & 0x07fffff); + VECTOR_COND_MOVE (i0, i0 & 0xfff00000, cond2); + VECTOR_COND_MOVE (i0, i0 | (((i1 | -i1) >> 9) & 0x400000), cond2); + SET_FLOAT_WORD (x, i0, cond2); + v64sf w = two23 + x; + v64sf t = w - two23; + GET_FLOAT_WORD (i0, t, cond2); + SET_FLOAT_WORD (t, (i0&0x7fffffff)|(sx<<31), cond2); + VECTOR_RETURN (t, cond2); + VECTOR_ELSE2 (cond2, cond) + v64si i = (0x007fffff) >> j0; + VECTOR_RETURN (x, cond2 & ((i0 & i) == 0)); /* x is integral */ + i >>= 1; + VECTOR_COND_MOVE (i0, (i0 & (~i)) | (0x200000 >> j0), + cond2 & ((i0 & i) != 0)); + VECTOR_ENDIF + VECTOR_ELSE (cond) + VECTOR_RETURN (x + x, cond & ~FLT_UWORD_IS_FINITE (ix)); /* inf or NaN */ + VECTOR_RETURN (x, cond); /* x is integral */ + VECTOR_ENDIF + + SET_FLOAT_WORD (x, i0, NO_COND); + v64sf w = two23 + x; + VECTOR_RETURN (w - two23, NO_COND); + + FUNCTION_RETURN; +} + +DEF_VARIANTS (rintf, sf, sf) diff --git a/newlib/libm/machine/amdgcn/v64sf_scalb.c b/newlib/libm/machine/amdgcn/v64sf_scalb.c new file mode 100644 index 0000000000..1c3e348831 --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64sf_scalb.c @@ -0,0 +1,73 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* Based on newlib/libm/mathfp/ef_scalb.c in Newlib. */ + +#include "amdgcnmach.h" + +v64si v64sf_isnanf (v64sf); +v64si v64sf_finitef (v64sf); +v64sf v64sf_rintf_aux (v64sf, v64si); +v64sf v64sf_scalbnf_aux (v64sf, v64si, v64si); + +DEF_VS_MATH_FUNC (v64sf, scalbf, v64sf x, v64sf fn) +{ + FUNCTION_INIT (v64sf); + + VECTOR_IF (v64sf_isnanf(x) | v64sf_isnanf(fn), cond) + VECTOR_RETURN (x * fn, cond); + VECTOR_ENDIF + VECTOR_IF (~v64sf_finitef (fn), cond) + VECTOR_IF2 (fn > 0.0f, cond2, cond) + VECTOR_RETURN (x * fn, cond2); + VECTOR_ELSE2 (cond2, cond) + VECTOR_RETURN (x / (-fn), cond2); + VECTOR_ENDIF + VECTOR_ENDIF + VECTOR_IF (v64sf_rintf_aux (fn, __mask) != fn, cond) + VECTOR_RETURN ((fn-fn)/(fn-fn), cond); + VECTOR_ENDIF +#if INT_MAX > 65000 + VECTOR_IF (fn > 65000.0f, cond) + VECTOR_RETURN (v64sf_scalbnf_aux (x, VECTOR_INIT (65000), __mask), cond); + VECTOR_ENDIF + VECTOR_IF (-fn > 65000.0f, cond) + VECTOR_RETURN (v64sf_scalbnf_aux (x, VECTOR_INIT (-65000), __mask), cond); + VECTOR_ENDIF +#else + VECTOR_IF (fn > 32000.0f, cond) + VECTOR_RETURN (v64sf_scalbnf_aux (x, VECTOR_INIT (32000), __mask), cond); + VECTOR_ENDIF + VECTOR_IF (-fn > 32000.0f, cond) + VECTOR_RETURN (v64sf_scalbnf_aux (x, VECTOR_INIT (-32000), __mask), cond); + VECTOR_ENDIF +#endif + VECTOR_RETURN (v64sf_scalbnf_aux (x, __builtin_convertvector (fn, v64si), __mask), + NO_COND); + + FUNCTION_RETURN; +} + +DEF_VARIANTS2 (scalbf, sf, sf) diff --git a/newlib/libm/machine/amdgcn/v64sf_scalbn.c b/newlib/libm/machine/amdgcn/v64sf_scalbn.c new file mode 100644 index 0000000000..52c18dc1a2 --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64sf_scalbn.c @@ -0,0 +1,92 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* Based on newlib/libm/common/sf_scalbn.c in Newlib. */ + +#include "amdgcnmach.h" +#include +#include + +#if INT_MAX > 50000 +#define OVERFLOW_INT 50000 +#else +#define OVERFLOW_INT 30000 +#endif + +static const float +two25 = 3.355443200e+07, /* 0x4c000000 */ +twom25 = 2.9802322388e-08, /* 0x33000000 */ +huge = 1.0e+30, +tiny = 1.0e-30; + +v64sf v64sf_copysignf_aux (v64sf, v64sf, v64si); + +DEF_VS_MATH_FUNC (v64sf, scalbnf, v64sf x, v64si n) +{ + FUNCTION_INIT (v64sf); + + const v64sf huge_v = VECTOR_INIT ((float) huge); + const v64sf tiny_v = VECTOR_INIT ((float) tiny); + + v64si ix; + GET_FLOAT_WORD (ix, x, NO_COND); + v64si hx = ix & 0x7fffffff; + v64si k = hx >> 23; /* extract exponent */ + VECTOR_IF (FLT_UWORD_IS_ZERO(hx), cond) + VECTOR_RETURN (x, cond); + VECTOR_ENDIF + VECTOR_IF (~FLT_UWORD_IS_FINITE(hx), cond) /* NaN or Inf */ + VECTOR_RETURN (x + x, cond); + VECTOR_ENDIF + VECTOR_IF (FLT_UWORD_IS_SUBNORMAL (hx), cond); + VECTOR_COND_MOVE (x, x * two25, cond); + GET_FLOAT_WORD (ix, x, cond); + VECTOR_COND_MOVE (k, ((ix & 0x7f800000) >> 23) - 25, cond); + VECTOR_IF2 (n < -50000, cond2, cond) /*underflow*/ + VECTOR_RETURN (tiny * x, cond2); + VECTOR_ENDIF + VECTOR_ENDIF + VECTOR_IF (n > OVERFLOW_INT, cond) // in case integer overflow in n+k + VECTOR_RETURN (huge_v * v64sf_copysignf_aux (huge_v, x, __mask), cond); + VECTOR_ENDIF + k = k + n; + VECTOR_IF (k > FLT_LARGEST_EXP, cond) /* overflow */ + VECTOR_RETURN (huge_v * v64sf_copysignf_aux (huge_v, x, __mask), cond); + VECTOR_ENDIF + VECTOR_IF (k > 0, cond) /* normal result */ + SET_FLOAT_WORD (x, (ix & 0x807fffff) | (k << 23), cond); + VECTOR_RETURN (x, cond); + VECTOR_ENDIF + VECTOR_IF (k < FLT_SMALLEST_EXP, cond) /*underflow*/ + VECTOR_RETURN (tiny_v * v64sf_copysignf_aux (tiny_v, x, __mask), + k < FLT_SMALLEST_EXP); + VECTOR_ENDIF + + k += 25; /* subnormal result */ + SET_FLOAT_WORD (x, (ix & 0x807fffff) | (k << 23), NO_COND); + VECTOR_RETURN (x * twom25, NO_COND); + + FUNCTION_RETURN; +} diff --git a/newlib/libm/machine/amdgcn/v64sf_signif.c b/newlib/libm/machine/amdgcn/v64sf_signif.c new file mode 100644 index 0000000000..ff7136e656 --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64sf_signif.c @@ -0,0 +1,38 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* Based on newlib/libm/mathfp/sf_signif.c in Newlib. */ + +#include "amdgcnmach.h" + +v64sf v64sf_scalbf_aux (v64sf x, v64sf fn, v64si); +v64si v64sf_ilogbf_aux (v64sf x, v64si); + +DEF_VS_MATH_FUNC (v64sf, significandf, v64sf x) +{ + return v64sf_scalbf_aux (x, -__builtin_convertvector (v64sf_ilogbf_aux (x, __mask), v64sf), __mask); +} + +DEF_VARIANTS (significandf, sf, sf) diff --git a/newlib/libm/machine/amdgcn/v64sf_sin.c b/newlib/libm/machine/amdgcn/v64sf_sin.c new file mode 100644 index 0000000000..cd43eb546e --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64sf_sin.c @@ -0,0 +1,41 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * Copyright (c) 1994-2009 Red Hat, Inc. All rights reserved. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the BSD License. This program is distributed in the hope that + * it will be useful, but WITHOUT ANY WARRANTY expressed or implied, + * including the implied warranties of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. A copy of this license is available at + * http://www.opensource.org/licenses. Any Red Hat trademarks that are + * incorporated in the source code or documentation are not subject to + * the BSD License and may only be used or replicated with the express + * permission of Red Hat, Inc. + */ + +/* Based on newlib/libm/mathfp/sf_sin.c in Newlib. */ + +#include "amdgcnmach.h" + +v64sf v64sf_sinef_aux (v64sf, int, v64si); + +DEF_VS_MATH_FUNC (v64sf, sinf, v64sf x) +{ + return v64sf_sinef_aux (x, 0, __mask); +} + +DEF_VARIANTS (sinf, sf, sf) diff --git a/newlib/libm/machine/amdgcn/v64sf_sine.c b/newlib/libm/machine/amdgcn/v64sf_sine.c new file mode 100644 index 0000000000..ad118b1d34 --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64sf_sine.c @@ -0,0 +1,122 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * Copyright (c) 1994-2009 Red Hat, Inc. All rights reserved. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the BSD License. This program is distributed in the hope that + * it will be useful, but WITHOUT ANY WARRANTY expressed or implied, + * including the implied warranties of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. A copy of this license is available at + * http://www.opensource.org/licenses. Any Red Hat trademarks that are + * incorporated in the source code or documentation are not subject to + * the BSD License and may only be used or replicated with the express + * permission of Red Hat, Inc. + */ + +/****************************************************************** + * The following routines are coded directly from the algorithms + * and coefficients given in "Software Manual for the Elementary + * Functions" by William J. Cody, Jr. and William Waite, Prentice + * Hall, 1980. + ******************************************************************/ + +/* Based on newlib/libm/mathfp/sf_sine.c in Newlib. */ + +#include "amdgcnmach.h" + +v64si v64sf_numtestf (v64sf); + +static const float HALF_PI = 1.570796326; +static const float ONE_OVER_PI = 0.318309886; +static const float r[] = { -0.1666665668, + 0.8333025139e-02, + -0.1980741872e-03, + 0.2601903036e-5 }; + +#if defined (__has_builtin) && __has_builtin (__builtin_gcn_fabsvf) + +DEF_VS_MATH_FUNC (v64sf, sinef, v64sf x, int cosine) +{ + const float YMAX = 210828714.0; + + FUNCTION_INIT (v64sf); + + v64si num_type = v64sf_numtestf (x); + VECTOR_IF (num_type == NAN, cond) + errno = EDOM; + VECTOR_RETURN (x, cond); + VECTOR_ELSEIF (num_type == INF, cond) + errno = EDOM; + VECTOR_RETURN (VECTOR_INIT (z_notanum_f.f), cond); + VECTOR_ENDIF + + /* Use sin and cos properties to ease computations. */ + v64si sgn; + v64sf y; + + if (cosine) + { + sgn = VECTOR_INIT (0); + y = __builtin_gcn_fabsvf (x) + HALF_PI; + } + else + { + sgn = x < 0.0f; + y = VECTOR_MERGE (-x, x, x < 0.0f); + } + + /* Check for values of y that will overflow here. */ + VECTOR_IF (y > YMAX, cond) + errno = ERANGE; + VECTOR_RETURN (x, cond); + VECTOR_ENDIF + + /* Calculate the exponent. */ + v64si Nneg = __builtin_convertvector (y * ONE_OVER_PI - 0.5f, v64si); + v64si Npos = __builtin_convertvector (y * ONE_OVER_PI + 0.5f, v64si); + v64si N = VECTOR_MERGE (Nneg, Npos, y < 0.0f); + v64sf XN = __builtin_convertvector (N, v64sf); + + VECTOR_COND_MOVE (sgn, ~sgn, (N & 1) != 0); + + if (cosine) + XN -= 0.5; + + y = __builtin_gcn_fabsvf (x) - XN * (float) __PI; + + v64sf res; + + VECTOR_IF ((-z_rooteps_f < y) & (y < z_rooteps_f), cond) + VECTOR_COND_MOVE (res, y, cond); + VECTOR_ELSE (cond) + v64sf g = y * y; + + /* Calculate the Taylor series. */ + v64sf R = (((r[3] * g + r[2]) * g + r[1]) * g + r[0]) * g; + + /* Finally, compute the result. */ + VECTOR_COND_MOVE (res, y + y * R, cond); + VECTOR_ENDIF + + VECTOR_COND_MOVE (res, -res, sgn); + + VECTOR_RETURN (res, NO_COND); + + FUNCTION_RETURN; +} + +#endif diff --git a/newlib/libm/machine/amdgcn/v64sf_sineh.c b/newlib/libm/machine/amdgcn/v64sf_sineh.c new file mode 100644 index 0000000000..013b97a259 --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64sf_sineh.c @@ -0,0 +1,127 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * Copyright (c) 1994-2009 Red Hat, Inc. All rights reserved. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the BSD License. This program is distributed in the hope that + * it will be useful, but WITHOUT ANY WARRANTY expressed or implied, + * including the implied warranties of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. A copy of this license is available at + * http://www.opensource.org/licenses. Any Red Hat trademarks that are + * incorporated in the source code or documentation are not subject to + * the BSD License and may only be used or replicated with the express + * permission of Red Hat, Inc. + */ + +/****************************************************************** + * The following routines are coded directly from the algorithms + * and coefficients given in "Software Manual for the Elementary + * Functions" by William J. Cody, Jr. and William Waite, Prentice + * Hall, 1980. + ******************************************************************/ + +/* Based in newlib/libm/mathfp/sf_sineh.c in Newlib. */ + +#include "amdgcnmach.h" + +v64sf v64sf_expf_aux (v64sf, v64si); +v64si v64sf_numtestf (v64sf); +v64si v64sf_isposf (v64sf); + +static const float q[] = { -0.428277109e+2 }; +static const float p[] = { -0.713793159e+1, + -0.190333399 }; +static const float LNV = 0.6931610107; +static const float INV_V2 = 0.2499930850; +static const float V_OVER2_MINUS1 = 0.1383027787e-4; + +#if defined (__has_builtin) && __has_builtin (__builtin_gcn_fabsvf) + +DEF_VS_MATH_FUNC (v64sf, sinehf, v64sf x, int cosineh) +{ + const float WBAR = 18.55; + + FUNCTION_INIT (v64sf); + + v64si sgn = VECTOR_INIT (0); + v64si v_cosineh = VECTOR_INIT (cosineh ? -1 : 0); + + /* Check for special values. */ + v64si num_type = v64sf_numtestf (x); + VECTOR_IF (num_type == NAN, cond) + errno = EDOM; + VECTOR_RETURN (x, cond); + VECTOR_ELSEIF (num_type == INF, cond) + errno = ERANGE; + VECTOR_RETURN (VECTOR_MERGE (VECTOR_INIT (z_infinity_f.f), + VECTOR_INIT (-z_infinity_f.f), + v64sf_isposf (x)), + cond); + VECTOR_ENDIF + + v64sf y = __builtin_gcn_fabsvf (x); + + if (!cosineh) + VECTOR_COND_MOVE (sgn, VECTOR_INIT (-1), x < 0.0f); + + v64sf res; + + VECTOR_IF (((y > 1.0f) & ~v_cosineh) | v_cosineh, cond) + VECTOR_IF2 (y > (float) BIGX, cond2, cond) + v64sf w = y - LNV; + + /* Check for w > maximum here. */ + VECTOR_IF2 (w > (float) BIGX, cond3, cond2) + errno = ERANGE; + VECTOR_RETURN (x, cond3); + VECTOR_ENDIF + + v64sf z = v64sf_expf_aux (w, __mask); + + VECTOR_COND_MOVE (res, z * (V_OVER2_MINUS1 + 1.0f), + cond2 & (w > WBAR)); + VECTOR_ELSE2 (cond2, cond) + v64sf z = v64sf_expf_aux (y, __mask); + if (cosineh) { + VECTOR_COND_MOVE (res, (z + 1 / z) * 0.5f, cond2); + } else { + VECTOR_COND_MOVE (res, (z - 1 / z) * 0.5f, cond2); + } + VECTOR_ENDIF + + VECTOR_COND_MOVE (res, -res, sgn); + VECTOR_ELSE (cond) + /* Check for y being too small. */ + VECTOR_IF2 (y < z_rooteps_f, cond2, cond); + VECTOR_COND_MOVE (res, x, cond2); + VECTOR_ELSE2 (cond2, cond) + /* Calculate the Taylor series. */ + v64sf f = x * x; + v64sf Q = f + q[0]; + v64sf P = p[1] * f + p[0]; + v64sf R = f * (P / Q); + + VECTOR_COND_MOVE (res, x + x * R, cond2); + VECTOR_ENDIF + VECTOR_ENDIF + + VECTOR_RETURN (res, NO_COND); + + FUNCTION_RETURN; +} + +#endif diff --git a/newlib/libm/machine/amdgcn/v64sf_sinh.c b/newlib/libm/machine/amdgcn/v64sf_sinh.c new file mode 100644 index 0000000000..20530e8bfa --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64sf_sinh.c @@ -0,0 +1,41 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * Copyright (c) 1994-2009 Red Hat, Inc. All rights reserved. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the BSD License. This program is distributed in the hope that + * it will be useful, but WITHOUT ANY WARRANTY expressed or implied, + * including the implied warranties of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. A copy of this license is available at + * http://www.opensource.org/licenses. Any Red Hat trademarks that are + * incorporated in the source code or documentation are not subject to + * the BSD License and may only be used or replicated with the express + * permission of Red Hat, Inc. + */ + +/* Based on newlib/libm/mathfp/sf_sinh.c in Newlib. */ + +#include "amdgcnmach.h" + +v64sf v64sf_sinehf_aux (v64sf, int, v64si); + +DEF_VS_MATH_FUNC (v64sf, sinhf, v64sf x) +{ + return v64sf_sinehf_aux (x, 0, __mask); +} + +DEF_VARIANTS (sinhf, sf, sf) diff --git a/newlib/libm/machine/amdgcn/v64sf_sqrt.c b/newlib/libm/machine/amdgcn/v64sf_sqrt.c new file mode 100644 index 0000000000..c93b44c748 --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64sf_sqrt.c @@ -0,0 +1,103 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * Copyright (c) 1994-2009 Red Hat, Inc. All rights reserved. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the BSD License. This program is distributed in the hope that + * it will be useful, but WITHOUT ANY WARRANTY expressed or implied, + * including the implied warranties of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. A copy of this license is available at + * http://www.opensource.org/licenses. Any Red Hat trademarks that are + * incorporated in the source code or documentation are not subject to + * the BSD License and may only be used or replicated with the express + * permission of Red Hat, Inc. + */ + +/***************************************************************** + * The following routines are coded directly from the algorithms + * and coefficients given in "Software Manual for the Elementary + * Functions" by William J. Cody, Jr. and William Waite, Prentice + * Hall, 1980. + *****************************************************************/ + +/* Based on newlib/libm/mathfp/sf_sqrt.c in Newlib. */ + +#include "amdgcnmach.h" + +v64si v64sf_numtestf (v64sf); +v64si v64sf_isposf (v64sf); + +#if defined (__has_builtin) \ + && __has_builtin (__builtin_gcn_frexpvf_mant) \ + && __has_builtin (__builtin_gcn_frexpvf_exp) \ + && __has_builtin (__builtin_gcn_ldexpvf) + +DEF_VS_MATH_FUNC (v64sf, sqrtf, v64sf x) +{ + FUNCTION_INIT (v64sf); + + /* Check for special values. */ + v64si num_type = v64sf_numtestf (x); + VECTOR_IF (num_type == NAN, cond) + errno = EDOM; + VECTOR_RETURN (x, cond); + VECTOR_ELSEIF (num_type == INF, cond) + VECTOR_IF2 (v64sf_isposf (x), cond2, cond) + errno = EDOM; + VECTOR_RETURN (VECTOR_INIT (z_notanum_f.f), cond2); + VECTOR_ELSE2 (cond2,cond) + errno = ERANGE; + VECTOR_RETURN (VECTOR_INIT (z_infinity_f.f), cond); + VECTOR_ENDIF + VECTOR_ENDIF + + /* Initial checks are performed here. */ + VECTOR_IF (x == 0.0f, cond) + VECTOR_RETURN (VECTOR_INIT (0.0f), cond); + VECTOR_ENDIF + VECTOR_IF (x < 0.0f, cond) + errno = EDOM; + VECTOR_RETURN (VECTOR_INIT (z_notanum_f.f), cond); + VECTOR_ENDIF + + /* Find the exponent and mantissa for the form x = f * 2^exp. */ + v64sf f = __builtin_gcn_frexpvf_mant (x); + v64si exp = __builtin_gcn_frexpvf_exp (x); + v64si odd = (exp & 1) != 0; + + /* Get the initial approximation. */ + v64sf y = 0.41731f + 0.59016f * f; + + f *= 0.5f; + /* Calculate the remaining iterations. */ + y = y * 0.5f + f / y; + y = y * 0.5f + f / y; + + /* Calculate the final value. */ + VECTOR_COND_MOVE (y, y * (float) __SQRT_HALF, odd); + VECTOR_COND_MOVE (exp, exp + 1, odd); + exp >>= 1; + y = __builtin_gcn_ldexpvf (y, exp); + + VECTOR_RETURN (y, NO_COND); + + FUNCTION_RETURN; +} + +DEF_VARIANTS (sqrtf, sf, sf) + +#endif diff --git a/newlib/libm/machine/amdgcn/v64sf_tan.c b/newlib/libm/machine/amdgcn/v64sf_tan.c new file mode 100644 index 0000000000..d1841e74e0 --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64sf_tan.c @@ -0,0 +1,152 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + */ + +/* Based on newlib/libm/math/kf_tan.c in Newlib. */ + +#include "amdgcnmach.h" + +static const float +one = 1.0000000000e+00, /* 0x3f800000 */ +pio4 = 7.8539812565e-01, /* 0x3f490fda */ +pio4lo= 3.7748947079e-08, /* 0x33222168 */ +T[] = { + 3.3333334327e-01, /* 0x3eaaaaab */ + 1.3333334029e-01, /* 0x3e088889 */ + 5.3968254477e-02, /* 0x3d5d0dd1 */ + 2.1869488060e-02, /* 0x3cb327a4 */ + 8.8632395491e-03, /* 0x3c11371f */ + 3.5920790397e-03, /* 0x3b6b6916 */ + 1.4562094584e-03, /* 0x3abede48 */ + 5.8804126456e-04, /* 0x3a1a26c8 */ + 2.4646313977e-04, /* 0x398137b9 */ + 7.8179444245e-05, /* 0x38a3f445 */ + 7.1407252108e-05, /* 0x3895c07a */ + -1.8558637748e-05, /* 0xb79bae5f */ + 2.5907305826e-05, /* 0x37d95384 */ +}; + +#if defined (__has_builtin) && __has_builtin (__builtin_gcn_fabsvf) + +static v64sf +v64sf_kernel_tanf (v64sf x, v64sf y, v64si iy, v64si __mask) +{ + FUNCTION_INIT (v64sf); + + v64si hx; + GET_FLOAT_WORD(hx, x, NO_COND); + v64si ix = hx & 0x7fffffff; /* high word of |x| */ + + VECTOR_IF(ix<0x31800000, cond) /* x < 2**-28 */ + VECTOR_IF2(__builtin_convertvector (x, v64si)==0, cond2, cond) /* generate inexact */ + VECTOR_RETURN (1.0f / __builtin_gcn_fabsvf (x), (ix|(iy+1))==0); + VECTOR_RETURN (x, cond2 & (iy == 1)); + VECTOR_RETURN (-1.0f / x, cond2); + VECTOR_ENDIF + VECTOR_ENDIF + VECTOR_IF(ix>=0x3f2ca140, cond) /* |x|>=0.6744 */ + VECTOR_COND_MOVE (x, -x, cond & (hx < 0)); + VECTOR_COND_MOVE (y, -y, cond & (hx < 0)); + v64sf z = pio4-x; + v64sf w = pio4lo-y; + VECTOR_COND_MOVE (x, z+w, cond); + VECTOR_COND_MOVE (y, VECTOR_INIT (0.0f), cond); + VECTOR_ENDIF + v64sf z = x*x; + v64sf w = z*z; + /* Break x^5*(T[1]+x^2*T[2]+...) into + * x^5(T[1]+x^4*T[3]+...+x^20*T[11]) + + * x^5(x^2*(T[2]+x^4*T[4]+...+x^22*[T12])) + */ + v64sf r = T[1]+w*(T[3]+w*(T[5]+w*(T[7]+w*(T[9]+w*T[11])))); + v64sf v = z*(T[2]+w*(T[4]+w*(T[6]+w*(T[8]+w*(T[10]+w*T[12]))))); + v64sf s = z*x; + r = y + z*(s*(r+v)+y); + r += T[0]*s; + w = x+r; + VECTOR_IF(ix>=0x3f2ca140, cond) + v = __builtin_convertvector (iy, v64sf); + VECTOR_RETURN (__builtin_convertvector (1-((hx>>30)&2), v64sf) + * (v-2.0f*(x-(w*w/(w+v)-r))), cond); + VECTOR_ENDIF + VECTOR_RETURN (w, iy == 1); + /* if allow error up to 2 ulp, + simply return -1.0/(x+r) here */ + /* compute -1.0/(x+r) accurately */ + z = w; + v64si i; + GET_FLOAT_WORD(i,z, NO_COND); + SET_FLOAT_WORD(z,i&0xfffff000, NO_COND); + v = r - (z - x); /* z+v = r+x */ + v64sf a, t; + t = a = -1.0f/w; /* a = -1.0/w */ + GET_FLOAT_WORD(i,t, NO_COND); + SET_FLOAT_WORD(t,i&0xfffff000, NO_COND); + s = 1.0f+t*z; + VECTOR_RETURN (t+a*(s+t*v), NO_COND); + + FUNCTION_RETURN; +} + +static v64si +v64sf_rem_pio2f (v64sf x, v64sf *y) +{ + /* Work in double-precision for better accuracy. */ + v64df dx = __builtin_convertvector (x, v64df); + v64df r = dx * __INV_PI_OVER_TWO_2_24; + v64si n = (__builtin_convertvector (r, v64si) + 0x800000) >> 24; + dx = dx - __builtin_convertvector (n, v64df) * __PI_OVER_TWO; + + y[0] = __builtin_convertvector (dx, v64sf); + y[1] = __builtin_convertvector (dx, v64sf) - y[0]; + return n; +} + +DEF_VS_MATH_FUNC (v64sf, tanf, v64sf x) +{ + FUNCTION_INIT (v64sf); + + v64si ix; + GET_FLOAT_WORD (ix, x, NO_COND); + + /* |x| ~< pi/4 */ + ix &= 0x7fffffff; + VECTOR_RETURN (v64sf_kernel_tanf (x, VECTOR_INIT (0.0f), VECTOR_INIT (1), __mask), + ix <= 0x3f490fda); + + /* tan(Inf or NaN) is NaN */ + VECTOR_RETURN (x-x, ~FLT_UWORD_IS_FINITE(ix)); /* NaN */ + + /* argument reduction needed */ + v64sf y[2]; + v64si n = v64sf_rem_pio2f (x,y); + VECTOR_RETURN (v64sf_kernel_tanf (y[0], y[1], 1-((n&1)<<1), __mask), // 1 -- n even + NO_COND); // -1 -- n odd + + FUNCTION_RETURN; +} + +DEF_VARIANTS (tanf, sf, sf) + +#endif diff --git a/newlib/libm/machine/amdgcn/v64sf_tanh.c b/newlib/libm/machine/amdgcn/v64sf_tanh.c new file mode 100644 index 0000000000..2fd46231a3 --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64sf_tanh.c @@ -0,0 +1,92 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * Copyright (c) 1994-2009 Red Hat, Inc. All rights reserved. + * + * This copyrighted material is made available to anyone wishing to use, + * modify, copy, or redistribute it subject to the terms and conditions + * of the BSD License. This program is distributed in the hope that + * it will be useful, but WITHOUT ANY WARRANTY expressed or implied, + * including the implied warranties of MERCHANTABILITY or FITNESS FOR + * A PARTICULAR PURPOSE. A copy of this license is available at + * http://www.opensource.org/licenses. Any Red Hat trademarks that are + * incorporated in the source code or documentation are not subject to + * the BSD License and may only be used or replicated with the express + * permission of Red Hat, Inc. + */ + +/***************************************************************** + * The following routines are coded directly from the algorithms + * and coefficients given in "Software Manual for the Elementary + * Functions" by William J. Cody, Jr. and William Waite, Prentice + * Hall, 1980. + *****************************************************************/ + +/* Based on newlib/libm/mathfp/sf_tanh.c in Newlib. */ + +#include "amdgcnmach.h" + +v64sf v64sf_expf_aux (v64sf, v64si); + +static const float LN3_OVER2 = 0.54930614433405484570; +static const float p[] = { -0.16134119023996228053e+4, + -0.99225929672236083313e+2, + -0.96437492777225469787 }; +static const float q[] = { 0.48402357071988688686e+4, + 0.22337720718962312926e+4, + 0.11274474380534949335e+3 }; + +#if defined (__has_builtin) && __has_builtin (__builtin_gcn_fabsvf) + +DEF_VS_MATH_FUNC (v64sf, tanhf, v64sf x) +{ + FUNCTION_INIT (v64sf); + + v64sf f = __builtin_gcn_fabsvf (x); + v64sf res; + + /* Check if the input is too big. */ + VECTOR_IF (f > (float) BIGX, cond) + VECTOR_COND_MOVE (res, VECTOR_INIT (1.0f), cond); + + VECTOR_ELSEIF (f > LN3_OVER2, cond) + VECTOR_COND_MOVE (res, 1.0f - 2.0f / (v64sf_expf_aux (2.0f * f, __mask) + 1.0f), + cond); + + /* Check if the input is too small. */ + VECTOR_ELSEIF (f < z_rooteps_f, cond) + VECTOR_COND_MOVE (res, f, cond); + + /* Calculate the Taylor series. */ + VECTOR_ELSE (cond) + v64sf g = f * f; + + v64sf P = (p[2] * g + p[1]) * g + p[0]; + v64sf Q = ((g + q[2]) * g + q[1]) * g + q[0]; + v64sf R = g * (P / Q); + + VECTOR_COND_MOVE (res, f + f * R, cond); + VECTOR_ENDIF + + VECTOR_COND_MOVE (res, -res, x < 0.0f); + + VECTOR_RETURN (res, NO_COND); + + FUNCTION_RETURN; +} + +DEF_VARIANTS (tanhf, sf, sf) + +#endif diff --git a/newlib/libm/machine/amdgcn/v64sf_tgamma.c b/newlib/libm/machine/amdgcn/v64sf_tgamma.c new file mode 100644 index 0000000000..cfe045841a --- /dev/null +++ b/newlib/libm/machine/amdgcn/v64sf_tgamma.c @@ -0,0 +1,42 @@ +/* + * Copyright 2023 Siemens + * + * The authors hereby grant permission to use, copy, modify, distribute, + * and license this software and its documentation for any purpose, provided + * that existing copyright notices are retained in all copies and that this + * notice is included verbatim in any distributions. No written agreement, + * license, or royalty fee is required for any of the authorized uses. + * Modifications to this software may be copyrighted by their authors + * and need not follow the licensing terms described here, provided that + * the new terms are clearly indicated on the first page of each file where + * they apply. + */ + +/* + * ==================================================== + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved. + * + * Developed at SunPro, a Sun Microsystems, Inc. business. + * Permission to use, copy, modify, and distribute this + * software is freely granted, provided that this notice + * is preserved. + * ==================================================== + * + */ + +/* Based on newlib/libm/math/ef_tgamma.c in Newlib. */ + +#include "amdgcnmach.h" + +v64sf v64sf_expf_aux (v64sf x, v64si __mask); +v64sf v64sf_lgammaf_r_aux (v64sf x, v64si *signgamp, v64si __mask); + +DEF_VS_MATH_FUNC (v64sf, tgammaf, v64sf x) +{ + v64si signgam_local; + v64sf y = v64sf_expf_aux(v64sf_lgammaf_r_aux(x, &signgam_local, __mask), __mask); + VECTOR_COND_MOVE(y, -y, signgam_local < 0); + return y; +} + +DEF_VARIANTS (tgammaf, sf, sf) diff --git a/newlib/libm/machine/pru/fpclassifyf.c b/newlib/libm/machine/pru/fpclassifyf.c index f4dd201d97..6d82ea7777 100644 --- a/newlib/libm/machine/pru/fpclassifyf.c +++ b/newlib/libm/machine/pru/fpclassifyf.c @@ -32,5 +32,5 @@ by TI ABI. */ int __pruabi_fpclassifyf(float a) { - return fpclassifyf(a); + return fpclassify(a); } diff --git a/newlib/libm/machine/riscv/e_sqrt.c b/newlib/libm/machine/riscv/e_sqrt.c index d6bfd90ad6..0c5aaadf3f 100644 --- a/newlib/libm/machine/riscv/e_sqrt.c +++ b/newlib/libm/machine/riscv/e_sqrt.c @@ -36,7 +36,7 @@ #include #include "math_config.h" -#if defined(__riscv_fsqrt) && __riscv_flen >= 64 +#if defined(__RISCV_HARD_FLOAT) && __RISCV_HARD_FLOAT >= 64 double __ieee754_sqrt (double x) diff --git a/newlib/libm/machine/riscv/ef_sqrt.c b/newlib/libm/machine/riscv/ef_sqrt.c index 1f378f547d..cc41813dd5 100644 --- a/newlib/libm/machine/riscv/ef_sqrt.c +++ b/newlib/libm/machine/riscv/ef_sqrt.c @@ -36,7 +36,7 @@ #include #include "math_config.h" -#if defined(__riscv_fsqrt) && __riscv_flen >= 32 +#if defined(__RISCV_HARD_FLOAT) && __RISCV_HARD_FLOAT >= 32 float __ieee754_sqrtf (float x) diff --git a/newlib/libm/machine/riscv/feclearexcept.c b/newlib/libm/machine/riscv/feclearexcept.c index 90c7775a49..e236a59eba 100644 --- a/newlib/libm/machine/riscv/feclearexcept.c +++ b/newlib/libm/machine/riscv/feclearexcept.c @@ -33,6 +33,7 @@ #include #include +#include "riscv_math.h" /* This implementation is intended to comply with the following * specification: @@ -47,7 +48,7 @@ int feclearexcept(int excepts) { -#if __riscv_flen +#if __RISCV_HARD_FLOAT /* Mask excepts to be sure only supported flag bits are set */ diff --git a/newlib/libm/machine/riscv/fegetenv.c b/newlib/libm/machine/riscv/fegetenv.c index c1488c7898..10a9af3375 100644 --- a/newlib/libm/machine/riscv/fegetenv.c +++ b/newlib/libm/machine/riscv/fegetenv.c @@ -32,6 +32,7 @@ */ #include +#include "riscv_math.h" /* This implementation is intended to comply with the following * specification: @@ -47,7 +48,7 @@ int fegetenv(fenv_t *envp) { -#if __riscv_flen +#if __RISCV_HARD_FLOAT /* Get the current environment (FCSR) */ diff --git a/newlib/libm/machine/riscv/fegetexceptflag.c b/newlib/libm/machine/riscv/fegetexceptflag.c index ab1b8a66b2..43d5543f73 100644 --- a/newlib/libm/machine/riscv/fegetexceptflag.c +++ b/newlib/libm/machine/riscv/fegetexceptflag.c @@ -32,6 +32,7 @@ */ #include +#include "riscv_math.h" /* This implementation is intended to comply with the following * specification: @@ -48,7 +49,7 @@ int fegetexceptflag(fexcept_t *flagp, int excepts) { -#if __riscv_flen +#if __RISCV_HARD_FLOAT /* Mask excepts to be sure only supported flag bits are set */ diff --git a/newlib/libm/machine/riscv/fegetround.c b/newlib/libm/machine/riscv/fegetround.c index b4c0f2b19b..6d553479b4 100644 --- a/newlib/libm/machine/riscv/fegetround.c +++ b/newlib/libm/machine/riscv/fegetround.c @@ -32,6 +32,7 @@ */ #include +#include "riscv_math.h" /* This implementation is intended to comply with the following * specification: @@ -45,7 +46,7 @@ int fegetround() { -#if __riscv_flen +#ifdef __RISCV_HARD_FLOAT /* Get current rounding mode */ diff --git a/newlib/libm/machine/riscv/feholdexcept.c b/newlib/libm/machine/riscv/feholdexcept.c index 9d726dabe8..c83a09bc12 100644 --- a/newlib/libm/machine/riscv/feholdexcept.c +++ b/newlib/libm/machine/riscv/feholdexcept.c @@ -32,6 +32,7 @@ */ #include +#include "riscv_math.h" /* This implementation is intended to comply with the following * specification: @@ -49,7 +50,7 @@ int feholdexcept(fenv_t *envp) { -#if __riscv_flen +#ifdef __RISCV_HARD_FLOAT /* Store the current FP environment in envp*/ diff --git a/newlib/libm/machine/riscv/feraiseexcept.c b/newlib/libm/machine/riscv/feraiseexcept.c index 6f28632d1a..817fa6274c 100644 --- a/newlib/libm/machine/riscv/feraiseexcept.c +++ b/newlib/libm/machine/riscv/feraiseexcept.c @@ -32,6 +32,7 @@ */ #include +#include "riscv_math.h" /* This implementation is intended to comply with the following * specification: @@ -58,7 +59,7 @@ int feraiseexcept(int excepts) excepts &= FE_ALL_EXCEPT; -#if __riscv_flen +#ifdef __RISCV_HARD_FLOAT /* Set the requested exception flags */ diff --git a/newlib/libm/machine/riscv/fesetenv.c b/newlib/libm/machine/riscv/fesetenv.c index 943b272b70..a752c45d6f 100644 --- a/newlib/libm/machine/riscv/fesetenv.c +++ b/newlib/libm/machine/riscv/fesetenv.c @@ -32,6 +32,7 @@ */ #include +#include "riscv_math.h" /* This implementation is intended to comply with the following * specification: @@ -54,7 +55,7 @@ int fesetenv(const fenv_t *envp) { -#if __riscv_flen +#ifdef __RISCV_HARD_FLOAT /* Set environment (FCSR) */ diff --git a/newlib/libm/machine/riscv/fesetexceptflag.c b/newlib/libm/machine/riscv/fesetexceptflag.c index 04400f4ff0..8c70bbd00e 100644 --- a/newlib/libm/machine/riscv/fesetexceptflag.c +++ b/newlib/libm/machine/riscv/fesetexceptflag.c @@ -32,6 +32,7 @@ */ #include +#include "riscv_math.h" /* This implementation is intended to comply with the following * specification: @@ -53,7 +54,7 @@ int fesetexceptflag(const fexcept_t *flagp, int excepts) { -#if __riscv_flen +#ifdef __RISCV_HARD_FLOAT /* Mask excepts to be sure only supported flag bits are set */ diff --git a/newlib/libm/machine/riscv/fesetround.c b/newlib/libm/machine/riscv/fesetround.c index b2451c71bc..76585261d0 100644 --- a/newlib/libm/machine/riscv/fesetround.c +++ b/newlib/libm/machine/riscv/fesetround.c @@ -32,6 +32,7 @@ */ #include +#include "riscv_math.h" /* This implementation is intended to comply with the following * specification: @@ -48,7 +49,7 @@ int fesetround(int round) { -#if __riscv_flen +#ifdef __RISCV_HARD_FLOAT /* Mask round to be sure only valid rounding bits are set */ diff --git a/newlib/libm/machine/riscv/fetestexcept.c b/newlib/libm/machine/riscv/fetestexcept.c index 55d880c990..8ed0d5ffa5 100644 --- a/newlib/libm/machine/riscv/fetestexcept.c +++ b/newlib/libm/machine/riscv/fetestexcept.c @@ -32,6 +32,7 @@ */ #include +#include "riscv_math.h" /* This implementation is intended to comply with the following * specification: @@ -47,7 +48,7 @@ int fetestexcept(int excepts) { -#if __riscv_flen +#ifdef __RISCV_HARD_FLOAT /* Mask excepts to be sure only supported flag bits are set */ diff --git a/newlib/libm/machine/riscv/feupdateenv.c b/newlib/libm/machine/riscv/feupdateenv.c index 737095c2b0..90235d0210 100644 --- a/newlib/libm/machine/riscv/feupdateenv.c +++ b/newlib/libm/machine/riscv/feupdateenv.c @@ -32,6 +32,7 @@ */ #include +#include "riscv_math.h" /* This implementation is intended to comply with the following * specification: @@ -50,7 +51,7 @@ int feupdateenv(const fenv_t *envp) { -#if __riscv_flen +#ifdef __RISCV_HARD_FLOAT /* Get current exception flags */ diff --git a/newlib/libm/machine/riscv/riscv_math.h b/newlib/libm/machine/riscv/riscv_math.h index 38948ca12d..31220ba0e9 100644 --- a/newlib/libm/machine/riscv/riscv_math.h +++ b/newlib/libm/machine/riscv/riscv_math.h @@ -38,7 +38,13 @@ -#ifdef __riscv_flen +#if defined(__riscv_flen) || defined(__riscv_zfinx) + +#if (__riscv_flen >= 64) || defined(__riscv_zdinx) +#define __RISCV_HARD_FLOAT 64 +#else +#define __RISCV_HARD_FLOAT 32 +#endif #define FCLASS_NEG_INF (1 << 0) #define FCLASS_NEG_NORMAL (1 << 1) @@ -58,7 +64,7 @@ #define FCLASS_SUBNORMAL (FCLASS_NEG_SUBNORMAL | FCLASS_POS_SUBNORMAL) #define FCLASS_NAN (FCLASS_SNAN | FCLASS_QNAN) -#if __riscv_flen >= 64 +#if (__riscv_flen >= 64) || defined(__riscv_zdinx) static inline long _fclass_d(double x){ long fclass; __asm __volatile ("fclass.d\t%0, %1" : "=r" (fclass) : "f" (x)); @@ -66,7 +72,7 @@ static inline long _fclass_d(double x){ } #endif -#if __riscv_flen >= 32 +#if (__riscv_flen >= 32) || defined(__riscv_zfinx) static inline long _fclass_f(float x){ long fclass; __asm __volatile ("fclass.s\t%0, %1" : "=r" (fclass) : "f" (x)); diff --git a/newlib/libm/machine/riscv/s_copysign.c b/newlib/libm/machine/riscv/s_copysign.c index 0475355783..876e4a80ee 100644 --- a/newlib/libm/machine/riscv/s_copysign.c +++ b/newlib/libm/machine/riscv/s_copysign.c @@ -34,8 +34,9 @@ */ #include +#include "riscv_math.h" -#if defined(__riscv_flen) && __riscv_flen >= 64 +#if defined(__RISCV_HARD_FLOAT) && __RISCV_HARD_FLOAT >= 64 double copysign (double x, double y) diff --git a/newlib/libm/machine/riscv/s_fabs.c b/newlib/libm/machine/riscv/s_fabs.c index abf7d2c0f5..bb26d3d0aa 100644 --- a/newlib/libm/machine/riscv/s_fabs.c +++ b/newlib/libm/machine/riscv/s_fabs.c @@ -34,8 +34,9 @@ */ #include +#include "riscv_math.h" -#if defined(__riscv_flen) && __riscv_flen >= 64 +#if defined(__RISCV_HARD_FLOAT) && __RISCV_HARD_FLOAT >= 64 double fabs (double x) diff --git a/newlib/libm/machine/riscv/s_finite.c b/newlib/libm/machine/riscv/s_finite.c index 1f1f2244d8..d9ad888a4b 100644 --- a/newlib/libm/machine/riscv/s_finite.c +++ b/newlib/libm/machine/riscv/s_finite.c @@ -38,8 +38,9 @@ */ #include +#include "riscv_math.h" -#if defined(__riscv_flen) && __riscv_flen >= 64 +#if defined(__RISCV_HARD_FLOAT) && __RISCV_HARD_FLOAT >= 64 #include "riscv_math.h" int finite(double x) { diff --git a/newlib/libm/machine/riscv/s_fmax.c b/newlib/libm/machine/riscv/s_fmax.c index bc174d0a09..059b71c475 100644 --- a/newlib/libm/machine/riscv/s_fmax.c +++ b/newlib/libm/machine/riscv/s_fmax.c @@ -34,8 +34,9 @@ */ #include +#include "riscv_math.h" -#if defined(__riscv_flen) && __riscv_flen >= 64 +#if defined(__RISCV_HARD_FLOAT) && __RISCV_HARD_FLOAT >= 64 double fmax (double x, double y) diff --git a/newlib/libm/machine/riscv/s_fmin.c b/newlib/libm/machine/riscv/s_fmin.c index 13dbbf5dd0..c62dd868d2 100644 --- a/newlib/libm/machine/riscv/s_fmin.c +++ b/newlib/libm/machine/riscv/s_fmin.c @@ -34,8 +34,9 @@ */ #include +#include "riscv_math.h" -#if defined(__riscv_flen) && __riscv_flen >= 64 +#if defined(__RISCV_HARD_FLOAT) && __RISCV_HARD_FLOAT >= 64 double fmin (double x, double y) diff --git a/newlib/libm/machine/riscv/s_fpclassify.c b/newlib/libm/machine/riscv/s_fpclassify.c index 8112d4f786..42b4e9fcb2 100644 --- a/newlib/libm/machine/riscv/s_fpclassify.c +++ b/newlib/libm/machine/riscv/s_fpclassify.c @@ -33,11 +33,10 @@ * OF THE POSSIBILITY OF SUCH DAMAGE. */ #include - -#if defined(__riscv_flen) && __riscv_flen >= 64 - #include "riscv_math.h" +#if defined(__RISCV_HARD_FLOAT) && __RISCV_HARD_FLOAT >= 64 + int __fpclassifyd (double x) { diff --git a/newlib/libm/machine/riscv/s_isinf.c b/newlib/libm/machine/riscv/s_isinf.c index 3d6d685a3e..2860b3f888 100644 --- a/newlib/libm/machine/riscv/s_isinf.c +++ b/newlib/libm/machine/riscv/s_isinf.c @@ -35,10 +35,10 @@ #include #include +#include "riscv_math.h" -#if defined(__riscv_flen) && __riscv_flen >= 64 +#if defined(__RISCV_HARD_FLOAT) && __RISCV_HARD_FLOAT >= 64 -#include "riscv_math.h" #undef isinf int diff --git a/newlib/libm/machine/riscv/s_isnan.c b/newlib/libm/machine/riscv/s_isnan.c index a0209729ae..96185cd9a1 100644 --- a/newlib/libm/machine/riscv/s_isnan.c +++ b/newlib/libm/machine/riscv/s_isnan.c @@ -35,10 +35,10 @@ #include #include +#include "riscv_math.h" -#if defined(__riscv_flen) && __riscv_flen >= 64 +#if defined(__RISCV_HARD_FLOAT) && __RISCV_HARD_FLOAT >= 64 -#include "riscv_math.h" #undef isnan int diff --git a/newlib/libm/machine/riscv/s_llrint.c b/newlib/libm/machine/riscv/s_llrint.c index 3f93e60b8d..39aeb1dbfc 100644 --- a/newlib/libm/machine/riscv/s_llrint.c +++ b/newlib/libm/machine/riscv/s_llrint.c @@ -34,8 +34,9 @@ */ #include +#include "riscv_math.h" -#if defined(__riscv_flen) && __riscv_flen >= 64 && __riscv_xlen >= 64 +#if defined(__RISCV_HARD_FLOAT) && __RISCV_HARD_FLOAT >= 64 && __riscv_xlen >= 64 long long int llrint (double x) { diff --git a/newlib/libm/machine/riscv/s_llround.c b/newlib/libm/machine/riscv/s_llround.c index ff41394cf1..538ae9a182 100644 --- a/newlib/libm/machine/riscv/s_llround.c +++ b/newlib/libm/machine/riscv/s_llround.c @@ -34,8 +34,9 @@ */ #include +#include "riscv_math.h" -#if defined(__riscv_flen) && __riscv_flen >= 64 && __riscv_xlen >= 64 +#if defined(__RISCV_HARD_FLOAT) && __RISCV_HARD_FLOAT >= 64 && __riscv_xlen >= 64 long long int llround(double x) { diff --git a/newlib/libm/machine/riscv/s_lrint.c b/newlib/libm/machine/riscv/s_lrint.c index 0e9a9bc8ba..9bed894eeb 100644 --- a/newlib/libm/machine/riscv/s_lrint.c +++ b/newlib/libm/machine/riscv/s_lrint.c @@ -34,8 +34,9 @@ */ #include +#include "riscv_math.h" -#if defined(__riscv_flen) && __riscv_flen >= 64 +#if defined(__RISCV_HARD_FLOAT) && __RISCV_HARD_FLOAT >= 64 long int lrint (double x) { diff --git a/newlib/libm/machine/riscv/s_lround.c b/newlib/libm/machine/riscv/s_lround.c index 5be778834f..8f15a0ad7a 100644 --- a/newlib/libm/machine/riscv/s_lround.c +++ b/newlib/libm/machine/riscv/s_lround.c @@ -34,8 +34,9 @@ */ #include +#include "riscv_math.h" -#if defined(__riscv_flen) && __riscv_flen >= 64 +#if defined(__RISCV_HARD_FLOAT) && __RISCV_HARD_FLOAT >= 64 long int lround (double x) { diff --git a/newlib/libm/machine/riscv/sf_copysign.c b/newlib/libm/machine/riscv/sf_copysign.c index 31b1321ad1..88afbe2f82 100644 --- a/newlib/libm/machine/riscv/sf_copysign.c +++ b/newlib/libm/machine/riscv/sf_copysign.c @@ -34,8 +34,9 @@ */ #include +#include "riscv_math.h" -#if defined(__riscv_flen) && __riscv_flen >= 32 +#if defined(__RISCV_HARD_FLOAT) && __RISCV_HARD_FLOAT >= 32 float copysignf (float x, float y) diff --git a/newlib/libm/machine/riscv/sf_fabs.c b/newlib/libm/machine/riscv/sf_fabs.c index 1ca92d30d3..ac7a4e0d80 100644 --- a/newlib/libm/machine/riscv/sf_fabs.c +++ b/newlib/libm/machine/riscv/sf_fabs.c @@ -34,8 +34,9 @@ */ #include +#include "riscv_math.h" -#if defined(__riscv_flen) && __riscv_flen >= 32 +#if defined(__RISCV_HARD_FLOAT) && __RISCV_HARD_FLOAT >= 32 float fabsf (float x) diff --git a/newlib/libm/machine/riscv/sf_finite.c b/newlib/libm/machine/riscv/sf_finite.c index a17b0fa363..690985567e 100644 --- a/newlib/libm/machine/riscv/sf_finite.c +++ b/newlib/libm/machine/riscv/sf_finite.c @@ -34,8 +34,9 @@ */ #include +#include "riscv_math.h" -#if defined(__riscv_flen) && __riscv_flen >= 32 +#if defined(__RISCV_HARD_FLOAT) && __RISCV_HARD_FLOAT >= 32 #include "riscv_math.h" int finitef(float x) diff --git a/newlib/libm/machine/riscv/sf_fmax.c b/newlib/libm/machine/riscv/sf_fmax.c index 7b18f00623..e2d4ad774f 100644 --- a/newlib/libm/machine/riscv/sf_fmax.c +++ b/newlib/libm/machine/riscv/sf_fmax.c @@ -34,8 +34,9 @@ */ #include +#include "riscv_math.h" -#if defined(__riscv_flen) && __riscv_flen >= 32 +#if defined(__RISCV_HARD_FLOAT) && __RISCV_HARD_FLOAT >= 32 float fmaxf (float x, float y) diff --git a/newlib/libm/machine/riscv/sf_fmin.c b/newlib/libm/machine/riscv/sf_fmin.c index 771613338e..7387d46d39 100644 --- a/newlib/libm/machine/riscv/sf_fmin.c +++ b/newlib/libm/machine/riscv/sf_fmin.c @@ -34,8 +34,9 @@ */ #include +#include "riscv_math.h" -#if defined(__riscv_flen) && __riscv_flen >= 32 +#if defined(__RISCV_HARD_FLOAT) && __RISCV_HARD_FLOAT >= 32 float fminf (float x, float y) diff --git a/newlib/libm/machine/riscv/sf_fpclassify.c b/newlib/libm/machine/riscv/sf_fpclassify.c index dee9a7a25f..9b16408538 100644 --- a/newlib/libm/machine/riscv/sf_fpclassify.c +++ b/newlib/libm/machine/riscv/sf_fpclassify.c @@ -33,8 +33,9 @@ * OF THE POSSIBILITY OF SUCH DAMAGE. */ #include +#include "riscv_math.h" -#if defined(__riscv_flen) && __riscv_flen >= 32 +#if defined(__RISCV_HARD_FLOAT) && __RISCV_HARD_FLOAT >= 32 #include "riscv_math.h" diff --git a/newlib/libm/machine/riscv/sf_isinf.c b/newlib/libm/machine/riscv/sf_isinf.c index 0c60f33af4..d668746948 100644 --- a/newlib/libm/machine/riscv/sf_isinf.c +++ b/newlib/libm/machine/riscv/sf_isinf.c @@ -35,10 +35,10 @@ #include #include +#include "riscv_math.h" -#if defined(__riscv_flen) && __riscv_flen >= 32 +#if defined(__RISCV_HARD_FLOAT) && __RISCV_HARD_FLOAT >= 32 -#include "riscv_math.h" #undef isinff int diff --git a/newlib/libm/machine/riscv/sf_isnan.c b/newlib/libm/machine/riscv/sf_isnan.c index e38abf4abb..75b17f151a 100644 --- a/newlib/libm/machine/riscv/sf_isnan.c +++ b/newlib/libm/machine/riscv/sf_isnan.c @@ -35,10 +35,10 @@ #include #include +#include "riscv_math.h" -#if defined(__riscv_flen) && __riscv_flen >= 32 +#if defined(__RISCV_HARD_FLOAT) && __RISCV_HARD_FLOAT >= 32 -#include "riscv_math.h" #undef isnanf int diff --git a/newlib/libm/machine/riscv/sf_llrint.c b/newlib/libm/machine/riscv/sf_llrint.c index 58f2e5371a..9be28402c4 100644 --- a/newlib/libm/machine/riscv/sf_llrint.c +++ b/newlib/libm/machine/riscv/sf_llrint.c @@ -34,8 +34,9 @@ */ #include +#include "riscv_math.h" -#if defined(__riscv_flen) && __riscv_flen >= 32 && __riscv_xlen >= 64 +#if defined(__RISCV_HARD_FLOAT) && __RISCV_HARD_FLOAT >= 32 && __riscv_xlen >= 64 long long int llrintf (float x) { diff --git a/newlib/libm/machine/riscv/sf_llround.c b/newlib/libm/machine/riscv/sf_llround.c index 389da692e7..c378eb0cba 100644 --- a/newlib/libm/machine/riscv/sf_llround.c +++ b/newlib/libm/machine/riscv/sf_llround.c @@ -34,8 +34,9 @@ */ #include +#include "riscv_math.h" -#if defined(__riscv_flen) && __riscv_flen >= 32 && __riscv_xlen >= 64 +#if defined(__RISCV_HARD_FLOAT) && __RISCV_HARD_FLOAT >= 32 && __riscv_xlen >= 64 long long int llroundf (float x) { diff --git a/newlib/libm/machine/riscv/sf_lrint.c b/newlib/libm/machine/riscv/sf_lrint.c index 4f80a93391..13320eb155 100644 --- a/newlib/libm/machine/riscv/sf_lrint.c +++ b/newlib/libm/machine/riscv/sf_lrint.c @@ -34,8 +34,9 @@ */ #include +#include "riscv_math.h" -#if defined(__riscv_flen) && __riscv_flen >= 32 +#if defined(__RISCV_HARD_FLOAT) && __RISCV_HARD_FLOAT >= 32 long int lrintf (float x) { diff --git a/newlib/libm/machine/riscv/sf_lround.c b/newlib/libm/machine/riscv/sf_lround.c index dda6d984e3..398dfd2d8c 100644 --- a/newlib/libm/machine/riscv/sf_lround.c +++ b/newlib/libm/machine/riscv/sf_lround.c @@ -34,8 +34,9 @@ */ #include +#include "riscv_math.h" -#if defined(__riscv_flen) && __riscv_flen >= 32 +#if defined(__RISCV_HARD_FLOAT) && __RISCV_HARD_FLOAT >= 32 long int lroundf(float x) { diff --git a/newlib/libm/machine/xtensa/Makefile.inc b/newlib/libm/machine/xtensa/Makefile.inc new file mode 100644 index 0000000000..3c95a56dd8 --- /dev/null +++ b/newlib/libm/machine/xtensa/Makefile.inc @@ -0,0 +1,12 @@ +%C%_src = \ + %D%/feclearexcept.c %D%/fegetenv.c %D%/fegetexcept.c %D%/fegetexceptflag.c \ + %D%/fegetround.c %D%/feholdexcept.c %D%/feraiseexcept.c %D%/fetestexcept.c \ + %D%/feupdateenv.c + +if XTENSA_XCHAL_HAVE_FP_SQRT +%C%_src += \ + %D%/ef_sqrt.c +endif + +libm_a_CFLAGS_%C% = -D_LIBM +libm_a_SOURCES += $(%C%_src) diff --git a/newlib/libm/machine/xtensa/acinclude.m4 b/newlib/libm/machine/xtensa/acinclude.m4 new file mode 100644 index 0000000000..4d242e057f --- /dev/null +++ b/newlib/libm/machine/xtensa/acinclude.m4 @@ -0,0 +1,11 @@ +AC_CACHE_CHECK([for XCHAL_HAVE_FP_SQRT], newlib_cv_xchal_have_fp_sqrt, [dnl + AC_PREPROC_IFELSE([AC_LANG_PROGRAM( +[[#define _LIBM +// targ-include does not exist yet, use relative path +#include "../sys/xtensa/include/xtensa/config/core-isa.h" +#if (!XCHAL_HAVE_FP_SQRT) +# error "Have not XCHAL_HAVE_FP_SQRT" +#endif +]])], [newlib_cv_xchal_have_fp_sqrt="yes"], [newlib_cv_xchal_have_fp_sqrt="no"])]) + +AM_CONDITIONAL(XTENSA_XCHAL_HAVE_FP_SQRT, test "$newlib_cv_xchal_have_fp_sqrt" = "yes") diff --git a/newlib/libm/machine/xtensa/ef_sqrt.c b/newlib/libm/machine/xtensa/ef_sqrt.c new file mode 100644 index 0000000000..39e8d75847 --- /dev/null +++ b/newlib/libm/machine/xtensa/ef_sqrt.c @@ -0,0 +1,7 @@ +#include + +#if !XCHAL_HAVE_FP_SQRT +#error "__ieee754_sqrtf from common libm must be used" +#else +/* Built-in GCC __ieee754_sqrtf must be used */ +#endif diff --git a/newlib/libm/machine/xtensa/feclearexcept.c b/newlib/libm/machine/xtensa/feclearexcept.c new file mode 100644 index 0000000000..f1bd84f964 --- /dev/null +++ b/newlib/libm/machine/xtensa/feclearexcept.c @@ -0,0 +1,48 @@ +/* Copyright (c) 2011 Tensilica Inc. ALL RIGHTS RESERVED. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + TENSILICA INCORPORATED BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + OF THE POSSIBILITY OF SUCH DAMAGE. */ + +#include + +#if XCHAL_HAVE_FP || XCHAL_HAVE_DFP + +#include + + +int feclearexcept(int except) +{ + unsigned int fsr; + + if (except & ~FE_ALL_EXCEPT) + return -1; + except <<= _FE_EXCEPTION_FLAGS_OFFSET; + asm ("rur.fsr %0" : "=a"(fsr)); + fsr = fsr & ~except; + asm ("wur.fsr %0" : : "a"(fsr)); + return 0; +} + +#endif diff --git a/newlib/libm/machine/xtensa/fegetenv.c b/newlib/libm/machine/xtensa/fegetenv.c new file mode 100644 index 0000000000..b3984ee849 --- /dev/null +++ b/newlib/libm/machine/xtensa/fegetenv.c @@ -0,0 +1,55 @@ +/* Copyright (c) 2011 Tensilica Inc. ALL RIGHTS RESERVED. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + TENSILICA INCORPORATED BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + OF THE POSSIBILITY OF SUCH DAMAGE. */ + +#include + +#if XCHAL_HAVE_FP || XCHAL_HAVE_DFP + +#include + +int fegetenv(fenv_t * env_ptr) +{ + unsigned int fsr; + unsigned int fcr; + asm ("rur.fsr %0" : "=a"(fsr)); + asm ("rur.fcr %0" : "=a"(fcr)); + *env_ptr = fsr | fcr; + return 0; +} + + +int fesetenv(const fenv_t * env_ptr) +{ + fenv_t env = *env_ptr; + if (env & ~(_FE_FLOATING_ENV_MASK)) + return -1; + asm ("wur.fsr %0" : : "a"(*env_ptr)); + asm ("wur.fcr %0" : : "a"(*env_ptr)); + return 0; +} + +#endif diff --git a/newlib/libm/machine/xtensa/fegetexcept.c b/newlib/libm/machine/xtensa/fegetexcept.c new file mode 100644 index 0000000000..250917c3e9 --- /dev/null +++ b/newlib/libm/machine/xtensa/fegetexcept.c @@ -0,0 +1,67 @@ +/* Copyright (c) 2011 Tensilica Inc. ALL RIGHTS RESERVED. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + TENSILICA INCORPORATED BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + OF THE POSSIBILITY OF SUCH DAMAGE. */ + +#include + +#if XCHAL_HAVE_FP || XCHAL_HAVE_DFP + +/* These functions are glibc extensions. */ + +#include + +int fegetexcept(void) +{ + fexcept_t current; + asm ("rur.fsr %0" : "=a"(current)); + return (current >> _FE_EXCEPTION_ENABLE_OFFSET) & FE_ALL_EXCEPT; +} + + +int feenableexcept(int excepts) +{ + fexcept_t current; + if (excepts & ~FE_ALL_EXCEPT) + return -1; + asm ("rur.fcr %0" : "=a"(current)); + current |= excepts << _FE_EXCEPTION_ENABLE_OFFSET; + asm ("wur.fcr %0" : "=a"(current)); + return 0; +} + + +int fedisableexcept(int excepts) +{ + fexcept_t current; + if (excepts & ~FE_ALL_EXCEPT) + return -1; + asm ("rur.fcr %0" : "=a"(current)); + current &= ~(excepts << _FE_EXCEPTION_ENABLE_OFFSET); + asm ("wur.fcr %0" : "=a"(current)); + return 0; +} + +#endif diff --git a/newlib/libm/machine/xtensa/fegetexceptflag.c b/newlib/libm/machine/xtensa/fegetexceptflag.c new file mode 100644 index 0000000000..6d9e7e6ac4 --- /dev/null +++ b/newlib/libm/machine/xtensa/fegetexceptflag.c @@ -0,0 +1,63 @@ +/* Copyright (c) 2011 Tensilica Inc. ALL RIGHTS RESERVED. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + TENSILICA INCORPORATED BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + OF THE POSSIBILITY OF SUCH DAMAGE. */ + +#include + +#if XCHAL_HAVE_FP || XCHAL_HAVE_DFP + +#include + +int fegetexceptflag(fexcept_t *flagp, int excepts) +{ + unsigned int fsr; + if (excepts & ~FE_ALL_EXCEPT) + return -1; + asm ("rur.fsr %0" : "=a"(fsr)); + fsr >>= _FE_EXCEPTION_FLAGS_OFFSET; + excepts &= fsr; + *flagp = excepts; + + return 0; +} + + +int fesetexceptflag(const fexcept_t *flagp, int excepts) +{ + if (excepts & ~FE_ALL_EXCEPT) + return -1; + + unsigned int fsr; + + asm ("rur.fsr %0" : "=a"(fsr)); + + fsr &= ~(excepts << _FE_EXCEPTION_FLAGS_OFFSET); + fsr |= ((*flagp & excepts) << _FE_EXCEPTION_FLAGS_OFFSET); + asm ("wur.fsr %0" : : "a"(fsr)); + return 0; +} + +#endif diff --git a/newlib/libm/machine/xtensa/fegetround.c b/newlib/libm/machine/xtensa/fegetround.c new file mode 100644 index 0000000000..f17be6dc19 --- /dev/null +++ b/newlib/libm/machine/xtensa/fegetround.c @@ -0,0 +1,50 @@ +/* Copyright (c) 2011 Tensilica Inc. ALL RIGHTS RESERVED. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + TENSILICA INCORPORATED BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + OF THE POSSIBILITY OF SUCH DAMAGE. */ + +#include + +#if XCHAL_HAVE_FP || XCHAL_HAVE_DFP + +#include + +int fegetround(void) +{ + fexcept_t current; + asm ("rur.fcr %0" : "=a"(current)); + return (current & _FE_ROUND_MODE_MASK) >> _FE_ROUND_MODE_OFFSET; +} + + +int fesetround(int round) +{ + if (round & ~_FE_ROUND_MODE_MASK) + return -1; + asm ("wur.fcr %0" : : "a"(round)); + return 0; +} + +#endif diff --git a/newlib/libm/machine/xtensa/feholdexcept.c b/newlib/libm/machine/xtensa/feholdexcept.c new file mode 100644 index 0000000000..32e5e0b3bb --- /dev/null +++ b/newlib/libm/machine/xtensa/feholdexcept.c @@ -0,0 +1,54 @@ +/* Copyright (c) 2011 Tensilica Inc. ALL RIGHTS RESERVED. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + TENSILICA INCORPORATED BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + OF THE POSSIBILITY OF SUCH DAMAGE. */ + +#include + +#if XCHAL_HAVE_FP || XCHAL_HAVE_DFP + +#include + +int feholdexcept(fenv_t * envp) +{ + fexcept_t fsr; + fenv_t fcr; + /* Get the environment. */ + asm ("rur.fcr %0" : "=a"(fcr)); + asm ("rur.fsr %0" : "=a"(fsr)); + *envp = fsr | fcr; + + /* Clear the exception enable flags. */ + fcr &= _FE_ROUND_MODE_MASK; + asm ("wur.fcr %0" : :"a"(fcr)); + + /* Clear the exception happened flags. */ + fsr = 0; + asm ("wur.fsr %0" : :"a"(fsr)); + + return 0; +} + +#endif diff --git a/newlib/libm/machine/xtensa/feraiseexcept.c b/newlib/libm/machine/xtensa/feraiseexcept.c new file mode 100644 index 0000000000..8d418f0feb --- /dev/null +++ b/newlib/libm/machine/xtensa/feraiseexcept.c @@ -0,0 +1,49 @@ +/* Copyright (c) 2011 Tensilica Inc. ALL RIGHTS RESERVED. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + TENSILICA INCORPORATED BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + OF THE POSSIBILITY OF SUCH DAMAGE. */ + +#include + +#if XCHAL_HAVE_FP || XCHAL_HAVE_DFP + +/* Xtensa doesn't trap, so setting the flags is the best we can + do. */ + +#include + +int feraiseexcept(int excepts) +{ + fexcept_t current; + + if (excepts & ~FE_ALL_EXCEPT) + return -1; + asm ("rur.fsr %0" : "=a"(current)); + current |= excepts << _FE_EXCEPTION_FLAGS_OFFSET; + asm ("wur.fsr %0" : : "a"(current)); + return 0; +} + +#endif diff --git a/newlib/libm/machine/xtensa/fetestexcept.c b/newlib/libm/machine/xtensa/fetestexcept.c new file mode 100644 index 0000000000..295085949c --- /dev/null +++ b/newlib/libm/machine/xtensa/fetestexcept.c @@ -0,0 +1,41 @@ +/* Copyright (c) 2011 Tensilica Inc. ALL RIGHTS RESERVED. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + TENSILICA INCORPORATED BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + OF THE POSSIBILITY OF SUCH DAMAGE. */ + +#include + +#if XCHAL_HAVE_FP || XCHAL_HAVE_DFP + +#include + +int fetestexcept(int excepts) +{ + fexcept_t current; + asm ("rur.fsr %0" : "=a"(current)); + return (current >> _FE_EXCEPTION_FLAGS_OFFSET) & excepts; +} + +#endif diff --git a/newlib/libm/machine/xtensa/feupdateenv.c b/newlib/libm/machine/xtensa/feupdateenv.c new file mode 100644 index 0000000000..cbb1ffa437 --- /dev/null +++ b/newlib/libm/machine/xtensa/feupdateenv.c @@ -0,0 +1,46 @@ +/* Copyright (c) 2011 Tensilica Inc. ALL RIGHTS RESERVED. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS + FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL + TENSILICA INCORPORATED BE LIABLE FOR ANY DIRECT, INDIRECT, + INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED + OF THE POSSIBILITY OF SUCH DAMAGE. */ + +#include + +#if XCHAL_HAVE_FP || XCHAL_HAVE_DFP + +#include + +int feupdateenv(const fenv_t * envp) +{ + fenv_t current; + int err = fegetenv (¤t); + if (err != 0) + return err; + err = fesetenv (envp); + if (err != 0) + return err; + return feraiseexcept (current); +} + +#endif diff --git a/newlib/libm/math/Makefile.inc b/newlib/libm/math/Makefile.inc index 1b61d6dd30..d2a45bf13a 100644 --- a/newlib/libm/math/Makefile.inc +++ b/newlib/libm/math/Makefile.inc @@ -15,6 +15,7 @@ %D%/w_scalb.c %D%/w_sinh.c %D%/w_sqrt.c \ %D%/w_sincos.c \ %D%/w_drem.c \ + %D%/signgam.c \ %D%/s_asinh.c %D%/s_atan.c %D%/s_ceil.c \ %D%/s_cos.c %D%/s_erf.c %D%/s_fabs.c %D%/s_floor.c \ %D%/s_frexp.c %D%/s_ldexp.c \ diff --git a/newlib/libm/math/e_exp.c b/newlib/libm/math/e_exp.c index ec26c20998..77652d687b 100644 --- a/newlib/libm/math/e_exp.c +++ b/newlib/libm/math/e_exp.c @@ -28,7 +28,7 @@ * the interval [0,0.34658]: * Write * R(r**2) = r*(exp(r)+1)/(exp(r)-1) = 2 + r*r/6 - r**4/360 + ... - * We use a special Reme algorithm on [0,0.34658] to generate + * We use a special Remez algorithm on [0,0.34658] to generate * a polynomial of degree 5 to approximate R. The maximum error * of this polynomial approximation is bounded by 2**-59. In * other words, diff --git a/newlib/libm/math/e_log.c b/newlib/libm/math/e_log.c index ac4a950689..461ae0309a 100644 --- a/newlib/libm/math/e_log.c +++ b/newlib/libm/math/e_log.c @@ -23,7 +23,7 @@ * Let s = f/(2+f) ; based on log(1+f) = log(1+s) - log(1-s) * = 2s + 2/3 s**3 + 2/5 s**5 + ....., * = 2s + s*R - * We use a special Reme algorithm on [0,0.1716] to generate + * We use a special Remez algorithm on [0,0.1716] to generate * a polynomial of degree 14 to approximate R The maximum error * of this polynomial approximation is bounded by 2**-58.45. In * other words, diff --git a/newlib/libm/math/e_pow.c b/newlib/libm/math/e_pow.c index 258cca8dd0..b217260070 100644 --- a/newlib/libm/math/e_pow.c +++ b/newlib/libm/math/e_pow.c @@ -107,7 +107,7 @@ ivln2_l = 1.92596299112661746887e-08; /* 0x3E54AE0B, 0xF85DDF44 =1/ln2 tail*/ #endif { double z,ax,z_h,z_l,p_h,p_l; - double y1,t1,t2,r,s,t,u,v,w; + double y1,t1,t2,r,s,sign,t,u,v,w; __int32_t i,j,k,yisint,n; __int32_t hx,hy,ix,iy; __uint32_t lx,ly; @@ -141,7 +141,7 @@ ivln2_l = 1.92596299112661746887e-08; /* 0x3E54AE0B, 0xF85DDF44 =1/ln2 tail*/ k = (iy>>20)-0x3ff; /* exponent */ if(k>20) { j = ly>>(52-k); - if((j<<(52-k))==ly) yisint = 2-(j&1); + if(((uint32_t)j<<(52-k))==ly) yisint = 2-(j&1); } else if(ly==0) { j = iy>>(20-k); if((j<<(20-k))==iy) yisint = 2-(j&1); @@ -184,23 +184,29 @@ ivln2_l = 1.92596299112661746887e-08; /* 0x3E54AE0B, 0xF85DDF44 =1/ln2 tail*/ return z; } } - + /* (x<0)**(non-int) is NaN */ - /* REDHAT LOCAL: This used to be - if((((hx>>31)+1)|yisint)==0) return (x-x)/(x-x); - but ANSI C says a right shift of a signed negative quantity is - implementation defined. */ - if(((((__uint32_t)hx>>31)-1)|yisint)==0) return (x-x)/(x-x); + + n = ((uint32_t)hx >> 31U) - 1U; + if ((n | yisint) == 0) return (x-x)/(x-x); + + sign = one; /* (sign of result -ve**odd) = -1 else = 1 */ + if ((n | (yisint - 1)) == 0) { + sign = -one; /* (-ve)**(odd int) */ + } /* |y| is huge */ - if(iy>0x41e00000) { /* if |y| > 2**31 */ - if(iy>0x43f00000){ /* if |y| > 2**64, must o/uflow */ - if(ix<=0x3fefffff) return (hy<0)? __math_oflow(0):__math_uflow(0); - if(ix>=0x3ff00000) return (hy>0)? __math_oflow(0):__math_uflow(0); + if(iy>0x42000000) { /* if |y| > ~2**33 (does not regard mantissa) */ + if(iy>0x43f00000){ /* if |y| > ~2**64, must o/uflow and y is an even integer */ + if(ix<=0x3fefffff) { /* |x| < 1 */ + return (hy<0)? __math_oflow(0):__math_uflow(0); + } else { /* |x| >= 1 */ + return (hy>0)? __math_oflow(0):__math_uflow(0); + } } /* over/underflow if x is not close to one */ - if(ix<0x3fefffff) return (hy<0)? __math_oflow(0):__math_uflow(0); - if(ix>0x3ff00000) return (hy>0)? __math_oflow(0):__math_uflow(0); + if(ix<0x3fefffff) return (hy<0)? __math_oflow(sign<0):__math_uflow(sign<0); + if(ix>0x3ff00000) return (hy>0)? __math_oflow(sign<0):__math_uflow(sign<0); /* now |1-x| is tiny <= 2**-20, suffice to compute log(x) by x-x^2/2+x^3/3-x^4/4 */ t = ax-1; /* t has 20 trailing zeros */ @@ -260,10 +266,6 @@ ivln2_l = 1.92596299112661746887e-08; /* 0x3E54AE0B, 0xF85DDF44 =1/ln2 tail*/ t2 = z_l-(((t1-t)-dp_h[k])-z_h); } - s = one; /* s (sign of result -ve**odd) = -1 else = 1 */ - if(((((__uint32_t)hx>>31)-1)|(yisint-1))==0) - s = -one;/* (-ve)**(odd int) */ - /* split up y into y1+y2 and compute (y1+y2)*(t1+t2) */ y1 = y; SET_LOW_WORD(y1,0); @@ -273,15 +275,15 @@ ivln2_l = 1.92596299112661746887e-08; /* 0x3E54AE0B, 0xF85DDF44 =1/ln2 tail*/ EXTRACT_WORDS(j,i,z); if (j>=0x40900000) { /* z >= 1024 */ if(((j-0x40900000)|i)!=0) /* if z > 1024 */ - return __math_oflow(s<0); /* overflow */ + return __math_oflow(sign<0); /* overflow */ else { - if(p_l+ovt>z-p_h) return __math_oflow(s<0); /* overflow */ + if(p_l+ovt>z-p_h) return __math_oflow(sign<0); /* overflow */ } } else if((j&0x7fffffff)>=0x4090cc00 ) { /* z <= -1075 */ if(((j-0xc090cc00)|i)!=0) /* z < -1075 */ - return __math_uflow(s<0); /* underflow */ + return __math_uflow(sign<0); /* underflow */ else { - if(p_l<=z-p_h) return __math_uflow(s<0); /* underflow */ + if(p_l<=z-p_h) return __math_uflow(sign<0); /* underflow */ } } /* @@ -313,7 +315,7 @@ ivln2_l = 1.92596299112661746887e-08; /* 0x3E54AE0B, 0xF85DDF44 =1/ln2 tail*/ j += (n<<20); if((j>>20)<=0) z = scalbn(z,(int)n); /* subnormal output */ else SET_HIGH_WORD(z,j); - return s*z; + return sign*z; } #endif /* defined(_DOUBLE_IS_32BITS) */ diff --git a/newlib/libm/math/math.tex b/newlib/libm/math/math.tex index 92b384f630..5956a124b5 100644 --- a/newlib/libm/math/math.tex +++ b/newlib/libm/math/math.tex @@ -20,62 +20,62 @@ @menu * version:: Version of library -* acos:: Arccosine -* acosh:: Inverse hyperbolic cosine -* asin:: Arcsine -* asinh:: Inverse hyperbolic sine -* atan:: Arctangent -* atan2:: Arctangent of y/x -* atanh:: Inverse hyperbolic tangent -* jN:: Bessel functions (jN, yN) -* cbrt:: Cube root -* copysign:: Sign of Y, magnitude of X -* cosh:: Hyperbolic cosine -* erf:: Error function (erf, erfc) -* exp:: Exponential, base e -* exp10:: Exponential, base 10 -* exp2:: Exponential, base 2 -* expm1:: Exponential, base e, of x - 1 -* fabs:: Absolute value (magnitude) -* fdim:: Positive difference -* floor:: Floor and ceiling (floor, ceil) -* fma:: Floating multiply add -* fmax:: Maximum -* fmin:: Minimum -* fmod:: Floating-point remainder (modulo) -* fpclassify:: Floating-point classification macro -* frexp:: Split floating-point number -* gamma:: Logarithmic gamma function -* hypot:: Distance from origin -* ilogb:: Get exponent -* infinity:: Floating infinity -* isgreater:: Comparison macros -* ldexp:: Scale by a power of 2 -* log:: Natural logarithms -* log10:: Base 10 logarithms -* log1p:: Log of 1 + X -* log2:: Base 2 logarithms -* logb:: Get exponent -* lrint:: Round to integer -* lround:: Round to integer, away from zero (lround, llround) -* modf:: Split fractional and integer parts -* nan:: Floating Not a Number -* nearbyint:: Round to integer -* nextafter:: Get next representable number -* pow:: X to the power Y -* pow10:: 10 to the power X -* remainder:: remainder of X divided by Y -* remquo:: Remainder and part of quotient -* rint:: Round to integer -* round:: Round to integer, away from zero -* scalbn:: Scale by a power of FLT_RADIX (2) -* signbit:: Does floating-point number have negative sign? -* sin:: Sine or cosine (sin, cos) -* sinh:: Hyperbolic sine -* sqrt:: Positive square root -* tan:: Tangent -* tanh:: Hyperbolic tangent -* trunc:: Round to integer, towards zero +* Function acos:: Arccosine +* Function acosh:: Inverse hyperbolic cosine +* Function asin:: Arcsine +* Function asinh:: Inverse hyperbolic sine +* Function atan:: Arctangent +* Function atan2:: Arctangent of y/x +* Function atanh:: Inverse hyperbolic tangent +* Function jN:: Bessel functions (jN, yN) +* Function cbrt:: Cube root +* Function copysign:: Sign of Y, magnitude of X +* Function cosh:: Hyperbolic cosine +* Function erf:: Error function (erf, erfc) +* Function exp:: Exponential, base e +* Function exp10:: Exponential, base 10 +* Function exp2:: Exponential, base 2 +* Function expm1:: Exponential, base e, of x - 1 +* Function fabs:: Absolute value (magnitude) +* Function fdim:: Positive difference +* Function floor:: Floor and ceiling (floor, ceil) +* Function fma:: Floating multiply add +* Function fmax:: Maximum +* Function fmin:: Minimum +* Function fmod:: Floating-point remainder (modulo) +* Function fpclassify:: Floating-point classification macro +* Function frexp:: Split floating-point number +* Function gamma:: Logarithmic gamma function +* Function hypot:: Distance from origin +* Function ilogb:: Get exponent +* Function infinity:: Floating infinity +* Function isgreater:: Comparison macros +* Function ldexp:: Scale by a power of 2 +* Function log:: Natural logarithms +* Function log10:: Base 10 logarithms +* Function log1p:: Log of 1 + X +* Function log2:: Base 2 logarithms +* Function logb:: Get exponent +* Function lrint:: Round to integer +* Function lround:: Round to integer, away from zero (lround, llround) +* Function modf:: Split fractional and integer parts +* Function nan:: Floating Not a Number +* Function nearbyint:: Round to integer +* Function nextafter:: Get next representable number +* Function pow:: X to the power Y +* Function pow10:: 10 to the power X +* Function remainder:: remainder of X divided by Y +* Function remquo:: Remainder and part of quotient +* Function rint:: Round to integer +* Function round:: Round to integer, away from zero +* Function scalbn:: Scale by a power of FLT_RADIX (2) +* Function signbit:: Does floating-point number have negative sign? +* Function sin:: Sine or cosine (sin, cos) +* Function sinh:: Hyperbolic sine +* Function sqrt:: Positive square root +* Function tan:: Tangent +* Function tanh:: Hyperbolic tangent +* Function trunc:: Round to integer, towards zero @end menu @page diff --git a/newlib/libc/reent/signgam.c b/newlib/libm/math/signgam.c similarity index 100% rename from newlib/libc/reent/signgam.c rename to newlib/libm/math/signgam.c diff --git a/newlib/libm/mathfp/mathfp.tex b/newlib/libm/mathfp/mathfp.tex index 0b9f085571..8c9e37c94a 100644 --- a/newlib/libm/mathfp/mathfp.tex +++ b/newlib/libm/mathfp/mathfp.tex @@ -37,45 +37,45 @@ @menu * version:: Version of library -* acos:: Arccosine -* acosh:: Inverse hyperbolic cosine -* asin:: Arcsine -* asinh:: Inverse hyperbolic sine -* atan:: Arctangent -* atan2:: Arctangent of y/x -* atanh:: Inverse hyperbolic tangent -* jN:: Bessel functions (jN, yN) -* cbrt:: Cube root -* copysign:: Sign of Y, magnitude of X -* cosh:: Hyperbolic cosine -* erf:: Error function (erf, erfc) -* exp:: Exponential -* expm1:: Exponential of x, - 1 -* fabs:: Absolute value (magnitude) -* floor:: Floor and ceiling (floor, ceil) -* fmod:: Floating-point remainder (modulo) -* frexp:: Split floating-point number -* gamma:: Logarithmic gamma function -* hypot:: Distance from origin -* ilogb:: Get exponent -* infinity:: Floating infinity -* isnan:: Check type of number -* ldexp:: Load exponent -* log:: Natural logarithms -* log10:: Base 10 logarithms -* log1p:: Log of 1 + X -* matherr:: Modifiable math error handler -* modf:: Split fractional and integer parts -* nan:: Floating Not a Number -* nextafter:: Get next representable number -* pow:: X to the power Y -* remainder:: remainder of X divided by Y -* scalbn:: scalbn -* sin:: Sine or cosine (sin, cos) -* sinh:: Hyperbolic sine -* sqrt:: Positive square root -* tan:: Tangent -* tanh:: Hyperbolic tangent +* Function acos:: Arccosine +* Function acosh:: Inverse hyperbolic cosine +* Function asin:: Arcsine +* Function asinh:: Inverse hyperbolic sine +* Function atan:: Arctangent +* Function atan2:: Arctangent of y/x +* Function atanh:: Inverse hyperbolic tangent +* Function jN:: Bessel functions (jN, yN) +* Function cbrt:: Cube root +* Function copysign:: Sign of Y, magnitude of X +* Function cosh:: Hyperbolic cosine +* Function erf:: Error function (erf, erfc) +* Function exp:: Exponential +* Function expm1:: Exponential of x, - 1 +* Function fabs:: Absolute value (magnitude) +* Function floor:: Floor and ceiling (floor, ceil) +* Function fmod:: Floating-point remainder (modulo) +* Function frexp:: Split floating-point number +* Function gamma:: Logarithmic gamma function +* Function hypot:: Distance from origin +* Function ilogb:: Get exponent +* Function infinity:: Floating infinity +* Function isnan:: Check type of number +* Function ldexp:: Load exponent +* Function log:: Natural logarithms +* Function log10:: Base 10 logarithms +* Function log1p:: Log of 1 + X +* Function matherr:: Modifiable math error handler +* Function modf:: Split fractional and integer parts +* Function nan:: Floating Not a Number +* Function nextafter:: Get next representable number +* Function pow:: X to the power Y +* Function remainder:: remainder of X divided by Y +* Function scalbn:: scalbn +* Function sin:: Sine or cosine (sin, cos) +* Function sinh:: Hyperbolic sine +* Function sqrt:: Positive square root +* Function tan:: Tangent +* Function tanh:: Hyperbolic tangent @end menu @page diff --git a/newlib/newlib.hin b/newlib/newlib.hin index e87a5eabbb..8318469400 100644 --- a/newlib/newlib.hin +++ b/newlib/newlib.hin @@ -375,6 +375,9 @@ /* nano version of malloc is used. */ #undef _NANO_MALLOC +/* The newlib version in string format. */ +#undef _NEWLIB_VERSION + /* Verify _REENT_CHECK macros allocate memory successfully. */ #undef _REENT_CHECK_VERIFY @@ -422,4 +425,13 @@ /* Define if wide char orientation is supported. */ #undef _WIDE_ORIENT +/* The newlib minor version number. */ +#undef __NEWLIB_MINOR__ + +/* The newlib patch level. */ +#undef __NEWLIB_PATCHLEVEL__ + +/* The newlib major version number. */ +#undef __NEWLIB__ + #endif /* !__NEWLIB_H__ */ diff --git a/newlib/testsuite/lib/flags.exp b/newlib/testsuite/lib/flags.exp index e1e9acb186..697291e7a5 100644 --- a/newlib/testsuite/lib/flags.exp +++ b/newlib/testsuite/lib/flags.exp @@ -4,6 +4,13 @@ # is freely granted, provided that this notice is preserved. # +if [info exists env(XGCC_FLAGS_FOR_TARGET)] { + verbose "GCC, newlib combined tree, build-tree testing; using standard search paths" + # ... instead of the search paths built here, based on 'objdir' as set in + # newlib's 'site.exp', which always points to the default multilib. + return +} + # flags.exp: overrides the dejagnu versions of libgloss_link_flags, # newlib_link_flags, and newlib_include_flags. diff --git a/winsup/Makefile.am b/winsup/Makefile.am index 0946152c76..9efdd4cb17 100644 --- a/winsup/Makefile.am +++ b/winsup/Makefile.am @@ -8,7 +8,7 @@ # This makefile requires GNU make. -cygdocdir = $(datarootdir)/doc/Msys +cygdocdir = $(datarootdir)/doc/Cygwin cygdoc_DATA = \ CYGWIN_LICENSE \ diff --git a/winsup/configure.ac b/winsup/configure.ac index bacff0b794..0fc607aad5 100644 --- a/winsup/configure.ac +++ b/winsup/configure.ac @@ -12,7 +12,7 @@ AC_PREREQ([2.59]) AC_INIT([Cygwin],[0],[cygwin@cygwin.com],[cygwin],[https://cygwin.com]) AC_CONFIG_AUX_DIR(..) AC_CANONICAL_TARGET -AM_INIT_AUTOMAKE([dejagnu foreign no-define no-dist subdir-objects -Wall -Wno-portability -Wno-extra-portability]) +AM_INIT_AUTOMAKE([foreign no-define no-dist subdir-objects -Wall -Wno-portability -Wno-extra-portability]) AM_SILENT_RULES([yes]) realdirpath() { @@ -163,11 +163,6 @@ AC_CHECK_LIB([sframe], [sframe_decode], [BFD_LIBS="${BFD_LIBS} -lsframe"]) AC_CHECK_LIB([zstd], [ZSTD_isError], [BFD_LIBS="${BFD_LIBS} -lzstd"]) AC_SUBST([BFD_LIBS]) -AC_CHECK_LIB([sframe], [sframe_decode], - AC_MSG_NOTICE([Detected libsframe; Assuming that libbfd depends on it]), [true]) - -AM_CONDITIONAL(HAVE_LIBSFRAME, [test "x$ac_cv_lib_sframe_sframe_decode" = "xyes"]) - AC_CONFIG_FILES([ Makefile cygwin/Makefile @@ -176,7 +171,7 @@ AC_CONFIG_FILES([ utils/Makefile utils/mingw/Makefile testsuite/Makefile - testsuite/cygrun/Makefile + testsuite/mingw/Makefile ]) AC_OUTPUT diff --git a/winsup/cygserver/Makefile.am b/winsup/cygserver/Makefile.am index b0d5735a06..ec7a62240c 100644 --- a/winsup/cygserver/Makefile.am +++ b/winsup/cygserver/Makefile.am @@ -46,7 +46,7 @@ libcygserver_a_SOURCES = \ libcygserver_a_CXXFLAGS = $(cygserver_flags) -cygdocdir = $(datarootdir)/doc/Msys +cygdocdir = $(datarootdir)/doc/Cygwin install-data-local: @$(MKDIR_P) $(DESTDIR)$(cygdocdir) diff --git a/winsup/cygwin/Makefile.am b/winsup/cygwin/Makefile.am index a7607b0d67..abcb32360d 100644 --- a/winsup/cygwin/Makefile.am +++ b/winsup/cygwin/Makefile.am @@ -48,7 +48,6 @@ DLL_NAME=msys-2.0.dll NEW_DLL_NAME=new-msys-2.0.dll DEF_FILE=msys.def LIB_NAME=libmsys-2.0.a -TEST_LIB_NAME=libmsys0.a # # sources @@ -57,8 +56,16 @@ TEST_LIB_NAME=libmsys0.a # These objects are included directly into the import library if TARGET_X86_64 TARGET_FILES= \ - x86_64/memcpy.s \ - x86_64/memset.s + x86_64/bcopy.S \ + x86_64/memchr.S \ + x86_64/memcpy.S \ + x86_64/memmove.S \ + x86_64/mempcpy.S \ + x86_64/memset.S \ + x86_64/swab.S \ + x86_64/wmemcpy.S \ + x86_64/wmemmove.S \ + x86_64/wmempcpy.S endif LIB_FILES= \ @@ -82,11 +89,13 @@ FHANDLER_FILES= \ fhandler/console.cc \ fhandler/cygdrive.cc \ fhandler/dev.cc \ + fhandler/dev_disk.cc \ fhandler/dev_fd.cc \ fhandler/disk_file.cc \ fhandler/dsp.cc \ fhandler/fifo.cc \ fhandler/floppy.cc \ + fhandler/mixer.cc \ fhandler/mqueue.cc \ fhandler/netdrive.cc \ fhandler/nodevice.cc \ @@ -429,7 +438,8 @@ uname_version.c: .FORCE $(AM_V_GEN)cd $(srcdir) && \ echo "const char *uname_dev_version = \ \"$$(git rev-parse --git-dir >/dev/null 2>&1 && \ - git describe --dirty | sed -e 's/cygwin-//')\";" \ + git describe --abbrev=12 --long --match 'cygwin*' --dirty | \ + sed -e 's/cygwin-//')\";" \ > $(abs_builddir)/uname_version-pre.c && \ if [ -f $(abs_builddir)/uname_version.c ] && \ cmp $(abs_builddir)/uname_version.c \ @@ -569,6 +579,10 @@ toollib_DATA = \ libgmon_a_SOURCES = $(GMON_FILES) libgmon_a_LIBADD = +# Enable deterministic archives for reproducible builds. +ARFLAGS = cr$${SOURCE_DATE_EPOCH:+D} +override RANLIB := $(RANLIB)$${SOURCE_DATE_EPOCH:+ -D} + # cygserver library cygserver_blddir = ${target_builddir}/winsup/cygserver LIBSERVER = $(cygserver_blddir)/libcygserver.a @@ -576,7 +590,7 @@ LIBSERVER = $(cygserver_blddir)/libcygserver.a $(LIBSERVER): $(MAKE) -C $(cygserver_blddir) libcygserver.a -# We build as msys-2.0.dll and rename at install time to overcome native +# We build as new-msys-2.0.dll and rename at install time to overcome native # rebuilding issues (we don't want the build tools to see a partially built # msys-2.0.dll and attempt to use it instead of the old one). @@ -586,11 +600,13 @@ $(LDSCRIPT): $(LDSCRIPT).in $(AM_V_GEN)$(CC) -E - -P < $^ -o $@ # msys-2.0 dll +# Set PE and export table header timestamps to zero for reproducible builds. $(NEW_DLL_NAME): $(LDSCRIPT) libdll.a $(VERSION_OFILES) $(LIBSERVER)\ $(newlib_build)/libm.a $(newlib_build)/libc.a $(AM_V_CXXLD)$(CXX) $(CXXFLAGS) \ -mno-use-libstdc-wrappers \ -Wl,--gc-sections -nostdlib -Wl,-T$(LDSCRIPT) -static \ + $${SOURCE_DATE_EPOCH:+-Wl,--no-insert-timestamp} \ -Wl,--heap=0 -Wl,--out-implib,msysdll.a -shared -o $@ \ -e @DLL_ENTRY@ $(DEF_FILE) \ -Wl,-whole-archive libdll.a -Wl,-no-whole-archive \ @@ -599,6 +615,8 @@ $(NEW_DLL_NAME): $(LDSCRIPT) libdll.a $(VERSION_OFILES) $(LIBSERVER)\ $(newlib_build)/libm.a \ $(newlib_build)/libc.a \ -lgcc -lkernel32 -lntdll -Wl,-Map,msys.map + @$(MKDIR_P) ${target_builddir}/winsup/testsuite/testinst/bin/ + $(AM_V_at)$(INSTALL_PROGRAM) $(NEW_DLL_NAME) ${target_builddir}/winsup/testsuite/testinst/bin/$(DLL_NAME) # msys-2.0 import library toolopts=--cpu=@target_cpu@ --ar=@AR@ --as=@AS@ --nm=@NM@ --objcopy=@OBJCOPY@ @@ -615,10 +633,6 @@ LIBCOS=$(addsuffix .o,$(basename $(LIB_FILES))) $(LIB_NAME): $(DEF_FILE) $(LIBCOS) | $(NEW_DLL_NAME) $(AM_V_GEN)$(srcdir)/scripts/mkimport $(toolopts) $(NEW_FUNCTIONS) $@ msysdll.a $(wordlist 2,99,$^) -# msys-2.0 import library used by testsuite -$(TEST_LIB_NAME): $(LIB_NAME) - $(AM_V_GEN)perl -p -e 'BEGIN{binmode(STDIN); binmode(STDOUT);}; s/msys-2.0/msys0/g' < $? > $@ - # sublibs # import libraries for some subset of symbols indicated by given objects speclib=\ @@ -662,7 +676,7 @@ libssp.a: $(LIB_NAME) $(wildcard $(newlib_build)/libc/ssp/*.o) # all # -all-local: $(LIB_NAME) $(TEST_LIB_NAME) $(SUBLIBS) +all-local: $(LIB_NAME) $(SUBLIBS) # # clean @@ -673,7 +687,7 @@ clean-local: -rm -f $(DEF_FILE) sigfe.s -rm -f cygwin.sc msysdll.a msys.map -rm -f $(NEW_DLL_NAME) - -rm -f $(LIB_NAME) $(TEST_LIB_NAME) $(SUBLIBS) + -rm -f $(LIB_NAME) $(SUBLIBS) -rm -f version.cc -rm -f tlsoffsets @@ -715,7 +729,7 @@ install-ldif: uninstall-hook: uninstall-headers uninstall-ldif uninstall-libs uninstall-libs: - rm -f $(DESTDIR)$(bindir)/msys-2.0.dll + rm -f $(DESTDIR)$(bindir)/$(DLL_NAME) rm -f $(DESTDIR)$(toollibdir)/libg.a uninstall-headers: diff --git a/winsup/cygwin/aio.cc b/winsup/cygwin/aio.cc index 1c17aa7f65..c4b3389c46 100644 --- a/winsup/cygwin/aio.cc +++ b/winsup/cygwin/aio.cc @@ -905,7 +905,7 @@ aio_write (struct aiocb *aio) } int -lio_listio (int mode, struct aiocb *__restrict const aiolist[__restrict], +lio_listio (int mode, struct aiocb *__restrict const aiolist[__restrict_arr], int nent, struct sigevent *__restrict sig) { struct aiocb *aio; diff --git a/winsup/cygwin/autoload.cc b/winsup/cygwin/autoload.cc index c579befec9..54371d91d9 100644 --- a/winsup/cygwin/autoload.cc +++ b/winsup/cygwin/autoload.cc @@ -31,10 +31,12 @@ bool NO_COPY wsock_started; * we have: * DLL info (4/8 bytes) Pointer to a block of information concerning * the DLL (see below). - * DLL args (4 bytes) The number of arguments pushed on the stack by - * the call. If this is an odd value then this - * is a flag that non-existence of this function - * is not a fatal error + * DLL notimp (2 bytes) Bool value flagging that non-existence of this + * function is not a fatal error. + * DLL error (2 bytes) Error value returned if function load fails. + * Depends on the return type of the function. + * Default is 0 == BOOL FALSE or == HANDLE NULL or + * == Pointer NULL. * func addr (8 bytes) Address of the actual Win32 function. For the * reason why this is necessary, see the below * description of the load_state. @@ -87,16 +89,16 @@ bool NO_COPY wsock_started; /* Standard DLL load macro. May invoke a fatal error if the function isn't found. */ -#define LoadDLLfunc(name, n, dllname) \ - LoadDLLfuncEx (name, n, dllname, 0) -#define LoadDLLfuncEx(name, n, dllname, notimp) \ - LoadDLLfuncEx2(name, n, dllname, notimp, 0) -#define LoadDLLfuncEx2(name, n, dllname, notimp, err) \ - LoadDLLfuncEx3(name, n, dllname, notimp, err, 0) +#define LoadDLLfunc(name, dllname) \ + LoadDLLfuncEx (name, dllname, 0) +#define LoadDLLfuncEx(name, dllname, notimp) \ + LoadDLLfuncEx2(name, dllname, notimp, 0) +#define LoadDLLfuncEx2(name, dllname, notimp, err) \ + LoadDLLfuncEx3(name, dllname, notimp, err, 0) /* Main DLL setup stuff. */ #ifdef __x86_64__ -#define LoadDLLfuncEx3(name, n, dllname, notimp, err, no_resolve_on_fork) \ +#define LoadDLLfuncEx3(name, dllname, notimp, err, no_resolve_on_fork) \ LoadDLLprime (dllname, dll_func_load, no_resolve_on_fork) \ __asm__ (" \n\ .section ." #dllname "_autoload_text,\"wx\" \n\ @@ -115,7 +117,8 @@ _win32_" #name ": \n\ push %rcx \n\ call *(%rax) \n\ 2:.quad ." #dllname "_info \n\ - .long (" #n "+" #notimp ") | (((" #err ") & 0xff) <<16) \n\ + .hword " #notimp " \n\ + .hword ((" #err ") & 0xffff) \n\ 3:.quad 1b \n\ .asciz \"" #name "\" \n\ .text \n\ @@ -152,11 +155,11 @@ noload: \n\ test $1,%eax # of this function? \n\ jz 1f # Nope. \n\ andl $0xffff0000,%eax# upper word (== desired return value) \n\ + sarl $16,%eax # swap to low order word \n\ movl %eax,32(%rsp) # Save for later (in shadow space) \n\ movl $127,%ecx # ERROR_PROC_NOT_FOUND \n\ call SetLastError # Set it \n\ movl 32(%rsp),%eax # Get back return value \n\ - sarl $16,%eax # swap to low order word \n\ addq $40,%rsp # Revert stack \n\ pop %r10 # Drop pointer to 'return address' \n\ pop %rcx # Restore arg registers \n\ @@ -412,233 +415,233 @@ wsock_init (struct func_info *func) LoadDLLprime (ws2_32, _wsock_init, 0) -LoadDLLfunc (CheckTokenMembership, 12, advapi32) -LoadDLLfunc (CreateProcessAsUserW, 44, advapi32) -LoadDLLfunc (DeregisterEventSource, 4, advapi32) -LoadDLLfunc (DecryptFileW, 8, advapi32) -LoadDLLfunc (EncryptFileW, 4, advapi32) -LoadDLLfunc (LogonUserW, 24, advapi32) -LoadDLLfunc (LookupAccountNameW, 28, advapi32) -LoadDLLfunc (LookupAccountSidW, 28, advapi32) -LoadDLLfunc (LsaClose, 4, advapi32) -LoadDLLfunc (LsaEnumerateAccountRights, 16, advapi32) -LoadDLLfunc (LsaFreeMemory, 4, advapi32) -LoadDLLfunc (LsaLookupSids, 20, advapi32) -LoadDLLfunc (LsaOpenPolicy, 16, advapi32) -LoadDLLfunc (LsaQueryInformationPolicy, 12, advapi32) -LoadDLLfunc (LsaRetrievePrivateData, 12, advapi32) -LoadDLLfunc (LsaStorePrivateData, 12, advapi32) -LoadDLLfunc (RegOpenUserClassesRoot, 16, advapi32) -LoadDLLfunc (RegOpenCurrentUser, 8, advapi32) -LoadDLLfunc (RegCloseKey, 4, advapi32) -LoadDLLfunc (RegCreateKeyExW, 36, advapi32) -LoadDLLfunc (RegEnumKeyExW, 32, advapi32) -LoadDLLfunc (RegEnumValueW, 32, advapi32) -LoadDLLfunc (RegGetKeySecurity, 16, advapi32) -LoadDLLfunc (RegOpenKeyExW, 20, advapi32) -LoadDLLfunc (RegQueryInfoKeyW, 48, advapi32) -LoadDLLfunc (RegQueryValueExW, 24, advapi32) -LoadDLLfunc (RegisterEventSourceW, 8, advapi32) -LoadDLLfunc (ReportEventW, 36, advapi32) -LoadDLLfunc (SystemFunction036, 8, advapi32) /* Aka "RtlGenRandom" */ - -LoadDLLfunc (AuthzAccessCheck, 36, authz) -LoadDLLfunc (AuthzFreeContext, 4, authz) -LoadDLLfunc (AuthzInitializeContextFromSid, 32, authz) -LoadDLLfunc (AuthzInitializeContextFromToken, 32, authz) -LoadDLLfunc (AuthzInitializeResourceManager, 24, authz) - -LoadDLLfunc (DnsQuery_A, 24, dnsapi) -LoadDLLfunc (DnsFree, 8, dnsapi) - -LoadDLLfunc (GetAdaptersAddresses, 20, iphlpapi) -LoadDLLfunc (GetIfEntry, 4, iphlpapi) -LoadDLLfunc (GetIpAddrTable, 12, iphlpapi) -LoadDLLfunc (GetIpForwardTable, 12, iphlpapi) -LoadDLLfunc (GetNetworkParams, 8, iphlpapi) -LoadDLLfunc (GetTcpTable, 12, iphlpapi) -LoadDLLfunc (GetTcp6Table, 12, iphlpapi) -LoadDLLfunc (GetUdpTable, 12, iphlpapi) -LoadDLLfunc (if_indextoname, 8, iphlpapi) -LoadDLLfunc (if_nametoindex, 4, iphlpapi) - -LoadDLLfuncEx2 (DiscardVirtualMemory, 8, kernel32, 1, 127) -LoadDLLfunc (GetSystemTimePreciseAsFileTime, 4, kernel32) -LoadDLLfuncEx (IsWow64Process2, 12, kernel32, 1) -LoadDLLfuncEx (PrefetchVirtualMemory, 16, kernel32, 1) +LoadDLLfunc (CheckTokenMembership, advapi32) +LoadDLLfunc (CreateProcessAsUserW, advapi32) +LoadDLLfunc (DeregisterEventSource, advapi32) +LoadDLLfunc (DecryptFileW, advapi32) +LoadDLLfunc (EncryptFileW, advapi32) +LoadDLLfunc (LogonUserW, advapi32) +LoadDLLfunc (LookupAccountNameW, advapi32) +LoadDLLfunc (LookupAccountSidW, advapi32) +LoadDLLfunc (LsaClose, advapi32) +LoadDLLfunc (LsaEnumerateAccountRights, advapi32) +LoadDLLfunc (LsaFreeMemory, advapi32) +LoadDLLfunc (LsaLookupSids, advapi32) +LoadDLLfunc (LsaOpenPolicy, advapi32) +LoadDLLfunc (LsaQueryInformationPolicy, advapi32) +LoadDLLfunc (LsaRetrievePrivateData, advapi32) +LoadDLLfunc (LsaStorePrivateData, advapi32) +LoadDLLfunc (RegOpenUserClassesRoot, advapi32) +LoadDLLfunc (RegOpenCurrentUser, advapi32) +LoadDLLfunc (RegCloseKey, advapi32) +LoadDLLfunc (RegCreateKeyExW, advapi32) +LoadDLLfunc (RegEnumKeyExW, advapi32) +LoadDLLfunc (RegEnumValueW, advapi32) +LoadDLLfunc (RegGetKeySecurity, advapi32) +LoadDLLfunc (RegOpenKeyExW, advapi32) +LoadDLLfunc (RegQueryInfoKeyW, advapi32) +LoadDLLfunc (RegQueryValueExW, advapi32) +LoadDLLfunc (RegisterEventSourceW, advapi32) +LoadDLLfunc (ReportEventW, advapi32) +LoadDLLfunc (SystemFunction036, advapi32) /* Aka "RtlGenRandom" */ + +LoadDLLfunc (AuthzAccessCheck, authz) +LoadDLLfunc (AuthzFreeContext, authz) +LoadDLLfunc (AuthzInitializeContextFromSid, authz) +LoadDLLfunc (AuthzInitializeContextFromToken, authz) +LoadDLLfunc (AuthzInitializeResourceManager, authz) + +LoadDLLfunc (DnsQuery_A, dnsapi) +LoadDLLfunc (DnsFree, dnsapi) + +LoadDLLfunc (GetAdaptersAddresses, iphlpapi) +LoadDLLfunc (GetIfEntry, iphlpapi) +LoadDLLfunc (GetIpAddrTable, iphlpapi) +LoadDLLfunc (GetIpForwardTable, iphlpapi) +LoadDLLfunc (GetNetworkParams, iphlpapi) +LoadDLLfunc (GetTcpTable, iphlpapi) +LoadDLLfunc (GetTcp6Table, iphlpapi) +LoadDLLfunc (GetUdpTable, iphlpapi) + +LoadDLLfuncEx2 (DiscardVirtualMemory, kernel32, 1, 127) +LoadDLLfuncEx (ClosePseudoConsole, kernel32, 1) +LoadDLLfuncEx (CreatePseudoConsole, kernel32, 1) +LoadDLLfuncEx (IsWow64Process2, kernel32, 1) +LoadDLLfuncEx (ResizePseudoConsole, kernel32, 1) /* MSDN claims these are exported by kernel32.dll, but only QueryUnbiasedInterruptTime actually is. The others are only available via KernelBase.dll. */ -LoadDLLfunc (QueryInterruptTime, 4, KernelBase) -LoadDLLfunc (QueryInterruptTimePrecise, 4, KernelBase) -LoadDLLfunc (QueryUnbiasedInterruptTimePrecise, 4, KernelBase) -LoadDLLfuncEx (SetThreadDescription, 8, KernelBase, 1) -LoadDLLfunc (VirtualAlloc2, 28, KernelBase) - -LoadDLLfunc (NtMapViewOfSectionEx, 36, ntdll) -LoadDLLfuncEx (RtlSetProcessPlaceholderCompatibilityMode, 4, ntdll, 1) - -LoadDLLfunc (ldap_bind_s, 0, wldap32) -LoadDLLfunc (ldap_count_entries, 0, wldap32) -LoadDLLfunc (ldap_count_valuesW, 0, wldap32) -LoadDLLfunc (ldap_first_entry, 0, wldap32) -LoadDLLfunc (ldap_get_next_page_s, 0, wldap32) -LoadDLLfunc (ldap_get_valuesW, 0, wldap32) -LoadDLLfunc (ldap_get_values_lenW, 0, wldap32) -LoadDLLfunc (ldap_initW, 0, wldap32) -LoadDLLfunc (ldap_msgfree, 0, wldap32) -LoadDLLfunc (ldap_next_entry, 0, wldap32) -LoadDLLfunc (ldap_search_abandon_page, 0, wldap32) -LoadDLLfunc (ldap_search_init_pageW, 0, wldap32) -LoadDLLfunc (ldap_search_sW, 0, wldap32) -LoadDLLfunc (ldap_set_option, 0, wldap32) -LoadDLLfunc (ldap_sslinitW, 0, wldap32) -LoadDLLfunc (ldap_unbind, 0, wldap32) -LoadDLLfunc (ldap_value_freeW, 0, wldap32) -LoadDLLfunc (ldap_value_free_len, 0, wldap32) -LoadDLLfunc (LdapGetLastError, 0, wldap32) -LoadDLLfunc (LdapMapErrorToWin32, 0, wldap32) - -LoadDLLfunc (WNetCloseEnum, 4, mpr) -LoadDLLfunc (WNetEnumResourceW, 16, mpr) -LoadDLLfunc (WNetGetLastErrorW, 20, mpr) -LoadDLLfunc (WNetGetProviderNameW, 12, mpr) -LoadDLLfunc (WNetGetResourceInformationW, 16, mpr) -LoadDLLfunc (WNetOpenEnumW, 20, mpr) - -LoadDLLfunc (DsEnumerateDomainTrustsW, 16, netapi32) -LoadDLLfunc (DsGetDcNameW, 24, netapi32) -LoadDLLfunc (NetApiBufferFree, 4, netapi32) -LoadDLLfunc (NetGroupEnum, 28, netapi32) -LoadDLLfunc (NetLocalGroupEnum, 28, netapi32) -LoadDLLfunc (NetLocalGroupGetInfo, 16, netapi32) -LoadDLLfunc (NetUseGetInfo, 16, netapi32) -LoadDLLfunc (NetUserEnum, 32, netapi32) -LoadDLLfunc (NetUserGetGroups, 28, netapi32) -LoadDLLfunc (NetUserGetInfo, 16, netapi32) -LoadDLLfunc (NetUserGetLocalGroups, 32, netapi32) - -LoadDLLfunc (CoTaskMemFree, 4, ole32) - -LoadDLLfunc (LsaConnectUntrusted, 4, secur32) -LoadDLLfunc (LsaDeregisterLogonProcess, 4, secur32) -LoadDLLfunc (LsaFreeReturnBuffer, 4, secur32) -LoadDLLfunc (LsaLogonUser, 56, secur32) -LoadDLLfunc (LsaLookupAuthenticationPackage, 12, secur32) -LoadDLLfunc (LsaRegisterLogonProcess, 12, secur32) -LoadDLLfunc (TranslateNameW, 20, secur32) - -LoadDLLfunc (SHGetDesktopFolder, 4, shell32) - -LoadDLLfunc (CreateFontW, 56, gdi32) -LoadDLLfunc (DeleteObject, 4, gdi32) -LoadDLLfunc (EnumFontFamiliesExW, 20, gdi32) -LoadDLLfunc (GetGlyphIndicesW, 20, gdi32) -LoadDLLfunc (SelectObject, 8, gdi32) - -LoadDLLfunc (CloseClipboard, 0, user32) -LoadDLLfunc (CloseDesktop, 4, user32) -LoadDLLfunc (CloseWindowStation, 4, user32) -LoadDLLfunc (CreateDesktopW, 24, user32) -LoadDLLfunc (CreateWindowExW, 48, user32) -LoadDLLfunc (CreateWindowStationW, 16, user32) -LoadDLLfunc (DefWindowProcW, 16, user32) -LoadDLLfunc (DestroyWindow, 4, user32) -LoadDLLfunc (DispatchMessageW, 4, user32) -LoadDLLfunc (EmptyClipboard, 0, user32) -LoadDLLfunc (EnumWindows, 8, user32) -LoadDLLfunc (GetClipboardData, 4, user32) -LoadDLLfunc (GetDC, 4, user32) -LoadDLLfunc (GetForegroundWindow, 0, user32) -LoadDLLfunc (GetKeyboardLayout, 4, user32) -LoadDLLfunc (GetMessageW, 16, user32) -LoadDLLfunc (GetPriorityClipboardFormat, 8, user32) -LoadDLLfunc (GetProcessWindowStation, 0, user32) -LoadDLLfunc (GetThreadDesktop, 4, user32) -LoadDLLfunc (GetUserObjectInformationW, 20, user32) -LoadDLLfunc (GetWindowThreadProcessId, 8, user32) -LoadDLLfunc (MessageBeep, 4, user32) -LoadDLLfunc (MessageBoxW, 16, user32) -LoadDLLfunc (MsgWaitForMultipleObjectsEx, 20, user32) -LoadDLLfunc (OpenClipboard, 4, user32) -LoadDLLfunc (PeekMessageW, 20, user32) -LoadDLLfunc (PostMessageW, 16, user32) -LoadDLLfunc (PostQuitMessage, 4, user32) -LoadDLLfunc (RegisterClassW, 4, user32) -LoadDLLfunc (RegisterClipboardFormatW, 4, user32) -LoadDLLfunc (SendNotifyMessageW, 16, user32) -LoadDLLfunc (SetClipboardData, 8, user32) -LoadDLLfunc (SetParent, 8, user32) -LoadDLLfunc (SetProcessWindowStation, 4, user32) -LoadDLLfunc (SetThreadDesktop, 4, user32) -LoadDLLfunc (UnregisterClassW, 8, user32) - -LoadDLLfuncEx (CreateEnvironmentBlock, 12, userenv, 1) -LoadDLLfuncEx2 (CreateProfile, 16, userenv, 1, 1) -LoadDLLfunc (DestroyEnvironmentBlock, 4, userenv) -LoadDLLfunc (LoadUserProfileW, 8, userenv) - -LoadDLLfuncEx3 (waveInAddBuffer, 12, winmm, 1, 0, 1) -LoadDLLfuncEx3 (waveInClose, 4, winmm, 1, 0, 1) -LoadDLLfuncEx3 (waveInGetNumDevs, 0, winmm, 1, 0, 1) -LoadDLLfuncEx3 (waveInOpen, 24, winmm, 1, 0, 1) -LoadDLLfuncEx3 (waveInPrepareHeader, 12, winmm, 1, 0, 1) -LoadDLLfuncEx3 (waveInReset, 4, winmm, 1, 0, 1) -LoadDLLfuncEx3 (waveInStart, 4, winmm, 1, 0, 1) -LoadDLLfuncEx3 (waveInUnprepareHeader, 12, winmm, 1, 0, 1) -LoadDLLfuncEx3 (waveOutClose, 4, winmm, 1, 0, 1) -LoadDLLfuncEx3 (waveOutGetNumDevs, 0, winmm, 1, 0, 1) -LoadDLLfuncEx3 (waveOutGetVolume, 8, winmm, 1, 0, 1) -LoadDLLfuncEx3 (waveOutOpen, 24, winmm, 1, 0, 1) -LoadDLLfuncEx3 (waveOutPrepareHeader, 12, winmm, 1, 0, 1) -LoadDLLfuncEx3 (waveOutReset, 4, winmm, 1, 0, 1) -LoadDLLfuncEx3 (waveOutSetVolume, 8, winmm, 1, 0, 1) -LoadDLLfuncEx3 (waveOutUnprepareHeader, 12, winmm, 1, 0, 1) -LoadDLLfuncEx3 (waveOutWrite, 12, winmm, 1, 0, 1) - -LoadDLLfunc (accept, 12, ws2_32) -LoadDLLfunc (bind, 12, ws2_32) -LoadDLLfunc (closesocket, 4, ws2_32) -LoadDLLfunc (connect, 12, ws2_32) -LoadDLLfunc (FreeAddrInfoW, 4, ws2_32) -LoadDLLfunc (GetAddrInfoW, 16, ws2_32) -LoadDLLfunc (GetNameInfoW, 28, ws2_32) -LoadDLLfunc (gethostbyaddr, 12, ws2_32) -LoadDLLfunc (gethostbyname, 4, ws2_32) -LoadDLLfunc (gethostname, 8, ws2_32) -LoadDLLfunc (getpeername, 12, ws2_32) -LoadDLLfunc (getprotobyname, 4, ws2_32) -LoadDLLfunc (getprotobynumber, 4, ws2_32) -LoadDLLfunc (getservbyname, 8, ws2_32) -LoadDLLfunc (getservbyport, 8, ws2_32) -LoadDLLfunc (getsockname, 12, ws2_32) -LoadDLLfunc (getsockopt, 20, ws2_32) -LoadDLLfunc (ioctlsocket, 12, ws2_32) -LoadDLLfunc (listen, 8, ws2_32) -LoadDLLfunc (setsockopt, 20, ws2_32) -LoadDLLfunc (shutdown, 8, ws2_32) -LoadDLLfunc (socket, 12, ws2_32) -LoadDLLfunc (WSAAsyncSelect, 16, ws2_32) -LoadDLLfunc (WSADuplicateSocketW, 12, ws2_32) -LoadDLLfunc (WSAEnumNetworkEvents, 12, ws2_32) -LoadDLLfunc (WSAEventSelect, 12, ws2_32) -LoadDLLfunc (WSAGetLastError, 0, ws2_32) -LoadDLLfunc (WSAIoctl, 36, ws2_32) -LoadDLLfunc (WSARecv, 28, ws2_32) -LoadDLLfunc (WSARecvFrom, 36, ws2_32) -LoadDLLfunc (WSASendMsg, 24, ws2_32) -LoadDLLfunc (WSASendTo, 36, ws2_32) -LoadDLLfunc (WSASetLastError, 4, ws2_32) -LoadDLLfunc (WSASocketW, 24, ws2_32) -// LoadDLLfunc (WSAStartup, 8, ws2_32) -LoadDLLfunc (WSAWaitForMultipleEvents, 20, ws2_32) - -LoadDLLfunc (PdhAddEnglishCounterW, 16, pdh) -LoadDLLfunc (PdhCollectQueryData, 4, pdh) -LoadDLLfunc (PdhGetFormattedCounterValue, 16, pdh) -LoadDLLfunc (PdhOpenQueryW, 12, pdh) -LoadDLLfuncEx (CreatePseudoConsole, 20, kernel32, 1) -LoadDLLfuncEx (ResizePseudoConsole, 8, kernel32, 1) -LoadDLLfuncEx (ClosePseudoConsole, 4, kernel32, 1) +LoadDLLfunc (QueryInterruptTime, KernelBase) +LoadDLLfunc (QueryInterruptTimePrecise, KernelBase) +LoadDLLfunc (QueryUnbiasedInterruptTimePrecise, KernelBase) +LoadDLLfuncEx (SetThreadDescription, KernelBase, 1) +LoadDLLfunc (VirtualAlloc2, KernelBase) + +LoadDLLfunc (NtMapViewOfSectionEx, ntdll) +LoadDLLfuncEx (RtlSetProcessPlaceholderCompatibilityMode, ntdll, 1) + +LoadDLLfunc (ldap_bind_s, wldap32) +LoadDLLfunc (ldap_count_entries, wldap32) +LoadDLLfunc (ldap_count_valuesW, wldap32) +LoadDLLfunc (ldap_first_entry, wldap32) +LoadDLLfunc (ldap_get_next_page_s, wldap32) +LoadDLLfunc (ldap_get_valuesW, wldap32) +LoadDLLfunc (ldap_get_values_lenW, wldap32) +LoadDLLfunc (ldap_initW, wldap32) +LoadDLLfunc (ldap_msgfree, wldap32) +LoadDLLfunc (ldap_next_entry, wldap32) +LoadDLLfunc (ldap_search_abandon_page, wldap32) +LoadDLLfunc (ldap_search_init_pageW, wldap32) +LoadDLLfunc (ldap_search_sW, wldap32) +LoadDLLfunc (ldap_set_option, wldap32) +LoadDLLfunc (ldap_sslinitW, wldap32) +LoadDLLfunc (ldap_unbind, wldap32) +LoadDLLfunc (ldap_value_freeW, wldap32) +LoadDLLfunc (ldap_value_free_len, wldap32) +LoadDLLfunc (LdapGetLastError, wldap32) +LoadDLLfunc (LdapMapErrorToWin32, wldap32) + +LoadDLLfunc (WNetCloseEnum, mpr) +LoadDLLfunc (WNetEnumResourceW, mpr) +LoadDLLfunc (WNetGetLastErrorW, mpr) +LoadDLLfunc (WNetGetProviderNameW, mpr) +LoadDLLfunc (WNetGetResourceInformationW, mpr) +LoadDLLfunc (WNetOpenEnumW, mpr) + +LoadDLLfunc (DsEnumerateDomainTrustsW, netapi32) +LoadDLLfunc (DsGetDcNameW, netapi32) +LoadDLLfunc (NetApiBufferFree, netapi32) +LoadDLLfunc (NetGroupEnum, netapi32) +LoadDLLfunc (NetLocalGroupEnum, netapi32) +LoadDLLfunc (NetLocalGroupGetInfo, netapi32) +LoadDLLfunc (NetUseGetInfo, netapi32) +LoadDLLfunc (NetUserEnum, netapi32) +LoadDLLfunc (NetUserGetGroups, netapi32) +LoadDLLfunc (NetUserGetInfo, netapi32) +LoadDLLfunc (NetUserGetLocalGroups, netapi32) + +LoadDLLfunc (CoTaskMemFree, ole32) + +LoadDLLfunc (LsaConnectUntrusted, secur32) +LoadDLLfunc (LsaDeregisterLogonProcess, secur32) +LoadDLLfunc (LsaFreeReturnBuffer, secur32) +LoadDLLfunc (LsaLogonUser, secur32) +LoadDLLfunc (LsaLookupAuthenticationPackage, secur32) +LoadDLLfunc (LsaRegisterLogonProcess, secur32) +LoadDLLfunc (TranslateNameW, secur32) + +LoadDLLfunc (SHGetDesktopFolder, shell32) + +LoadDLLfunc (CreateFontW, gdi32) +LoadDLLfunc (DeleteObject, gdi32) +LoadDLLfunc (EnumFontFamiliesExW, gdi32) +LoadDLLfunc (GetGlyphIndicesW, gdi32) +LoadDLLfunc (SelectObject, gdi32) + +LoadDLLfunc (CloseClipboard, user32) +LoadDLLfunc (CloseDesktop, user32) +LoadDLLfunc (CloseWindowStation, user32) +LoadDLLfunc (CreateDesktopW, user32) +LoadDLLfunc (CreateWindowExW, user32) +LoadDLLfunc (CreateWindowStationW, user32) +LoadDLLfunc (DefWindowProcW, user32) +LoadDLLfunc (DestroyWindow, user32) +LoadDLLfunc (DispatchMessageW, user32) +LoadDLLfunc (EmptyClipboard, user32) +LoadDLLfunc (EnumChildWindows, user32) +LoadDLLfunc (EnumWindows, user32) +LoadDLLfunc (GetClassNameA, user32) +LoadDLLfunc (GetClipboardData, user32) +LoadDLLfunc (GetDC, user32) +LoadDLLfunc (GetForegroundWindow, user32) +LoadDLLfunc (GetKeyboardLayout, user32) +LoadDLLfunc (GetMessageW, user32) +LoadDLLfunc (GetPriorityClipboardFormat, user32) +LoadDLLfunc (GetProcessWindowStation, user32) +LoadDLLfunc (GetThreadDesktop, user32) +LoadDLLfunc (GetUserObjectInformationW, user32) +LoadDLLfunc (GetWindowThreadProcessId, user32) +LoadDLLfunc (MessageBeep, user32) +LoadDLLfunc (MessageBoxW, user32) +LoadDLLfunc (MsgWaitForMultipleObjectsEx, user32) +LoadDLLfunc (OpenClipboard, user32) +LoadDLLfunc (PeekMessageW, user32) +LoadDLLfunc (PostMessageW, user32) +LoadDLLfunc (PostQuitMessage, user32) +LoadDLLfunc (RegisterClassW, user32) +LoadDLLfunc (RegisterClipboardFormatW, user32) +LoadDLLfunc (SendNotifyMessageW, user32) +LoadDLLfunc (SetClipboardData, user32) +LoadDLLfunc (SetParent, user32) +LoadDLLfunc (SetProcessWindowStation, user32) +LoadDLLfunc (SetThreadDesktop, user32) +LoadDLLfunc (UnregisterClassW, user32) + +LoadDLLfuncEx (CreateEnvironmentBlock, userenv, 1) +LoadDLLfuncEx2 (CreateProfile, userenv, 1, 1) +LoadDLLfunc (DestroyEnvironmentBlock, userenv) +LoadDLLfunc (LoadUserProfileW, userenv) + +LoadDLLfuncEx3 (waveInAddBuffer, winmm, 1, 0, 1) +LoadDLLfuncEx3 (waveInClose, winmm, 1, 0, 1) +LoadDLLfuncEx3 (waveInGetNumDevs, winmm, 1, 0, 1) +LoadDLLfuncEx3 (waveInOpen, winmm, 1, 0, 1) +LoadDLLfuncEx3 (waveInPrepareHeader, winmm, 1, 0, 1) +LoadDLLfuncEx3 (waveInReset, winmm, 1, 0, 1) +LoadDLLfuncEx3 (waveInStart, winmm, 1, 0, 1) +LoadDLLfuncEx3 (waveInUnprepareHeader, winmm, 1, 0, 1) +LoadDLLfuncEx3 (waveOutClose, winmm, 1, 0, 1) +LoadDLLfuncEx3 (waveOutGetNumDevs, winmm, 1, 0, 1) +LoadDLLfuncEx3 (waveOutGetVolume, winmm, 1, 0, 1) +LoadDLLfuncEx3 (waveOutOpen, winmm, 1, 0, 1) +LoadDLLfuncEx3 (waveOutPrepareHeader, winmm, 1, 0, 1) +LoadDLLfuncEx3 (waveOutReset, winmm, 1, 0, 1) +LoadDLLfuncEx3 (waveOutSetVolume, winmm, 1, 0, 1) +LoadDLLfuncEx3 (waveOutUnprepareHeader, winmm, 1, 0, 1) +LoadDLLfuncEx3 (waveOutWrite, winmm, 1, 0, 1) +LoadDLLfuncEx3 (waveOutMessage, winmm, 1, 0, 1) +LoadDLLfuncEx3 (waveOutGetDevCapsA, winmm, 1, 0, 1) + +LoadDLLfunc (accept, ws2_32) +LoadDLLfunc (bind, ws2_32) +LoadDLLfunc (closesocket, ws2_32) +LoadDLLfunc (connect, ws2_32) +LoadDLLfunc (FreeAddrInfoW, ws2_32) +LoadDLLfunc (GetAddrInfoW, ws2_32) +LoadDLLfunc (GetNameInfoW, ws2_32) +LoadDLLfunc (gethostbyaddr, ws2_32) +LoadDLLfunc (gethostbyname, ws2_32) +LoadDLLfunc (gethostname, ws2_32) +LoadDLLfunc (getpeername, ws2_32) +LoadDLLfunc (getprotobyname, ws2_32) +LoadDLLfunc (getprotobynumber, ws2_32) +LoadDLLfunc (getservbyname, ws2_32) +LoadDLLfunc (getservbyport, ws2_32) +LoadDLLfunc (getsockname, ws2_32) +LoadDLLfunc (getsockopt, ws2_32) +LoadDLLfunc (ioctlsocket, ws2_32) +LoadDLLfunc (listen, ws2_32) +LoadDLLfunc (setsockopt, ws2_32) +LoadDLLfunc (shutdown, ws2_32) +LoadDLLfunc (socket, ws2_32) +LoadDLLfunc (WSAAsyncSelect, ws2_32) +LoadDLLfunc (WSADuplicateSocketW, ws2_32) +LoadDLLfunc (WSAEnumNetworkEvents, ws2_32) +LoadDLLfunc (WSAEventSelect, ws2_32) +LoadDLLfunc (WSAGetLastError, ws2_32) +LoadDLLfunc (WSAIoctl, ws2_32) +LoadDLLfunc (WSARecv, ws2_32) +LoadDLLfunc (WSARecvFrom, ws2_32) +LoadDLLfunc (WSASendMsg, ws2_32) +LoadDLLfunc (WSASendTo, ws2_32) +LoadDLLfunc (WSASetLastError, ws2_32) +LoadDLLfunc (WSASocketW, ws2_32) +// LoadDLLfunc (WSAStartup, ws2_32) +LoadDLLfunc (WSAWaitForMultipleEvents, ws2_32) + +LoadDLLfunc (PdhAddEnglishCounterW, pdh) +LoadDLLfunc (PdhCollectQueryData, pdh) +LoadDLLfunc (PdhGetFormattedCounterValue, pdh) +LoadDLLfunc (PdhOpenQueryW, pdh) } diff --git a/winsup/cygwin/clock.cc b/winsup/cygwin/clock.cc index 0c0bd9994e..1c675f0f26 100644 --- a/winsup/cygwin/clock.cc +++ b/winsup/cygwin/clock.cc @@ -40,13 +40,8 @@ clk_t::init () void inline clk_realtime_t::init () { - if (wincap.has_precise_system_time ()) - { - if (!ticks_per_sec) - InterlockedExchange64 (&ticks_per_sec, system_qpc_tickspersec ()); - } - else if (!period) - InterlockedExchange64 (&period, system_tickcount_period ()); + if (!ticks_per_sec) + InterlockedExchange64 (&ticks_per_sec, system_qpc_tickspersec ()); } void inline @@ -74,9 +69,7 @@ clk_realtime_t::now (clockid_t clockid, struct timespec *ts) { LARGE_INTEGER now; - wincap.has_precise_system_time () - ? GetSystemTimePreciseAsFileTime ((LPFILETIME) &now) - : GetSystemTimeAsFileTime ((LPFILETIME) &now); + GetSystemTimePreciseAsFileTime ((LPFILETIME) &now); /* Add conversion factor for UNIX vs. Windows base time */ now.QuadPart -= FACTOR; ts->tv_sec = now.QuadPart / NS100PERSEC; @@ -236,10 +229,7 @@ clk_realtime_t::resolution (struct timespec *ts) { init (); ts->tv_sec = 0; - if (wincap.has_precise_system_time ()) - ts->tv_nsec = NSPERSEC / ticks_per_sec; - else - ts->tv_nsec = period * (NSPERSEC/NS100PERSEC); + ts->tv_nsec = NSPERSEC / ticks_per_sec; } void diff --git a/winsup/cygwin/ctype.cc b/winsup/cygwin/ctype.cc index 7bdc78edf0..d99e331baa 100644 --- a/winsup/cygwin/ctype.cc +++ b/winsup/cygwin/ctype.cc @@ -16,7 +16,7 @@ extern char _ctype_b[128 + 256]; time-critical anyway. */ extern int __iso_8859_index (const char *charset_ext); /* Newlib */ extern int __cp_index (const char *charset_ext); /* Newlib */ -extern const char __ctype_cp[22][128 + 256]; /* Newlib */ +extern const char __ctype_cp[27][128 + 256]; /* Newlib */ extern const char __ctype_iso[15][128 + 256]; /* Newlib */ void diff --git a/winsup/cygwin/cygthread.cc b/winsup/cygwin/cygthread.cc index 518d11fdf2..54918e7677 100644 --- a/winsup/cygwin/cygthread.cc +++ b/winsup/cygwin/cygthread.cc @@ -170,7 +170,7 @@ new (size_t) } #ifdef DEBUGGING - if (!getenv ("MSYS_FREERANGE_NOCHECK")) + if (!getenv ("CYGWIN_FREERANGE_NOCHECK")) api_fatal ("overflowed cygwin thread pool"); else thread_printf ("overflowed cygwin thread pool"); diff --git a/winsup/cygwin/cygwin.din b/winsup/cygwin/cygwin.din index 565c89fbf1..f9d458e40e 100644 --- a/winsup/cygwin/cygwin.din +++ b/winsup/cygwin/cygwin.din @@ -270,6 +270,8 @@ bindresvport_sa = cygwin_bindresvport_sa SIGFE bsearch NOSIGFE btowc NOSIGFE bzero NOSIGFE +c16rtomb NOSIGFE +c32rtomb NOSIGFE cabs NOSIGFE cabsf NOSIGFE cabsl NOSIGFE @@ -345,6 +347,7 @@ clog10l NOSIGFE clogf NOSIGFE clogl NOSIGFE close SIGFE +close_range SIGFE closedir SIGFE closelog SIGFE cnd_broadcast SIGFE @@ -504,6 +507,7 @@ fabsf NOSIGFE fabsl NOSIGFE faccessat SIGFE facl SIGFE +fallocate SIGFE fchdir SIGFE fchmod SIGFE fchmodat SIGFE @@ -938,6 +942,8 @@ malloc_trim SIGFE malloc_usable_size SIGFE mallopt SIGFE mblen NOSIGFE +mbrtoc16 NOSIGFE +mbrtoc32 NOSIGFE mbrlen NOSIGFE mbrtowc NOSIGFE mbsinit NOSIGFE @@ -1042,8 +1048,10 @@ posix_madvise SIGFE posix_memalign SIGFE posix_openpt SIGFE posix_spawn SIGFE +posix_spawn_file_actions_addchdir_np SIGFE posix_spawn_file_actions_addclose SIGFE posix_spawn_file_actions_adddup2 SIGFE +posix_spawn_file_actions_addfchdir_np SIGFE posix_spawn_file_actions_addopen SIGFE posix_spawn_file_actions_destroy SIGFE posix_spawn_file_actions_init SIGFE diff --git a/winsup/cygwin/dcrt0.cc b/winsup/cygwin/dcrt0.cc index f4d79b97df..049e003796 100644 --- a/winsup/cygwin/dcrt0.cc +++ b/winsup/cygwin/dcrt0.cc @@ -64,7 +64,7 @@ do_global_dtors () static void do_global_ctors (void (**in_pfunc)(), int force) { - if (!force && in_forkee) + if (!force && __in_forkee == FORKING) return; // inherit constructed stuff from parent pid /* Run ctors backwards, so skip the first entry and find how many @@ -236,6 +236,7 @@ globify (char *word, char **&argv, int &argc, int &argvlen) char quote = *s; while (*++s && *s != quote) { + mbstate_t mbs = { 0 }; /* This used to be: if (dos_spec || *s != '\\') // nothing @@ -251,7 +252,7 @@ globify (char *word, char **&argv, int &argc, int &argvlen) if (*s == '\\' && (s[1] == quote || s[1] == '\\')) s++; *p++ = '\\'; - size_t cnt = isascii (*s) ? 1 : mbtowc (NULL, s, MB_CUR_MAX); + size_t cnt = isascii (*s) ? 1 : mbrtowi (NULL, s, MB_CUR_MAX, &mbs); if (cnt <= 1 || cnt == (size_t)-1) *p++ = *s; else @@ -388,12 +389,12 @@ check_sanity_and_sync (per_process *p) /* magic_biscuit must be SIZEOF_PER_PROCESS. */ if (p->magic_biscuit != SIZEOF_PER_PROCESS) - api_fatal ("Incompatible msys .dll -- incompatible per_process info %u != %u", + api_fatal ("Incompatible cygwin .dll -- incompatible per_process info %u != %u", p->magic_biscuit, SIZEOF_PER_PROCESS); /* Complain if incompatible API changes made */ if (p->api_major > cygwin_version.api_major) - api_fatal ("msys DLL and APP are out of sync -- API version mismatch %u > %u", + api_fatal ("cygwin DLL and APP are out of sync -- API version mismatch %u > %u", p->api_major, cygwin_version.api_major); } @@ -488,12 +489,12 @@ break_here () static void initial_env () { - if (GetEnvironmentVariableA ("MSYS_TESTING", NULL, 0)) + if (GetEnvironmentVariableA ("CYGWIN_TESTING", NULL, 0)) _cygwin_testing = 1; #ifdef DEBUGGING char buf[PATH_MAX]; - if (GetEnvironmentVariableA ("MSYS_DEBUG", buf, sizeof (buf) - 1)) + if (GetEnvironmentVariableA ("CYGWIN_DEBUG", buf, sizeof (buf) - 1)) { char buf1[PATH_MAX]; GetModuleFileName (NULL, buf1, PATH_MAX); @@ -544,7 +545,7 @@ get_cygwin_startup_info () switch (res->type) { case _CH_FORK: - in_forkee = true; + __in_forkee = FORKING; should_be_cb = sizeof (child_info_fork); fallthrough; case _CH_SPAWN: @@ -815,7 +816,7 @@ dll_crt0_1 (void *) _my_tls.incyg++; /* Inherit "parent" exec'ed process sigmask */ - if (spawn_info && !in_forkee) + if (spawn_info && __in_forkee != FORKING) _my_tls.sigmask = spawn_info->sigmask; if (dynamically_loaded) @@ -855,7 +856,7 @@ dll_crt0_1 (void *) /* Initialize pthread mainthread when not forked and it is safe to call new, otherwise it is reinitalized in fixup_after_fork */ - if (!in_forkee) + if (__in_forkee != FORKING) { pthread::init_mainthread (); _pei386_runtime_relocator (user_data); @@ -866,7 +867,7 @@ dll_crt0_1 (void *) #endif cygbench ("pre-forkee"); - if (in_forkee) + if (__in_forkee == FORKING) { /* Make sure to restore the TEB's stack info. If guardsize is -1 the stack has been provided by the application and must not be deallocated @@ -1034,7 +1035,7 @@ _dll_crt0 () under our own control and avoids collision with the OS. */ if (!dynamically_loaded) { - if (!in_forkee) + if (__in_forkee != FORKING) { /* Must be static since it's referenced after the stack and frame pointer registers have been changed. */ @@ -1072,7 +1073,7 @@ void dll_crt0 (per_process *uptr) { /* Set the local copy of the pointer into the user space. */ - if (!in_forkee && uptr && uptr != user_data) + if (__in_forkee != FORKING && uptr && uptr != user_data) { memcpy (user_data, uptr, per_process_overwrite); *(user_data->impure_ptr_ptr) = _GLOBAL_REENT; @@ -1266,15 +1267,13 @@ extern "C" void vapi_fatal (const char *fmt, va_list ap) { char buf[4096]; - int n = __small_sprintf (buf, "%P: *** fatal error %s- ", in_forkee ? "in forked process " : ""); + int n = __small_sprintf (buf, "%P: *** fatal error %s- ", + (__in_forkee == FORKING) + ? "in forked process " : ""); __small_vsprintf (buf + n, fmt, ap); va_end (ap); strace.prntf (_STRACE_SYSTEM, NULL, "%s", buf); - -#ifdef DEBUGGING - try_to_debug (); -#endif - cygwin_stackdump (); + api_fatal_debug(); myself.exit (__api_fatal_exit_val); } @@ -1296,7 +1295,7 @@ multiple_cygwin_problem (const char *what, uintptr_t magic_version, uintptr_t ve return; } - if (GetEnvironmentVariableA ("MSYS_MISMATCH_OK", NULL, 0)) + if (GetEnvironmentVariableA ("CYGWIN_MISMATCH_OK", NULL, 0)) return; if (CYGWIN_VERSION_MAGIC_VERSION (magic_version) == version) @@ -1316,7 +1315,7 @@ are unable to find another cygwin DLL.", void cygbench (const char *s) { - if (GetEnvironmentVariableA ("MSYS_BENCH", NULL, 0)) + if (GetEnvironmentVariableA ("CYGWIN_BENCH", NULL, 0)) small_printf ("%05u ***** %s : %10d\n", GetCurrentProcessId (), s, strace.microseconds ()); } #endif diff --git a/winsup/cygwin/devices.cc b/winsup/cygwin/devices.cc index b2c9914e84..6eb6a41d16 100644 --- a/winsup/cygwin/devices.cc +++ b/winsup/cygwin/devices.cc @@ -81,8 +81,12 @@ exists_console (const device& dev) return cygheap && cygheap->ctty && cygheap->ctty->is_console () && fhandler_console::exists (); default: - /* Only show my own console device (for now?) */ - return iscons_dev (myself->ctty) && myself->ctty == devn; + if (dev.get_minor () < MAX_CONS_DEV) + { + int n = fhandler_console::console_unit (dev.get_minor ()); + return (n == dev.get_minor ()); + } + return false; } } @@ -99,6 +103,9 @@ const _device dev_cygdrive_storage = const _device dev_fs_storage = {"", {FH_FS}, "", exists}; +const _device dev_dev_disk_storage = + {"", {FH_DEV_DISK}, "", exists}; + const _device dev_proc_storage = {"", {FH_PROC}, "", exists}; @@ -302,6 +309,7 @@ const _RDATA _device dev_storage[] = {"/dev/cons126", BRACK(FHDEV(DEV_CONS_MAJOR, 126)), "/dev/cons126", exists_console, S_IFCHR, true}, {"/dev/cons127", BRACK(FHDEV(DEV_CONS_MAJOR, 127)), "/dev/cons127", exists_console, S_IFCHR, true}, {"/dev/console", BRACK(FH_CONSOLE), "/dev/console", exists_console, S_IFCHR, true}, + {"/dev/disk", BRACK(FH_DEV_DISK), "", exists, S_IFDIR, true}, {"/dev/dsp", BRACK(FH_OSS_DSP), "\\Device\\Null", exists_ntdev, S_IFCHR, true}, {"/dev/fd", BRACK(FH_DEV_FD), "/proc/self/fd", exists, S_IFLNK, true}, {"/dev/fd0", BRACK(FHDEV(DEV_FLOPPY_MAJOR, 0)), "\\Device\\Floppy0", exists_ntdev, S_IFBLK, true}, @@ -321,6 +329,7 @@ const _RDATA _device dev_storage[] = {"/dev/fd14", BRACK(FHDEV(DEV_FLOPPY_MAJOR, 14)), "\\Device\\Floppy14", exists_ntdev, S_IFBLK, true}, {"/dev/fd15", BRACK(FHDEV(DEV_FLOPPY_MAJOR, 15)), "\\Device\\Floppy15", exists_ntdev, S_IFBLK, true}, {"/dev/full", BRACK(FH_FULL), "\\Device\\Null", exists_ntdev, S_IFCHR, true}, + {"/dev/mixer", BRACK(FH_OSS_MIXER), "\\Device\\Null", exists_ntdev, S_IFCHR, true}, {"/dev/nst0", BRACK(FHDEV(DEV_TAPE_MAJOR, 128)), "\\Device\\Tape0", exists_ntdev, S_IFCHR, true}, {"/dev/nst1", BRACK(FHDEV(DEV_TAPE_MAJOR, 129)), "\\Device\\Tape1", exists_ntdev, S_IFCHR, true}, {"/dev/nst2", BRACK(FHDEV(DEV_TAPE_MAJOR, 130)), "\\Device\\Tape2", exists_ntdev, S_IFCHR, true}, @@ -1009,9 +1018,9 @@ const _RDATA _device dev_storage[] = const _device *cons_dev = dev_storage + 20; const _device *console_dev = dev_storage + 148; -const _device *ptym_dev = dev_storage + 724; -const _device *ptys_dev = dev_storage + 298; -const _device *urandom_dev = dev_storage + 719; +const _device *ptym_dev = dev_storage + 726; +const _device *ptys_dev = dev_storage + 300; +const _device *urandom_dev = dev_storage + 721; static KR_device_t KR_find_keyword (const char *KR_keyword, int KR_length) @@ -1041,7 +1050,7 @@ return NULL; if (strncmp (KR_keyword, ":pipe", 5) == 0) { { -return dev_storage + 723; +return dev_storage + 725; } } @@ -1056,7 +1065,7 @@ return NULL; if (strncmp (KR_keyword, ":fifo", 5) == 0) { { -return dev_storage + 722; +return dev_storage + 724; } } @@ -1080,7 +1089,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym9", 6) == 0) { { -return dev_storage + 733; +return dev_storage + 735; } } @@ -1095,7 +1104,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym8", 6) == 0) { { -return dev_storage + 732; +return dev_storage + 734; } } @@ -1110,7 +1119,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym7", 6) == 0) { { -return dev_storage + 731; +return dev_storage + 733; } } @@ -1125,7 +1134,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym6", 6) == 0) { { -return dev_storage + 730; +return dev_storage + 732; } } @@ -1140,7 +1149,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym5", 6) == 0) { { -return dev_storage + 729; +return dev_storage + 731; } } @@ -1155,7 +1164,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym4", 6) == 0) { { -return dev_storage + 728; +return dev_storage + 730; } } @@ -1170,7 +1179,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym3", 6) == 0) { { -return dev_storage + 727; +return dev_storage + 729; } } @@ -1185,7 +1194,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym2", 6) == 0) { { -return dev_storage + 726; +return dev_storage + 728; } } @@ -1200,7 +1209,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym1", 6) == 0) { { -return dev_storage + 725; +return dev_storage + 727; } } @@ -1215,7 +1224,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym0", 6) == 0) { { -return dev_storage + 724; +return dev_storage + 726; } } @@ -1239,7 +1248,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/fd", 7) == 0) { { -return dev_storage + 150; +return dev_storage + 151; } } @@ -1257,7 +1266,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym99", 7) == 0) { { -return dev_storage + 823; +return dev_storage + 825; } } @@ -1272,7 +1281,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym98", 7) == 0) { { -return dev_storage + 822; +return dev_storage + 824; } } @@ -1287,7 +1296,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym97", 7) == 0) { { -return dev_storage + 821; +return dev_storage + 823; } } @@ -1302,7 +1311,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym96", 7) == 0) { { -return dev_storage + 820; +return dev_storage + 822; } } @@ -1317,7 +1326,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym95", 7) == 0) { { -return dev_storage + 819; +return dev_storage + 821; } } @@ -1332,7 +1341,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym94", 7) == 0) { { -return dev_storage + 818; +return dev_storage + 820; } } @@ -1347,7 +1356,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym93", 7) == 0) { { -return dev_storage + 817; +return dev_storage + 819; } } @@ -1362,7 +1371,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym92", 7) == 0) { { -return dev_storage + 816; +return dev_storage + 818; } } @@ -1377,7 +1386,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym91", 7) == 0) { { -return dev_storage + 815; +return dev_storage + 817; } } @@ -1392,7 +1401,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym90", 7) == 0) { { -return dev_storage + 814; +return dev_storage + 816; } } @@ -1416,7 +1425,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym89", 7) == 0) { { -return dev_storage + 813; +return dev_storage + 815; } } @@ -1431,7 +1440,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym88", 7) == 0) { { -return dev_storage + 812; +return dev_storage + 814; } } @@ -1446,7 +1455,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym87", 7) == 0) { { -return dev_storage + 811; +return dev_storage + 813; } } @@ -1461,7 +1470,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym86", 7) == 0) { { -return dev_storage + 810; +return dev_storage + 812; } } @@ -1476,7 +1485,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym85", 7) == 0) { { -return dev_storage + 809; +return dev_storage + 811; } } @@ -1491,7 +1500,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym84", 7) == 0) { { -return dev_storage + 808; +return dev_storage + 810; } } @@ -1506,7 +1515,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym83", 7) == 0) { { -return dev_storage + 807; +return dev_storage + 809; } } @@ -1521,7 +1530,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym82", 7) == 0) { { -return dev_storage + 806; +return dev_storage + 808; } } @@ -1536,7 +1545,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym81", 7) == 0) { { -return dev_storage + 805; +return dev_storage + 807; } } @@ -1551,7 +1560,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym80", 7) == 0) { { -return dev_storage + 804; +return dev_storage + 806; } } @@ -1575,7 +1584,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym79", 7) == 0) { { -return dev_storage + 803; +return dev_storage + 805; } } @@ -1590,7 +1599,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym78", 7) == 0) { { -return dev_storage + 802; +return dev_storage + 804; } } @@ -1605,7 +1614,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym77", 7) == 0) { { -return dev_storage + 801; +return dev_storage + 803; } } @@ -1620,7 +1629,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym76", 7) == 0) { { -return dev_storage + 800; +return dev_storage + 802; } } @@ -1635,7 +1644,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym75", 7) == 0) { { -return dev_storage + 799; +return dev_storage + 801; } } @@ -1650,7 +1659,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym74", 7) == 0) { { -return dev_storage + 798; +return dev_storage + 800; } } @@ -1665,7 +1674,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym73", 7) == 0) { { -return dev_storage + 797; +return dev_storage + 799; } } @@ -1680,7 +1689,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym72", 7) == 0) { { -return dev_storage + 796; +return dev_storage + 798; } } @@ -1695,7 +1704,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym71", 7) == 0) { { -return dev_storage + 795; +return dev_storage + 797; } } @@ -1710,7 +1719,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym70", 7) == 0) { { -return dev_storage + 794; +return dev_storage + 796; } } @@ -1734,7 +1743,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym69", 7) == 0) { { -return dev_storage + 793; +return dev_storage + 795; } } @@ -1749,7 +1758,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym68", 7) == 0) { { -return dev_storage + 792; +return dev_storage + 794; } } @@ -1764,7 +1773,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym67", 7) == 0) { { -return dev_storage + 791; +return dev_storage + 793; } } @@ -1779,7 +1788,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym66", 7) == 0) { { -return dev_storage + 790; +return dev_storage + 792; } } @@ -1794,7 +1803,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym65", 7) == 0) { { -return dev_storage + 789; +return dev_storage + 791; } } @@ -1809,7 +1818,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym64", 7) == 0) { { -return dev_storage + 788; +return dev_storage + 790; } } @@ -1824,7 +1833,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym63", 7) == 0) { { -return dev_storage + 787; +return dev_storage + 789; } } @@ -1839,7 +1848,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym62", 7) == 0) { { -return dev_storage + 786; +return dev_storage + 788; } } @@ -1854,7 +1863,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym61", 7) == 0) { { -return dev_storage + 785; +return dev_storage + 787; } } @@ -1869,7 +1878,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym60", 7) == 0) { { -return dev_storage + 784; +return dev_storage + 786; } } @@ -1893,7 +1902,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym59", 7) == 0) { { -return dev_storage + 783; +return dev_storage + 785; } } @@ -1908,7 +1917,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym58", 7) == 0) { { -return dev_storage + 782; +return dev_storage + 784; } } @@ -1923,7 +1932,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym57", 7) == 0) { { -return dev_storage + 781; +return dev_storage + 783; } } @@ -1938,7 +1947,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym56", 7) == 0) { { -return dev_storage + 780; +return dev_storage + 782; } } @@ -1953,7 +1962,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym55", 7) == 0) { { -return dev_storage + 779; +return dev_storage + 781; } } @@ -1968,7 +1977,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym54", 7) == 0) { { -return dev_storage + 778; +return dev_storage + 780; } } @@ -1983,7 +1992,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym53", 7) == 0) { { -return dev_storage + 777; +return dev_storage + 779; } } @@ -1998,7 +2007,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym52", 7) == 0) { { -return dev_storage + 776; +return dev_storage + 778; } } @@ -2013,7 +2022,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym51", 7) == 0) { { -return dev_storage + 775; +return dev_storage + 777; } } @@ -2028,7 +2037,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym50", 7) == 0) { { -return dev_storage + 774; +return dev_storage + 776; } } @@ -2052,7 +2061,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym49", 7) == 0) { { -return dev_storage + 773; +return dev_storage + 775; } } @@ -2067,7 +2076,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym48", 7) == 0) { { -return dev_storage + 772; +return dev_storage + 774; } } @@ -2082,7 +2091,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym47", 7) == 0) { { -return dev_storage + 771; +return dev_storage + 773; } } @@ -2097,7 +2106,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym46", 7) == 0) { { -return dev_storage + 770; +return dev_storage + 772; } } @@ -2112,7 +2121,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym45", 7) == 0) { { -return dev_storage + 769; +return dev_storage + 771; } } @@ -2127,7 +2136,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym44", 7) == 0) { { -return dev_storage + 768; +return dev_storage + 770; } } @@ -2142,7 +2151,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym43", 7) == 0) { { -return dev_storage + 767; +return dev_storage + 769; } } @@ -2157,7 +2166,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym42", 7) == 0) { { -return dev_storage + 766; +return dev_storage + 768; } } @@ -2172,7 +2181,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym41", 7) == 0) { { -return dev_storage + 765; +return dev_storage + 767; } } @@ -2187,7 +2196,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym40", 7) == 0) { { -return dev_storage + 764; +return dev_storage + 766; } } @@ -2211,7 +2220,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym39", 7) == 0) { { -return dev_storage + 763; +return dev_storage + 765; } } @@ -2226,7 +2235,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym38", 7) == 0) { { -return dev_storage + 762; +return dev_storage + 764; } } @@ -2241,7 +2250,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym37", 7) == 0) { { -return dev_storage + 761; +return dev_storage + 763; } } @@ -2256,7 +2265,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym36", 7) == 0) { { -return dev_storage + 760; +return dev_storage + 762; } } @@ -2271,7 +2280,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym35", 7) == 0) { { -return dev_storage + 759; +return dev_storage + 761; } } @@ -2286,7 +2295,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym34", 7) == 0) { { -return dev_storage + 758; +return dev_storage + 760; } } @@ -2301,7 +2310,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym33", 7) == 0) { { -return dev_storage + 757; +return dev_storage + 759; } } @@ -2316,7 +2325,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym32", 7) == 0) { { -return dev_storage + 756; +return dev_storage + 758; } } @@ -2331,7 +2340,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym31", 7) == 0) { { -return dev_storage + 755; +return dev_storage + 757; } } @@ -2346,7 +2355,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym30", 7) == 0) { { -return dev_storage + 754; +return dev_storage + 756; } } @@ -2370,7 +2379,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym29", 7) == 0) { { -return dev_storage + 753; +return dev_storage + 755; } } @@ -2385,7 +2394,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym28", 7) == 0) { { -return dev_storage + 752; +return dev_storage + 754; } } @@ -2400,7 +2409,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym27", 7) == 0) { { -return dev_storage + 751; +return dev_storage + 753; } } @@ -2415,7 +2424,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym26", 7) == 0) { { -return dev_storage + 750; +return dev_storage + 752; } } @@ -2430,7 +2439,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym25", 7) == 0) { { -return dev_storage + 749; +return dev_storage + 751; } } @@ -2445,7 +2454,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym24", 7) == 0) { { -return dev_storage + 748; +return dev_storage + 750; } } @@ -2460,7 +2469,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym23", 7) == 0) { { -return dev_storage + 747; +return dev_storage + 749; } } @@ -2475,7 +2484,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym22", 7) == 0) { { -return dev_storage + 746; +return dev_storage + 748; } } @@ -2490,7 +2499,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym21", 7) == 0) { { -return dev_storage + 745; +return dev_storage + 747; } } @@ -2505,7 +2514,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym20", 7) == 0) { { -return dev_storage + 744; +return dev_storage + 746; } } @@ -2529,7 +2538,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym19", 7) == 0) { { -return dev_storage + 743; +return dev_storage + 745; } } @@ -2544,7 +2553,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym18", 7) == 0) { { -return dev_storage + 742; +return dev_storage + 744; } } @@ -2559,7 +2568,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym17", 7) == 0) { { -return dev_storage + 741; +return dev_storage + 743; } } @@ -2574,7 +2583,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym16", 7) == 0) { { -return dev_storage + 740; +return dev_storage + 742; } } @@ -2589,7 +2598,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym15", 7) == 0) { { -return dev_storage + 739; +return dev_storage + 741; } } @@ -2604,7 +2613,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym14", 7) == 0) { { -return dev_storage + 738; +return dev_storage + 740; } } @@ -2619,7 +2628,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym13", 7) == 0) { { -return dev_storage + 737; +return dev_storage + 739; } } @@ -2634,7 +2643,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym12", 7) == 0) { { -return dev_storage + 736; +return dev_storage + 738; } } @@ -2649,7 +2658,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym11", 7) == 0) { { -return dev_storage + 735; +return dev_storage + 737; } } @@ -2664,7 +2673,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym10", 7) == 0) { { -return dev_storage + 734; +return dev_storage + 736; } } @@ -2694,7 +2703,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/tty", 8) == 0) { { -return dev_storage + 590; +return dev_storage + 592; } } @@ -2709,7 +2718,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/dsp", 8) == 0) { { -return dev_storage + 149; +return dev_storage + 150; } } @@ -2727,7 +2736,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st9", 8) == 0) { { -return dev_storage + 468; +return dev_storage + 470; } } @@ -2742,7 +2751,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/sr9", 8) == 0) { { -return dev_storage + 452; +return dev_storage + 454; } } @@ -2757,7 +2766,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/fd9", 8) == 0) { { -return dev_storage + 160; +return dev_storage + 161; } } @@ -2772,7 +2781,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym119", 8) == 0) { { -return dev_storage + 843; +return dev_storage + 845; } } @@ -2787,7 +2796,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym109", 8) == 0) { { -return dev_storage + 833; +return dev_storage + 835; } } @@ -2811,7 +2820,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st8", 8) == 0) { { -return dev_storage + 467; +return dev_storage + 469; } } @@ -2826,7 +2835,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/sr8", 8) == 0) { { -return dev_storage + 451; +return dev_storage + 453; } } @@ -2841,7 +2850,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/fd8", 8) == 0) { { -return dev_storage + 159; +return dev_storage + 160; } } @@ -2856,7 +2865,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym118", 8) == 0) { { -return dev_storage + 842; +return dev_storage + 844; } } @@ -2871,7 +2880,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym108", 8) == 0) { { -return dev_storage + 832; +return dev_storage + 834; } } @@ -2895,7 +2904,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st7", 8) == 0) { { -return dev_storage + 466; +return dev_storage + 468; } } @@ -2910,7 +2919,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/sr7", 8) == 0) { { -return dev_storage + 450; +return dev_storage + 452; } } @@ -2925,7 +2934,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/fd7", 8) == 0) { { -return dev_storage + 158; +return dev_storage + 159; } } @@ -2940,7 +2949,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym127", 8) == 0) { { -return dev_storage + 851; +return dev_storage + 853; } } @@ -2955,7 +2964,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym117", 8) == 0) { { -return dev_storage + 841; +return dev_storage + 843; } } @@ -2970,7 +2979,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym107", 8) == 0) { { -return dev_storage + 831; +return dev_storage + 833; } } @@ -2994,7 +3003,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st6", 8) == 0) { { -return dev_storage + 465; +return dev_storage + 467; } } @@ -3009,7 +3018,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/sr6", 8) == 0) { { -return dev_storage + 449; +return dev_storage + 451; } } @@ -3024,7 +3033,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/fd6", 8) == 0) { { -return dev_storage + 157; +return dev_storage + 158; } } @@ -3039,7 +3048,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym126", 8) == 0) { { -return dev_storage + 850; +return dev_storage + 852; } } @@ -3054,7 +3063,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym116", 8) == 0) { { -return dev_storage + 840; +return dev_storage + 842; } } @@ -3069,7 +3078,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym106", 8) == 0) { { -return dev_storage + 830; +return dev_storage + 832; } } @@ -3093,7 +3102,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st5", 8) == 0) { { -return dev_storage + 464; +return dev_storage + 466; } } @@ -3108,7 +3117,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/sr5", 8) == 0) { { -return dev_storage + 448; +return dev_storage + 450; } } @@ -3123,7 +3132,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/fd5", 8) == 0) { { -return dev_storage + 156; +return dev_storage + 157; } } @@ -3138,7 +3147,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym125", 8) == 0) { { -return dev_storage + 849; +return dev_storage + 851; } } @@ -3153,7 +3162,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym115", 8) == 0) { { -return dev_storage + 839; +return dev_storage + 841; } } @@ -3168,7 +3177,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym105", 8) == 0) { { -return dev_storage + 829; +return dev_storage + 831; } } @@ -3192,7 +3201,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st4", 8) == 0) { { -return dev_storage + 463; +return dev_storage + 465; } } @@ -3207,7 +3216,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/sr4", 8) == 0) { { -return dev_storage + 447; +return dev_storage + 449; } } @@ -3222,7 +3231,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/fd4", 8) == 0) { { -return dev_storage + 155; +return dev_storage + 156; } } @@ -3237,7 +3246,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym124", 8) == 0) { { -return dev_storage + 848; +return dev_storage + 850; } } @@ -3252,7 +3261,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym114", 8) == 0) { { -return dev_storage + 838; +return dev_storage + 840; } } @@ -3267,7 +3276,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym104", 8) == 0) { { -return dev_storage + 828; +return dev_storage + 830; } } @@ -3291,7 +3300,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st3", 8) == 0) { { -return dev_storage + 462; +return dev_storage + 464; } } @@ -3306,7 +3315,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/sr3", 8) == 0) { { -return dev_storage + 446; +return dev_storage + 448; } } @@ -3321,7 +3330,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/fd3", 8) == 0) { { -return dev_storage + 154; +return dev_storage + 155; } } @@ -3336,7 +3345,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym123", 8) == 0) { { -return dev_storage + 847; +return dev_storage + 849; } } @@ -3351,7 +3360,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym113", 8) == 0) { { -return dev_storage + 837; +return dev_storage + 839; } } @@ -3366,7 +3375,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym103", 8) == 0) { { -return dev_storage + 827; +return dev_storage + 829; } } @@ -3390,7 +3399,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st2", 8) == 0) { { -return dev_storage + 461; +return dev_storage + 463; } } @@ -3405,7 +3414,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/sr2", 8) == 0) { { -return dev_storage + 445; +return dev_storage + 447; } } @@ -3420,7 +3429,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/fd2", 8) == 0) { { -return dev_storage + 153; +return dev_storage + 154; } } @@ -3435,7 +3444,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym122", 8) == 0) { { -return dev_storage + 846; +return dev_storage + 848; } } @@ -3450,7 +3459,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym112", 8) == 0) { { -return dev_storage + 836; +return dev_storage + 838; } } @@ -3465,7 +3474,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym102", 8) == 0) { { -return dev_storage + 826; +return dev_storage + 828; } } @@ -3489,7 +3498,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st1", 8) == 0) { { -return dev_storage + 460; +return dev_storage + 462; } } @@ -3504,7 +3513,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/sr1", 8) == 0) { { -return dev_storage + 444; +return dev_storage + 446; } } @@ -3519,7 +3528,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/fd1", 8) == 0) { { -return dev_storage + 152; +return dev_storage + 153; } } @@ -3534,7 +3543,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym121", 8) == 0) { { -return dev_storage + 845; +return dev_storage + 847; } } @@ -3549,7 +3558,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym111", 8) == 0) { { -return dev_storage + 835; +return dev_storage + 837; } } @@ -3564,7 +3573,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym101", 8) == 0) { { -return dev_storage + 825; +return dev_storage + 827; } } @@ -3588,7 +3597,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st0", 8) == 0) { { -return dev_storage + 459; +return dev_storage + 461; } } @@ -3603,7 +3612,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/sr0", 8) == 0) { { -return dev_storage + 443; +return dev_storage + 445; } } @@ -3618,7 +3627,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/fd0", 8) == 0) { { -return dev_storage + 151; +return dev_storage + 152; } } @@ -3633,7 +3642,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym120", 8) == 0) { { -return dev_storage + 844; +return dev_storage + 846; } } @@ -3648,7 +3657,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym110", 8) == 0) { { -return dev_storage + 834; +return dev_storage + 836; } } @@ -3663,7 +3672,7 @@ return NULL; if (strncmp (KR_keyword, ":ptym100", 8) == 0) { { -return dev_storage + 824; +return dev_storage + 826; } } @@ -3693,7 +3702,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ptmx", 9) == 0) { { -return dev_storage + 297; +return dev_storage + 299; } } @@ -3708,7 +3717,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/zero", 9) == 0) { { -return dev_storage + 721; +return dev_storage + 723; } } @@ -3726,7 +3735,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/null", 9) == 0) { { -return dev_storage + 296; +return dev_storage + 298; } } @@ -3741,7 +3750,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/full", 9) == 0) { { -return dev_storage + 167; +return dev_storage + 168; } } @@ -3756,6 +3765,21 @@ return NULL; { return NULL; +} + } + case 'k': + if (strncmp (KR_keyword, "/dev/disk", 9) == 0) + { +{ +return dev_storage + 149; + +} + } + else + { +{ +return NULL; + } } case '9': @@ -3765,7 +3789,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty9", 9) == 0) { { -return dev_storage + 307; +return dev_storage + 309; } } @@ -3780,7 +3804,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst9", 9) == 0) { { -return dev_storage + 177; +return dev_storage + 179; } } @@ -3810,7 +3834,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/scd9", 9) == 0) { { -return dev_storage + 436; +return dev_storage + 438; } } @@ -3825,7 +3849,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st99", 9) == 0) { { -return dev_storage + 558; +return dev_storage + 560; } } @@ -3840,7 +3864,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st89", 9) == 0) { { -return dev_storage + 548; +return dev_storage + 550; } } @@ -3855,7 +3879,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st79", 9) == 0) { { -return dev_storage + 538; +return dev_storage + 540; } } @@ -3870,7 +3894,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st69", 9) == 0) { { -return dev_storage + 528; +return dev_storage + 530; } } @@ -3885,7 +3909,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st59", 9) == 0) { { -return dev_storage + 518; +return dev_storage + 520; } } @@ -3900,7 +3924,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st49", 9) == 0) { { -return dev_storage + 508; +return dev_storage + 510; } } @@ -3915,7 +3939,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st39", 9) == 0) { { -return dev_storage + 498; +return dev_storage + 500; } } @@ -3930,7 +3954,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st29", 9) == 0) { { -return dev_storage + 488; +return dev_storage + 490; } } @@ -3945,7 +3969,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st19", 9) == 0) { { -return dev_storage + 478; +return dev_storage + 480; } } @@ -3969,7 +3993,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty8", 9) == 0) { { -return dev_storage + 306; +return dev_storage + 308; } } @@ -3984,7 +4008,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst8", 9) == 0) { { -return dev_storage + 176; +return dev_storage + 178; } } @@ -4014,7 +4038,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/scd8", 9) == 0) { { -return dev_storage + 435; +return dev_storage + 437; } } @@ -4029,7 +4053,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st98", 9) == 0) { { -return dev_storage + 557; +return dev_storage + 559; } } @@ -4044,7 +4068,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st88", 9) == 0) { { -return dev_storage + 547; +return dev_storage + 549; } } @@ -4059,7 +4083,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st78", 9) == 0) { { -return dev_storage + 537; +return dev_storage + 539; } } @@ -4074,7 +4098,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st68", 9) == 0) { { -return dev_storage + 527; +return dev_storage + 529; } } @@ -4089,7 +4113,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st58", 9) == 0) { { -return dev_storage + 517; +return dev_storage + 519; } } @@ -4104,7 +4128,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st48", 9) == 0) { { -return dev_storage + 507; +return dev_storage + 509; } } @@ -4119,7 +4143,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st38", 9) == 0) { { -return dev_storage + 497; +return dev_storage + 499; } } @@ -4134,7 +4158,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st28", 9) == 0) { { -return dev_storage + 487; +return dev_storage + 489; } } @@ -4149,7 +4173,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st18", 9) == 0) { { -return dev_storage + 477; +return dev_storage + 479; } } @@ -4173,7 +4197,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty7", 9) == 0) { { -return dev_storage + 305; +return dev_storage + 307; } } @@ -4188,7 +4212,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst7", 9) == 0) { { -return dev_storage + 175; +return dev_storage + 177; } } @@ -4218,7 +4242,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/scd7", 9) == 0) { { -return dev_storage + 434; +return dev_storage + 436; } } @@ -4233,7 +4257,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st97", 9) == 0) { { -return dev_storage + 556; +return dev_storage + 558; } } @@ -4248,7 +4272,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st87", 9) == 0) { { -return dev_storage + 546; +return dev_storage + 548; } } @@ -4263,7 +4287,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st77", 9) == 0) { { -return dev_storage + 536; +return dev_storage + 538; } } @@ -4278,7 +4302,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st67", 9) == 0) { { -return dev_storage + 526; +return dev_storage + 528; } } @@ -4293,7 +4317,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st57", 9) == 0) { { -return dev_storage + 516; +return dev_storage + 518; } } @@ -4308,7 +4332,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st47", 9) == 0) { { -return dev_storage + 506; +return dev_storage + 508; } } @@ -4323,7 +4347,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st37", 9) == 0) { { -return dev_storage + 496; +return dev_storage + 498; } } @@ -4338,7 +4362,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st27", 9) == 0) { { -return dev_storage + 486; +return dev_storage + 488; } } @@ -4353,7 +4377,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st17", 9) == 0) { { -return dev_storage + 476; +return dev_storage + 478; } } @@ -4377,7 +4401,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty6", 9) == 0) { { -return dev_storage + 304; +return dev_storage + 306; } } @@ -4392,7 +4416,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst6", 9) == 0) { { -return dev_storage + 174; +return dev_storage + 176; } } @@ -4422,7 +4446,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/scd6", 9) == 0) { { -return dev_storage + 433; +return dev_storage + 435; } } @@ -4437,7 +4461,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st96", 9) == 0) { { -return dev_storage + 555; +return dev_storage + 557; } } @@ -4452,7 +4476,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st86", 9) == 0) { { -return dev_storage + 545; +return dev_storage + 547; } } @@ -4467,7 +4491,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st76", 9) == 0) { { -return dev_storage + 535; +return dev_storage + 537; } } @@ -4482,7 +4506,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st66", 9) == 0) { { -return dev_storage + 525; +return dev_storage + 527; } } @@ -4497,7 +4521,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st56", 9) == 0) { { -return dev_storage + 515; +return dev_storage + 517; } } @@ -4512,7 +4536,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st46", 9) == 0) { { -return dev_storage + 505; +return dev_storage + 507; } } @@ -4527,7 +4551,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st36", 9) == 0) { { -return dev_storage + 495; +return dev_storage + 497; } } @@ -4542,7 +4566,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st26", 9) == 0) { { -return dev_storage + 485; +return dev_storage + 487; } } @@ -4557,7 +4581,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st16", 9) == 0) { { -return dev_storage + 475; +return dev_storage + 477; } } @@ -4581,7 +4605,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty5", 9) == 0) { { -return dev_storage + 303; +return dev_storage + 305; } } @@ -4596,7 +4620,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst5", 9) == 0) { { -return dev_storage + 173; +return dev_storage + 175; } } @@ -4626,7 +4650,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/scd5", 9) == 0) { { -return dev_storage + 432; +return dev_storage + 434; } } @@ -4641,7 +4665,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st95", 9) == 0) { { -return dev_storage + 554; +return dev_storage + 556; } } @@ -4656,7 +4680,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st85", 9) == 0) { { -return dev_storage + 544; +return dev_storage + 546; } } @@ -4671,7 +4695,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st75", 9) == 0) { { -return dev_storage + 534; +return dev_storage + 536; } } @@ -4686,7 +4710,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st65", 9) == 0) { { -return dev_storage + 524; +return dev_storage + 526; } } @@ -4701,7 +4725,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st55", 9) == 0) { { -return dev_storage + 514; +return dev_storage + 516; } } @@ -4716,7 +4740,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st45", 9) == 0) { { -return dev_storage + 504; +return dev_storage + 506; } } @@ -4731,7 +4755,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st35", 9) == 0) { { -return dev_storage + 494; +return dev_storage + 496; } } @@ -4746,7 +4770,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st25", 9) == 0) { { -return dev_storage + 484; +return dev_storage + 486; } } @@ -4764,7 +4788,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st15", 9) == 0) { { -return dev_storage + 474; +return dev_storage + 476; } } @@ -4779,7 +4803,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/sr15", 9) == 0) { { -return dev_storage + 458; +return dev_storage + 460; } } @@ -4794,7 +4818,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/fd15", 9) == 0) { { -return dev_storage + 166; +return dev_storage + 167; } } @@ -4824,7 +4848,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty4", 9) == 0) { { -return dev_storage + 302; +return dev_storage + 304; } } @@ -4839,7 +4863,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst4", 9) == 0) { { -return dev_storage + 172; +return dev_storage + 174; } } @@ -4869,7 +4893,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/scd4", 9) == 0) { { -return dev_storage + 431; +return dev_storage + 433; } } @@ -4884,7 +4908,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st94", 9) == 0) { { -return dev_storage + 553; +return dev_storage + 555; } } @@ -4899,7 +4923,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st84", 9) == 0) { { -return dev_storage + 543; +return dev_storage + 545; } } @@ -4914,7 +4938,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st74", 9) == 0) { { -return dev_storage + 533; +return dev_storage + 535; } } @@ -4929,7 +4953,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st64", 9) == 0) { { -return dev_storage + 523; +return dev_storage + 525; } } @@ -4944,7 +4968,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st54", 9) == 0) { { -return dev_storage + 513; +return dev_storage + 515; } } @@ -4959,7 +4983,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st44", 9) == 0) { { -return dev_storage + 503; +return dev_storage + 505; } } @@ -4974,7 +4998,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st34", 9) == 0) { { -return dev_storage + 493; +return dev_storage + 495; } } @@ -4989,7 +5013,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st24", 9) == 0) { { -return dev_storage + 483; +return dev_storage + 485; } } @@ -5007,7 +5031,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st14", 9) == 0) { { -return dev_storage + 473; +return dev_storage + 475; } } @@ -5022,7 +5046,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/sr14", 9) == 0) { { -return dev_storage + 457; +return dev_storage + 459; } } @@ -5037,7 +5061,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/fd14", 9) == 0) { { -return dev_storage + 165; +return dev_storage + 166; } } @@ -5067,7 +5091,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty3", 9) == 0) { { -return dev_storage + 301; +return dev_storage + 303; } } @@ -5082,7 +5106,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst3", 9) == 0) { { -return dev_storage + 171; +return dev_storage + 173; } } @@ -5112,7 +5136,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/scd3", 9) == 0) { { -return dev_storage + 430; +return dev_storage + 432; } } @@ -5127,7 +5151,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st93", 9) == 0) { { -return dev_storage + 552; +return dev_storage + 554; } } @@ -5142,7 +5166,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st83", 9) == 0) { { -return dev_storage + 542; +return dev_storage + 544; } } @@ -5157,7 +5181,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st73", 9) == 0) { { -return dev_storage + 532; +return dev_storage + 534; } } @@ -5172,7 +5196,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st63", 9) == 0) { { -return dev_storage + 522; +return dev_storage + 524; } } @@ -5187,7 +5211,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st53", 9) == 0) { { -return dev_storage + 512; +return dev_storage + 514; } } @@ -5202,7 +5226,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st43", 9) == 0) { { -return dev_storage + 502; +return dev_storage + 504; } } @@ -5217,7 +5241,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st33", 9) == 0) { { -return dev_storage + 492; +return dev_storage + 494; } } @@ -5232,7 +5256,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st23", 9) == 0) { { -return dev_storage + 482; +return dev_storage + 484; } } @@ -5250,7 +5274,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st13", 9) == 0) { { -return dev_storage + 472; +return dev_storage + 474; } } @@ -5265,7 +5289,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/sr13", 9) == 0) { { -return dev_storage + 456; +return dev_storage + 458; } } @@ -5280,7 +5304,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/fd13", 9) == 0) { { -return dev_storage + 164; +return dev_storage + 165; } } @@ -5310,7 +5334,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty2", 9) == 0) { { -return dev_storage + 300; +return dev_storage + 302; } } @@ -5325,7 +5349,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst2", 9) == 0) { { -return dev_storage + 170; +return dev_storage + 172; } } @@ -5355,7 +5379,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/scd2", 9) == 0) { { -return dev_storage + 429; +return dev_storage + 431; } } @@ -5370,7 +5394,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st92", 9) == 0) { { -return dev_storage + 551; +return dev_storage + 553; } } @@ -5385,7 +5409,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st82", 9) == 0) { { -return dev_storage + 541; +return dev_storage + 543; } } @@ -5400,7 +5424,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st72", 9) == 0) { { -return dev_storage + 531; +return dev_storage + 533; } } @@ -5415,7 +5439,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st62", 9) == 0) { { -return dev_storage + 521; +return dev_storage + 523; } } @@ -5430,7 +5454,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st52", 9) == 0) { { -return dev_storage + 511; +return dev_storage + 513; } } @@ -5445,7 +5469,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st42", 9) == 0) { { -return dev_storage + 501; +return dev_storage + 503; } } @@ -5460,7 +5484,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st32", 9) == 0) { { -return dev_storage + 491; +return dev_storage + 493; } } @@ -5475,7 +5499,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st22", 9) == 0) { { -return dev_storage + 481; +return dev_storage + 483; } } @@ -5493,7 +5517,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st12", 9) == 0) { { -return dev_storage + 471; +return dev_storage + 473; } } @@ -5508,7 +5532,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/sr12", 9) == 0) { { -return dev_storage + 455; +return dev_storage + 457; } } @@ -5523,7 +5547,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/fd12", 9) == 0) { { -return dev_storage + 163; +return dev_storage + 164; } } @@ -5553,7 +5577,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty1", 9) == 0) { { -return dev_storage + 299; +return dev_storage + 301; } } @@ -5568,7 +5592,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst1", 9) == 0) { { -return dev_storage + 169; +return dev_storage + 171; } } @@ -5598,7 +5622,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/scd1", 9) == 0) { { -return dev_storage + 428; +return dev_storage + 430; } } @@ -5613,7 +5637,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st91", 9) == 0) { { -return dev_storage + 550; +return dev_storage + 552; } } @@ -5628,7 +5652,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st81", 9) == 0) { { -return dev_storage + 540; +return dev_storage + 542; } } @@ -5643,7 +5667,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st71", 9) == 0) { { -return dev_storage + 530; +return dev_storage + 532; } } @@ -5658,7 +5682,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st61", 9) == 0) { { -return dev_storage + 520; +return dev_storage + 522; } } @@ -5673,7 +5697,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st51", 9) == 0) { { -return dev_storage + 510; +return dev_storage + 512; } } @@ -5688,7 +5712,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st41", 9) == 0) { { -return dev_storage + 500; +return dev_storage + 502; } } @@ -5703,7 +5727,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st31", 9) == 0) { { -return dev_storage + 490; +return dev_storage + 492; } } @@ -5718,7 +5742,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st21", 9) == 0) { { -return dev_storage + 480; +return dev_storage + 482; } } @@ -5736,7 +5760,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st11", 9) == 0) { { -return dev_storage + 470; +return dev_storage + 472; } } @@ -5751,7 +5775,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/sr11", 9) == 0) { { -return dev_storage + 454; +return dev_storage + 456; } } @@ -5766,7 +5790,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/fd11", 9) == 0) { { -return dev_storage + 162; +return dev_storage + 163; } } @@ -5796,7 +5820,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty0", 9) == 0) { { -return dev_storage + 298; +return dev_storage + 300; } } @@ -5811,7 +5835,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst0", 9) == 0) { { -return dev_storage + 168; +return dev_storage + 170; } } @@ -5826,7 +5850,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/scd0", 9) == 0) { { -return dev_storage + 427; +return dev_storage + 429; } } @@ -5841,7 +5865,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st90", 9) == 0) { { -return dev_storage + 549; +return dev_storage + 551; } } @@ -5856,7 +5880,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st80", 9) == 0) { { -return dev_storage + 539; +return dev_storage + 541; } } @@ -5871,7 +5895,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st70", 9) == 0) { { -return dev_storage + 529; +return dev_storage + 531; } } @@ -5886,7 +5910,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st60", 9) == 0) { { -return dev_storage + 519; +return dev_storage + 521; } } @@ -5901,7 +5925,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st50", 9) == 0) { { -return dev_storage + 509; +return dev_storage + 511; } } @@ -5916,7 +5940,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st40", 9) == 0) { { -return dev_storage + 499; +return dev_storage + 501; } } @@ -5931,7 +5955,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st30", 9) == 0) { { -return dev_storage + 489; +return dev_storage + 491; } } @@ -5946,7 +5970,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st20", 9) == 0) { { -return dev_storage + 479; +return dev_storage + 481; } } @@ -5964,7 +5988,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st10", 9) == 0) { { -return dev_storage + 469; +return dev_storage + 471; } } @@ -5979,7 +6003,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/sr10", 9) == 0) { { -return dev_storage + 453; +return dev_storage + 455; } } @@ -5994,7 +6018,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/fd10", 9) == 0) { { -return dev_storage + 161; +return dev_storage + 162; } } @@ -6192,7 +6216,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/stdin", 10) == 0) { { -return dev_storage + 588; +return dev_storage + 590; } } @@ -6222,6 +6246,21 @@ return NULL; { return NULL; +} + } + case 'e': + if (strncmp (KR_keyword, "/dev/mixer", 10) == 0) + { +{ +return dev_storage + 169; + +} + } + else + { +{ +return NULL; + } } case 'S': @@ -6231,7 +6270,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS9", 10) == 0) { { -return dev_storage + 600; +return dev_storage + 602; } } @@ -6246,7 +6285,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS8", 10) == 0) { { -return dev_storage + 599; +return dev_storage + 601; } } @@ -6261,7 +6300,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS7", 10) == 0) { { -return dev_storage + 598; +return dev_storage + 600; } } @@ -6276,7 +6315,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS6", 10) == 0) { { -return dev_storage + 597; +return dev_storage + 599; } } @@ -6291,7 +6330,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS5", 10) == 0) { { -return dev_storage + 596; +return dev_storage + 598; } } @@ -6306,7 +6345,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS4", 10) == 0) { { -return dev_storage + 595; +return dev_storage + 597; } } @@ -6321,7 +6360,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS3", 10) == 0) { { -return dev_storage + 594; +return dev_storage + 596; } } @@ -6336,7 +6375,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS2", 10) == 0) { { -return dev_storage + 593; +return dev_storage + 595; } } @@ -6351,7 +6390,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS1", 10) == 0) { { -return dev_storage + 592; +return dev_storage + 594; } } @@ -6366,7 +6405,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS0", 10) == 0) { { -return dev_storage + 591; +return dev_storage + 593; } } @@ -6393,7 +6432,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty99", 10) == 0) { { -return dev_storage + 397; +return dev_storage + 399; } } @@ -6408,7 +6447,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty98", 10) == 0) { { -return dev_storage + 396; +return dev_storage + 398; } } @@ -6423,7 +6462,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty97", 10) == 0) { { -return dev_storage + 395; +return dev_storage + 397; } } @@ -6438,7 +6477,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty96", 10) == 0) { { -return dev_storage + 394; +return dev_storage + 396; } } @@ -6453,7 +6492,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty95", 10) == 0) { { -return dev_storage + 393; +return dev_storage + 395; } } @@ -6468,7 +6507,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty94", 10) == 0) { { -return dev_storage + 392; +return dev_storage + 394; } } @@ -6483,7 +6522,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty93", 10) == 0) { { -return dev_storage + 391; +return dev_storage + 393; } } @@ -6498,7 +6537,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty92", 10) == 0) { { -return dev_storage + 390; +return dev_storage + 392; } } @@ -6513,7 +6552,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty91", 10) == 0) { { -return dev_storage + 389; +return dev_storage + 391; } } @@ -6528,7 +6567,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty90", 10) == 0) { { -return dev_storage + 388; +return dev_storage + 390; } } @@ -6552,7 +6591,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst99", 10) == 0) { { -return dev_storage + 267; +return dev_storage + 269; } } @@ -6567,7 +6606,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst98", 10) == 0) { { -return dev_storage + 266; +return dev_storage + 268; } } @@ -6582,7 +6621,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst97", 10) == 0) { { -return dev_storage + 265; +return dev_storage + 267; } } @@ -6597,7 +6636,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst96", 10) == 0) { { -return dev_storage + 264; +return dev_storage + 266; } } @@ -6612,7 +6651,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst95", 10) == 0) { { -return dev_storage + 263; +return dev_storage + 265; } } @@ -6627,7 +6666,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst94", 10) == 0) { { -return dev_storage + 262; +return dev_storage + 264; } } @@ -6642,7 +6681,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst93", 10) == 0) { { -return dev_storage + 261; +return dev_storage + 263; } } @@ -6657,7 +6696,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst92", 10) == 0) { { -return dev_storage + 260; +return dev_storage + 262; } } @@ -6672,7 +6711,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst91", 10) == 0) { { -return dev_storage + 259; +return dev_storage + 261; } } @@ -6687,7 +6726,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst90", 10) == 0) { { -return dev_storage + 258; +return dev_storage + 260; } } @@ -6720,7 +6759,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty89", 10) == 0) { { -return dev_storage + 387; +return dev_storage + 389; } } @@ -6735,7 +6774,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty88", 10) == 0) { { -return dev_storage + 386; +return dev_storage + 388; } } @@ -6750,7 +6789,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty87", 10) == 0) { { -return dev_storage + 385; +return dev_storage + 387; } } @@ -6765,7 +6804,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty86", 10) == 0) { { -return dev_storage + 384; +return dev_storage + 386; } } @@ -6780,7 +6819,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty85", 10) == 0) { { -return dev_storage + 383; +return dev_storage + 385; } } @@ -6795,7 +6834,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty84", 10) == 0) { { -return dev_storage + 382; +return dev_storage + 384; } } @@ -6810,7 +6849,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty83", 10) == 0) { { -return dev_storage + 381; +return dev_storage + 383; } } @@ -6825,7 +6864,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty82", 10) == 0) { { -return dev_storage + 380; +return dev_storage + 382; } } @@ -6840,7 +6879,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty81", 10) == 0) { { -return dev_storage + 379; +return dev_storage + 381; } } @@ -6855,7 +6894,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty80", 10) == 0) { { -return dev_storage + 378; +return dev_storage + 380; } } @@ -6879,7 +6918,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst89", 10) == 0) { { -return dev_storage + 257; +return dev_storage + 259; } } @@ -6894,7 +6933,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst88", 10) == 0) { { -return dev_storage + 256; +return dev_storage + 258; } } @@ -6909,7 +6948,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst87", 10) == 0) { { -return dev_storage + 255; +return dev_storage + 257; } } @@ -6924,7 +6963,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst86", 10) == 0) { { -return dev_storage + 254; +return dev_storage + 256; } } @@ -6939,7 +6978,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst85", 10) == 0) { { -return dev_storage + 253; +return dev_storage + 255; } } @@ -6954,7 +6993,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst84", 10) == 0) { { -return dev_storage + 252; +return dev_storage + 254; } } @@ -6969,7 +7008,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst83", 10) == 0) { { -return dev_storage + 251; +return dev_storage + 253; } } @@ -6984,7 +7023,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst82", 10) == 0) { { -return dev_storage + 250; +return dev_storage + 252; } } @@ -6999,7 +7038,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst81", 10) == 0) { { -return dev_storage + 249; +return dev_storage + 251; } } @@ -7014,7 +7053,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst80", 10) == 0) { { -return dev_storage + 248; +return dev_storage + 250; } } @@ -7047,7 +7086,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty79", 10) == 0) { { -return dev_storage + 377; +return dev_storage + 379; } } @@ -7062,7 +7101,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty78", 10) == 0) { { -return dev_storage + 376; +return dev_storage + 378; } } @@ -7077,7 +7116,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty77", 10) == 0) { { -return dev_storage + 375; +return dev_storage + 377; } } @@ -7092,7 +7131,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty76", 10) == 0) { { -return dev_storage + 374; +return dev_storage + 376; } } @@ -7107,7 +7146,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty75", 10) == 0) { { -return dev_storage + 373; +return dev_storage + 375; } } @@ -7122,7 +7161,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty74", 10) == 0) { { -return dev_storage + 372; +return dev_storage + 374; } } @@ -7137,7 +7176,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty73", 10) == 0) { { -return dev_storage + 371; +return dev_storage + 373; } } @@ -7152,7 +7191,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty72", 10) == 0) { { -return dev_storage + 370; +return dev_storage + 372; } } @@ -7167,7 +7206,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty71", 10) == 0) { { -return dev_storage + 369; +return dev_storage + 371; } } @@ -7182,7 +7221,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty70", 10) == 0) { { -return dev_storage + 368; +return dev_storage + 370; } } @@ -7206,7 +7245,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst79", 10) == 0) { { -return dev_storage + 247; +return dev_storage + 249; } } @@ -7221,7 +7260,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst78", 10) == 0) { { -return dev_storage + 246; +return dev_storage + 248; } } @@ -7236,7 +7275,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst77", 10) == 0) { { -return dev_storage + 245; +return dev_storage + 247; } } @@ -7251,7 +7290,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst76", 10) == 0) { { -return dev_storage + 244; +return dev_storage + 246; } } @@ -7266,7 +7305,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst75", 10) == 0) { { -return dev_storage + 243; +return dev_storage + 245; } } @@ -7281,7 +7320,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst74", 10) == 0) { { -return dev_storage + 242; +return dev_storage + 244; } } @@ -7296,7 +7335,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst73", 10) == 0) { { -return dev_storage + 241; +return dev_storage + 243; } } @@ -7311,7 +7350,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst72", 10) == 0) { { -return dev_storage + 240; +return dev_storage + 242; } } @@ -7326,7 +7365,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst71", 10) == 0) { { -return dev_storage + 239; +return dev_storage + 241; } } @@ -7341,7 +7380,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst70", 10) == 0) { { -return dev_storage + 238; +return dev_storage + 240; } } @@ -7374,7 +7413,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty69", 10) == 0) { { -return dev_storage + 367; +return dev_storage + 369; } } @@ -7389,7 +7428,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty68", 10) == 0) { { -return dev_storage + 366; +return dev_storage + 368; } } @@ -7404,7 +7443,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty67", 10) == 0) { { -return dev_storage + 365; +return dev_storage + 367; } } @@ -7419,7 +7458,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty66", 10) == 0) { { -return dev_storage + 364; +return dev_storage + 366; } } @@ -7434,7 +7473,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty65", 10) == 0) { { -return dev_storage + 363; +return dev_storage + 365; } } @@ -7449,7 +7488,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty64", 10) == 0) { { -return dev_storage + 362; +return dev_storage + 364; } } @@ -7464,7 +7503,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty63", 10) == 0) { { -return dev_storage + 361; +return dev_storage + 363; } } @@ -7479,7 +7518,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty62", 10) == 0) { { -return dev_storage + 360; +return dev_storage + 362; } } @@ -7494,7 +7533,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty61", 10) == 0) { { -return dev_storage + 359; +return dev_storage + 361; } } @@ -7509,7 +7548,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty60", 10) == 0) { { -return dev_storage + 358; +return dev_storage + 360; } } @@ -7533,7 +7572,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst69", 10) == 0) { { -return dev_storage + 237; +return dev_storage + 239; } } @@ -7548,7 +7587,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst68", 10) == 0) { { -return dev_storage + 236; +return dev_storage + 238; } } @@ -7563,7 +7602,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst67", 10) == 0) { { -return dev_storage + 235; +return dev_storage + 237; } } @@ -7578,7 +7617,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst66", 10) == 0) { { -return dev_storage + 234; +return dev_storage + 236; } } @@ -7593,7 +7632,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst65", 10) == 0) { { -return dev_storage + 233; +return dev_storage + 235; } } @@ -7608,7 +7647,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst64", 10) == 0) { { -return dev_storage + 232; +return dev_storage + 234; } } @@ -7623,7 +7662,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst63", 10) == 0) { { -return dev_storage + 231; +return dev_storage + 233; } } @@ -7638,7 +7677,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst62", 10) == 0) { { -return dev_storage + 230; +return dev_storage + 232; } } @@ -7653,7 +7692,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst61", 10) == 0) { { -return dev_storage + 229; +return dev_storage + 231; } } @@ -7668,7 +7707,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst60", 10) == 0) { { -return dev_storage + 228; +return dev_storage + 230; } } @@ -7701,7 +7740,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty59", 10) == 0) { { -return dev_storage + 357; +return dev_storage + 359; } } @@ -7716,7 +7755,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty58", 10) == 0) { { -return dev_storage + 356; +return dev_storage + 358; } } @@ -7731,7 +7770,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty57", 10) == 0) { { -return dev_storage + 355; +return dev_storage + 357; } } @@ -7746,7 +7785,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty56", 10) == 0) { { -return dev_storage + 354; +return dev_storage + 356; } } @@ -7761,7 +7800,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty55", 10) == 0) { { -return dev_storage + 353; +return dev_storage + 355; } } @@ -7776,7 +7815,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty54", 10) == 0) { { -return dev_storage + 352; +return dev_storage + 354; } } @@ -7791,7 +7830,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty53", 10) == 0) { { -return dev_storage + 351; +return dev_storage + 353; } } @@ -7806,7 +7845,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty52", 10) == 0) { { -return dev_storage + 350; +return dev_storage + 352; } } @@ -7821,7 +7860,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty51", 10) == 0) { { -return dev_storage + 349; +return dev_storage + 351; } } @@ -7836,7 +7875,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty50", 10) == 0) { { -return dev_storage + 348; +return dev_storage + 350; } } @@ -7860,7 +7899,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst59", 10) == 0) { { -return dev_storage + 227; +return dev_storage + 229; } } @@ -7875,7 +7914,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst58", 10) == 0) { { -return dev_storage + 226; +return dev_storage + 228; } } @@ -7890,7 +7929,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst57", 10) == 0) { { -return dev_storage + 225; +return dev_storage + 227; } } @@ -7905,7 +7944,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst56", 10) == 0) { { -return dev_storage + 224; +return dev_storage + 226; } } @@ -7920,7 +7959,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst55", 10) == 0) { { -return dev_storage + 223; +return dev_storage + 225; } } @@ -7935,7 +7974,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst54", 10) == 0) { { -return dev_storage + 222; +return dev_storage + 224; } } @@ -7950,7 +7989,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst53", 10) == 0) { { -return dev_storage + 221; +return dev_storage + 223; } } @@ -7965,7 +8004,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst52", 10) == 0) { { -return dev_storage + 220; +return dev_storage + 222; } } @@ -7980,7 +8019,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst51", 10) == 0) { { -return dev_storage + 219; +return dev_storage + 221; } } @@ -7995,7 +8034,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst50", 10) == 0) { { -return dev_storage + 218; +return dev_storage + 220; } } @@ -8028,7 +8067,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty49", 10) == 0) { { -return dev_storage + 347; +return dev_storage + 349; } } @@ -8043,7 +8082,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty48", 10) == 0) { { -return dev_storage + 346; +return dev_storage + 348; } } @@ -8058,7 +8097,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty47", 10) == 0) { { -return dev_storage + 345; +return dev_storage + 347; } } @@ -8073,7 +8112,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty46", 10) == 0) { { -return dev_storage + 344; +return dev_storage + 346; } } @@ -8088,7 +8127,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty45", 10) == 0) { { -return dev_storage + 343; +return dev_storage + 345; } } @@ -8103,7 +8142,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty44", 10) == 0) { { -return dev_storage + 342; +return dev_storage + 344; } } @@ -8118,7 +8157,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty43", 10) == 0) { { -return dev_storage + 341; +return dev_storage + 343; } } @@ -8133,7 +8172,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty42", 10) == 0) { { -return dev_storage + 340; +return dev_storage + 342; } } @@ -8148,7 +8187,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty41", 10) == 0) { { -return dev_storage + 339; +return dev_storage + 341; } } @@ -8163,7 +8202,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty40", 10) == 0) { { -return dev_storage + 338; +return dev_storage + 340; } } @@ -8187,7 +8226,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst49", 10) == 0) { { -return dev_storage + 217; +return dev_storage + 219; } } @@ -8202,7 +8241,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst48", 10) == 0) { { -return dev_storage + 216; +return dev_storage + 218; } } @@ -8217,7 +8256,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst47", 10) == 0) { { -return dev_storage + 215; +return dev_storage + 217; } } @@ -8232,7 +8271,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst46", 10) == 0) { { -return dev_storage + 214; +return dev_storage + 216; } } @@ -8247,7 +8286,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst45", 10) == 0) { { -return dev_storage + 213; +return dev_storage + 215; } } @@ -8262,7 +8301,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst44", 10) == 0) { { -return dev_storage + 212; +return dev_storage + 214; } } @@ -8277,7 +8316,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst43", 10) == 0) { { -return dev_storage + 211; +return dev_storage + 213; } } @@ -8292,7 +8331,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst42", 10) == 0) { { -return dev_storage + 210; +return dev_storage + 212; } } @@ -8307,7 +8346,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst41", 10) == 0) { { -return dev_storage + 209; +return dev_storage + 211; } } @@ -8322,7 +8361,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst40", 10) == 0) { { -return dev_storage + 208; +return dev_storage + 210; } } @@ -8355,7 +8394,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty39", 10) == 0) { { -return dev_storage + 337; +return dev_storage + 339; } } @@ -8370,7 +8409,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty38", 10) == 0) { { -return dev_storage + 336; +return dev_storage + 338; } } @@ -8385,7 +8424,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty37", 10) == 0) { { -return dev_storage + 335; +return dev_storage + 337; } } @@ -8400,7 +8439,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty36", 10) == 0) { { -return dev_storage + 334; +return dev_storage + 336; } } @@ -8415,7 +8454,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty35", 10) == 0) { { -return dev_storage + 333; +return dev_storage + 335; } } @@ -8430,7 +8469,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty34", 10) == 0) { { -return dev_storage + 332; +return dev_storage + 334; } } @@ -8445,7 +8484,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty33", 10) == 0) { { -return dev_storage + 331; +return dev_storage + 333; } } @@ -8460,7 +8499,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty32", 10) == 0) { { -return dev_storage + 330; +return dev_storage + 332; } } @@ -8475,7 +8514,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty31", 10) == 0) { { -return dev_storage + 329; +return dev_storage + 331; } } @@ -8490,7 +8529,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty30", 10) == 0) { { -return dev_storage + 328; +return dev_storage + 330; } } @@ -8514,7 +8553,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst39", 10) == 0) { { -return dev_storage + 207; +return dev_storage + 209; } } @@ -8529,7 +8568,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst38", 10) == 0) { { -return dev_storage + 206; +return dev_storage + 208; } } @@ -8544,7 +8583,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst37", 10) == 0) { { -return dev_storage + 205; +return dev_storage + 207; } } @@ -8559,7 +8598,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst36", 10) == 0) { { -return dev_storage + 204; +return dev_storage + 206; } } @@ -8574,7 +8613,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst35", 10) == 0) { { -return dev_storage + 203; +return dev_storage + 205; } } @@ -8589,7 +8628,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst34", 10) == 0) { { -return dev_storage + 202; +return dev_storage + 204; } } @@ -8604,7 +8643,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst33", 10) == 0) { { -return dev_storage + 201; +return dev_storage + 203; } } @@ -8619,7 +8658,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst32", 10) == 0) { { -return dev_storage + 200; +return dev_storage + 202; } } @@ -8634,7 +8673,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst31", 10) == 0) { { -return dev_storage + 199; +return dev_storage + 201; } } @@ -8649,7 +8688,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst30", 10) == 0) { { -return dev_storage + 198; +return dev_storage + 200; } } @@ -8682,7 +8721,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st127", 10) == 0) { { -return dev_storage + 586; +return dev_storage + 588; } } @@ -8697,7 +8736,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st126", 10) == 0) { { -return dev_storage + 585; +return dev_storage + 587; } } @@ -8712,7 +8751,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st125", 10) == 0) { { -return dev_storage + 584; +return dev_storage + 586; } } @@ -8727,7 +8766,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st124", 10) == 0) { { -return dev_storage + 583; +return dev_storage + 585; } } @@ -8742,7 +8781,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st123", 10) == 0) { { -return dev_storage + 582; +return dev_storage + 584; } } @@ -8757,7 +8796,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st122", 10) == 0) { { -return dev_storage + 581; +return dev_storage + 583; } } @@ -8772,7 +8811,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st121", 10) == 0) { { -return dev_storage + 580; +return dev_storage + 582; } } @@ -8787,7 +8826,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st120", 10) == 0) { { -return dev_storage + 579; +return dev_storage + 581; } } @@ -8811,7 +8850,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty29", 10) == 0) { { -return dev_storage + 327; +return dev_storage + 329; } } @@ -8826,7 +8865,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty28", 10) == 0) { { -return dev_storage + 326; +return dev_storage + 328; } } @@ -8841,7 +8880,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty27", 10) == 0) { { -return dev_storage + 325; +return dev_storage + 327; } } @@ -8856,7 +8895,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty26", 10) == 0) { { -return dev_storage + 324; +return dev_storage + 326; } } @@ -8871,7 +8910,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty25", 10) == 0) { { -return dev_storage + 323; +return dev_storage + 325; } } @@ -8886,7 +8925,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty24", 10) == 0) { { -return dev_storage + 322; +return dev_storage + 324; } } @@ -8901,7 +8940,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty23", 10) == 0) { { -return dev_storage + 321; +return dev_storage + 323; } } @@ -8916,7 +8955,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty22", 10) == 0) { { -return dev_storage + 320; +return dev_storage + 322; } } @@ -8931,7 +8970,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty21", 10) == 0) { { -return dev_storage + 319; +return dev_storage + 321; } } @@ -8946,7 +8985,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty20", 10) == 0) { { -return dev_storage + 318; +return dev_storage + 320; } } @@ -8970,7 +9009,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst29", 10) == 0) { { -return dev_storage + 197; +return dev_storage + 199; } } @@ -8985,7 +9024,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst28", 10) == 0) { { -return dev_storage + 196; +return dev_storage + 198; } } @@ -9000,7 +9039,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst27", 10) == 0) { { -return dev_storage + 195; +return dev_storage + 197; } } @@ -9015,7 +9054,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst26", 10) == 0) { { -return dev_storage + 194; +return dev_storage + 196; } } @@ -9030,7 +9069,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst25", 10) == 0) { { -return dev_storage + 193; +return dev_storage + 195; } } @@ -9045,7 +9084,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst24", 10) == 0) { { -return dev_storage + 192; +return dev_storage + 194; } } @@ -9060,7 +9099,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst23", 10) == 0) { { -return dev_storage + 191; +return dev_storage + 193; } } @@ -9075,7 +9114,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst22", 10) == 0) { { -return dev_storage + 190; +return dev_storage + 192; } } @@ -9090,7 +9129,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst21", 10) == 0) { { -return dev_storage + 189; +return dev_storage + 191; } } @@ -9105,7 +9144,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst20", 10) == 0) { { -return dev_storage + 188; +return dev_storage + 190; } } @@ -9138,7 +9177,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty19", 10) == 0) { { -return dev_storage + 317; +return dev_storage + 319; } } @@ -9153,7 +9192,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty18", 10) == 0) { { -return dev_storage + 316; +return dev_storage + 318; } } @@ -9168,7 +9207,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty17", 10) == 0) { { -return dev_storage + 315; +return dev_storage + 317; } } @@ -9183,7 +9222,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty16", 10) == 0) { { -return dev_storage + 314; +return dev_storage + 316; } } @@ -9198,7 +9237,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty15", 10) == 0) { { -return dev_storage + 313; +return dev_storage + 315; } } @@ -9213,7 +9252,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty14", 10) == 0) { { -return dev_storage + 312; +return dev_storage + 314; } } @@ -9228,7 +9267,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty13", 10) == 0) { { -return dev_storage + 311; +return dev_storage + 313; } } @@ -9243,7 +9282,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty12", 10) == 0) { { -return dev_storage + 310; +return dev_storage + 312; } } @@ -9258,7 +9297,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty11", 10) == 0) { { -return dev_storage + 309; +return dev_storage + 311; } } @@ -9273,7 +9312,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty10", 10) == 0) { { -return dev_storage + 308; +return dev_storage + 310; } } @@ -9297,7 +9336,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst19", 10) == 0) { { -return dev_storage + 187; +return dev_storage + 189; } } @@ -9312,7 +9351,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst18", 10) == 0) { { -return dev_storage + 186; +return dev_storage + 188; } } @@ -9327,7 +9366,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst17", 10) == 0) { { -return dev_storage + 185; +return dev_storage + 187; } } @@ -9342,7 +9381,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst16", 10) == 0) { { -return dev_storage + 184; +return dev_storage + 186; } } @@ -9357,7 +9396,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst15", 10) == 0) { { -return dev_storage + 183; +return dev_storage + 185; } } @@ -9372,7 +9411,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst14", 10) == 0) { { -return dev_storage + 182; +return dev_storage + 184; } } @@ -9387,7 +9426,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst13", 10) == 0) { { -return dev_storage + 181; +return dev_storage + 183; } } @@ -9402,7 +9441,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst12", 10) == 0) { { -return dev_storage + 180; +return dev_storage + 182; } } @@ -9417,7 +9456,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst11", 10) == 0) { { -return dev_storage + 179; +return dev_storage + 181; } } @@ -9432,7 +9471,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst10", 10) == 0) { { -return dev_storage + 178; +return dev_storage + 180; } } @@ -9570,7 +9609,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/scd15", 10) == 0) { { -return dev_storage + 442; +return dev_storage + 444; } } @@ -9585,7 +9624,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/scd14", 10) == 0) { { -return dev_storage + 441; +return dev_storage + 443; } } @@ -9600,7 +9639,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/scd13", 10) == 0) { { -return dev_storage + 440; +return dev_storage + 442; } } @@ -9615,7 +9654,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/scd12", 10) == 0) { { -return dev_storage + 439; +return dev_storage + 441; } } @@ -9630,7 +9669,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/scd11", 10) == 0) { { -return dev_storage + 438; +return dev_storage + 440; } } @@ -9645,7 +9684,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/scd10", 10) == 0) { { -return dev_storage + 437; +return dev_storage + 439; } } @@ -9669,7 +9708,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st119", 10) == 0) { { -return dev_storage + 578; +return dev_storage + 580; } } @@ -9684,7 +9723,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st118", 10) == 0) { { -return dev_storage + 577; +return dev_storage + 579; } } @@ -9699,7 +9738,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st117", 10) == 0) { { -return dev_storage + 576; +return dev_storage + 578; } } @@ -9714,7 +9753,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st116", 10) == 0) { { -return dev_storage + 575; +return dev_storage + 577; } } @@ -9729,7 +9768,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st115", 10) == 0) { { -return dev_storage + 574; +return dev_storage + 576; } } @@ -9744,7 +9783,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st114", 10) == 0) { { -return dev_storage + 573; +return dev_storage + 575; } } @@ -9759,7 +9798,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st113", 10) == 0) { { -return dev_storage + 572; +return dev_storage + 574; } } @@ -9774,7 +9813,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st112", 10) == 0) { { -return dev_storage + 571; +return dev_storage + 573; } } @@ -9789,7 +9828,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st111", 10) == 0) { { -return dev_storage + 570; +return dev_storage + 572; } } @@ -9804,7 +9843,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st110", 10) == 0) { { -return dev_storage + 569; +return dev_storage + 571; } } @@ -9834,7 +9873,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st109", 10) == 0) { { -return dev_storage + 568; +return dev_storage + 570; } } @@ -9849,7 +9888,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st108", 10) == 0) { { -return dev_storage + 567; +return dev_storage + 569; } } @@ -9864,7 +9903,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st107", 10) == 0) { { -return dev_storage + 566; +return dev_storage + 568; } } @@ -9879,7 +9918,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st106", 10) == 0) { { -return dev_storage + 565; +return dev_storage + 567; } } @@ -9894,7 +9933,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st105", 10) == 0) { { -return dev_storage + 564; +return dev_storage + 566; } } @@ -9909,7 +9948,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st104", 10) == 0) { { -return dev_storage + 563; +return dev_storage + 565; } } @@ -9924,7 +9963,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st103", 10) == 0) { { -return dev_storage + 562; +return dev_storage + 564; } } @@ -9939,7 +9978,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st102", 10) == 0) { { -return dev_storage + 561; +return dev_storage + 563; } } @@ -9954,7 +9993,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st101", 10) == 0) { { -return dev_storage + 560; +return dev_storage + 562; } } @@ -9969,7 +10008,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/st100", 10) == 0) { { -return dev_storage + 559; +return dev_storage + 561; } } @@ -10002,7 +10041,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/stdout", 11) == 0) { { -return dev_storage + 589; +return dev_storage + 591; } } @@ -10038,7 +10077,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/stderr", 11) == 0) { { -return dev_storage + 587; +return dev_storage + 589; } } @@ -10053,7 +10092,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/random", 11) == 0) { { -return dev_storage + 426; +return dev_storage + 428; } } @@ -10074,7 +10113,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS99", 11) == 0) { { -return dev_storage + 690; +return dev_storage + 692; } } @@ -10089,7 +10128,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS98", 11) == 0) { { -return dev_storage + 689; +return dev_storage + 691; } } @@ -10104,7 +10143,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS97", 11) == 0) { { -return dev_storage + 688; +return dev_storage + 690; } } @@ -10119,7 +10158,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS96", 11) == 0) { { -return dev_storage + 687; +return dev_storage + 689; } } @@ -10134,7 +10173,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS95", 11) == 0) { { -return dev_storage + 686; +return dev_storage + 688; } } @@ -10149,7 +10188,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS94", 11) == 0) { { -return dev_storage + 685; +return dev_storage + 687; } } @@ -10164,7 +10203,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS93", 11) == 0) { { -return dev_storage + 684; +return dev_storage + 686; } } @@ -10179,7 +10218,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS92", 11) == 0) { { -return dev_storage + 683; +return dev_storage + 685; } } @@ -10194,7 +10233,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS91", 11) == 0) { { -return dev_storage + 682; +return dev_storage + 684; } } @@ -10209,7 +10248,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS90", 11) == 0) { { -return dev_storage + 681; +return dev_storage + 683; } } @@ -10401,7 +10440,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS89", 11) == 0) { { -return dev_storage + 680; +return dev_storage + 682; } } @@ -10416,7 +10455,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS88", 11) == 0) { { -return dev_storage + 679; +return dev_storage + 681; } } @@ -10431,7 +10470,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS87", 11) == 0) { { -return dev_storage + 678; +return dev_storage + 680; } } @@ -10446,7 +10485,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS86", 11) == 0) { { -return dev_storage + 677; +return dev_storage + 679; } } @@ -10461,7 +10500,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS85", 11) == 0) { { -return dev_storage + 676; +return dev_storage + 678; } } @@ -10476,7 +10515,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS84", 11) == 0) { { -return dev_storage + 675; +return dev_storage + 677; } } @@ -10491,7 +10530,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS83", 11) == 0) { { -return dev_storage + 674; +return dev_storage + 676; } } @@ -10506,7 +10545,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS82", 11) == 0) { { -return dev_storage + 673; +return dev_storage + 675; } } @@ -10521,7 +10560,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS81", 11) == 0) { { -return dev_storage + 672; +return dev_storage + 674; } } @@ -10536,7 +10575,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS80", 11) == 0) { { -return dev_storage + 671; +return dev_storage + 673; } } @@ -10728,7 +10767,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS79", 11) == 0) { { -return dev_storage + 670; +return dev_storage + 672; } } @@ -10743,7 +10782,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS78", 11) == 0) { { -return dev_storage + 669; +return dev_storage + 671; } } @@ -10758,7 +10797,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS77", 11) == 0) { { -return dev_storage + 668; +return dev_storage + 670; } } @@ -10773,7 +10812,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS76", 11) == 0) { { -return dev_storage + 667; +return dev_storage + 669; } } @@ -10788,7 +10827,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS75", 11) == 0) { { -return dev_storage + 666; +return dev_storage + 668; } } @@ -10803,7 +10842,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS74", 11) == 0) { { -return dev_storage + 665; +return dev_storage + 667; } } @@ -10818,7 +10857,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS73", 11) == 0) { { -return dev_storage + 664; +return dev_storage + 666; } } @@ -10833,7 +10872,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS72", 11) == 0) { { -return dev_storage + 663; +return dev_storage + 665; } } @@ -10848,7 +10887,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS71", 11) == 0) { { -return dev_storage + 662; +return dev_storage + 664; } } @@ -10863,7 +10902,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS70", 11) == 0) { { -return dev_storage + 661; +return dev_storage + 663; } } @@ -11055,7 +11094,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS69", 11) == 0) { { -return dev_storage + 660; +return dev_storage + 662; } } @@ -11070,7 +11109,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS68", 11) == 0) { { -return dev_storage + 659; +return dev_storage + 661; } } @@ -11085,7 +11124,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS67", 11) == 0) { { -return dev_storage + 658; +return dev_storage + 660; } } @@ -11100,7 +11139,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS66", 11) == 0) { { -return dev_storage + 657; +return dev_storage + 659; } } @@ -11115,7 +11154,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS65", 11) == 0) { { -return dev_storage + 656; +return dev_storage + 658; } } @@ -11130,7 +11169,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS64", 11) == 0) { { -return dev_storage + 655; +return dev_storage + 657; } } @@ -11145,7 +11184,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS63", 11) == 0) { { -return dev_storage + 654; +return dev_storage + 656; } } @@ -11160,7 +11199,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS62", 11) == 0) { { -return dev_storage + 653; +return dev_storage + 655; } } @@ -11175,7 +11214,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS61", 11) == 0) { { -return dev_storage + 652; +return dev_storage + 654; } } @@ -11190,7 +11229,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS60", 11) == 0) { { -return dev_storage + 651; +return dev_storage + 653; } } @@ -11382,7 +11421,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS59", 11) == 0) { { -return dev_storage + 650; +return dev_storage + 652; } } @@ -11397,7 +11436,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS58", 11) == 0) { { -return dev_storage + 649; +return dev_storage + 651; } } @@ -11412,7 +11451,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS57", 11) == 0) { { -return dev_storage + 648; +return dev_storage + 650; } } @@ -11427,7 +11466,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS56", 11) == 0) { { -return dev_storage + 647; +return dev_storage + 649; } } @@ -11442,7 +11481,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS55", 11) == 0) { { -return dev_storage + 646; +return dev_storage + 648; } } @@ -11457,7 +11496,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS54", 11) == 0) { { -return dev_storage + 645; +return dev_storage + 647; } } @@ -11472,7 +11511,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS53", 11) == 0) { { -return dev_storage + 644; +return dev_storage + 646; } } @@ -11487,7 +11526,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS52", 11) == 0) { { -return dev_storage + 643; +return dev_storage + 645; } } @@ -11502,7 +11541,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS51", 11) == 0) { { -return dev_storage + 642; +return dev_storage + 644; } } @@ -11517,7 +11556,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS50", 11) == 0) { { -return dev_storage + 641; +return dev_storage + 643; } } @@ -11709,7 +11748,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS49", 11) == 0) { { -return dev_storage + 640; +return dev_storage + 642; } } @@ -11724,7 +11763,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS48", 11) == 0) { { -return dev_storage + 639; +return dev_storage + 641; } } @@ -11739,7 +11778,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS47", 11) == 0) { { -return dev_storage + 638; +return dev_storage + 640; } } @@ -11754,7 +11793,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS46", 11) == 0) { { -return dev_storage + 637; +return dev_storage + 639; } } @@ -11769,7 +11808,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS45", 11) == 0) { { -return dev_storage + 636; +return dev_storage + 638; } } @@ -11784,7 +11823,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS44", 11) == 0) { { -return dev_storage + 635; +return dev_storage + 637; } } @@ -11799,7 +11838,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS43", 11) == 0) { { -return dev_storage + 634; +return dev_storage + 636; } } @@ -11814,7 +11853,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS42", 11) == 0) { { -return dev_storage + 633; +return dev_storage + 635; } } @@ -11829,7 +11868,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS41", 11) == 0) { { -return dev_storage + 632; +return dev_storage + 634; } } @@ -11844,7 +11883,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS40", 11) == 0) { { -return dev_storage + 631; +return dev_storage + 633; } } @@ -12036,7 +12075,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS39", 11) == 0) { { -return dev_storage + 630; +return dev_storage + 632; } } @@ -12051,7 +12090,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS38", 11) == 0) { { -return dev_storage + 629; +return dev_storage + 631; } } @@ -12066,7 +12105,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS37", 11) == 0) { { -return dev_storage + 628; +return dev_storage + 630; } } @@ -12081,7 +12120,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS36", 11) == 0) { { -return dev_storage + 627; +return dev_storage + 629; } } @@ -12096,7 +12135,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS35", 11) == 0) { { -return dev_storage + 626; +return dev_storage + 628; } } @@ -12111,7 +12150,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS34", 11) == 0) { { -return dev_storage + 625; +return dev_storage + 627; } } @@ -12126,7 +12165,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS33", 11) == 0) { { -return dev_storage + 624; +return dev_storage + 626; } } @@ -12141,7 +12180,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS32", 11) == 0) { { -return dev_storage + 623; +return dev_storage + 625; } } @@ -12156,7 +12195,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS31", 11) == 0) { { -return dev_storage + 622; +return dev_storage + 624; } } @@ -12171,7 +12210,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS30", 11) == 0) { { -return dev_storage + 621; +return dev_storage + 623; } } @@ -12363,7 +12402,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS29", 11) == 0) { { -return dev_storage + 620; +return dev_storage + 622; } } @@ -12378,7 +12417,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS28", 11) == 0) { { -return dev_storage + 619; +return dev_storage + 621; } } @@ -12393,7 +12432,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS27", 11) == 0) { { -return dev_storage + 618; +return dev_storage + 620; } } @@ -12408,7 +12447,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS26", 11) == 0) { { -return dev_storage + 617; +return dev_storage + 619; } } @@ -12423,7 +12462,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS25", 11) == 0) { { -return dev_storage + 616; +return dev_storage + 618; } } @@ -12438,7 +12477,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS24", 11) == 0) { { -return dev_storage + 615; +return dev_storage + 617; } } @@ -12453,7 +12492,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS23", 11) == 0) { { -return dev_storage + 614; +return dev_storage + 616; } } @@ -12468,7 +12507,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS22", 11) == 0) { { -return dev_storage + 613; +return dev_storage + 615; } } @@ -12483,7 +12522,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS21", 11) == 0) { { -return dev_storage + 612; +return dev_storage + 614; } } @@ -12498,7 +12537,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS20", 11) == 0) { { -return dev_storage + 611; +return dev_storage + 613; } } @@ -12522,7 +12561,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty127", 11) == 0) { { -return dev_storage + 425; +return dev_storage + 427; } } @@ -12537,7 +12576,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty126", 11) == 0) { { -return dev_storage + 424; +return dev_storage + 426; } } @@ -12552,7 +12591,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty125", 11) == 0) { { -return dev_storage + 423; +return dev_storage + 425; } } @@ -12567,7 +12606,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty124", 11) == 0) { { -return dev_storage + 422; +return dev_storage + 424; } } @@ -12582,7 +12621,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty123", 11) == 0) { { -return dev_storage + 421; +return dev_storage + 423; } } @@ -12597,7 +12636,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty122", 11) == 0) { { -return dev_storage + 420; +return dev_storage + 422; } } @@ -12612,7 +12651,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty121", 11) == 0) { { -return dev_storage + 419; +return dev_storage + 421; } } @@ -12627,7 +12666,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty120", 11) == 0) { { -return dev_storage + 418; +return dev_storage + 420; } } @@ -12651,7 +12690,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst127", 11) == 0) { { -return dev_storage + 295; +return dev_storage + 297; } } @@ -12666,7 +12705,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst126", 11) == 0) { { -return dev_storage + 294; +return dev_storage + 296; } } @@ -12681,7 +12720,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst125", 11) == 0) { { -return dev_storage + 293; +return dev_storage + 295; } } @@ -12696,7 +12735,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst124", 11) == 0) { { -return dev_storage + 292; +return dev_storage + 294; } } @@ -12711,7 +12750,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst123", 11) == 0) { { -return dev_storage + 291; +return dev_storage + 293; } } @@ -12726,7 +12765,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst122", 11) == 0) { { -return dev_storage + 290; +return dev_storage + 292; } } @@ -12741,7 +12780,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst121", 11) == 0) { { -return dev_storage + 289; +return dev_storage + 291; } } @@ -12756,7 +12795,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst120", 11) == 0) { { -return dev_storage + 288; +return dev_storage + 290; } } @@ -12948,7 +12987,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS19", 11) == 0) { { -return dev_storage + 610; +return dev_storage + 612; } } @@ -12963,7 +13002,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS18", 11) == 0) { { -return dev_storage + 609; +return dev_storage + 611; } } @@ -12978,7 +13017,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS17", 11) == 0) { { -return dev_storage + 608; +return dev_storage + 610; } } @@ -12993,7 +13032,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS16", 11) == 0) { { -return dev_storage + 607; +return dev_storage + 609; } } @@ -13008,7 +13047,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS15", 11) == 0) { { -return dev_storage + 606; +return dev_storage + 608; } } @@ -13023,7 +13062,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS14", 11) == 0) { { -return dev_storage + 605; +return dev_storage + 607; } } @@ -13038,7 +13077,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS13", 11) == 0) { { -return dev_storage + 604; +return dev_storage + 606; } } @@ -13053,7 +13092,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS12", 11) == 0) { { -return dev_storage + 603; +return dev_storage + 605; } } @@ -13068,7 +13107,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS11", 11) == 0) { { -return dev_storage + 602; +return dev_storage + 604; } } @@ -13083,7 +13122,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS10", 11) == 0) { { -return dev_storage + 601; +return dev_storage + 603; } } @@ -13107,7 +13146,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty119", 11) == 0) { { -return dev_storage + 417; +return dev_storage + 419; } } @@ -13122,7 +13161,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty118", 11) == 0) { { -return dev_storage + 416; +return dev_storage + 418; } } @@ -13137,7 +13176,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty117", 11) == 0) { { -return dev_storage + 415; +return dev_storage + 417; } } @@ -13152,7 +13191,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty116", 11) == 0) { { -return dev_storage + 414; +return dev_storage + 416; } } @@ -13167,7 +13206,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty115", 11) == 0) { { -return dev_storage + 413; +return dev_storage + 415; } } @@ -13182,7 +13221,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty114", 11) == 0) { { -return dev_storage + 412; +return dev_storage + 414; } } @@ -13197,7 +13236,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty113", 11) == 0) { { -return dev_storage + 411; +return dev_storage + 413; } } @@ -13212,7 +13251,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty112", 11) == 0) { { -return dev_storage + 410; +return dev_storage + 412; } } @@ -13227,7 +13266,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty111", 11) == 0) { { -return dev_storage + 409; +return dev_storage + 411; } } @@ -13242,7 +13281,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty110", 11) == 0) { { -return dev_storage + 408; +return dev_storage + 410; } } @@ -13266,7 +13305,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst119", 11) == 0) { { -return dev_storage + 287; +return dev_storage + 289; } } @@ -13281,7 +13320,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst118", 11) == 0) { { -return dev_storage + 286; +return dev_storage + 288; } } @@ -13296,7 +13335,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst117", 11) == 0) { { -return dev_storage + 285; +return dev_storage + 287; } } @@ -13311,7 +13350,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst116", 11) == 0) { { -return dev_storage + 284; +return dev_storage + 286; } } @@ -13326,7 +13365,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst115", 11) == 0) { { -return dev_storage + 283; +return dev_storage + 285; } } @@ -13341,7 +13380,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst114", 11) == 0) { { -return dev_storage + 282; +return dev_storage + 284; } } @@ -13356,7 +13395,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst113", 11) == 0) { { -return dev_storage + 281; +return dev_storage + 283; } } @@ -13371,7 +13410,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst112", 11) == 0) { { -return dev_storage + 280; +return dev_storage + 282; } } @@ -13386,7 +13425,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst111", 11) == 0) { { -return dev_storage + 279; +return dev_storage + 281; } } @@ -13401,7 +13440,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst110", 11) == 0) { { -return dev_storage + 278; +return dev_storage + 280; } } @@ -13593,7 +13632,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty109", 11) == 0) { { -return dev_storage + 407; +return dev_storage + 409; } } @@ -13608,7 +13647,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty108", 11) == 0) { { -return dev_storage + 406; +return dev_storage + 408; } } @@ -13623,7 +13662,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty107", 11) == 0) { { -return dev_storage + 405; +return dev_storage + 407; } } @@ -13638,7 +13677,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty106", 11) == 0) { { -return dev_storage + 404; +return dev_storage + 406; } } @@ -13653,7 +13692,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty105", 11) == 0) { { -return dev_storage + 403; +return dev_storage + 405; } } @@ -13668,7 +13707,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty104", 11) == 0) { { -return dev_storage + 402; +return dev_storage + 404; } } @@ -13683,7 +13722,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty103", 11) == 0) { { -return dev_storage + 401; +return dev_storage + 403; } } @@ -13698,7 +13737,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty102", 11) == 0) { { -return dev_storage + 400; +return dev_storage + 402; } } @@ -13713,7 +13752,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty101", 11) == 0) { { -return dev_storage + 399; +return dev_storage + 401; } } @@ -13728,7 +13767,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/pty100", 11) == 0) { { -return dev_storage + 398; +return dev_storage + 400; } } @@ -13752,7 +13791,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst109", 11) == 0) { { -return dev_storage + 277; +return dev_storage + 279; } } @@ -13767,7 +13806,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst108", 11) == 0) { { -return dev_storage + 276; +return dev_storage + 278; } } @@ -13782,7 +13821,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst107", 11) == 0) { { -return dev_storage + 275; +return dev_storage + 277; } } @@ -13797,7 +13836,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst106", 11) == 0) { { -return dev_storage + 274; +return dev_storage + 276; } } @@ -13812,7 +13851,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst105", 11) == 0) { { -return dev_storage + 273; +return dev_storage + 275; } } @@ -13827,7 +13866,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst104", 11) == 0) { { -return dev_storage + 272; +return dev_storage + 274; } } @@ -13842,7 +13881,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst103", 11) == 0) { { -return dev_storage + 271; +return dev_storage + 273; } } @@ -13857,7 +13896,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst102", 11) == 0) { { -return dev_storage + 270; +return dev_storage + 272; } } @@ -13872,7 +13911,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst101", 11) == 0) { { -return dev_storage + 269; +return dev_storage + 271; } } @@ -13887,7 +13926,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/nst100", 11) == 0) { { -return dev_storage + 268; +return dev_storage + 270; } } @@ -13923,7 +13962,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/windows", 12) == 0) { { -return dev_storage + 720; +return dev_storage + 722; } } @@ -13938,7 +13977,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/urandom", 12) == 0) { { -return dev_storage + 719; +return dev_storage + 721; } } @@ -13974,7 +14013,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS127", 12) == 0) { { -return dev_storage + 718; +return dev_storage + 720; } } @@ -13989,7 +14028,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS126", 12) == 0) { { -return dev_storage + 717; +return dev_storage + 719; } } @@ -14004,7 +14043,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS125", 12) == 0) { { -return dev_storage + 716; +return dev_storage + 718; } } @@ -14019,7 +14058,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS124", 12) == 0) { { -return dev_storage + 715; +return dev_storage + 717; } } @@ -14034,7 +14073,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS123", 12) == 0) { { -return dev_storage + 714; +return dev_storage + 716; } } @@ -14049,7 +14088,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS122", 12) == 0) { { -return dev_storage + 713; +return dev_storage + 715; } } @@ -14064,7 +14103,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS121", 12) == 0) { { -return dev_storage + 712; +return dev_storage + 714; } } @@ -14079,7 +14118,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS120", 12) == 0) { { -return dev_storage + 711; +return dev_storage + 713; } } @@ -14241,7 +14280,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS119", 12) == 0) { { -return dev_storage + 710; +return dev_storage + 712; } } @@ -14256,7 +14295,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS118", 12) == 0) { { -return dev_storage + 709; +return dev_storage + 711; } } @@ -14271,7 +14310,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS117", 12) == 0) { { -return dev_storage + 708; +return dev_storage + 710; } } @@ -14286,7 +14325,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS116", 12) == 0) { { -return dev_storage + 707; +return dev_storage + 709; } } @@ -14301,7 +14340,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS115", 12) == 0) { { -return dev_storage + 706; +return dev_storage + 708; } } @@ -14316,7 +14355,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS114", 12) == 0) { { -return dev_storage + 705; +return dev_storage + 707; } } @@ -14331,7 +14370,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS113", 12) == 0) { { -return dev_storage + 704; +return dev_storage + 706; } } @@ -14346,7 +14385,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS112", 12) == 0) { { -return dev_storage + 703; +return dev_storage + 705; } } @@ -14361,7 +14400,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS111", 12) == 0) { { -return dev_storage + 702; +return dev_storage + 704; } } @@ -14376,7 +14415,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS110", 12) == 0) { { -return dev_storage + 701; +return dev_storage + 703; } } @@ -14568,7 +14607,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS109", 12) == 0) { { -return dev_storage + 700; +return dev_storage + 702; } } @@ -14583,7 +14622,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS108", 12) == 0) { { -return dev_storage + 699; +return dev_storage + 701; } } @@ -14598,7 +14637,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS107", 12) == 0) { { -return dev_storage + 698; +return dev_storage + 700; } } @@ -14613,7 +14652,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS106", 12) == 0) { { -return dev_storage + 697; +return dev_storage + 699; } } @@ -14628,7 +14667,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS105", 12) == 0) { { -return dev_storage + 696; +return dev_storage + 698; } } @@ -14643,7 +14682,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS104", 12) == 0) { { -return dev_storage + 695; +return dev_storage + 697; } } @@ -14658,7 +14697,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS103", 12) == 0) { { -return dev_storage + 694; +return dev_storage + 696; } } @@ -14673,7 +14712,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS102", 12) == 0) { { -return dev_storage + 693; +return dev_storage + 695; } } @@ -14688,7 +14727,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS101", 12) == 0) { { -return dev_storage + 692; +return dev_storage + 694; } } @@ -14703,7 +14742,7 @@ return NULL; if (strncmp (KR_keyword, "/dev/ttyS100", 12) == 0) { { -return dev_storage + 691; +return dev_storage + 693; } } diff --git a/winsup/cygwin/devices.in b/winsup/cygwin/devices.in index fda2c160ff..ea9a70e1b5 100644 --- a/winsup/cygwin/devices.in +++ b/winsup/cygwin/devices.in @@ -77,8 +77,12 @@ exists_console (const device& dev) return cygheap && cygheap->ctty && cygheap->ctty->is_console () && fhandler_console::exists (); default: - /* Only show my own console device (for now?) */ - return iscons_dev (myself->ctty) && myself->ctty == devn; + if (dev.get_minor () < MAX_CONS_DEV) + { + int n = fhandler_console::console_unit (dev.get_minor ()); + return (n == dev.get_minor ()); + } + return false; } } @@ -95,6 +99,9 @@ const _device dev_cygdrive_storage = const _device dev_fs_storage = {"", {FH_FS}, "", exists}; +const _device dev_dev_disk_storage = + {"", {FH_DEV_DISK}, "", exists}; + const _device dev_proc_storage = {"", {FH_PROC}, "", exists}; @@ -153,6 +160,7 @@ const _device dev_error_storage = the POSIX namespace. */ %% "/dev", BRACK(FH_DEV), "", exists, S_IFDIR +"/dev/disk", BRACK(FH_DEV_DISK), "", exists, S_IFDIR "/dev/tty", BRACK(FH_TTY), "/dev/tty", exists, S_IFCHR "/dev/pty%(0-127)d", BRACK(FHDEV(DEV_PTYS_MAJOR, {$1})), "/dev/pty{$1}", exists_pty, S_IFCHR, =ptys_dev ":ptym%(0-127)d", BRACK(FHDEV(DEV_PTYM_MAJOR, {$1})), "/dev/ptym{$1}", exists_internal, S_IFCHR, =ptym_dev @@ -160,6 +168,7 @@ const _device dev_error_storage = "/dev/console", BRACK(FH_CONSOLE), "/dev/console", exists_console, S_IFCHR, =console_dev "/dev/ptmx", BRACK(FH_PTMX), "/dev/ptmx", exists, S_IFCHR "/dev/windows", BRACK(FH_WINDOWS), "\\Device\\Null", exists_ntdev, S_IFCHR +"/dev/mixer", BRACK(FH_OSS_MIXER), "\\Device\\Null", exists_ntdev, S_IFCHR "/dev/dsp", BRACK(FH_OSS_DSP), "\\Device\\Null", exists_ntdev, S_IFCHR "/dev/conin", BRACK(FH_CONIN), "/dev/conin", exists_console, S_IFCHR "/dev/conout", BRACK(FH_CONOUT), "/dev/conout", exists_console, S_IFCHR diff --git a/winsup/cygwin/dir.cc b/winsup/cygwin/dir.cc index a181ce58c7..d67ac02d91 100644 --- a/winsup/cygwin/dir.cc +++ b/winsup/cygwin/dir.cc @@ -235,7 +235,6 @@ seekdir (DIR *dir, long loc) dir->__flags &= dirent_info_mask; ((fhandler_base *) dir->__fh)->seekdir (dir, loc); } - set_errno (EINVAL); /* Diagnosis */ } __except (EFAULT) {} __endtry diff --git a/winsup/cygwin/dll_init.cc b/winsup/cygwin/dll_init.cc index 03e5191ec5..7c5f8cc9fd 100644 --- a/winsup/cygwin/dll_init.cc +++ b/winsup/cygwin/dll_init.cc @@ -39,7 +39,7 @@ static bool dll_global_dtors_recorded; /* We need the in_load_after_fork flag so dll_dllcrt0_1 can decide at fork time if this is a linked DLL or a dynamically loaded DLL. In either case, - both, cygwin_finished_initializing and in_forkee are true, so they are not + both, cygwin_finished_initializing and __in_forkee are true, so they are not sufficient to discern the situation. */ static bool NO_COPY in_load_after_fork; @@ -161,7 +161,7 @@ dll_global_dtors () /* Don't attempt to call destructors if we're still in fork processing since that likely means fork is failing and everything will not have been set up. */ - if (in_forkee) + if (__in_forkee == FORKING) return; int recorded = dll_global_dtors_recorded; dll_global_dtors_recorded = false; @@ -205,7 +205,7 @@ dll::init () int ret = 1; /* Don't run constructors or the "main" if we've forked. */ - if (!in_forkee) + if (__in_forkee != FORKING) { /* global contructors */ p.run_ctors (); @@ -564,7 +564,7 @@ dll_list::detach (void *retaddr) /* Don't attempt to call destructors if we're still in fork processing since that likely means fork is failing and everything will not have been set up. */ - if (!myself || in_forkee) + if (!myself || __in_forkee == FORKING) return; guard (true); if ((d = find (retaddr))) diff --git a/winsup/cygwin/dtable.cc b/winsup/cygwin/dtable.cc index 53b2a124e8..141029f811 100644 --- a/winsup/cygwin/dtable.cc +++ b/winsup/cygwin/dtable.cc @@ -323,7 +323,7 @@ dtable::init_std_file_from_handle (int fd, HANDLE handle) || GetNumberOfConsoleInputEvents (handle, (DWORD *) &buf)) { /* Console I/O */ - if (myself->ctty > 0) + if (CTTY_IS_VALID (myself->ctty)) dev.parse (myself->ctty); else { @@ -410,6 +410,9 @@ dtable::init_std_file_from_handle (int fd, HANDLE handle) { fhandler_pipe *fhp = (fhandler_pipe *) fh; fhp->set_pipe_buf_size (); + /* Set read pipe always to nonblocking */ + fhp->set_pipe_non_blocking (fhp->get_device () == FH_PIPER ? + true : fhp->is_nonblocking ()); } if (!fh->open_setup (openflags)) @@ -506,7 +509,7 @@ fh_alloc (path_conv& pc) break; case FH_PTMX: if (pc.isopen ()) - fh = cnew (fhandler_pty_master, -1); + fh = cnew (fhandler_pty_master, -1, (dev_t) pc.dev); else fhraw = cnew_no_ctor (fhandler_pty_master, -1); break; @@ -549,6 +552,9 @@ fh_alloc (path_conv& pc) case FH_CLIPBOARD: fh = cnew (fhandler_dev_clipboard); break; + case FH_OSS_MIXER: + fh = cnew (fhandler_dev_mixer); + break; case FH_OSS_DSP: fh = cnew (fhandler_dev_dsp); break; @@ -579,6 +585,9 @@ fh_alloc (path_conv& pc) case FH_DEV: fh = cnew (fhandler_dev); break; + case FH_DEV_DISK: + fh = cnew (fhandler_dev_disk); + break; case FH_DEV_FD: fh = cnew (fhandler_dev_fd); break; @@ -597,19 +606,26 @@ fh_alloc (path_conv& pc) case FH_TTY: if (!pc.isopen ()) { - fhraw = cnew_no_ctor (fhandler_console, -1); + if (CTTY_IS_VALID (myself->ctty)) + { + if (iscons_dev (myself->ctty)) + fhraw = cnew_no_ctor (fhandler_console, -1); + else + fhraw = cnew_no_ctor (fhandler_pty_slave, -1); + } debug_printf ("not called from open for /dev/tty"); } - else if (myself->ctty <= 0 && last_tty_dev + else if (!CTTY_IS_VALID (myself->ctty) && last_tty_dev && !myself->set_ctty (fh_last_tty_dev, 0)) debug_printf ("no /dev/tty assigned"); - else if (myself->ctty > 0) + else if (CTTY_IS_VALID (myself->ctty)) { debug_printf ("determining /dev/tty assignment for ctty %p", myself->ctty); if (iscons_dev (myself->ctty)) fh = cnew (fhandler_console, pc.dev); else - fh = cnew (fhandler_pty_slave, myself->ctty); + fh = cnew (fhandler_pty_slave, + minor (myself->ctty), (dev_t) pc.dev); if (fh->dev () != FH_NADA) fh->set_name ("/dev/tty"); } @@ -679,7 +695,7 @@ build_fh_pc (path_conv& pc) /* Keep track of the last tty-like thing opened. We could potentially want to open it if /dev/tty is referenced. */ - if (myself->ctty > 0 || !fh->is_tty () || !pc.isctty_capable ()) + if (CTTY_IS_VALID (myself->ctty) || !fh->is_tty () || !pc.isctty_capable ()) last_tty_dev = FH_NADA; else last_tty_dev = fh->dev (); @@ -761,13 +777,6 @@ dtable::dup3 (int oldfd, int newfd, int flags) return -1; } - /* This is a temporary kludge until all utilities can catch up with - a change in behavior that implements linux functionality: opening - a tty should not automatically cause it to become the controlling - tty for the process. */ - if (newfd > 2) - flags |= O_NOCTTY; - if ((newfh = dup_worker (fds[oldfd], flags)) == NULL) { res = -1; diff --git a/winsup/cygwin/environ.cc b/winsup/cygwin/environ.cc index c1eed5827c..529535a580 100644 --- a/winsup/cygwin/environ.cc +++ b/winsup/cygwin/environ.cc @@ -119,19 +119,19 @@ static struct parse_thing } values[2]; } known[] NO_COPY = { + {"disable_pcon", {&disable_pcon}, setbool, NULL, {{false}, {true}}}, + {"emptyenvvalues", {&emptyenvvalues}, setbool, NULL, {{false}, {true}}}, + {"enable_pcon", {&disable_pcon}, setnegbool, NULL, {{true}, {false}}}, {"error_start", {func: error_start_init}, isfunc, NULL, {{0}, {0}}}, {"export", {&export_settings}, setbool, NULL, {{false}, {true}}}, {"glob", {func: glob_init}, isfunc, NULL, {{0}, {s: "normal"}}}, + {"nativeinnerlinks", {&nativeinnerlinks}, setbool, NULL, {{false}, {true}}}, {"pipe_byte", {&pipe_byte}, setbool, NULL, {{false}, {true}}}, {"proc_retry", {func: set_proc_retry}, isfunc, NULL, {{0}, {5}}}, {"reset_com", {&reset_com}, setbool, NULL, {{false}, {true}}}, {"wincmdln", {&wincmdln}, setbool, NULL, {{false}, {true}}}, - {"winsymlinks", {func: set_winsymlinks}, isfunc, NULL, {{0}, {0}}}, - {"disable_pcon", {&disable_pcon}, setbool, NULL, {{false}, {true}}}, - {"enable_pcon", {&disable_pcon}, setnegbool, NULL, {{true}, {false}}}, {"winjitdebug", {&winjitdebug}, setbool, NULL, {{false}, {true}}}, - {"nativeinnerlinks", {&nativeinnerlinks}, setbool, NULL, {{false}, {true}}}, - {"emptyenvvalues", {&emptyenvvalues}, setbool, NULL, {{false}, {true}}}, + {"winsymlinks", {func: set_winsymlinks}, isfunc, NULL, {{0}, {0}}}, {NULL, {0}, setdword, 0, {{0}, {0}}} }; @@ -874,6 +874,7 @@ environ_init (char **envp, int envc) out: findenv_func = (char * (*)(const char*, int*)) my_findenv; environ = envp; + dumper_init (); if (envp_passed_in) { #ifdef __MSYS__ @@ -1011,7 +1012,7 @@ struct spenv static NO_COPY spenv spenvs[] = { #ifdef DEBUGGING - {NL ("MSYS_DEBUG="), false, true, NULL}, + {NL ("CYGWIN_DEBUG="), false, true, NULL}, #endif {NL ("HOMEDRIVE="), false, false, &cygheap_user::env_homedrive}, {NL ("HOMEPATH="), false, false, &cygheap_user::env_homepath}, diff --git a/winsup/cygwin/exceptions.cc b/winsup/cygwin/exceptions.cc index 1faeda2c66..f6b62552ed 100644 --- a/winsup/cygwin/exceptions.cc +++ b/winsup/cygwin/exceptions.cc @@ -53,6 +53,7 @@ details. */ #define DUMPSTACK_FRAME_LIMIT 32 PWCHAR debugger_command; +PWCHAR dumper_command; extern uint8_t _sigbe; extern uint8_t _sigdelayed_end; @@ -133,6 +134,42 @@ error_start_init (const char *buf) wcscat (cp, L"\""); } +extern "C" void +dumper_init (void) +{ + WCHAR dll_dir[PATH_MAX]; + if (!GetModuleFileNameW (cygwin_hmodule, dll_dir, PATH_MAX)) + return; + + /* Strip off last path component ("\\cygwin1.dll") */ + PWCHAR w = wcsrchr (dll_dir, L'\\'); + if (!w) + return; + + *w = L'\0'; + + /* Calculate the length of the command, allowing for an appended DWORD PID and + terminating null */ + int cmd_len = 1 + wcslen(dll_dir) + 11 + 5 + 1 + wcslen(global_progname) + 1 + 10 + 1; + if (cmd_len > 32767) + { + /* If this comes to more than the 32,767 characters CreateProcess() can + accept, we can't work, so don't set dumper_command */ + return; + } + + dumper_command = (PWCHAR) malloc(cmd_len * sizeof (WCHAR)); + + PWCHAR cp = dumper_command; + cp = wcpcpy (cp, L"\""); + cp = wcpcpy (cp, dll_dir); + cp = wcpcpy (cp, L"\\dumper.exe"); + cp = wcpcpy (cp, L"\" -n "); + cp = wcpcpy (cp, L"\""); + cp = wcpcpy (cp, global_progname); + wcscat (cp, L"\""); +} + void cygwin_exception::open_stackdumpfile () { @@ -455,20 +492,14 @@ cygwin_stackdump () exc.dumpstack (); } -extern "C" int -try_to_debug () +static +int exec_prepared_command (PWCHAR command) { - if (!debugger_command) + if (!command) return 0; - debug_printf ("debugger_command '%W'", debugger_command); - if (being_debugged ()) - { - extern void break_here (); - break_here (); - return 0; - } + debug_printf ("executing prepared command '%W'", command); - PWCHAR dbg_end = wcschr (debugger_command, L'\0'); + PWCHAR dbg_end = wcschr (command, L'\0'); __small_swprintf (dbg_end, L" %u", GetCurrentProcessId ()); LONG prio = GetThreadPriority (GetCurrentThread ()); @@ -510,11 +541,15 @@ try_to_debug () } FreeEnvironmentStringsW (rawenv); - console_printf ("*** starting debugger for pid %u, tid %u\n", + /* timeout from waiting for debugger to attach after 10 seconds */ + ULONGLONG timeout = GetTickCount64() + 10*1000; + + console_printf ("*** starting '%W' for pid %u, tid %u\r\n", + command, cygwin_pid (GetCurrentProcessId ()), GetCurrentThreadId ()); BOOL dbg; dbg = CreateProcessW (NULL, - debugger_command, + command, NULL, NULL, FALSE, @@ -528,26 +563,46 @@ try_to_debug () we can't wait here for the error_start process to exit, as if it's a debugger, it might want to continue this thread. So we busy wait until a debugger attaches, which stops this process, after which it can decide if - we continue or not. */ + we continue or not. + + Note that this is still racy: if the error_start process does it's work too + fast, we don't notice that it attached and get stuck here. So we also + apply a timeout to ensure we exit eventually. + */ *dbg_end = L'\0'; if (!dbg) - system_printf ("Failed to start debugger, %E"); + system_printf ("Failed to start, %E"); else { - SetThreadPriority (GetCurrentThread (), THREAD_PRIORITY_IDLE); - while (!being_debugged ()) - Sleep (1); + while (!being_debugged () && GetTickCount64() < timeout) + Sleep (0); Sleep (2000); } - console_printf ("*** continuing pid %u from debugger call (%d)\n", - cygwin_pid (GetCurrentProcessId ()), dbg); + console_printf ("*** continuing pid %u\r\n", + cygwin_pid (GetCurrentProcessId ())); SetThreadPriority (GetCurrentThread (), prio); return dbg; } +extern "C" int +try_to_debug () +{ + /* If already being debugged, break into the debugger (Note that this function + can be called from places other than an exception) */ + if (being_debugged ()) + { + extern void break_here (); + break_here (); + return 1; + } + + /* Otherwise, invoke the JIT debugger, if set */ + return exec_prepared_command (debugger_command); +} + /* myfault exception handler. */ EXCEPTION_DISPOSITION exception::myfault (EXCEPTION_RECORD *e, exception_list *frame, CONTEXT *in, @@ -611,7 +666,7 @@ exception::handle (EXCEPTION_RECORD *e, exception_list *frame, CONTEXT *in, siginfo_t si = {}; si.si_code = SI_KERNEL; /* Coerce win32 value to posix value. */ - switch (e->ExceptionCode) + switch ((NTSTATUS) e->ExceptionCode) { case STATUS_FLOAT_DIVIDE_BY_ZERO: si.si_signo = SIGFPE; @@ -1050,7 +1105,7 @@ ctrl_c_handler (DWORD type) return FALSE; } - if (myself->ctty != -1) + if (myself->ctty != CTTY_UNINITIALIZED) { if (type == CTRL_CLOSE_EVENT) { @@ -1265,7 +1320,6 @@ signal_exit (int sig, siginfo_t *si, void *) debug_printf ("exiting due to signal %d", sig); exit_state = ES_SIGNAL_EXIT; - if (cygheap->rlim_core > 0UL) switch (sig) { case SIGABRT: @@ -1278,9 +1332,24 @@ signal_exit (int sig, siginfo_t *si, void *) case SIGTRAP: case SIGXCPU: case SIGXFSZ: - sig |= 0x80; /* Flag that we've "dumped core" */ if (try_to_debug ()) break; + + if (cygheap->rlim_core == 0Ul) + break; + + sig |= __WCOREFLAG; /* Set flag in exit status to show that we've "dumped core" */ + + /* If core dump size is >1MB, try to invoke dumper to write a + .core file */ + if (cygheap->rlim_core > 1024*1024) + { + if (exec_prepared_command (dumper_command)) + break; + /* If that failed, fall-through to... */ + } + + /* Otherwise write a .stackdump */ if (si->si_code != SI_USER && si->si_cyg) { cygwin_exception *exc = (cygwin_exception *) si->si_cyg; @@ -1331,6 +1400,24 @@ signal_exit (int sig, siginfo_t *si, void *) } } /* extern "C" */ +/* As above, but before exiting due to api_fatal */ +extern "C" +void +api_fatal_debug () +{ + if (try_to_debug ()) + return; + + if (cygheap->rlim_core == 0Ul) + return; + + if (cygheap->rlim_core > 1024*1024) + if (exec_prepared_command (dumper_command)) + return; + + cygwin_stackdump(); +} + /* Attempt to carefully handle SIGCONT when we are stopped. */ void _cygtls::handle_SIGCONT () diff --git a/winsup/cygwin/external.cc b/winsup/cygwin/external.cc index 51d7a6464d..353375a984 100644 --- a/winsup/cygwin/external.cc +++ b/winsup/cygwin/external.cc @@ -73,12 +73,12 @@ fillout_pinfo (pid_t pid, int winpid) ep.pid = thispid + MAX_PID; ep.dwProcessId = thispid; ep.process_state = PID_IN_USE; - ep.ctty = -1; + ep.ctty = CTTY_UNINITIALIZED; break; } else if (nextpid || p->pid == pid) { - ep.ctty = (p->ctty < 0 || iscons_dev (p->ctty)) + ep.ctty = (!CTTY_IS_VALID (p->ctty) || iscons_dev (p->ctty)) ? p->ctty : device::minor (p->ctty); ep.pid = p->pid; ep.ppid = p->ppid; diff --git a/winsup/cygwin/fhandler/base.cc b/winsup/cygwin/fhandler/base.cc index 05e51536ff..f1ad375228 100644 --- a/winsup/cygwin/fhandler/base.cc +++ b/winsup/cygwin/fhandler/base.cc @@ -613,7 +613,10 @@ fhandler_base::open (int flags, mode_t mode) options |= FILE_OPEN_REPARSE_POINT; } - if (get_device () == FH_FS) + /* If the file is a FIFO, open has been called for an operation on the file + constituting the FIFO, e. g., chmod or statvfs. Handle it like a normal + file. Eespecially the access flags have to be set correctly. */ + if (get_device () == FH_FS || get_device () == FH_FIFO) { /* O_TMPFILE files are created with delete-on-close semantics, as well as with FILE_ATTRIBUTE_TEMPORARY. The latter speeds up file access, @@ -893,6 +896,9 @@ fhandler_base::write (const void *ptr, size_t len) did_lseek (false); /* don't do it again */ + /* If the file system supports sparse files and the application is + writing after a long seek beyond EOF spanning more than one + sparsifiable chunk, convert the file to a sparse file. */ if (!(get_flags () & O_APPEND) && !has_attribute (FILE_ATTRIBUTE_SPARSE_FILE) && NT_SUCCESS (NtQueryInformationFile (get_output_handle (), @@ -901,12 +907,9 @@ fhandler_base::write (const void *ptr, size_t len) && NT_SUCCESS (NtQueryInformationFile (get_output_handle (), &io, &fpi, sizeof fpi, FilePositionInformation)) - && fpi.CurrentByteOffset.QuadPart - >= fsi.EndOfFile.QuadPart + (128 * 1024)) + && span_sparse_chunk (fpi.CurrentByteOffset.QuadPart, + fsi.EndOfFile.QuadPart)) { - /* If the file system supports sparse files and the application - is writing after a long seek beyond EOF, convert the file to - a sparse file. */ NTSTATUS status; status = NtFsControlFile (get_output_handle (), NULL, NULL, NULL, &io, FSCTL_SET_SPARSE, NULL, 0, NULL, 0); @@ -1118,7 +1121,7 @@ fhandler_base::lseek (off_t offset, int whence) } fpi.CurrentByteOffset.QuadPart += offset; break; - default: /* SEEK_END */ + case SEEK_END: status = NtQueryInformationFile (get_handle (), &io, &fsi, sizeof fsi, FileStandardInformation); if (!NT_SUCCESS (status)) @@ -1128,6 +1131,89 @@ fhandler_base::lseek (off_t offset, int whence) } fpi.CurrentByteOffset.QuadPart = fsi.EndOfFile.QuadPart + offset; break; + case SEEK_DATA: + case SEEK_HOLE: + { + FILE_ALLOCATED_RANGE_BUFFER inp, out; + + status = NtQueryInformationFile (get_handle (), &io, &fsi, sizeof fsi, + FileStandardInformation); + if (!NT_SUCCESS (status)) + { + __seterrno_from_nt_status (status); + return -1; + } + /* Per Linux man page, ENXIO if offset is beyond EOF */ + if (offset > fsi.EndOfFile.QuadPart) + { + set_errno (ENXIO); + return -1; + } + if (!has_attribute (FILE_ATTRIBUTE_SPARSE_FILE)) + { + /* Default behaviour if sparse files are not supported: + SEEK_DATA: seek to offset + SEEK_HOLE: seek to EOF */ + fpi.CurrentByteOffset.QuadPart = (whence == SEEK_DATA) + ? offset + : fsi.EndOfFile.QuadPart; + break; + } + inp.FileOffset.QuadPart = offset; + inp.Length.QuadPart = fsi.EndOfFile.QuadPart - offset; + /* Note that we only fetch a single region, so we expect the + function to fail with STATUS_BUFFER_OVERFLOW. It still + returns the data region containing offset, or the next + region after offset, if offset is within a hole. */ + status = NtFsControlFile (get_output_handle (), NULL, NULL, NULL, + &io, FSCTL_QUERY_ALLOCATED_RANGES, + &inp, sizeof inp, + &out, sizeof out); + if (!NT_SUCCESS (status) && status != STATUS_BUFFER_OVERFLOW) + { + /* On error, fall back to default behaviour, see above. */ + fpi.CurrentByteOffset.QuadPart = (whence == SEEK_DATA) + ? offset + : fsi.EndOfFile.QuadPart; + break; + } + if (io.Information == 0) + { + /* No valid region, so offset is within a hole at EOF. + SEEK_DATA: ENXIO + SEEK_HOLE: seek to offset */ + if (whence == SEEK_DATA) + { + set_errno (ENXIO); + return -1; + } + fpi.CurrentByteOffset.QuadPart = offset; + } + else if (out.FileOffset.QuadPart == offset) + { + /* offset within valid data range? In that case, that region + supposedly starts at offset, and the region length is corrected + accordingly. That's quite helpful. + SEEK_DATA: seek to offset + SEEK_HOLE: seek to end of range */ + fpi.CurrentByteOffset.QuadPart = offset; + if (whence == SEEK_HOLE) + fpi.CurrentByteOffset.QuadPart += out.Length.QuadPart; + } + else + { + /* Is range beyond offset? + SEEK_DATA: seek to start of range + SEEK_HOLE: seek to offset */ + fpi.CurrentByteOffset.QuadPart = (whence == SEEK_DATA) + ? out.FileOffset.QuadPart + : offset; + } + } + break; + default: /* Should never be reached */ + set_errno (EINVAL); + return -1; } debug_printf ("setting file pointer to %U", fpi.CurrentByteOffset.QuadPart); @@ -1636,7 +1722,10 @@ int fhandler_base::fchmod (mode_t mode) { if (pc.is_fs_special ()) - return chmod_device (pc, mode); + { + fhandler_disk_file fh (pc); + return fh.fchmod (mode); + } /* By default, just succeeds. */ return 0; } @@ -1645,7 +1734,10 @@ int fhandler_base::fchown (uid_t uid, gid_t gid) { if (pc.is_fs_special ()) - return ((fhandler_disk_file *) this)->fhandler_disk_file::fchown (uid, gid); + { + fhandler_disk_file fh (pc); + return fh.fchown (uid, gid); + } /* By default, just succeeds. */ return 0; } @@ -1712,7 +1804,7 @@ fhandler_base::fadvise (off_t offset, off_t length, int advice) } int -fhandler_base::ftruncate (off_t length, bool allow_truncate) +fhandler_base::fallocate (int mode, off_t offset, off_t length) { return ENODEV; } diff --git a/winsup/cygwin/fhandler/clipboard.cc b/winsup/cygwin/fhandler/clipboard.cc index fe3545bf55..376d434407 100644 --- a/winsup/cygwin/fhandler/clipboard.cc +++ b/winsup/cygwin/fhandler/clipboard.cc @@ -322,6 +322,13 @@ fhandler_dev_clipboard::lseek (off_t offset, int whence) * On writes we use this to decide how to write - empty and write, or open, copy, empty * and write */ + if (whence == SEEK_CUR) + return 0; + if (whence != SEEK_SET) + { + set_errno (EINVAL); + return -1; + } pos = offset; /* treat seek like rewind */ if (membuffer) diff --git a/winsup/cygwin/fhandler/console.cc b/winsup/cygwin/fhandler/console.cc index f9a6946d9f..dc43cd9f59 100644 --- a/winsup/cygwin/fhandler/console.cc +++ b/winsup/cygwin/fhandler/console.cc @@ -33,6 +33,7 @@ details. */ #include "child_info.h" #include "cygwait.h" #include "winf.h" +#include "psapi.h" /* Don't make this bigger than NT_MAX_PATH as long as the temporary buffer is allocated using tmp_pathbuf!!! */ @@ -41,19 +42,23 @@ details. */ #define ALT_PRESSED (LEFT_ALT_PRESSED | RIGHT_ALT_PRESSED) #define CTRL_PRESSED (LEFT_CTRL_PRESSED | RIGHT_CTRL_PRESSED) -#define con (shared_console_info->con) +#define con (shared_console_info[unit]->con) #define srTop (con.b.srWindow.Top + con.scroll_region.Top) #define srBottom ((con.scroll_region.Bottom < 0) ? \ con.b.srWindow.Bottom : \ con.b.srWindow.Top + con.scroll_region.Bottom) -#define con_is_legacy (shared_console_info && con.is_legacy) +#define con_is_legacy (shared_console_info[unit] && con.is_legacy) + +static HANDLE NO_COPY shared_info_mutex; +static int NO_COPY shared_info_state[MAX_CONS_DEV]; #define CONS_THREAD_SYNC "cygcons.thread_sync" static bool NO_COPY master_thread_started = false; const unsigned fhandler_console::MAX_WRITE_CHARS = 16384; -fhandler_console::console_state NO_COPY *fhandler_console::shared_console_info; +fhandler_console::console_state NO_COPY + *fhandler_console::shared_console_info[MAX_CONS_DEV + 1]; bool NO_COPY fhandler_console::invisible_console; @@ -65,6 +70,56 @@ static struct fhandler_base::rabuf_t con_ra; in xterm compatible mode */ static wchar_t last_char; +DWORD +fhandler_console::attach_console (pid_t owner, bool *err) +{ + DWORD resume_pid = (DWORD) -1; + pinfo p (owner); + if (p) + { + DWORD attached = + fhandler_pty_common::get_console_process_id (p->dwProcessId, + true, false, false); + if (!attached) + { + resume_pid = + fhandler_pty_common::get_console_process_id (myself->dwProcessId, + false, false, false); + FreeConsole (); + BOOL r = AttachConsole (p->dwProcessId); + if (!r) + { + if (resume_pid) + AttachConsole (resume_pid); + if (err) + *err = true; + return (DWORD) -1; + } + } + } + return resume_pid; +} + +void +fhandler_console::detach_console (DWORD resume_pid, pid_t owner) +{ + if (resume_pid == (DWORD) -1) + return; + if (resume_pid) + { + FreeConsole (); + AttachConsole (resume_pid); + } + else if (myself->pid != owner) + FreeConsole (); +} + +pid_t +fhandler_console::get_owner () +{ + return con.owner; +} + /* simple helper class to accumulate output in a buffer and send that to the console on request: */ static class write_pending_buffer @@ -73,21 +128,19 @@ static class write_pending_buffer static const size_t WPBUF_LEN = 256u; char buf[WPBUF_LEN]; size_t ixput; - HANDLE output_handle; public: - void init (HANDLE &handle) + void init () { - output_handle = handle; empty (); } - inline void put (char x) + inline void put (HANDLE output_handle, pid_t owner, char x) { if (ixput == WPBUF_LEN) - send (); + send (output_handle, owner); buf[ixput++] = x; } inline void empty () { ixput = 0u; } - inline void send () + inline void send (HANDLE output_handle, pid_t owner) { if (!output_handle) { @@ -125,11 +178,25 @@ static class write_pending_buffer } } acquire_attach_mutex (mutex_timeout); + DWORD resume_pid = fhandler_console::attach_console (owner); WriteConsoleW (output_handle, bufw, len, NULL, 0); + fhandler_console::detach_console (resume_pid, owner); release_attach_mutex (); } } wpbuf; +void +fhandler_console::wpbuf_put (char c) +{ + wpbuf.put (get_output_handle (), con.owner, c); +} + +void +fhandler_console::wpbuf_send () +{ + wpbuf.send (get_output_handle (), con.owner); +} + static void beep () { @@ -155,46 +222,58 @@ fhandler_console::open_shared_console (HWND hw, HANDLE& h, bool& created) shared_locations m = created ? SH_SHARED_CONSOLE : SH_JUSTOPEN; console_state *res = (console_state *) - open_shared (namebuf, 0, h, sizeof (*shared_console_info), m, created); + open_shared (namebuf, 0, h, sizeof (console_state), m, created); + if (m == SH_SHARED_CONSOLE) + cygheap->shared_regions.console_shared_addr = res; return res; } -class console_unit +fhandler_console::console_unit::console_unit (int n0, HANDLE *input_mutex) : + n (-1) { - int n; - unsigned long bitmask; - HWND me; - -public: - operator int () const {return n;} - console_unit (HWND); - friend BOOL CALLBACK enum_windows (HWND, LPARAM); -}; - -BOOL CALLBACK -enum_windows (HWND hw, LPARAM lp) -{ - console_unit *this1 = (console_unit *) lp; - if (hw == this1->me) - return TRUE; - HANDLE h = NULL; - fhandler_console::console_state *cs; - if ((cs = fhandler_console::open_shared_console (hw, h))) + char buf[MAX_PATH]; + for (int i = max(0, n0); i < MAX_CONS_DEV; i++) + { + shared_name (buf, "cygcons.input.mutex", i); + SetLastError (ERROR_SUCCESS); + HANDLE input_mutex0 = CreateMutex (&sec_none, FALSE, buf); + DWORD err = GetLastError (); + if (err == ERROR_ALREADY_EXISTS || err == ERROR_ACCESS_DENIED) + { + if (n0 >= 0) + n = i; + } + else if (n0 == CONS_SCAN_UNUSED) + { + n = i; + if (input_mutex) + *input_mutex = input_mutex0; + break; + } + if (input_mutex0) + CloseHandle (input_mutex0); + if (n0 >= 0) + break; + } + if (n0 == CONS_SCAN_UNUSED && n < 0) { - this1->bitmask ^= 1 << cs->tty_min_state.getntty (); - UnmapViewOfFile ((void *) cs); - CloseHandle (h); + __small_sprintf (buf, "console device allocation failure - " + "too many consoles in use, max consoles is %d", + MAX_CONS_DEV); + api_fatal (buf); } - return TRUE; } -console_unit::console_unit (HWND me0): - bitmask (0xffffffff), me (me0) +fhandler_console::console_unit::operator console_state * () const { - EnumWindows (enum_windows, (LPARAM) this); - n = (_minor_t) ffs (bitmask) - 1; - if (n < 0) - api_fatal ("console device allocation failure - too many consoles in use, max consoles is 32"); + if (n < 0 || n >= MAX_CONS_DEV) + return NULL; + HANDLE h = NULL; + fhandler_console::console_state *cs; + HWND hw = cygwin_shared->cons_hwnd[n]; + if ((cs = fhandler_console::open_shared_console (hw, h))) + CloseHandle (h); + return cs; } static DWORD @@ -205,17 +284,23 @@ cons_master_thread (VOID *arg) fhandler_console::handle_set_t handle_set; fh->get_duplicated_handle_set (&handle_set); HANDLE thread_sync_event; - DuplicateHandle (GetCurrentProcess (), fh->thread_sync_event, - GetCurrentProcess (), &thread_sync_event, - 0, FALSE, DUPLICATE_SAME_ACCESS); - SetEvent (thread_sync_event); - master_thread_started = true; - /* Do not touch class members after here because the class instance - may have been destroyed. */ - fhandler_console::cons_master_thread (&handle_set, ttyp); - fhandler_console::close_handle_set (&handle_set); - SetEvent (thread_sync_event); - CloseHandle (thread_sync_event); + if (DuplicateHandle (GetCurrentProcess (), fh->thread_sync_event, + GetCurrentProcess (), &thread_sync_event, + 0, FALSE, DUPLICATE_SAME_ACCESS)) + { + SetEvent (thread_sync_event); + master_thread_started = true; + /* Do not touch class members after here because the class instance + may have been destroyed. */ + fhandler_console::cons_master_thread (&handle_set, ttyp); + fhandler_console::close_handle_set (&handle_set); + SetEvent (thread_sync_event); + CloseHandle (thread_sync_event); + master_thread_started = false; + } + else + debug_printf ("cons_master_thread not started because thread_sync_event " + "could not be duplicated %08x", GetLastError ()); return 0; } @@ -285,6 +370,7 @@ inrec_eq (const INPUT_RECORD *a, const INPUT_RECORD *b, DWORD n) void fhandler_console::cons_master_thread (handle_set_t *p, tty *ttyp) { + const _minor_t unit = p->unit; const int additional_space = 128; /* Possible max number of incoming events during the process. Additional space should be left for writeback fix. */ @@ -301,9 +387,6 @@ fhandler_console::cons_master_thread (handle_set_t *p, tty *ttyp) return; } - DWORD inrec_size1 = - wincap.cons_need_small_input_record_buf () ? INREC_SIZE : inrec_size; - struct m { inline static size_t bytes (size_t n) @@ -353,11 +436,7 @@ fhandler_console::cons_master_thread (handle_set_t *p, tty *ttyp) if (new_input_tmp) input_tmp = new_input_tmp; if (new_input_rec && new_input_tmp) - { - inrec_size = new_inrec_size; - if (!wincap.cons_need_small_input_record_buf ()) - inrec_size1 = inrec_size; - } + inrec_size = new_inrec_size; } WaitForSingleObject (p->input_mutex, mutex_timeout); @@ -378,7 +457,7 @@ fhandler_console::cons_master_thread (handle_set_t *p, tty *ttyp) { DWORD len; ReadConsoleInputW (p->input_handle, input_rec + total_read, - min (inrec_size - total_read, inrec_size1), + min (inrec_size - total_read, inrec_size), &len); total_read += len; } @@ -390,6 +469,8 @@ fhandler_console::cons_master_thread (handle_set_t *p, tty *ttyp) case WAIT_CANCELED: break; default: /* Error */ + free (input_rec); + free (input_tmp); ReleaseMutex (p->input_mutex); return; } @@ -448,7 +529,7 @@ fhandler_console::cons_master_thread (handle_set_t *p, tty *ttyp) con.scroll_region.Bottom = -1; if (wincap.has_con_24bit_colors () && !con_is_legacy && wincap.has_con_broken_tabs ()) - fix_tab_position (p->output_handle); + fix_tab_position (p->output_handle, con.owner); ttyp->kill_pgrp (SIGWINCH); } processed = true; @@ -476,7 +557,7 @@ fhandler_console::cons_master_thread (handle_set_t *p, tty *ttyp) { DWORD len; WriteConsoleInputW (p->input_handle, input_rec + n, - min (total_read - n, inrec_size1), &len); + min (total_read - n, inrec_size), &len); n += len; } release_attach_mutex (); @@ -496,22 +577,18 @@ fhandler_console::cons_master_thread (handle_set_t *p, tty *ttyp) if (new_input_tmp) input_tmp = new_input_tmp; if (new_input_rec && new_input_tmp) - { - inrec_size = new_inrec_size; - if (!wincap.cons_need_small_input_record_buf ()) - inrec_size1 = inrec_size; - } + inrec_size = new_inrec_size; } /* Check if writeback was successfull. */ acquire_attach_mutex (mutex_timeout); - PeekConsoleInputW (p->input_handle, input_tmp, inrec_size1, &n); + PeekConsoleInputW (p->input_handle, input_tmp, inrec_size, &n); release_attach_mutex (); - if (n < min (total_read, inrec_size1)) + if (n < min (total_read, inrec_size)) break; /* Someone has read input without acquiring input_mutex. ConEmu cygwin-connector? */ if (inrec_eq (input_rec, input_tmp, - min (total_read, inrec_size1))) + min (total_read, inrec_size))) break; /* OK */ /* Try to fix */ acquire_attach_mutex (mutex_timeout); @@ -521,7 +598,7 @@ fhandler_console::cons_master_thread (handle_set_t *p, tty *ttyp) { DWORD len; ReadConsoleInputW (p->input_handle, input_tmp + n, - min (inrec_size - n, inrec_size1), &len); + min (inrec_size - n, inrec_size), &len); n += len; } release_attach_mutex (); @@ -554,7 +631,7 @@ fhandler_console::cons_master_thread (handle_set_t *p, tty *ttyp) DWORD len; WriteConsoleInputW (p->input_handle, input_tmp + l, - min (n - l, inrec_size1), + min (n - l, inrec_size), &len); l += len; } @@ -581,46 +658,67 @@ fhandler_console::cons_master_thread (handle_set_t *p, tty *ttyp) bool fhandler_console::set_unit () { - bool created; + bool created = false; fh_devices devset; lock_ttys here; HWND me; fh_devices this_unit = dev (); - bool generic_console = this_unit == FH_CONIN || this_unit == FH_CONOUT; - if (shared_console_info) - { - fh_devices shared_unit = - (fh_devices) shared_console_info->tty_min_state.getntty (); - devset = (shared_unit == this_unit || this_unit == FH_CONSOLE - || generic_console - || this_unit == FH_TTY) ? - shared_unit : FH_ERROR; - created = false; - } - else if ((!generic_console && - (myself->ctty != -1 && !iscons_dev (myself->ctty))) - || !(me = GetConsoleWindow ())) + bool generic_console = + this_unit == FH_CONSOLE || this_unit == FH_CONIN || this_unit == FH_CONOUT; + if (!generic_console && this_unit != FH_TTY) + unit = get_minor (); + else if (myself->ctty != CTTY_UNINITIALIZED) + unit = device::minor (myself->ctty); + + if (!shared_info_mutex) + shared_info_mutex = CreateMutex (&sec_none_nih, FALSE, NULL); + + WaitForSingleObject (shared_info_mutex, INFINITE); + + if (shared_console_info[unit]) + ; /* Do nothing */ + else if (generic_console + && myself->ctty != CTTY_UNINITIALIZED && !iscons_dev (myself->ctty)) devset = FH_ERROR; else { - created = true; - shared_console_info = - open_shared_console (me, cygheap->console_h, created); - ProtectHandleINH (cygheap->console_h); - if (created) - shared_console_info-> - tty_min_state.setntty (DEV_CONS_MAJOR, console_unit (me)); - devset = (fh_devices) shared_console_info->tty_min_state.getntty (); - if (created) - con.owner = myself->pid; + if (!generic_console && (dev_t) myself->ctty != get_device ()) + { + shared_console_info[unit] = console_unit (unit); + shared_info_state[unit]++; + } + if (generic_console || !shared_console_info[unit]) + { + me = GetConsoleWindow (); + if (!me) + devset = FH_ERROR; + else + { + created = true; + fhandler_console::console_state *cs = + open_shared_console (me, cygheap->console_h, created); + shared_info_state[unit]++; + ProtectHandleINH (cygheap->console_h); + if (created) + { + unit = console_unit (CONS_SCAN_UNUSED, &input_mutex); + cygwin_shared->cons_hwnd[unit] = me; + cs->tty_min_state.setntty (DEV_CONS_MAJOR, unit); + } + else + unit = device::minor (cs->tty_min_state.ntty); + shared_console_info[unit] = cs; + if (created) + con.owner = myself->pid; + } + } } - if (!created && shared_console_info) + ReleaseMutex (shared_info_mutex); + + if (shared_console_info[unit]) { - while (con.owner > MAX_PID) - Sleep (1); - pinfo p (con.owner); - if (!p) - con.owner = myself->pid; + devset = (fh_devices) shared_console_info[unit]->tty_min_state.getntty (); + _tc = &(shared_console_info[unit]->tty_min_state); } dev ().parse (devset); @@ -668,7 +766,7 @@ fhandler_console::setup () con.set_default_attr (); con.backspace_keycode = CERASE; con.cons_rapoi = NULL; - shared_console_info->tty_min_state.is_console = true; + shared_console_info[unit]->tty_min_state.is_console = true; con.cursor_key_app_mode = false; con.disable_master_thread = true; con.master_thread_suspended = false; @@ -712,12 +810,15 @@ void fhandler_console::set_input_mode (tty::cons_mode m, const termios *t, const handle_set_t *p) { + const _minor_t unit = p->unit; DWORD oflags; WaitForSingleObject (p->input_mutex, mutex_timeout); acquire_attach_mutex (mutex_timeout); + DWORD resume_pid = attach_console (con.owner); GetConsoleMode (p->input_handle, &oflags); DWORD flags = oflags & (ENABLE_EXTENDED_FLAGS | ENABLE_INSERT_MODE | ENABLE_QUICK_EDIT_MODE); + con.curr_input_mode = m; switch (m) { case tty::restore: @@ -753,6 +854,7 @@ fhandler_console::set_input_mode (tty::cons_mode m, const termios *t, set_output_mode (tty::cygwin, t, p); WriteConsoleW (p->output_handle, L"\033[?1h", 5, NULL, 0); } + detach_console (resume_pid, con.owner); release_attach_mutex (); ReleaseMutex (p->input_mutex); } @@ -761,10 +863,12 @@ void fhandler_console::set_output_mode (tty::cons_mode m, const termios *t, const handle_set_t *p) { + const _minor_t unit = p->unit; DWORD flags = ENABLE_PROCESSED_OUTPUT | ENABLE_WRAP_AT_EOL_OUTPUT; if (con.orig_virtual_terminal_processing_mode) flags |= ENABLE_VIRTUAL_TERMINAL_PROCESSING; WaitForSingleObject (p->output_mutex, mutex_timeout); + con.curr_output_mode = m; switch (m) { case tty::restore: @@ -780,7 +884,9 @@ fhandler_console::set_output_mode (tty::cons_mode m, const termios *t, break; } acquire_attach_mutex (mutex_timeout); + DWORD resume_pid = attach_console (con.owner); SetConsoleMode (p->output_handle, flags); + detach_console (resume_pid, con.owner); release_attach_mutex (); ReleaseMutex (p->output_mutex); } @@ -803,9 +909,10 @@ fhandler_console::setup_for_non_cygwin_app () void fhandler_console::cleanup_for_non_cygwin_app (handle_set_t *p) { + const _minor_t unit = p->unit; termios dummy = {0, }; - termios *ti = - shared_console_info ? &(shared_console_info->tty_min_state.ti) : &dummy; + termios *ti = shared_console_info[unit] ? + &(shared_console_info[unit]->tty_min_state.ti) : &dummy; /* Cleaning-up console mode for non-cygwin app. */ /* conmode can be tty::restore when non-cygwin app is exec'ed from login shell. */ @@ -822,11 +929,12 @@ tty_min * tty_list::get_cttyp () { dev_t n = myself->ctty; + const _minor_t unit = device::minor (n); if (iscons_dev (n)) - return fhandler_console::shared_console_info ? - &fhandler_console::shared_console_info->tty_min_state : NULL; + return fhandler_console::shared_console_info[unit] ? + &fhandler_console::shared_console_info[unit]->tty_min_state : NULL; else if (istty_slave_dev (n)) - return &ttys[device::minor (n)]; + return &ttys[unit]; else return NULL; } @@ -868,6 +976,10 @@ fhandler_console::setup_io_mutex (void) } if (res == WAIT_OBJECT_0) release_output_mutex (); + + extern HANDLE attach_mutex; + if (!attach_mutex) + attach_mutex = CreateMutex (&sec_none_nih, FALSE, NULL); } inline DWORD @@ -910,7 +1022,9 @@ fhandler_console::set_cursor_maybe () con.dwLastCursorPosition.Y != con.b.dwCursorPosition.Y) { acquire_attach_mutex (mutex_timeout); + DWORD resume_pid = attach_console (con.owner); SetConsoleCursorPosition (get_output_handle (), con.b.dwCursorPosition); + detach_console (resume_pid, con.owner); release_attach_mutex (); con.dwLastCursorPosition = con.b.dwCursorPosition; } @@ -919,15 +1033,17 @@ fhandler_console::set_cursor_maybe () /* Workaround for a bug of windows xterm compatible mode. */ /* The horizontal tab positions are broken after resize. */ void -fhandler_console::fix_tab_position (HANDLE h) +fhandler_console::fix_tab_position (HANDLE h, pid_t owner) { /* Re-setting ENABLE_VIRTUAL_TERMINAL_PROCESSING fixes the tab position. */ DWORD mode; acquire_attach_mutex (mutex_timeout); + DWORD resume_pid = attach_console (owner); GetConsoleMode (h, &mode); SetConsoleMode (h, mode & ~ENABLE_VIRTUAL_TERMINAL_PROCESSING); SetConsoleMode (h, mode); + detach_console (resume_pid, owner); release_attach_mutex (); } @@ -944,7 +1060,7 @@ fhandler_console::send_winch_maybe () con.scroll_region.Bottom = -1; if (wincap.has_con_24bit_colors () && !con_is_legacy && wincap.has_con_broken_tabs ()) - fix_tab_position (get_output_handle ()); + fix_tab_position (get_output_handle (), con.owner); /* longjmp() may be called in the signal handler like less, so release input_mutex temporarily before kill_pgrp(). */ release_input_mutex (); @@ -966,7 +1082,9 @@ fhandler_console::mouse_aware (MOUSE_EVENT_RECORD& mouse_event) and remember adjusted position in state for use by read() */ CONSOLE_SCREEN_BUFFER_INFO now; acquire_attach_mutex (mutex_timeout); + DWORD resume_pid = attach_console (con.owner); BOOL r = GetConsoleScreenBufferInfo (get_output_handle (), &now); + detach_console (resume_pid, con.owner); release_attach_mutex (); if (!r) /* Cannot adjust position by window scroll buffer offset */ @@ -993,12 +1111,12 @@ fhandler_console::bg_check (int sig, bool dontsignal) /* Setting-up console mode for cygwin app. This is necessary if the cygwin app and other non-cygwin apps are started simultaneously in the same process group. */ - if (sig == SIGTTIN) + if (sig == SIGTTIN && con.curr_input_mode != tty::cygwin) { set_input_mode (tty::cygwin, &tc ()->ti, get_handle_set ()); set_disable_master_thread (false, this); } - if (sig == SIGTTOU) + if (sig == SIGTTOU && con.curr_output_mode != tty::cygwin) set_output_mode (tty::cygwin, &tc ()->ti, get_handle_set ()); return fhandler_termios::bg_check (sig, dontsignal); @@ -1054,7 +1172,9 @@ fhandler_console::read (void *pv, size_t& buflen) { /* Confirm the handle is still valid */ DWORD mode; acquire_attach_mutex (mutex_timeout); + DWORD resume_pid = attach_console (con.owner); BOOL res = GetConsoleMode (get_handle (), &mode); + detach_console (resume_pid, con.owner); release_attach_mutex (); if (res) goto wait_retry; @@ -1125,7 +1245,7 @@ fhandler_console::process_input_message (void) { char tmp[60]; - if (!shared_console_info) + if (!shared_console_info[unit]) return input_error; termios *ti = &(get_ttyp ()->ti); @@ -1135,8 +1255,10 @@ fhandler_console::process_input_message (void) INPUT_RECORD input_rec[INREC_SIZE]; acquire_attach_mutex (mutex_timeout); + DWORD resume_pid = attach_console (con.owner); BOOL r = PeekConsoleInputW (get_handle (), input_rec, INREC_SIZE, &total_read); + detach_console (resume_pid, con.owner); release_attach_mutex (); if (!r) { @@ -1525,7 +1647,9 @@ fhandler_console::process_input_message (void) { DWORD discarded; acquire_attach_mutex (mutex_timeout); + DWORD resume_pid = attach_console (con.owner); ReadConsoleInputW (get_handle (), input_rec, discard_len, &discarded); + detach_console (resume_pid, con.owner); release_attach_mutex (); con.num_processed -= min (con.num_processed, discarded); } @@ -1536,7 +1660,9 @@ bool dev_console::fillin (HANDLE h) { acquire_attach_mutex (mutex_timeout); + DWORD resume_pid = fhandler_console::attach_console (owner); bool ret = GetConsoleScreenBufferInfo (h, &b); + fhandler_console::detach_console (resume_pid, owner); release_attach_mutex (); if (ret) @@ -1591,7 +1717,9 @@ dev_console::scroll_buffer (HANDLE h, int x1, int y1, int x2, int y2, dest.X = xn >= 0 ? xn : dwWinSize.X - 1; dest.Y = yn >= 0 ? yn : b.srWindow.Bottom; acquire_attach_mutex (mutex_timeout); + DWORD resume_pid = fhandler_console::attach_console (owner); ScrollConsoleScreenBufferW (h, &sr1, &sr2, dest, &fill); + fhandler_console::detach_console (resume_pid, owner); release_attach_mutex (); } @@ -1619,7 +1747,7 @@ int fhandler_console::dup (fhandler_base *child, int flags) { /* See comments in fhandler_pty_slave::dup */ - if (myself->ctty != -2) + if (myself->ctty != CTTY_RELEASED) myself->set_ctty (this, flags); return 0; } @@ -1642,36 +1770,69 @@ fhandler_console::open (int flags, mode_t) set_handle (NULL); set_output_handle (NULL); + setup_io_mutex (); + acquire_output_mutex (mutex_timeout); + + do + { + pinfo p (con.owner); + if (!p) + con.owner = myself->pid; + } + while (false); + /* Open the input handle as handle_ */ + bool err = false; + DWORD resume_pid = attach_console (con.owner, &err); + if (err) + { + release_output_mutex (); + set_errno (EACCES); + return 0; + } h = CreateFileW (L"CONIN$", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, &sec_none, OPEN_EXISTING, 0, 0); + detach_console (resume_pid, con.owner); if (h == INVALID_HANDLE_VALUE) { + release_output_mutex (); __seterrno (); return 0; } set_handle (h); handle_set.input_handle = h; + resume_pid = attach_console (con.owner, &err); + if (err) + { + release_output_mutex (); + set_errno (EACCES); + return 0; + } h = CreateFileW (L"CONOUT$", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, &sec_none, OPEN_EXISTING, 0, 0); + detach_console (resume_pid, con.owner); if (h == INVALID_HANDLE_VALUE) { + release_output_mutex (); __seterrno (); return 0; } set_output_handle (h); handle_set.output_handle = h; - wpbuf.init (get_output_handle ()); + release_output_mutex (); + + wpbuf.init (); - setup_io_mutex (); handle_set.input_mutex = input_mutex; handle_set.output_mutex = output_mutex; + handle_set.unit = unit; + if (con.fillin (get_output_handle ())) { con.current_win32_attr = con.b.wAttributes; @@ -1688,6 +1849,7 @@ fhandler_console::open (int flags, mode_t) DWORD dwMode; /* Check xterm compatible mode in output */ acquire_attach_mutex (mutex_timeout); + DWORD resume_pid = attach_console (con.owner); GetConsoleMode (get_output_handle (), &dwMode); con.orig_virtual_terminal_processing_mode = !!(dwMode & ENABLE_VIRTUAL_TERMINAL_PROCESSING); @@ -1701,6 +1863,7 @@ fhandler_console::open (int flags, mode_t) dwMode | ENABLE_VIRTUAL_TERMINAL_INPUT)) is_legacy = true; SetConsoleMode (get_handle (), dwMode); + detach_console (resume_pid, con.owner); release_attach_mutex (); con.is_legacy = is_legacy; extern int sawTERM; @@ -1718,9 +1881,15 @@ fhandler_console::open (int flags, mode_t) char name[MAX_PATH]; shared_name (name, CONS_THREAD_SYNC, get_minor ()); thread_sync_event = CreateEvent(NULL, FALSE, FALSE, name); - new cygthread (::cons_master_thread, this, "consm"); - WaitForSingleObject (thread_sync_event, INFINITE); - CloseHandle (thread_sync_event); + if (thread_sync_event) + { + new cygthread (::cons_master_thread, this, "consm"); + WaitForSingleObject (thread_sync_event, INFINITE); + CloseHandle (thread_sync_event); + } + else + debug_printf ("Failed to create thread_sync_event %08x", + GetLastError ()); } return 1; } @@ -1756,14 +1925,15 @@ fhandler_console::close () acquire_output_mutex (mutex_timeout); - if (shared_console_info) + if (shared_console_info[unit]) { /* Restore console mode if this is the last closure. */ OBJECT_BASIC_INFORMATION obi; NTSTATUS status; status = NtQueryObject (get_handle (), ObjectBasicInformation, &obi, sizeof obi, NULL); - if ((NT_SUCCESS (status) && obi.HandleCount == 1) + if ((NT_SUCCESS (status) && obi.HandleCount == 1 + && (dev_t) myself->ctty == get_device ()) || myself->pid == con.owner) { /* Cleaning-up console mode for cygwin apps. */ @@ -1773,33 +1943,69 @@ fhandler_console::close () } } - release_output_mutex (); - - if (shared_console_info && con.owner == myself->pid - && master_thread_started) + if (shared_console_info[unit] && con.owner == myself->pid) { - char name[MAX_PATH]; - shared_name (name, CONS_THREAD_SYNC, get_minor ()); - thread_sync_event = OpenEvent (MAXIMUM_ALLOWED, FALSE, name); - con.owner = MAX_PID + 1; - WaitForSingleObject (thread_sync_event, INFINITE); - CloseHandle (thread_sync_event); + if (master_thread_started) + { + char name[MAX_PATH]; + shared_name (name, CONS_THREAD_SYNC, get_minor ()); + thread_sync_event = OpenEvent (MAXIMUM_ALLOWED, FALSE, name); + if (thread_sync_event) + { + con.owner = MAX_PID + 1; + WaitForSingleObject (thread_sync_event, INFINITE); + CloseHandle (thread_sync_event); + } + else + debug_printf ("Failed to open thread_sync_event %08x", + GetLastError ()); + } con.owner = 0; } - CloseHandle (input_mutex); - input_mutex = NULL; - CloseHandle (output_mutex); - output_mutex = NULL; - CloseHandle (get_handle ()); CloseHandle (get_output_handle ()); if (con_ra.rabuf) free (con_ra.rabuf); + memset (&con_ra, 0, sizeof (con_ra)); + + if (!have_execed && !invisible_console + && (!CTTY_IS_VALID (myself->ctty) + || get_device () == (dev_t) myself->ctty)) + { + /* ConEmu hack. Detach from ConEmu to unhook console APIs. */ + HMODULE h = GetModuleHandle ("ConEmuHk64.dll"); + if (h) + { + MODULEINFO mi; + if (GetModuleInformation (GetCurrentProcess (), h, &mi, sizeof (mi))) + { + BOOL (*DllMain)(HINSTANCE, DWORD, LPVOID) = + (BOOL (*)(HINSTANCE, DWORD, LPVOID)) mi.EntryPoint; + DllMain (h, DLL_PROCESS_DETACH, NULL); + } + } + + /* Freeing console to detach the process from the console. */ + free_console (); + } + + release_output_mutex (); + + CloseHandle (input_mutex); + input_mutex = NULL; + CloseHandle (output_mutex); + output_mutex = NULL; + + WaitForSingleObject (shared_info_mutex, INFINITE); + if (--shared_info_state[unit] == 0 && shared_console_info[unit]) + { + UnmapViewOfFile ((void *) shared_console_info[unit]); + shared_console_info[unit] = NULL; + } + ReleaseMutex (shared_info_mutex); - if (!have_execed && !invisible_console) - free_console (); return 0; } @@ -1874,7 +2080,9 @@ fhandler_console::ioctl (unsigned int cmd, void *arg) int ret = 0; INPUT_RECORD inp[INREC_SIZE]; acquire_attach_mutex (mutex_timeout); + DWORD resume_pid = attach_console (con.owner); BOOL r = PeekConsoleInputW (get_handle (), inp, INREC_SIZE, &n); + detach_console (resume_pid, con.owner); release_attach_mutex (); if (!r) { @@ -1933,7 +2141,9 @@ fhandler_console::tcflush (int queue) || queue == TCIOFLUSH) { acquire_attach_mutex (mutex_timeout); + DWORD resume_pid = attach_console (con.owner); BOOL r = FlushConsoleInputBuffer (get_handle ()); + detach_console (resume_pid, con.owner); release_attach_mutex (); if (!r) { @@ -1960,15 +2170,15 @@ fhandler_console::tcgetattr (struct termios *t) return 0; } -fhandler_console::fhandler_console (fh_devices unit) : +fhandler_console::fhandler_console (fh_devices devunit) : fhandler_termios (), input_ready (false), thread_sync_event (NULL), - input_mutex (NULL), output_mutex (NULL) + input_mutex (NULL), output_mutex (NULL), unit (MAX_CONS_DEV) { - if (unit > 0) - dev ().parse (unit); + dev_referred_via = (dev_t) devunit; + if (devunit > 0) + dev ().parse (devunit); setup (); trunc_buf.len = 0; - _tc = &(shared_console_info->tty_min_state); } void @@ -2009,7 +2219,9 @@ dev_console::set_color (HANDLE h) if (h) { acquire_attach_mutex (mutex_timeout); + DWORD resume_pid = fhandler_console::attach_console (owner); SetConsoleTextAttribute (h, current_win32_attr); + fhandler_console::detach_console (resume_pid, owner); release_attach_mutex (); } } @@ -2066,6 +2278,7 @@ dev_console::scroll_window (HANDLE h, int x1, int y1, int x2, int y2) sr.Left = sr.Right = dwEnd.X = 0; acquire_attach_mutex (mutex_timeout); + DWORD resume_pid = fhandler_console::attach_console (owner); if (b.srWindow.Bottom + toscroll >= b.dwSize.Y) { /* So we're at the end of the buffer and scrolling the console window @@ -2120,6 +2333,7 @@ dev_console::scroll_window (HANDLE h, int x1, int y1, int x2, int y2) /* Eventually set cursor to new end position at the top of the window. */ dwEnd.Y++; SetConsoleCursorPosition (h, dwEnd); + fhandler_console::detach_console (resume_pid, owner); release_attach_mutex (); /* Fix up console buffer info. */ fillin (h); @@ -2178,8 +2392,10 @@ dev_console::clear_screen (HANDLE h, int x1, int y1, int x2, int y2) tlc.Y = y2; } acquire_attach_mutex (mutex_timeout); + DWORD resume_pid = fhandler_console::attach_console (owner); FillConsoleOutputCharacterW (h, L' ', num, tlc, &done); FillConsoleOutputAttribute (h, current_win32_attr, num, tlc, &done); + fhandler_console::detach_console (resume_pid, owner); release_attach_mutex (); } @@ -2214,7 +2430,9 @@ fhandler_console::cursor_set (bool rel_to_top, int x, int y) pos.X = x; pos.Y = y; acquire_attach_mutex (mutex_timeout); + DWORD resume_pid = attach_console (con.owner); SetConsoleCursorPosition (get_output_handle (), pos); + detach_console (resume_pid, con.owner); release_attach_mutex (); } @@ -2288,7 +2506,9 @@ fhandler_console::write_console (PWCHAR buf, DWORD len, DWORD& done) { DWORD nbytes = len > MAX_WRITE_CHARS ? MAX_WRITE_CHARS : len; acquire_attach_mutex (mutex_timeout); + DWORD resume_pid = attach_console (con.owner); BOOL r = WriteConsoleW (get_output_handle (), buf, nbytes, &done, 0); + detach_console (resume_pid, con.owner); release_attach_mutex (); if (!r) { @@ -2340,9 +2560,7 @@ ReadConsoleOutputWrapper (HANDLE h, PCHAR_INFO buf, COORD bufsiz, if ((width == 0) || (height == 0)) return TRUE; - acquire_attach_mutex (mutex_timeout); BOOL success = ReadConsoleOutputW (h, buf, bufsiz, coord, ®ion); - release_attach_mutex (); if (success) /* it worked */; else if (GetLastError () == ERROR_NOT_ENOUGH_MEMORY && (width * height) > 1) @@ -2378,14 +2596,20 @@ dev_console::save_restore (HANDLE h, char c) SMALL_RECT now = {}; /* Read the whole buffer */ now.Bottom = save_bufsize.Y - 1; now.Right = save_bufsize.X - 1; + acquire_attach_mutex (mutex_timeout); + DWORD resume_pid = fhandler_console::attach_console (owner); if (!ReadConsoleOutputWrapper (h, save_buf, save_bufsize, now)) debug_printf ("ReadConsoleOutputWrapper(h, ...) failed during save, %E"); + fhandler_console::detach_console (resume_pid, owner); + release_attach_mutex (); /* Position at top of buffer */ COORD cob = {}; acquire_attach_mutex (mutex_timeout); + resume_pid = fhandler_console::attach_console (owner); if (!SetConsoleCursorPosition (h, cob)) debug_printf ("SetConsoleCursorInfo(%p, ...) failed during save, %E", h); + fhandler_console::detach_console (resume_pid, owner); release_attach_mutex (); /* Clear entire buffer */ @@ -2401,7 +2625,9 @@ dev_console::save_restore (HANDLE h, char c) /* Restore whole buffer */ clear_screen (h, 0, 0, b.dwSize.X - 1, b.dwSize.Y - 1); acquire_attach_mutex (mutex_timeout); + DWORD resume_pid = fhandler_console::attach_console (owner); BOOL res = WriteConsoleOutputW (h, save_buf, save_bufsize, cob, &now); + fhandler_console::detach_console (resume_pid, owner); release_attach_mutex (); if (!res) debug_printf ("WriteConsoleOutputW failed, %E"); @@ -2414,11 +2640,13 @@ dev_console::save_restore (HANDLE h, char c) /* CGF: NOOP? Doesn't seem to position screen as expected */ /* Temporarily position at top of screen */ acquire_attach_mutex (mutex_timeout); + resume_pid = fhandler_console::attach_console (owner); if (!SetConsoleCursorPosition (h, cob)) debug_printf ("SetConsoleCursorInfo(%p, cob) failed during restore, %E", h); /* Position where we were previously */ if (!SetConsoleCursorPosition (h, save_cursor)) debug_printf ("SetConsoleCursorInfo(%p, save_cursor) failed during restore, %E", h); + fhandler_console::detach_console (resume_pid, owner); release_attach_mutex (); /* Get back correct version of buffer information */ dwEnd.X = dwEnd.Y = 0; @@ -2534,24 +2762,26 @@ fhandler_console::char_command (char c) break; #endif case 'b': /* REP */ - wpbuf.put (c); + wpbuf_put (c); if (wincap.has_con_esc_rep ()) /* Just send the sequence */ - wpbuf.send (); + wpbuf_send (); else if (last_char && last_char != L'\n') { acquire_attach_mutex (mutex_timeout); + DWORD resume_pid = attach_console (con.owner); for (int i = 0; i < con.args[0]; i++) WriteConsoleW (get_output_handle (), &last_char, 1, 0, 0); + detach_console (resume_pid, con.owner); release_attach_mutex (); } break; case 'r': /* DECSTBM */ con.scroll_region.Top = con.args[0] ? con.args[0] - 1 : 0; con.scroll_region.Bottom = con.args[1] ? con.args[1] - 1 : -1; - wpbuf.put (c); + wpbuf_put (c); /* Just send the sequence */ - wpbuf.send (); + wpbuf_send (); break; case 'L': /* IL */ if (wincap.has_con_broken_il_dl ()) @@ -2563,11 +2793,14 @@ fhandler_console::char_command (char c) if (y == con.b.srWindow.Bottom) { acquire_attach_mutex (mutex_timeout); + DWORD resume_pid = attach_console (con.owner); WriteConsoleW (get_output_handle (), L"\033[2K", 4, 0, 0); + detach_console (resume_pid, con.owner); release_attach_mutex (); break; } acquire_attach_mutex (mutex_timeout); + DWORD resume_pid = attach_console (con.owner); if (y == con.b.srWindow.Top && srBottom == con.b.srWindow.Bottom) { @@ -2583,8 +2816,8 @@ fhandler_console::char_command (char c) y + 1 - con.b.srWindow.Top, srBottom + 1 - con.b.srWindow.Top); WriteConsoleW (get_output_handle (), bufw, wcslen (bufw), 0, 0); - wpbuf.put ('T'); - wpbuf.send (); + wpbuf_put ('T'); + wpbuf_send (); __small_swprintf (bufw, L"\033[%d;%dr", srTop + 1 - con.b.srWindow.Top, srBottom + 1 - con.b.srWindow.Top); @@ -2592,13 +2825,14 @@ fhandler_console::char_command (char c) __small_swprintf (bufw, L"\033[%d;%dH", y + 1 - con.b.srWindow.Top, x + 1); WriteConsoleW (get_output_handle (), bufw, wcslen (bufw), 0, 0); + detach_console (resume_pid, con.owner); release_attach_mutex (); } else { - wpbuf.put (c); + wpbuf_put (c); /* Just send the sequence */ - wpbuf.send (); + wpbuf_send (); } break; case 'M': /* DL */ @@ -2611,7 +2845,9 @@ fhandler_console::char_command (char c) if (y == con.b.srWindow.Bottom) { acquire_attach_mutex (mutex_timeout); + DWORD resume_pid = attach_console (con.owner); WriteConsoleW (get_output_handle (), L"\033[2K", 4, 0, 0); + detach_console (resume_pid, con.owner); release_attach_mutex (); break; } @@ -2619,9 +2855,10 @@ fhandler_console::char_command (char c) y + 1 - con.b.srWindow.Top, srBottom + 1 - con.b.srWindow.Top); acquire_attach_mutex (mutex_timeout); + DWORD resume_pid = attach_console (con.owner); WriteConsoleW (get_output_handle (), bufw, wcslen (bufw), 0, 0); - wpbuf.put ('S'); - wpbuf.send (); + wpbuf_put ('S'); + wpbuf_send (); __small_swprintf (bufw, L"\033[%d;%dr", srTop + 1 - con.b.srWindow.Top, srBottom + 1 - con.b.srWindow.Top); @@ -2629,17 +2866,18 @@ fhandler_console::char_command (char c) __small_swprintf (bufw, L"\033[%d;%dH", y + 1 - con.b.srWindow.Top, x + 1); WriteConsoleW (get_output_handle (), bufw, wcslen (bufw), 0, 0); + detach_console (resume_pid, con.owner); release_attach_mutex (); } else { - wpbuf.put (c); + wpbuf_put (c); /* Just send the sequence */ - wpbuf.send (); + wpbuf_send (); } break; case 'J': /* ED */ - wpbuf.put (c); + wpbuf_put (c); if (con.args[0] == 3 && con.savey >= 0) { con.fillin (get_output_handle ()); @@ -2649,6 +2887,7 @@ fhandler_console::char_command (char c) { /* Workaround for broken CSI3J in Win10 1809 */ CONSOLE_SCREEN_BUFFER_INFO sbi; acquire_attach_mutex (mutex_timeout); + DWORD resume_pid = attach_console (con.owner); GetConsoleScreenBufferInfo (get_output_handle (), &sbi); SMALL_RECT r = {0, sbi.srWindow.Top, (SHORT) (sbi.dwSize.X - 1), (SHORT) (sbi.dwSize.Y - 1)}; @@ -2660,17 +2899,18 @@ fhandler_console::char_command (char c) d = sbi.dwCursorPosition; d.Y -= sbi.srWindow.Top; SetConsoleCursorPosition (get_output_handle (), d); + detach_console (resume_pid, con.owner); release_attach_mutex (); } else /* Just send the sequence */ - wpbuf.send (); + wpbuf_send (); break; case 'h': /* DECSET */ case 'l': /* DECRST */ - wpbuf.put (c); + wpbuf_put (c); /* Just send the sequence */ - wpbuf.send (); + wpbuf_send (); if (con.saw_question_mark) { bool need_fix_tab_position = false; @@ -2683,10 +2923,12 @@ fhandler_console::char_command (char c) } if (con.args[i] == 1) /* DECCKM */ con.cursor_key_app_mode = (c == 'h'); + if (con.args[i] == 9001) /* win32-input-mode (https://github.com/microsoft/terminal/blob/main/doc/specs/%234999%20-%20Improved%20keyboard%20handling%20in%20Conpty.md) */ + set_disable_master_thread (c == 'h', this); } /* Call fix_tab_position() if screen has been alternated. */ if (need_fix_tab_position) - fix_tab_position (get_output_handle ()); + fix_tab_position (get_output_handle (), con.owner); } break; case 'p': @@ -2697,23 +2939,23 @@ fhandler_console::char_command (char c) con.savex = con.savey = -1; con.cursor_key_app_mode = false; } - wpbuf.put (c); + wpbuf_put (c); /* Just send the sequence */ - wpbuf.send (); + wpbuf_send (); break; case 'm': if (con.saw_greater_than_sign) break; /* Ignore unsupported CSI > Pm m */ /* Text attribute settings */ - wpbuf.put (c); + wpbuf_put (c); /* Just send the sequence */ - wpbuf.send (); + wpbuf_send (); break; default: /* Other escape sequences */ - wpbuf.put (c); + wpbuf_put (c); /* Just send the sequence */ - wpbuf.send (); + wpbuf_send (); break; } return; @@ -2898,6 +3140,7 @@ fhandler_console::char_command (char c) { CONSOLE_CURSOR_INFO console_cursor_info; acquire_attach_mutex (mutex_timeout); + DWORD resume_pid = attach_console (con.owner); GetConsoleCursorInfo (get_output_handle (), &console_cursor_info); switch (con.args[0]) { @@ -2920,6 +3163,7 @@ fhandler_console::char_command (char c) &console_cursor_info); break; } + detach_console (resume_pid, con.owner); release_attach_mutex (); } break; @@ -2943,12 +3187,14 @@ fhandler_console::char_command (char c) { CONSOLE_CURSOR_INFO console_cursor_info; acquire_attach_mutex (mutex_timeout); + DWORD resume_pid = attach_console (con.owner); GetConsoleCursorInfo (get_output_handle (), & console_cursor_info); if (c == 'h') console_cursor_info.bVisible = TRUE; else console_cursor_info.bVisible = FALSE; SetConsoleCursorInfo (get_output_handle (), & console_cursor_info); + detach_console (resume_pid, con.owner); release_attach_mutex (); break; } @@ -3195,14 +3441,16 @@ enum_proc (const LOGFONTW *lf, const TEXTMETRICW *tm, } static void -check_font (HANDLE hdl) +check_font (HANDLE hdl, pid_t owner) { CONSOLE_FONT_INFOEX cfi; LOGFONTW lf; cfi.cbSize = sizeof cfi; acquire_attach_mutex (mutex_timeout); + DWORD resume_pid = fhandler_console::attach_console (owner); BOOL r = GetCurrentConsoleFontEx (hdl, 0, &cfi); + fhandler_console::detach_console (resume_pid, owner); release_attach_mutex (); if (!r) return; @@ -3273,11 +3521,13 @@ check_font (HANDLE hdl) inline void fhandler_console::write_replacement_char () { - check_font (get_output_handle ()); + check_font (get_output_handle (), unit); DWORD done; acquire_attach_mutex (mutex_timeout); + DWORD resume_pid = attach_console (con.owner); WriteConsoleW (get_output_handle (), &rp_char, 1, &done, 0); + detach_console (resume_pid, con.owner); release_attach_mutex (); } @@ -3428,7 +3678,7 @@ fhandler_console::write_normal (const unsigned char *src, break; case ESC: con.state = gotesc; - wpbuf.put (*found); + wpbuf_put (*found); break; case DWN: cursor_get (&x, &y); @@ -3437,7 +3687,9 @@ fhandler_console::write_normal (const unsigned char *src, if (y >= con.b.srWindow.Bottom && !con.scroll_region.Top) { acquire_attach_mutex (mutex_timeout); + DWORD resume_pid = attach_console (con.owner); WriteConsoleW (get_output_handle (), L"\n", 1, &done, 0); + detach_console (resume_pid, con.owner); release_attach_mutex (); } else @@ -3475,12 +3727,14 @@ fhandler_console::write_normal (const unsigned char *src, if (ret != -1) { acquire_attach_mutex (mutex_timeout); + DWORD resume_pid = attach_console (con.owner); while (ret-- > 0) { WCHAR w = *(found + 1); WriteConsoleW (get_output_handle (), &w, 1, &done, 0); found++; } + detach_console (resume_pid, con.owner); release_attach_mutex (); } } @@ -3548,7 +3802,7 @@ fhandler_console::write (const void *vsrc, size_t len) case gotesc: if (*src == '[') /* CSI Control Sequence Introducer */ { - wpbuf.put (*src); + wpbuf_put (*src); con.state = gotsquare; memset (con.args, 0, sizeof con.args); con.nargs = 0; @@ -3563,8 +3817,8 @@ fhandler_console::write (const void *vsrc, size_t len) { /* For xterm mode only */ /* Just send the sequence */ - wpbuf.put (*src); - wpbuf.send (); + wpbuf_put (*src); + wpbuf_send (); } else if (con.savex >= 0 && con.savey >= 0) cursor_set (false, con.savex, con.savey); @@ -3577,8 +3831,8 @@ fhandler_console::write (const void *vsrc, size_t len) { /* For xterm mode only */ /* Just send the sequence */ - wpbuf.put (*src); - wpbuf.send (); + wpbuf_put (*src); + wpbuf_send (); } else cursor_get (&con.savex, &con.savey); @@ -3601,23 +3855,25 @@ fhandler_console::write (const void *vsrc, size_t len) srBottom - con.b.srWindow.Top + 1, y + 1 - con.b.srWindow.Top, x + 1); acquire_attach_mutex (mutex_timeout); + DWORD resume_pid = attach_console (con.owner); WriteConsoleW (get_output_handle (), buf, wcslen (buf), 0, 0); + detach_console (resume_pid, con.owner); release_attach_mutex (); } /* Substitute "CSI Ps T" */ - wpbuf.put ('['); - wpbuf.put ('T'); + wpbuf_put ('['); + wpbuf_put ('T'); } else - wpbuf.put (*src); - wpbuf.send (); + wpbuf_put (*src); + wpbuf_send (); con.state = normal; wpbuf.empty(); } else if (*src == ']') /* OSC Operating System Command */ { - wpbuf.put (*src); + wpbuf_put (*src); con.rarg = 0; con.my_title_buf[0] = '\0'; con.state = gotrsquare; @@ -3634,20 +3890,20 @@ fhandler_console::write (const void *vsrc, size_t len) /* ESC sequences below (e.g. OSC, etc) are left to xterm emulation in xterm compatible mode, therefore, are not handled and just sent them. */ - wpbuf.put (*src); + wpbuf_put (*src); /* Just send the sequence */ - wpbuf.send (); + wpbuf_send (); con.state = normal; wpbuf.empty(); } else if (*src == '(') /* Designate G0 character set */ { - wpbuf.put (*src); + wpbuf_put (*src); con.state = gotparen; } else if (*src == ')') /* Designate G1 character set */ { - wpbuf.put (*src); + wpbuf_put (*src); con.state = gotrparen; } else if (*src == 'M') /* Reverse Index (scroll down) */ @@ -3685,19 +3941,19 @@ fhandler_console::write (const void *vsrc, size_t len) { if (con.nargs < MAXARGS) con.args[con.nargs] = con.args[con.nargs] * 10 + *src - '0'; - wpbuf.put (*src); + wpbuf_put (*src); src++; } else if (*src == ';') { - wpbuf.put (*src); + wpbuf_put (*src); src++; if (con.nargs < MAXARGS) con.nargs++; } else if (*src == ' ') { - wpbuf.put (*src); + wpbuf_put (*src); src++; con.saw_space = true; con.state = gotcommand; @@ -3731,26 +3987,26 @@ fhandler_console::write (const void *vsrc, size_t len) con.state = endpalette; else if (*src == '\007') { - wpbuf.put (*src); + wpbuf_put (*src); if (wincap.has_con_24bit_colors () && !con_is_legacy) - wpbuf.send (); + wpbuf_send (); wpbuf.empty (); con.state = normal; src++; break; } - wpbuf.put (*src); + wpbuf_put (*src); src++; break; case eattitle: case gettitle: { - wpbuf.put (*src); + wpbuf_put (*src); int n = strlen (con.my_title_buf); if (*src < ' ') { if (wincap.has_con_24bit_colors () && !con_is_legacy) - wpbuf.send (); + wpbuf_send (); else if (*src == '\007' && con.state == gettitle) set_console_title (con.my_title_buf); con.state = normal; @@ -3765,7 +4021,7 @@ fhandler_console::write (const void *vsrc, size_t len) break; } case eatpalette: - wpbuf.put (*src); + wpbuf_put (*src); if (*src == '?') con.saw_question_mark = true; else if (*src == '\033') @@ -3775,20 +4031,20 @@ fhandler_console::write (const void *vsrc, size_t len) /* Send OSC Ps; Pt BEL other than OSC Ps; ? BEL */ if (wincap.has_con_24bit_colors () && !con_is_legacy && !con.saw_question_mark) - wpbuf.send (); + wpbuf_send (); con.state = normal; wpbuf.empty(); } src++; break; case endpalette: - wpbuf.put (*src); + wpbuf_put (*src); if (*src == '\\') { /* Send OSC Ps; Pt ST other than OSC Ps; ? ST */ if (wincap.has_con_24bit_colors () && !con_is_legacy && !con.saw_question_mark) - wpbuf.send (); + wpbuf_send (); con.state = normal; } else @@ -3801,7 +4057,7 @@ fhandler_console::write (const void *vsrc, size_t len) if (*src == ';') { con.state = gotarg1; - wpbuf.put (*src); + wpbuf_put (*src); if (con.nargs < MAXARGS) con.nargs++; src++; @@ -3816,7 +4072,7 @@ fhandler_console::write (const void *vsrc, size_t len) con.saw_greater_than_sign = true; else if (*src == '!') con.saw_exclamation_mark = true; - wpbuf.put (*src); + wpbuf_put (*src); /* ignore any extra chars between [ and first arg or command */ src++; } @@ -3967,13 +4223,15 @@ fhandler_console::set_close_on_exec (bool val) } void -set_console_title (char *title) +fhandler_console::set_console_title (char *title) { wchar_t buf[TITLESIZE + 1]; sys_mbstowcs (buf, TITLESIZE + 1, title); lock_ttys here (15000); acquire_attach_mutex (mutex_timeout); + DWORD resume_pid = attach_console (con.owner); SetConsoleTitleW (buf); + detach_console (resume_pid, con.owner); release_attach_mutex (); debug_printf ("title '%W'", buf); } @@ -4062,7 +4320,7 @@ fhandler_console::fixup_after_fork_exec (bool execing) { set_unit (); setup_io_mutex (); - wpbuf.init (get_output_handle ()); + wpbuf.init (); if (cygheap->ctty == this && !get_handle () && !get_output_handle ()) { close_with_arch (); @@ -4318,6 +4576,7 @@ fhandler_console::get_duplicated_handle_set (handle_set_t *p) DuplicateHandle (GetCurrentProcess (), output_mutex, GetCurrentProcess (), &p->output_mutex, 0, FALSE, DUPLICATE_SAME_ACCESS); + p->unit = unit; } /* The function close_handle_set() should be static so that they can @@ -4351,7 +4610,31 @@ fhandler_console::set_disable_master_thread (bool x, fhandler_console *cons) else return; } + const _minor_t unit = cons->get_minor (); cons->acquire_input_mutex (mutex_timeout); con.disable_master_thread = x; cons->release_input_mutex (); } + +int +fhandler_console::fstat (struct stat *st) +{ + /* When stat() is called, fh_alloc() in dtable.cc omits to initialize + the console instance. Due to this, get_ttyp() returns NULL here. + So, calling set_unit() is necessary to access getsid(). */ + if (!get_ttyp ()) + { + dev_referred_via = get_device (); + set_unit (); + } + + fhandler_termios::fstat (st); + st->st_mode = S_IFCHR | S_IRUSR | S_IWUSR; + pinfo p (get_ttyp ()->getsid ()); + if (p) + { + st->st_uid = p->uid; + st->st_gid = p->gid; + } + return 0; +} diff --git a/winsup/cygwin/fhandler/dev_disk.cc b/winsup/cygwin/fhandler/dev_disk.cc new file mode 100644 index 0000000000..29af9de95a --- /dev/null +++ b/winsup/cygwin/fhandler/dev_disk.cc @@ -0,0 +1,928 @@ +/* fhandler/dev_disk.cc: fhandler for the /dev/disk/by-id/... symlinks. + +This file is part of Cygwin. + +This software is a copyrighted work licensed under the terms of the +Cygwin license. Please consult the file "CYGWIN_LICENSE" for +details. */ + +#include "winsup.h" +#include "path.h" +#include "fhandler.h" +#include "tls_pbuf.h" +#include +#include +#include + +/* Replace invalid characters. Optionally remove leading and trailing + characters. Return remaining string length. */ +template +static int +sanitize_string (char_type *s, char_type leading, char_type trailing, + char_type replace, func_type valid) +{ + int first = 0; + if (leading) + while (s[first] == leading) + first++; + int len = -1, i; + for (i = 0; s[first + i]; i++) + { + char_type c = s[first + i]; + if (c != trailing) + len = -1; + else if (len < 0) + len = i; + if (!valid (c)) + c = replace; + else if (!first) + continue; + s[i] = c; + } + if (len < 0) + len = i; + s[len] = (char_type) 0; + return len; +} + +/* Variant for device identify strings. */ +static int +sanitize_id_string (char *s) +{ + return sanitize_string (s, ' ', ' ', '_', [] (char c) -> bool + { + return (('0' <= c && c <= '9') || c == '.' || c == '-' + || ('A' <= c && c <= 'Z') || ('a' <= c && c <= 'z')); + } + ); +} + +/* Variant for volume labels. */ +static int +sanitize_label_string (WCHAR *s) +{ + /* Linux does not skip leading spaces. */ + return sanitize_string (s, L'\0', L' ', L'_', [] (WCHAR c) -> bool + { + /* Labels may contain characters not allowed in filenames. Also + replace '#' to avoid that duplicate markers introduce new + duplicates. Linux replaces spaces with \x20 which is not an + option here. */ + return !(c == L'/' || c == L'\\' || c == L'#'); + } + ); +} + +/* Fetch storage properties and create the ID string. + returns: 1: success, 0: device ignored, -1: IoControl error. */ +static int +storprop_to_id_name (HANDLE devhdl, const UNICODE_STRING *upath, + char *ioctl_buf, char (& name)[NAME_MAX + 1]) +{ + DWORD bytes_read; + STORAGE_PROPERTY_QUERY descquery = + { StorageDeviceProperty, PropertyStandardQuery, { 0 } }; + if (!DeviceIoControl (devhdl, IOCTL_STORAGE_QUERY_PROPERTY, + &descquery, sizeof (descquery), + ioctl_buf, NT_MAX_PATH, + &bytes_read, nullptr)) + { + __seterrno_from_win_error (GetLastError ()); + debug_printf ("DeviceIoControl (%S, IOCTL_STORAGE_QUERY_PROPERTY," + " {StorageDeviceProperty}): %E", upath); + return -1; + } + + const STORAGE_DEVICE_DESCRIPTOR *desc = + reinterpret_cast(ioctl_buf); + int vendor_len = 0, product_len = 0, serial_len = 0; + if (desc->VendorIdOffset) + vendor_len = sanitize_id_string (ioctl_buf + desc->VendorIdOffset); + if (desc->ProductIdOffset) + product_len = sanitize_id_string (ioctl_buf + desc->ProductIdOffset); + if (desc->SerialNumberOffset) + serial_len = sanitize_id_string (ioctl_buf + desc->SerialNumberOffset); + + /* Ignore drive if information is empty or too long (should not happen). */ + if (!((vendor_len || product_len) && (20/*bustype*/ + vendor_len + 1 + + product_len + 1 + serial_len + 1 + 34/*hash*/ + 1 + 10/*partN*/ + < (int) sizeof (name)))) + return 0; + + /* Translate bus types. */ + const char *bus; + switch (desc->BusType) + { + case BusTypeAta: bus = "ata-"; break; + case BusTypeFibre: bus = "fibre-"; break; + case BusTypeNvme: bus = "nvme-"; break; + case BusTypeRAID: bus = "raid-"; break; + case BusTypeSas: bus = "sas-"; break; + case BusTypeSata: bus = "sata-"; break; + case BusTypeScsi: bus = "scsi-"; break; + case BusTypeUsb: bus = "usb-"; break; + case BusTypeVirtual: bus = "virtual-"; break; + default: bus = nullptr; break; + } + + /* Create "BUSTYPE-[VENDOR_]PRODUCT[_SERIAL]" string. */ + char * cp = name; + if (bus) + cp = stpcpy (cp, bus); + else + cp += __small_sprintf (cp, "bustype%02_y-", desc->BusType); + + if (vendor_len) + cp = stpcpy (cp, ioctl_buf + desc->VendorIdOffset); + if (product_len) + { + if (vendor_len) + cp = stpcpy (cp, "_"); + cp = stpcpy (cp, ioctl_buf + desc->ProductIdOffset); + } + if (serial_len) + { + cp = stpcpy (cp, "_"); + cp = stpcpy (cp, ioctl_buf + desc->SerialNumberOffset); + } + + /* Add hash if information is too short (e.g. missing serial number). */ + bool add_hash = !(4 <= vendor_len + product_len && 4 <= serial_len); + debug_printf ("%S: bustype: %02_y, add_hash: %d, id: '%s' '%s' '%s' ", + upath, (unsigned) desc->BusType, (int) add_hash, + (vendor_len ? ioctl_buf + desc->VendorIdOffset : ""), + (product_len ? ioctl_buf + desc->ProductIdOffset : ""), + (serial_len ? ioctl_buf + desc->SerialNumberOffset : "")); + if (!add_hash) + return 1; + + /* The call below also returns the STORAGE_DEVICE_DESCRIPTOR used above. + MSDN documentation for STORAGE_DEVICE_UNIQUE_IDENTIFIER says: + "The device descriptor contains IDs that are extracted from non-VPD + inquiry data." This may mean that the serial number (part of + SCSI/SAS VPD data) may not always be provided. Therefore a separate + call to retrieve STORAGE_DEVICE_DESCRIPTOR only is done above. */ + STORAGE_PROPERTY_QUERY idquery = + { StorageDeviceUniqueIdProperty, PropertyStandardQuery, { 0 } }; + if (!DeviceIoControl (devhdl, IOCTL_STORAGE_QUERY_PROPERTY, + &idquery, sizeof (idquery), + ioctl_buf, NT_MAX_PATH, + &bytes_read, nullptr)) + { + __seterrno_from_win_error (GetLastError ()); + debug_printf ("DeviceIoControl (%S, IOCTL_STORAGE_QUERY_PROPERTY," + " {StorageDeviceUniqueIdProperty}): %E", upath); + return -1; + } + + /* Utilize the DUID as defined by MSDN to generate a hash. */ + const STORAGE_DEVICE_UNIQUE_IDENTIFIER *id = + reinterpret_cast(ioctl_buf); + debug_printf ("STORAGE_DEVICE_UNIQUE_IDENTIFIER.Size: %u", id->Size); + + __int128 hash = 0; + for (ULONG i = 0; i < id->Size; i++) + hash = ioctl_buf[i] + (hash << 6) + (hash << 16) - hash; + __small_sprintf (cp, "_%016_Y%016_X", (unsigned long long) (hash >> 64), + (unsigned long long) hash); + return 1; +} + +/* ("HarddiskN", PART_NUM) -> "\\\\?\\Volume{GUID}\\" */ +static bool +partition_to_volpath (const UNICODE_STRING *drive_uname, DWORD part_num, + WCHAR (& volpath)[MAX_PATH]) +{ + WCHAR gpath[MAX_PATH]; + __small_swprintf (gpath, L"\\\\?\\GLOBALROOT\\Device\\%S\\Partition%u\\", + drive_uname, part_num); + if (!GetVolumeNameForVolumeMountPointW (gpath, volpath, sizeof(volpath))) + { + debug_printf ("GetVolumeNameForVolumeMountPointW(%W): %E", gpath); + return false; + } + debug_printf ("%W -> %W", gpath, volpath); + return true; +} + +/* ("HarddiskN", PART_NUM) -> "x" */ +static bool +partition_to_drive(const UNICODE_STRING *drive_uname, DWORD part_num, + WCHAR *w_buf, char *name) +{ + WCHAR volpath[MAX_PATH]; + if (!partition_to_volpath (drive_uname, part_num, volpath)) + return false; + + DWORD len; + if (!GetVolumePathNamesForVolumeNameW (volpath, w_buf, NT_MAX_PATH, &len)) + { + debug_printf ("GetVolumePathNamesForVolumeNameW(%W): %E", volpath); + return false; + } + debug_printf ("%W -> '%W'%s", volpath, w_buf, + (w_buf[0] && wcschr (w_buf, L'\0')[1] ? ", ..." : "")); + + /* Find first "X:\\", skip if not found. + FIXME: Support multiple drive letters. */ + WCHAR *p; + for (p = w_buf; ; p = wcschr (p, L'\0') + 1) + { + if (!*p) + return false; + if (L'A' <= p[0] && p[0] <= L'Z' && p[1] == L':' && p[2] == L'\\' && !p[3]) + break; + } + name[0] = (p[0] - L'A') + 'a'; + name[1] = '\0'; + return true; +} + +/* ("HarddiskN", PART_NUM) -> "VOLUME_GUID" */ +static bool +partition_to_voluuid(const UNICODE_STRING *drive_uname, DWORD part_num, + char *name) +{ + WCHAR volpath[MAX_PATH]; + if (!partition_to_volpath (drive_uname, part_num, volpath)) + return false; + + /* Skip if not "\\\\?\\Volume{GUID}...". */ + static const WCHAR prefix[] = L"\\\\?\\Volume{"; + const size_t prefix_len = sizeof (prefix) / sizeof(WCHAR) - 1, uuid_len = 36; + if (!(!wcsncmp (volpath, prefix, prefix_len) + && volpath[prefix_len + uuid_len] == L'}')) + return false; + + /* Extract GUID. */ + volpath[prefix_len + uuid_len] = 0; + __small_sprintf (name, "%W", volpath + prefix_len); + + if (!strncmp (name + 9, "0000-0000-00", 12) && !strcmp (name + 32, "0000")) + { + /* MBR "GUID": Use same SERIAL-OFFSET format as in by-partuuid directory. + SERIAL-0000-0000-009a-785634120000 -> SERIAL-123456789a00 */ + for (int i = 9, j = 30; i < 19; i += 2, j -= 2) + { + if (j == 22) // name[j + 1] == '-' + j--; + name[i] = name[j]; + name[i + 1] = name[j + 1]; + } + name[21] = '\0'; + } + return true; +} + +/* ("HarddiskN", PART_NUM) -> "VOLUME_LABEL" or "VOLUME_SERIAL" */ +static bool +partition_to_label_or_uuid(bool uuid, const UNICODE_STRING *drive_uname, + DWORD part_num, char *ioctl_buf, char *name) +{ + WCHAR wpath[MAX_PATH]; + /* Trailing backslash is required. */ + size_t len = __small_swprintf (wpath, L"\\Device\\%S\\Partition%u\\", + drive_uname, part_num); + len *= sizeof (WCHAR); + UNICODE_STRING upath = {(USHORT) len, (USHORT) (len + 1), wpath}; + OBJECT_ATTRIBUTES attr; + InitializeObjectAttributes (&attr, &upath, OBJ_CASE_INSENSITIVE, nullptr, + nullptr); + IO_STATUS_BLOCK io; + HANDLE volhdl; + NTSTATUS status = NtOpenFile (&volhdl, READ_CONTROL, &attr, &io, + FILE_SHARE_VALID_FLAGS, 0); + if (!NT_SUCCESS (status)) + { + /* Fails with STATUS_UNRECOGNIZED_VOLUME (0xC000014F) if the + partition/filesystem type is unsupported. */ + debug_printf ("NtOpenFile(%S), status %y", upath, status); + return false; + } + + /* Check for possible 64-bit NTFS serial number first. */ + DWORD bytes_read; + const NTFS_VOLUME_DATA_BUFFER *nvdb = + reinterpret_cast(ioctl_buf); + if (uuid && DeviceIoControl (volhdl, FSCTL_GET_NTFS_VOLUME_DATA, nullptr, 0, + ioctl_buf, NT_MAX_PATH, &bytes_read, nullptr)) + { + /* Print without any separator as on Linux. */ + __small_sprintf (name, "%016X", nvdb->VolumeSerialNumber.QuadPart); + NtClose(volhdl); + return true; + } + + /* Get label and 32-bit serial number. */ + status = NtQueryVolumeInformationFile (volhdl, &io, ioctl_buf, + NT_MAX_PATH, FileFsVolumeInformation); + NtClose(volhdl); + if (!NT_SUCCESS (status)) + { + debug_printf ("NtQueryVolumeInformationFile(%S), status %y", upath, + status); + return false; + } + + FILE_FS_VOLUME_INFORMATION *ffvi = + reinterpret_cast(ioctl_buf); + if (uuid) + /* Print with separator as on Linux. */ + __small_sprintf (name, "%04x-%04x", ffvi->VolumeSerialNumber >> 16, + ffvi->VolumeSerialNumber & 0xffff); + else + { + /* Label is not null terminated. */ + ffvi->VolumeLabel[ffvi->VolumeLabelLength / sizeof(WCHAR)] = L'\0'; + int len = sanitize_label_string (ffvi->VolumeLabel); + if (!len) + return false; + __small_sprintf (name, "%W", ffvi->VolumeLabel); + } + return true; +} + +struct by_id_entry +{ + char name[NAME_MAX + 1]; + u_int8_t drive; + u_int8_t part; +}; + +static int +by_id_compare_name (const void *a, const void *b) +{ + const by_id_entry *ap = reinterpret_cast(a); + const by_id_entry *bp = reinterpret_cast(b); + return strcmp (ap->name, bp->name); +} + +static int +by_id_compare_name_drive_part (const void *a, const void *b) +{ + const by_id_entry *ap = reinterpret_cast(a); + const by_id_entry *bp = reinterpret_cast(b); + int cmp = strcmp (ap->name, bp->name); + if (cmp) + return cmp; + cmp = ap->drive - bp->drive; + if (cmp) + return cmp; + return ap->part - bp->part; +} + +static by_id_entry * +by_id_realloc (by_id_entry *p, size_t n) +{ + void *p2 = realloc (p, n * sizeof (*p)); + if (!p2) + free (p); + return reinterpret_cast(p2); +} + +static bool +format_partuuid (char *name, const PARTITION_INFORMATION_EX *pix) +{ + const GUID *guid; + switch (pix->PartitionStyle) + { + case PARTITION_STYLE_MBR: guid = &pix->Mbr.PartitionId; break; + case PARTITION_STYLE_GPT: guid = &pix->Gpt.PartitionId; break; + default: return false; + } + + if (pix->PartitionStyle == PARTITION_STYLE_MBR && !guid->Data2 + && !guid->Data3 && !guid->Data4[6] && !guid->Data4[7]) + /* MBR "GUID": SERIAL-0000-0000-00NN-NNNNNNN00000 + Byte offset in LE order -----^^^^-^^^^^^^ + Print as: SERIAL-OFFSET */ + __small_sprintf(name, + "%08_x-%02_x%02_x%02_x%02_x%02_x%02_x", + guid->Data1, guid->Data4[5], guid->Data4[4], guid->Data4[3], + guid->Data4[2], guid->Data4[1], guid->Data4[0]); + else + __small_sprintf(name, + "%08_x-%04_x-%04_x-%02_x%02_x-%02_x%02_x%02_x%02_x%02_x%02_x", + guid->Data1, guid->Data2, guid->Data3, + guid->Data4[0], guid->Data4[1], guid->Data4[2], guid->Data4[3], + guid->Data4[4], guid->Data4[5], guid->Data4[6], guid->Data4[7]); + + return true; +} + +/* Create sorted name -> drive mapping table. Must be freed by caller. */ +static int +get_by_id_table (by_id_entry * &table, fhandler_dev_disk::dev_disk_location loc) +{ + table = nullptr; + + /* Open \Device object directory. */ + wchar_t wpath[MAX_PATH] = L"\\Device"; + UNICODE_STRING upath = {14, 16, wpath}; + OBJECT_ATTRIBUTES attr; + InitializeObjectAttributes (&attr, &upath, OBJ_CASE_INSENSITIVE, nullptr, nullptr); + HANDLE dirhdl; + NTSTATUS status = NtOpenDirectoryObject (&dirhdl, DIRECTORY_QUERY, &attr); + if (!NT_SUCCESS (status)) + { + debug_printf ("NtOpenDirectoryObject, status %y", status); + __seterrno_from_nt_status (status); + return -1; + } + + /* Limit disk and partition numbers like fhandler_dev::readdir (). */ + const unsigned max_drive_num = 127, max_part_num = 63; + + unsigned alloc_size = 0, table_size = 0; + tmp_pathbuf tp; + char *ioctl_buf = tp.c_get (); + char *ioctl_buf2 = (loc == fhandler_dev_disk::disk_by_label + || loc == fhandler_dev_disk::disk_by_uuid ? + tp.c_get () : nullptr); + WCHAR *w_buf = (loc == fhandler_dev_disk::disk_by_drive ? + tp.w_get () : nullptr); + DIRECTORY_BASIC_INFORMATION *dbi_buf = + reinterpret_cast(tp.w_get ()); + + /* Traverse \Device directory ... */ + bool errno_set = false; + HANDLE devhdl = nullptr; + BOOLEAN restart = TRUE; + bool last_run = false; + ULONG context = 0; + while (!last_run) + { + if (devhdl) + { + /* Close handle from previous run. */ + NtClose(devhdl); + devhdl = nullptr; + } + + status = NtQueryDirectoryObject (dirhdl, dbi_buf, 65536, FALSE, restart, + &context, nullptr); + if (!NT_SUCCESS (status)) + { + __seterrno_from_nt_status (status); + errno_set = true; + debug_printf ("NtQueryDirectoryObject, status %y", status); + break; + } + if (status != STATUS_MORE_ENTRIES) + last_run = true; + restart = FALSE; + for (const DIRECTORY_BASIC_INFORMATION *dbi = dbi_buf; + dbi->ObjectName.Length > 0; + dbi++) + { + /* ... and check for a "Harddisk[0-9]*" entry. */ + if (dbi->ObjectName.Length < 9 * sizeof (WCHAR) + || wcsncasecmp (dbi->ObjectName.Buffer, L"Harddisk", 8) != 0 + || !iswdigit (dbi->ObjectName.Buffer[8])) + continue; + /* Got it. Now construct the path to the entire disk, which is + "\\Device\\HarddiskX\\Partition0", and open the disk with + minimum permissions. */ + unsigned long drive_num = wcstoul (dbi->ObjectName.Buffer + 8, + nullptr, 10); + if (drive_num > max_drive_num) + continue; + wcscpy (wpath, dbi->ObjectName.Buffer); + PWCHAR wpart = wpath + dbi->ObjectName.Length / sizeof (WCHAR); + wcpcpy (wpart, L"\\Partition0"); + upath.Length = dbi->ObjectName.Length + 22; + upath.MaximumLength = upath.Length + sizeof (WCHAR); + InitializeObjectAttributes (&attr, &upath, OBJ_CASE_INSENSITIVE, + dirhdl, nullptr); + /* SYNCHRONIZE access is required for IOCTL_STORAGE_QUERY_PROPERTY + for drives behind some drivers (nvmestor.sys). */ + IO_STATUS_BLOCK io; + status = NtOpenFile (&devhdl, READ_CONTROL | SYNCHRONIZE, &attr, &io, + FILE_SHARE_VALID_FLAGS, 0); + if (!NT_SUCCESS (status)) + { + devhdl = nullptr; + __seterrno_from_nt_status (status); + errno_set = true; + debug_printf ("NtOpenFile(%S), status %y", &upath, status); + continue; + } + + /* Add table space for drive, partitions and end marker. */ + if (alloc_size <= table_size + max_part_num) + { + alloc_size = table_size + max_part_num + 8; + table = by_id_realloc (table, alloc_size); + if (!table) + { + NtClose (devhdl); + NtClose (dirhdl); + return -1; + } + } + + const char *drive_name = ""; + if (loc == fhandler_dev_disk::disk_by_id) + { + /* Fetch storage properties and create the ID string. */ + int rc = storprop_to_id_name (devhdl, &upath, ioctl_buf, + table[table_size].name); + if (rc <= 0) + { + if (rc < 0) + errno_set = true; + continue; + } + drive_name = table[table_size].name; + table[table_size].drive = drive_num; + table[table_size].part = 0; + table_size++; + } + + /* Fetch drive layout info to information of all partitions on disk. */ + DWORD bytes_read; + if (!DeviceIoControl (devhdl, IOCTL_DISK_GET_DRIVE_LAYOUT_EX, nullptr, 0, + ioctl_buf, NT_MAX_PATH, &bytes_read, nullptr)) + { + __seterrno_from_win_error (GetLastError ()); + errno_set = true; + debug_printf ("DeviceIoControl(%S, " + "IOCTL_DISK_GET_DRIVE_LAYOUT_EX): %E", &upath); + continue; + } + + /* Loop over partitions. */ + const DRIVE_LAYOUT_INFORMATION_EX *dlix = + reinterpret_cast(ioctl_buf); + for (DWORD i = 0; i < dlix->PartitionCount; i++) + { + const PARTITION_INFORMATION_EX *pix = &dlix->PartitionEntry[i]; + DWORD part_num = pix->PartitionNumber; + /* A partition number of 0 denotes an extended partition or a + filler entry as described in + fhandler_dev_floppy::lock_partition. Just skip. */ + if (part_num == 0) + continue; + if (part_num > max_part_num) + break; + + char *name = table[table_size].name; + switch (loc) + { + case fhandler_dev_disk::disk_by_drive: + if (!partition_to_drive (&dbi->ObjectName, part_num, w_buf, name)) + continue; + break; + + case fhandler_dev_disk::disk_by_id: + __small_sprintf (name, "%s-part%u", drive_name, part_num); + break; + + case fhandler_dev_disk::disk_by_label: + if (!partition_to_label_or_uuid (false, &dbi->ObjectName, + part_num, ioctl_buf2, name)) + continue; + break; + + case fhandler_dev_disk::disk_by_partuuid: + if (!format_partuuid (name, pix)) + continue; + break; + + case fhandler_dev_disk::disk_by_uuid: + if (!partition_to_label_or_uuid (true, &dbi->ObjectName, + part_num, ioctl_buf2, name)) + continue; + break; + + case fhandler_dev_disk::disk_by_voluuid: + if (!partition_to_voluuid (&dbi->ObjectName, part_num, name)) + continue; + break; + + default: continue; /* Should not happen. */ + } + table[table_size].drive = drive_num; + table[table_size].part = part_num; + table_size++; + } + } + } + if (devhdl) + NtClose(devhdl); + NtClose (dirhdl); + + if (!table_size && table) + { + free (table); + table = nullptr; + } + if (!table) + return (errno_set ? -1 : 0); + + /* Sort by {name, drive, part} to ensure stable sort order. */ + qsort (table, table_size, sizeof (*table), by_id_compare_name_drive_part); + /* Mark duplicate names. */ + for (unsigned i = 0; i < table_size; i++) + { + unsigned j = i + 1; + while (j < table_size && !strcmp (table[i].name, table[j].name)) + j++; + if (j == i + 1) + continue; + /* Duplicate(s) found, append "#N" to all entries. This never + introduces new duplicates because '#' never occurs in the + original names. */ + debug_printf ("mark duplicates %u-%u of '%s'", i, j - 1, table[i].name); + size_t len = strlen (table[i].name); + for (unsigned k = i; k < j; k++) + __small_sprintf (table[k].name + len, "#%u", k - i); + } + + debug_printf ("table_size: %d", table_size); + return table_size; +} + +const char dev_disk[] = "/dev/disk"; +const size_t dev_disk_len = sizeof (dev_disk) - 1; +static const char by_drive[] = "/by-drive"; +const size_t by_drive_len = sizeof(by_drive) - 1; + +/* Keep this in sync with enum fhandler_dev_disk::dev_disk_location starting + at disk_by_drive. */ +static const char * const by_dir_names[] { + "/by-drive", "/by-id", "/by-label", + "/by-partuuid", "/by-uuid", "/by-voluuid" +}; +const size_t by_dir_names_size = sizeof(by_dir_names) / sizeof(by_dir_names[0]); +static_assert((size_t) fhandler_dev_disk::disk_by_drive + by_dir_names_size - 1 + == (size_t) fhandler_dev_disk::disk_by_voluuid); + +fhandler_dev_disk::fhandler_dev_disk (): + fhandler_virtual (), + loc (unknown_loc), + loc_is_link (false), + drive_from_id (-1), + part_from_id (0) +{ +} + +void +fhandler_dev_disk::init_dev_disk () +{ + if (loc != unknown_loc) + return; + + /* Determine location. */ + const char *path = get_name (); + size_t dirlen = 0; + loc = invalid_loc; // "/dev/disk/invalid" + if (!path_prefix_p (dev_disk, path, dev_disk_len, false)) + ; // should not happen + else if (!path[dev_disk_len]) + loc = disk_dir; // "/dev/disk" + else + for (size_t i = 0; i < by_dir_names_size; i++) + { + const char *dir = by_dir_names[i]; + size_t len = strlen(dir); + if (path_prefix_p (dir, path + dev_disk_len, len, false)) + { + loc = (dev_disk_location) (disk_by_drive + i); // "/dev/disk/by-..." + dirlen = dev_disk_len + len; + break; + } + } + + loc_is_link = false; + if (dirlen) + { + if (!path[dirlen]) + ; // "/dev/disk/by-..." + else if (!strchr (path + dirlen + 1, '/')) + loc_is_link = true; // "/dev/disk/by-.../LINK" + else + loc = invalid_loc; // "/dev/disk/by-.../dir/invalid" + } + + debug_printf ("%s: loc %d, loc_is_link %d", path, (int) loc, (int) loc_is_link); + + /* Done if directory or invalid. */ + if (!loc_is_link) + return; + + /* Check whether "/dev/disk/by-.../LINK" exists. */ + by_id_entry *table; + int table_size = get_by_id_table (table, loc); + if (!table) + { + loc = invalid_loc; + return; + } + + by_id_entry key; + strcpy (key.name, path + dirlen + 1); + const void *found = bsearch (&key, table, table_size, sizeof (*table), + by_id_compare_name); + if (found) + { + /* Preserve drive and partition numbers for fillbuf (). */ + const by_id_entry *e = reinterpret_cast(found); + drive_from_id = e->drive; + part_from_id = e->part; + } + else + loc = invalid_loc; + free (table); +} + +virtual_ftype_t +fhandler_dev_disk::exists () +{ + debug_printf ("exists (%s)", get_name ()); + ensure_inited (); + if (loc == invalid_loc) + return virt_none; + else if (loc_is_link) + return virt_symlink; + else + return virt_directory; +} + +int +fhandler_dev_disk::fstat (struct stat *buf) +{ + debug_printf ("fstat (%s)", get_name ()); + ensure_inited (); + if (loc == invalid_loc) + { + set_errno (ENOENT); + return -1; + } + + fhandler_base::fstat (buf); + buf->st_mode = (loc_is_link ? S_IFLNK | S_IWUSR | S_IWGRP | S_IWOTH + : S_IFDIR) | STD_RBITS | STD_XBITS; + buf->st_ino = get_ino (); + return 0; +} + +static inline by_id_entry ** +dir_id_table (DIR *dir) +{ + return reinterpret_cast(&dir->__d_internal); +} + +DIR * +fhandler_dev_disk::opendir (int fd) +{ + ensure_inited (); + if (loc_is_link) + { + set_errno (ENOTDIR); + return nullptr; + } + + by_id_entry *table = nullptr; + if (loc != disk_dir) + { + int table_size = get_by_id_table (table, loc); + if (table_size < 0) + return nullptr; /* errno is set. */ + if (table) + { + /* Shrink to required table_size. */ + table = by_id_realloc (table, table_size + 1); + if (!table) + return nullptr; /* Should not happen. */ + /* Mark end of table for readdir (). */ + table[table_size].name[0] = '\0'; + } + } + + DIR *dir = fhandler_virtual::opendir (fd); + if (!dir) + { + free (table); + return nullptr; + } + dir->__flags = dirent_saw_dot | dirent_saw_dot_dot; + *dir_id_table (dir) = table; + return dir; +} + +int +fhandler_dev_disk::closedir (DIR *dir) +{ + free (*dir_id_table (dir)); + return fhandler_virtual::closedir (dir); +} + +int +fhandler_dev_disk::readdir (DIR *dir, dirent *de) +{ + int res; + if (dir->__d_position < 2) + { + de->d_name[0] = '.'; + de->d_name[1] = (dir->__d_position ? '.' : '\0'); + de->d_name[2] = '\0'; + de->d_type = DT_DIR; + dir->__d_position++; + res = 0; + } + else if (loc == disk_dir && dir->__d_position < 2 + (int) by_dir_names_size) + { + strcpy (de->d_name, by_dir_names[dir->__d_position - 2] + 1); + de->d_type = DT_DIR; + dir->__d_position++; + res = 0; + } + else if (*dir_id_table (dir)) + { + const char *name = (*dir_id_table (dir))[dir->__d_position - 2].name; + if (name[0]) + { + strcpy (de->d_name, name); + de->d_type = DT_LNK; + dir->__d_position++; + res = 0; + } + else + res = ENMFILE; + } + else + res = ENMFILE; + + syscall_printf ("%d = readdir(%p, %p) (%s)", res, dir, de, + (!res ? de->d_name : "")); + return res; +} + +int +fhandler_dev_disk::open (int flags, mode_t mode) +{ + ensure_inited (); + int err = 0; + if (!fhandler_virtual::open (flags, mode)) + err = -1; + /* else if (loc_is_link) {} */ /* should not happen. */ + else if (loc != invalid_loc) + { + if ((flags & (O_CREAT | O_EXCL)) == (O_CREAT | O_EXCL)) + err = EEXIST; + else if (flags & O_WRONLY) + err = EISDIR; + else + diropen = true; + } + else + { + if (flags & O_CREAT) + err = EROFS; + else + err = ENOENT; + } + + int res; + if (!err) + { + nohandle (true); + set_open_status (); + res = 1; + } + else + { + if (err > 0) + set_errno (err); + res = 0; + } + + syscall_printf ("%d = fhandler_dev_disk::open(%y, 0%o)", res, flags, mode); + return res; +} + +bool +fhandler_dev_disk::fill_filebuf () +{ + debug_printf ("fill_filebuf (%s)", get_name ()); + ensure_inited (); + if (!(loc_is_link && drive_from_id >= 0)) + return false; + + char buf[32]; + int len; + if (drive_from_id + 'a' <= 'z') + len = __small_sprintf (buf, "../../sd%c", drive_from_id + 'a'); + else + len = __small_sprintf (buf, "../../sd%c%c", + drive_from_id / ('z' - 'a' + 1) - 1 + 'a', + drive_from_id % ('z' - 'a' + 1) + 'a'); + if (part_from_id) + __small_sprintf (buf + len, "%d", part_from_id); + + if (filebuf) + cfree (filebuf); + filebuf = cstrdup (buf); + return true; +} diff --git a/winsup/cygwin/fhandler/disk_file.cc b/winsup/cygwin/fhandler/disk_file.cc index 40e7143ffd..5359e13e89 100644 --- a/winsup/cygwin/fhandler/disk_file.cc +++ b/winsup/cygwin/fhandler/disk_file.cc @@ -25,6 +25,7 @@ details. */ #include "devices.h" #include "ldap.h" #include +#include #include #define _LIBC @@ -212,13 +213,14 @@ fhandler_base::fstat_by_nfs_ea (struct stat *buf) cyg_ldap cldap; bool ldap_open = false; - if (get_handle ()) + /* NFS stumbles over its own caching. If you write to the file, + a subsequent fstat does not return the actual size of the file, + but the size at the time the handle has been opened. Unless + access through another handle invalidates the caching within the + NFS client. Skip this for Cygwin-created Symlinks playing FIFOs + (this sets the filler1 member to NF3FIFO). */ + if (get_handle () && nfs_attr->filler1 != NF3FIFO) { - /* NFS stumbles over its own caching. If you write to the file, - a subsequent fstat does not return the actual size of the file, - but the size at the time the handle has been opened. Unless - access through another handle invalidates the caching within the - NFS client. */ if (get_access () & GENERIC_WRITE) FlushFileBuffers (get_handle ()); pc.get_finfo (get_handle ()); @@ -359,8 +361,13 @@ fhandler_base::fstat_fs (struct stat *buf) if (get_stat_handle ()) { - if (!nohandle () && (!is_fs_special () || get_flags () & O_PATH)) - res = pc.fs_is_nfs () ? fstat_by_nfs_ea (buf) : fstat_by_handle (buf); + if (!nohandle ()) + { + if (pc.fs_is_nfs ()) + res = fstat_by_nfs_ea (buf); + else if (!is_fs_special () || get_flags () & O_PATH) + res = fstat_by_handle (buf); + } if (res) res = fstat_by_name (buf); return res; @@ -713,7 +720,10 @@ fhandler_disk_file::fchmod (mode_t mode) NTSTATUS status; IO_STATUS_BLOCK io; - if (pc.is_fs_special ()) + if (pc.is_fs_special () + /* For NFS, only handle Cygwin FIFOs specially. Changing mode of + native FIFOs will work with the default code below. */ + && (!pc.fs_is_nfs () || pc.nfsattr ()->filler1 == NF3FIFO)) return chmod_device (pc, mode); if (!get_handle ()) @@ -1125,57 +1135,298 @@ fhandler_disk_file::fadvise (off_t offset, off_t length, int advice) } int -fhandler_disk_file::ftruncate (off_t length, bool allow_truncate) +fhandler_disk_file::falloc_allocate (int mode, off_t offset, off_t length) { - int res = 0; - - if (length < 0 || !get_handle ()) - res = EINVAL; - else if (pc.isdir ()) - res = EISDIR; - else if (!(get_access () & GENERIC_WRITE)) - res = EBADF; - else - { - NTSTATUS status; - IO_STATUS_BLOCK io; - FILE_STANDARD_INFORMATION fsi; - FILE_END_OF_FILE_INFORMATION feofi; - - status = NtQueryInformationFile (get_handle (), &io, &fsi, sizeof fsi, - FileStandardInformation); - if (!NT_SUCCESS (status)) - return geterrno_from_nt_status (status); - - /* If called through posix_fallocate, silently succeed if length - is less than the file's actual length. */ - if (!allow_truncate && length < fsi.EndOfFile.QuadPart) - return 0; + NTSTATUS status; + IO_STATUS_BLOCK io; + FILE_STANDARD_INFORMATION fsi; + FILE_END_OF_FILE_INFORMATION feofi; + FILE_ALLOCATION_INFORMATION fai = { 0 }; + /* Fetch EOF */ + status = NtQueryInformationFile (get_handle (), &io, &fsi, sizeof fsi, + FileStandardInformation); + if (!NT_SUCCESS (status)) + return geterrno_from_nt_status (status); + + switch (mode) + { + case 0: + /* For posix_fallocate(3), truncating the file is a no-op. However, + for sparse files we still have to allocate the blocks within + offset and offset + length which are currently in holes, due to + the following POSIX requirement: + "If posix_fallocate() returns successfully, subsequent writes to + the specified file data shall not fail due to the lack of free + space on the file system storage media." */ + if (offset + length <= fsi.EndOfFile.QuadPart) + { + if (!has_attribute (FILE_ATTRIBUTE_SPARSE_FILE)) + return 0; + feofi.EndOfFile.QuadPart = fsi.EndOfFile.QuadPart; + } + else + feofi.EndOfFile.QuadPart = offset + length; + break; + case __FALLOC_FL_TRUNCATE: + /* For ftruncate(2), offset is 0. Just use length as is. */ feofi.EndOfFile.QuadPart = length; - /* Create sparse files only when called through ftruncate, not when - called through posix_fallocate. */ - if (allow_truncate && pc.support_sparse () + + /* Make file sparse only when called through ftruncate and the mount + mode supports sparse files. Also, make sure that the new region + actually spans over at least one sparsifiable chunk. */ + if (pc.support_sparse () && !has_attribute (FILE_ATTRIBUTE_SPARSE_FILE) - && length >= fsi.EndOfFile.QuadPart + (128 * 1024)) + && span_sparse_chunk (feofi.EndOfFile.QuadPart, + fsi.EndOfFile.QuadPart)) { status = NtFsControlFile (get_handle (), NULL, NULL, NULL, &io, FSCTL_SET_SPARSE, NULL, 0, NULL, 0); if (NT_SUCCESS (status)) pc.file_attributes (pc.file_attributes () - | FILE_ATTRIBUTE_SPARSE_FILE); - syscall_printf ("%y = NtFsControlFile(%S, FSCTL_SET_SPARSE)", - status, pc.get_nt_native_path ()); + | FILE_ATTRIBUTE_SPARSE_FILE); + debug_printf ("%y = NtFsControlFile(%S, FSCTL_SET_SPARSE)", + status, pc.get_nt_native_path ()); } + break; + case FALLOC_FL_KEEP_SIZE: + /* Keep track of the allocation size for overallocation below. + Note that overallocation in Windows is only temporary! + As soon as the last open handle to the file is closed, the + overallocation gets removed by the system. Also, overallocation + for sparse files fails silently, so just don't bother. */ + if (offset + length > fsi.EndOfFile.QuadPart + && !has_attribute (FILE_ATTRIBUTE_SPARSE_FILE)) + fai.AllocationSize.QuadPart = offset + length; + + feofi.EndOfFile.QuadPart = fsi.EndOfFile.QuadPart; + break; + } + + /* Now set the new EOF */ + if (feofi.EndOfFile.QuadPart != fsi.EndOfFile.QuadPart) + { status = NtSetInformationFile (get_handle (), &io, &feofi, sizeof feofi, FileEndOfFileInformation); if (!NT_SUCCESS (status)) - res = geterrno_from_nt_status (status); + return geterrno_from_nt_status (status); + } + + /* If called via fallocate(2) or posix_fallocate(3), allocate blocks in + sparse file holes. */ + if (mode != __FALLOC_FL_TRUNCATE + && length + && has_attribute (FILE_ATTRIBUTE_SPARSE_FILE)) + { + int res = falloc_zero_range (mode | __FALLOC_FL_ZERO_HOLES, + offset, length); + if (res) + return res; + } + + /* Last but not least, set the new allocation size, if any */ + if (fai.AllocationSize.QuadPart) + { + /* This is not fatal. Just note a failure in the debug output. */ + status = NtSetInformationFile (get_handle (), &io, + &fai, sizeof fai, + FileAllocationInformation); + if (!NT_SUCCESS (status)) + debug_printf ("%y = NtSetInformationFile(%S, " + "FileAllocationInformation)", + status, pc.get_nt_native_path ()); + } + + return 0; +} + +int +fhandler_disk_file::falloc_punch_hole (off_t offset, off_t length) +{ + NTSTATUS status; + IO_STATUS_BLOCK io; + FILE_STANDARD_INFORMATION fsi; + FILE_ZERO_DATA_INFORMATION fzi; + + /* Fetch EOF */ + status = NtQueryInformationFile (get_handle (), &io, &fsi, sizeof fsi, + FileStandardInformation); + if (!NT_SUCCESS (status)) + return geterrno_from_nt_status (status); + + if (offset > fsi.EndOfFile.QuadPart) /* no-op */ + return 0; + + if (offset + length > fsi.EndOfFile.QuadPart) + length = fsi.EndOfFile.QuadPart - offset; + + /* If the file isn't sparse yet, make it so. */ + if (!has_attribute (FILE_ATTRIBUTE_SPARSE_FILE)) + { + status = NtFsControlFile (get_handle (), NULL, NULL, NULL, &io, + FSCTL_SET_SPARSE, NULL, 0, NULL, 0); + debug_printf ("%y = NtFsControlFile(%S, FSCTL_SET_SPARSE)", + status, pc.get_nt_native_path ()); + if (!NT_SUCCESS (status)) + return geterrno_from_nt_status (status); + pc.file_attributes (pc.file_attributes () | FILE_ATTRIBUTE_SPARSE_FILE); + } + + /* Now punch a hole. For once, FSCTL_SET_ZERO_DATA does it exactly as per + fallocate(FALLOC_FL_PUNCH_HOLE) specs. */ + fzi.FileOffset.QuadPart = offset; + fzi.BeyondFinalZero.QuadPart = offset + length; + status = NtFsControlFile (get_handle (), NULL, NULL, NULL, &io, + FSCTL_SET_ZERO_DATA, &fzi, sizeof fzi, NULL, 0); + if (!NT_SUCCESS (status)) + return geterrno_from_nt_status (status); + + return 0; +} + +int +fhandler_disk_file::falloc_zero_range (int mode, off_t offset, off_t length) +{ + NTSTATUS status; + IO_STATUS_BLOCK io; + FILE_STANDARD_INFORMATION fsi; + FILE_ALLOCATED_RANGE_BUFFER inp, *out = NULL; + OBJECT_ATTRIBUTES attr; + HANDLE zo_handle; + tmp_pathbuf tp; + size_t data_chunk_count = 0; + + /* Fetch EOF */ + status = NtQueryInformationFile (get_handle (), &io, &fsi, sizeof fsi, + FileStandardInformation); + if (!NT_SUCCESS (status)) + return geterrno_from_nt_status (status); + + /* offset and length must not exceed EOF with FALLOC_FL_KEEP_SIZE */ + if (mode & FALLOC_FL_KEEP_SIZE) + { + if (offset > fsi.EndOfFile.QuadPart) /* no-op */ + return 0; + + if (offset + length > fsi.EndOfFile.QuadPart) + length = fsi.EndOfFile.QuadPart - offset; + } + + /* If the file is sparse, fetch the data ranges within the file + to be able to recognize holes. */ + if (has_attribute (FILE_ATTRIBUTE_SPARSE_FILE)) + { + inp.FileOffset.QuadPart = offset; + inp.Length.QuadPart = length; + out = (FILE_ALLOCATED_RANGE_BUFFER *) tp.t_get (); + status = NtFsControlFile (get_handle (), NULL, NULL, NULL, + &io, FSCTL_QUERY_ALLOCATED_RANGES, + &inp, sizeof inp, out, 2 * NT_MAX_PATH); + if (!NT_ERROR (status)) + data_chunk_count = io.Information / sizeof *out; + } + + /* Re-open the file and use this handle ever after, so as not to + move the file pointer of the original file object. */ + status = NtOpenFile (&zo_handle, SYNCHRONIZE | GENERIC_WRITE, + pc.init_reopen_attr (attr, get_handle ()), &io, + FILE_SHARE_VALID_FLAGS, get_options ()); + if (!NT_SUCCESS (status)) + return geterrno_from_nt_status (status); + + /* FILE_SPARSE_GRANULARITY == 2 * NT_MAX_PATH ==> fits exactly */ + char *nullbuf = tp.t_get (); + memset (nullbuf, 0, FILE_SPARSE_GRANULARITY); + int res = 0; + + /* Split range into chunks of size FILE_SPARSE_GRANULARITY and handle + them according to being data or hole */ + LARGE_INTEGER off = { QuadPart:offset }; + size_t start_idx = 0; + while (length > 0) + { + off_t chunk_len; + bool in_data = true; + + if (off.QuadPart % FILE_SPARSE_GRANULARITY) /* First block */ + chunk_len = roundup2 (off.QuadPart, FILE_SPARSE_GRANULARITY) - off.QuadPart; + else + chunk_len = FILE_SPARSE_GRANULARITY; + if (chunk_len > length) /* First or last block */ + chunk_len = length; + + /* Check if the current chunk is within data or hole */ + if (has_attribute (FILE_ATTRIBUTE_SPARSE_FILE) + && off.QuadPart < fsi.EndOfFile.QuadPart) + { + in_data = false; + for (size_t idx = start_idx; idx < data_chunk_count; ++idx) + if (off.QuadPart >= out[idx].FileOffset.QuadPart) + { + /* Skip entries with lower start address next time. */ + start_idx = idx; + if (off.QuadPart < out[idx].FileOffset.QuadPart + + out[idx].Length.QuadPart) + { + in_data = true; + break; + } + } + } + + /* Eventually, write zeros into the block. Completely zero out data + blocks, just write a single zero to former holes in sparse files. + If __FALLOC_FL_ZERO_HOLES has been specified, only write to holes. */ + if (!(mode & __FALLOC_FL_ZERO_HOLES) || !in_data) + { + status = NtWriteFile (zo_handle, NULL, NULL, NULL, &io, nullbuf, + in_data ? chunk_len : 1, &off, NULL); + if (!NT_SUCCESS (status)) + { + res = geterrno_from_nt_status (status); + break; + } + } + + off.QuadPart += chunk_len; + length -= chunk_len; } + + NtClose (zo_handle); return res; } +int +fhandler_disk_file::fallocate (int mode, off_t offset, off_t length) +{ + if (length < 0 || !get_handle ()) + return EINVAL; + if (pc.isdir ()) + return EISDIR; + if (!(get_access () & GENERIC_WRITE)) + return EBADF; + + switch (mode) + { + case 0: + case __FALLOC_FL_TRUNCATE: + case FALLOC_FL_KEEP_SIZE: + return falloc_allocate (mode, offset, length); + case FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE: + /* Only if the filesystem supports it... */ + if (!(pc.fs_flags () & FILE_SUPPORTS_SPARSE_FILES)) + return EOPNOTSUPP; + return falloc_punch_hole (offset, length); + case FALLOC_FL_ZERO_RANGE: + case FALLOC_FL_ZERO_RANGE | FALLOC_FL_KEEP_SIZE: + return falloc_zero_range (mode, offset, length); + default: + break; + } + return EINVAL; +} + int fhandler_disk_file::link (const char *newpath) { @@ -1686,6 +1937,7 @@ fhandler_disk_file::pwrite (void *buf, size_t count, off_t offset, void *aio) { NTSTATUS status; IO_STATUS_BLOCK io; + FILE_STANDARD_INFORMATION fsi; LARGE_INTEGER off = { QuadPart:offset }; HANDLE evt = aio ? (HANDLE) aiocb->aio_wincb.event : NULL; PIO_STATUS_BLOCK pio = aio ? (PIO_STATUS_BLOCK) &aiocb->aio_wincb : &io; @@ -1694,6 +1946,25 @@ fhandler_disk_file::pwrite (void *buf, size_t count, off_t offset, void *aio) if (prw_handle && (prw_handle_isasync != !!aio)) NtClose (prw_handle), prw_handle = NULL; + /* If the file system supports sparse files and the application is + writing beyond EOF spanning more than one sparsifiable chunk, + convert the file to a sparse file. */ + if (pc.support_sparse () + && !has_attribute (FILE_ATTRIBUTE_SPARSE_FILE) + && NT_SUCCESS (NtQueryInformationFile (get_handle (), + &io, &fsi, sizeof fsi, + FileStandardInformation)) + && span_sparse_chunk (offset, fsi.EndOfFile.QuadPart)) + { + NTSTATUS status; + status = NtFsControlFile (get_handle (), NULL, NULL, NULL, + &io, FSCTL_SET_SPARSE, NULL, 0, NULL, 0); + if (NT_SUCCESS (status)) + pc.file_attributes (pc.file_attributes () + | FILE_ATTRIBUTE_SPARSE_FILE); + debug_printf ("%y = NtFsControlFile(%S, FSCTL_SET_SPARSE)", + status, pc.get_nt_native_path ()); + } if (!prw_handle && prw_open (true, aio)) goto non_atomic; status = NtWriteFile (prw_handle, evt, NULL, NULL, pio, buf, count, @@ -1840,8 +2111,6 @@ fhandler_disk_file::mkdir (mode_t mode) int fhandler_disk_file::rmdir () { - extern NTSTATUS unlink_nt (path_conv &pc); - if (!pc.isdir ()) { set_errno (ENOTDIR); @@ -1853,7 +2122,7 @@ fhandler_disk_file::rmdir () return -1; } - NTSTATUS status = unlink_nt (pc); + NTSTATUS status = unlink_nt (pc, false); if (!NT_SUCCESS (status)) { @@ -2261,6 +2530,8 @@ fhandler_disk_file::readdir (DIR *dir, dirent *de) goto go_ahead; } } + /* NFS must use FileNamesInformation! Any other information class + skips all symlinks. */ if (!(dir->__flags & dirent_get_d_ino)) status = NtQueryDirectoryFile (get_handle (), NULL, NULL, NULL, &io, d_cache (dir), DIR_BUF_SIZE, @@ -2345,9 +2616,11 @@ fhandler_disk_file::readdir (DIR *dir, dirent *de) And, since some filesystems choke on the EAs, we don't use them unconditionally. */ f_status = (dir->__flags & dirent_nfs_d_ino) - ? NtCreateFile (&hdl, READ_CONTROL, &attr, &io, - NULL, 0, FILE_SHARE_VALID_FLAGS, - FILE_OPEN, FILE_OPEN_FOR_BACKUP_INTENT, + ? NtCreateFile (&hdl, + READ_CONTROL | FILE_READ_ATTRIBUTES, + &attr, &io, NULL, 0, + FILE_SHARE_VALID_FLAGS, FILE_OPEN, + FILE_OPEN_FOR_BACKUP_INTENT, &nfs_aol_ffei, sizeof nfs_aol_ffei) : NtOpenFile (&hdl, READ_CONTROL, &attr, &io, FILE_SHARE_VALID_FLAGS, @@ -2362,6 +2635,16 @@ fhandler_disk_file::readdir (DIR *dir, dirent *de) FILE_INTERNAL_INFORMATION fii; f_status = NtQueryInformationFile (hdl, &io, &fii, sizeof fii, FileInternalInformation); + /* On NFS fetch the (faked, but useful) DOS attribute. + We need it to recognize shortcut FIFOs. */ + if ((dir->__flags & dirent_nfs_d_ino)) + { + FILE_BASIC_INFORMATION fbi; + + if (NT_SUCCESS (NtQueryInformationFile (hdl, &io, &fbi, + sizeof fbi, FileBasicInformation))) + FileAttributes = fbi.FileAttributes; + } NtClose (hdl); if (NT_SUCCESS (f_status)) { diff --git a/winsup/cygwin/fhandler/dsp.cc b/winsup/cygwin/fhandler/dsp.cc index 83eea6d7dd..605a048f39 100644 --- a/winsup/cygwin/fhandler/dsp.cc +++ b/winsup/cygwin/fhandler/dsp.cc @@ -46,6 +46,8 @@ details. */ children. They only inherit the settings from the parent. */ +enum { DEFAULT_BLOCKS = 12, MAX_BLOCKS = 256 }; + class fhandler_dev_dsp::Audio { // This class contains functionality common to Audio_in and Audio_out public: @@ -63,11 +65,10 @@ class fhandler_dev_dsp::Audio void convert_S16LE_S16BE (unsigned char *buffer, int size_bytes); void fillFormat (WAVEFORMATEX * format, int rate, int bits, int channels); - static unsigned blockSize (int rate, int bits, int channels); + static unsigned blockSize (double ms, int rate, int bits, int channels); void (fhandler_dev_dsp::Audio::*convert_) (unsigned char *buffer, int size_bytes); - enum { MAX_BLOCKS = 12 }; int bufferIndex_; // offset into pHdr_->lpData WAVEHDR *pHdr_; // data to be filled by write WAVEHDR wavehdr_[MAX_BLOCKS]; @@ -126,7 +127,6 @@ class fhandler_dev_dsp::Audio_out: public Audio bool waitforspace (); bool sendcurrent (); - enum { MAX_BLOCKS = 12 }; HWAVEOUT dev_; // The wave device /* Private copies of audiofreq_, audiobits_, audiochannels_, possibly set from wave file */ @@ -237,9 +237,9 @@ fhandler_dev_dsp::Audio::queue::query () fhandler_dev_dsp::Audio::Audio (fhandler_dev_dsp *my_fh) { bigwavebuffer_ = NULL; - Qisr2app_ = new queue (MAX_BLOCKS); - convert_ = &fhandler_dev_dsp::Audio::convert_none; fh = my_fh; + Qisr2app_ = new queue (fh->fragstotal_); + convert_ = &fhandler_dev_dsp::Audio::convert_none; } fhandler_dev_dsp::Audio::~Audio () @@ -352,10 +352,10 @@ fhandler_dev_dsp::Audio::fillFormat (WAVEFORMATEX * format, // calculate a good block size unsigned -fhandler_dev_dsp::Audio::blockSize (int rate, int bits, int channels) +fhandler_dev_dsp::Audio::blockSize (double ms, int rate, int bits, int channels) { unsigned blockSize; - blockSize = ((bits / 8) * channels * rate) / 8; // approx 125ms per block + blockSize = ms * ((bits / 8) * channels * rate) / 1000; // round up to multiple of 64 blockSize += 0x3f; blockSize &= ~0x3f; @@ -391,14 +391,13 @@ fhandler_dev_dsp::Audio_out::start () { WAVEFORMATEX format; MMRESULT rc; - unsigned bSize = blockSize (freq_, bits_, channels_); if (dev_) return true; /* In case of fork bigwavebuffer may already exist */ if (!bigwavebuffer_) - bigwavebuffer_ = new char[MAX_BLOCKS * bSize]; + bigwavebuffer_ = new char[fh->fragstotal_ * fh->fragsize_]; if (!isvalid ()) return false; @@ -407,7 +406,7 @@ fhandler_dev_dsp::Audio_out::start () rc = waveOutOpen (&dev_, WAVE_MAPPER, &format, (DWORD_PTR) waveOut_callback, (DWORD_PTR) this, CALLBACK_FUNCTION); if (rc == MMSYSERR_NOERROR) - init (bSize); + init (fh->fragsize_); debug_printf ("%u = waveOutOpen(freq=%d bits=%d channels=%d)", rc, freq_, bits_, channels_); @@ -452,7 +451,7 @@ fhandler_dev_dsp::Audio_out::init (unsigned blockSize) // internally queue all of our buffer for later use by write Qisr2app_->reset (); - for (i = 0; i < MAX_BLOCKS; i++) + for (i = 0; i < fh->fragstotal_; i++) { wavehdr_[i].lpData = &bigwavebuffer_[i * blockSize]; wavehdr_[i].dwUser = (int) blockSize; @@ -507,8 +506,8 @@ fhandler_dev_dsp::Audio_out::buf_info (audio_buf_info *p, { /* If the device is running we use the internal values, possibly set from the wave file. */ - p->fragstotal = MAX_BLOCKS; - p->fragsize = blockSize (freq_, bits_, channels_); + p->fragstotal = fh->fragstotal_; + p->fragsize = fh->fragsize_; p->fragments = Qisr2app_->query (); if (pHdr_ != NULL) p->bytes = (int)pHdr_->dwUser - bufferIndex_ @@ -525,10 +524,10 @@ fhandler_dev_dsp::Audio_out::buf_info (audio_buf_info *p, void fhandler_dev_dsp::Audio_out::default_buf_info (audio_buf_info *p, int rate, int bits, int channels) { - p->fragstotal = MAX_BLOCKS; - p->fragsize = blockSize (rate, bits, channels); - p->fragments = MAX_BLOCKS; - p->bytes = p->fragsize * p->fragments; + p->fragstotal = DEFAULT_BLOCKS; + p->fragsize = blockSize (125, rate, bits, channels); + p->fragments = p->fragstotal; + p->bytes = p->fragsize * p->fragments; } /* This is called on an interupt so use locking.. Note Qisr2app_ @@ -537,6 +536,8 @@ inline void fhandler_dev_dsp::Audio_out::callback_sampledone (WAVEHDR *pHdr) { Qisr2app_->send (pHdr); + ReleaseSemaphore (fh->get_select_sem (), + get_obj_handle_count (fh->get_select_sem ()), NULL); } bool @@ -554,8 +555,7 @@ fhandler_dev_dsp::Audio_out::waitforspace () set_errno (EAGAIN); return false; } - debug_printf ("100ms"); - switch (cygwait (100)) + switch (cygwait (fh->get_select_sem (), 10)) { case WAIT_SIGNALED: if (!_my_tls.call_signal_handler ()) @@ -586,7 +586,7 @@ fhandler_dev_dsp::Audio_out::waitforspace () void fhandler_dev_dsp::Audio_out::waitforallsent () { - while (Qisr2app_->query () != MAX_BLOCKS) + while (Qisr2app_->query () != fh->fragstotal_) { debug_printf ("%d blocks in Qisr2app", Qisr2app_->query ()); cygwait (1); @@ -774,14 +774,13 @@ fhandler_dev_dsp::Audio_in::start (int rate, int bits, int channels) { WAVEFORMATEX format; MMRESULT rc; - unsigned bSize = blockSize (rate, bits, channels); if (dev_) return true; /* In case of fork bigwavebuffer may already exist */ if (!bigwavebuffer_) - bigwavebuffer_ = new char[MAX_BLOCKS * bSize]; + bigwavebuffer_ = new char[fh->fragstotal_ * fh->fragsize_]; if (!isvalid ()) return false; @@ -793,7 +792,7 @@ fhandler_dev_dsp::Audio_in::start (int rate, int bits, int channels) if (rc == MMSYSERR_NOERROR) { - if (!init (bSize)) + if (!init (fh->fragsize_)) return false; } return (rc == MMSYSERR_NOERROR); @@ -858,7 +857,7 @@ fhandler_dev_dsp::Audio_in::init (unsigned blockSize) // try to queue all of our buffer for reception Qisr2app_->reset (); - for (i = 0; i < MAX_BLOCKS; i++) + for (i = 0; i < fh->fragstotal_; i++) { wavehdr_[i].lpData = &bigwavebuffer_[i * blockSize]; wavehdr_[i].dwBufferLength = blockSize; @@ -934,8 +933,7 @@ fhandler_dev_dsp::Audio_in::waitfordata () set_errno (EAGAIN); return false; } - debug_printf ("100ms"); - switch (cygwait (100)) + switch (cygwait (fh->get_select_sem (), 10)) { case WAIT_SIGNALED: if (!_my_tls.call_signal_handler ()) @@ -966,8 +964,8 @@ fhandler_dev_dsp::Audio_in::waitfordata () void fhandler_dev_dsp::Audio_in::default_buf_info (audio_buf_info *p, int rate, int bits, int channels) { - p->fragstotal = MAX_BLOCKS; - p->fragsize = blockSize (rate, bits, channels); + p->fragstotal = DEFAULT_BLOCKS; + p->fragsize = blockSize (125, rate, bits, channels); p->fragments = 0; p->bytes = 0; } @@ -978,8 +976,8 @@ fhandler_dev_dsp::Audio_in::buf_info (audio_buf_info *p, { if (dev_) { - p->fragstotal = MAX_BLOCKS; - p->fragsize = blockSize (rate, bits, channels); + p->fragstotal = fh->fragstotal_; + p->fragsize = fh->fragsize_; p->fragments = Qisr2app_->query (); if (pHdr_ != NULL) p->bytes = pHdr_->dwBytesRecorded - bufferIndex_ @@ -997,6 +995,8 @@ inline void fhandler_dev_dsp::Audio_in::callback_blockfull (WAVEHDR *pHdr) { Qisr2app_->send (pHdr); + ReleaseSemaphore (fh->get_select_sem (), + get_obj_handle_count (fh->get_select_sem ()), NULL); } static void CALLBACK @@ -1026,19 +1026,19 @@ fhandler_dev_dsp::fhandler_dev_dsp (): ssize_t fhandler_dev_dsp::write (const void *ptr, size_t len) { - return base ()->_write (ptr, len); + return base ()->_write (ptr, len, this); } void fhandler_dev_dsp::read (void *ptr, size_t& len) { - return base ()->_read (ptr, len); + base ()->_read (ptr, len, this); } int fhandler_dev_dsp::ioctl (unsigned int cmd, void *buf) { - return base ()->_ioctl (cmd, buf); + return base ()->_ioctl (cmd, buf, this); } int @@ -1061,16 +1061,17 @@ fhandler_dev_dsp::fixup_after_exec () int -fhandler_dev_dsp::open (int flags, mode_t) +fhandler_dev_dsp::open (int flags, mode_t mode) { int ret = -1, err = 0; UINT num_in = 0, num_out = 0; - set_flags ((flags & ~O_TEXT) | O_BINARY); // Work out initial sample format & frequency, /dev/dsp defaults audioformat_ = AFMT_U8; audiofreq_ = 8000; audiobits_ = 8; audiochannels_ = 1; + fragstotal_ = DEFAULT_BLOCKS; + fragment_has_been_set = false; switch (flags & O_ACCMODE) { case O_RDWR: @@ -1094,6 +1095,8 @@ fhandler_dev_dsp::open (int flags, mode_t) else ret = open_null (flags); + select_sem = CreateSemaphore (sec_none_cloexec (mode), 0, INT32_MAX, NULL); + debug_printf ("ACCMODE=%y audio_in=%d audio_out=%d, err=%d, ret=%d", flags & O_ACCMODE, num_in, num_out, err, ret); if (ret >= 0) @@ -1101,11 +1104,11 @@ fhandler_dev_dsp::open (int flags, mode_t) return ret; } -#define IS_WRITE() ((get_flags() & O_ACCMODE) != O_RDONLY) -#define IS_READ() ((get_flags() & O_ACCMODE) != O_WRONLY) +#define IS_WRITE() ((fh->get_flags() & O_ACCMODE) != O_RDONLY) +#define IS_READ() ((fh->get_flags() & O_ACCMODE) != O_WRONLY) ssize_t -fhandler_dev_dsp::_write (const void *ptr, size_t len) +fhandler_dev_dsp::_write (const void *ptr, size_t len, fhandler_dev_dsp *fh) { debug_printf ("ptr=%p len=%ld", ptr, len); int len_s = len; @@ -1121,6 +1124,13 @@ fhandler_dev_dsp::_write (const void *ptr, size_t len) /* nothing to do */; else if (IS_WRITE ()) { + if (fragment_has_been_set) + fragsize_ = max (Audio::blockSize (80.0 / fragstotal_, audiofreq_, + audiobits_, audiochannels_), + fragsize_); + else + fragsize_ = Audio::blockSize (125, audiofreq_, audiobits_, + audiochannels_); debug_printf ("Allocating"); if (!(audio_out_ = new Audio_out (this))) return -1; @@ -1157,7 +1167,7 @@ fhandler_dev_dsp::_write (const void *ptr, size_t len) } void -fhandler_dev_dsp::_read (void *ptr, size_t& len) +fhandler_dev_dsp::_read (void *ptr, size_t& len, fhandler_dev_dsp *fh) { debug_printf ("ptr=%p len=%ld", ptr, len); @@ -1165,6 +1175,9 @@ fhandler_dev_dsp::_read (void *ptr, size_t& len) /* nothing to do */; else if (IS_READ ()) { + if (!fragment_has_been_set) + fragsize_ = Audio::blockSize (125, audiofreq_, audiobits_, + audiochannels_); debug_printf ("Allocating"); if (!(audio_in_ = new Audio_in (this))) { @@ -1223,11 +1236,14 @@ fhandler_dev_dsp::close () being_closed = true; close_audio_in (); close_audio_out (); + ReleaseSemaphore (select_sem, get_obj_handle_count (select_sem), NULL); + CloseHandle (select_sem); + select_sem = NULL; return fhandler_base::close (); } int -fhandler_dev_dsp::_ioctl (unsigned int cmd, void *buf) +fhandler_dev_dsp::_ioctl (unsigned int cmd, void *buf, fhandler_dev_dsp *fh) { debug_printf ("audio_in=%p audio_out=%p", audio_in_, audio_out_); int *intbuf = (int *) buf; @@ -1242,19 +1258,13 @@ fhandler_dev_dsp::_ioctl (unsigned int cmd, void *buf) break; CASE (SNDCTL_DSP_GETBLKSIZE) - /* This is valid even if audio_X is NULL */ - if (IS_WRITE ()) - { - *intbuf = audio_out_->blockSize (audiofreq_, - audiobits_, - audiochannels_); - } + if (fragment_has_been_set) + *intbuf = max (Audio::blockSize (80.0 / fragstotal_, audiofreq_, + audiobits_, audiochannels_), + fragsize_); else - { // I am very sure that IS_READ is valid - *intbuf = audio_in_->blockSize (audiofreq_, - audiobits_, - audiochannels_); - } + *intbuf = Audio::blockSize (125, audiofreq_, audiobits_, + audiochannels_); return 0; CASE (SNDCTL_DSP_SETFMT) @@ -1338,7 +1348,7 @@ fhandler_dev_dsp::_ioctl (unsigned int cmd, void *buf) CASE (SNDCTL_DSP_STEREO) { int nChannels = *intbuf + 1; - int res = _ioctl (SNDCTL_DSP_CHANNELS, &nChannels); + int res = _ioctl (SNDCTL_DSP_CHANNELS, &nChannels, fh); *intbuf = nChannels - 1; return res; } @@ -1380,11 +1390,20 @@ fhandler_dev_dsp::_ioctl (unsigned int cmd, void *buf) return -1; } audio_buf_info *p = (audio_buf_info *) buf; - if (audio_out_) { - audio_out_->buf_info (p, audiofreq_, audiobits_, audiochannels_); - } else { - Audio_out::default_buf_info(p, audiofreq_, audiobits_, audiochannels_); - } + if (audio_out_) + audio_out_->buf_info (p, audiofreq_, audiobits_, audiochannels_); + else if (fragment_has_been_set) + { + p->fragsize = max (Audio::blockSize (80.0 / fragstotal_, + audiofreq_, audiobits_, + audiochannels_), + fragsize_); + p->bytes = p->fragsize * fragstotal_; + p->fragstotal = fragstotal_; + p->fragments = fragstotal_; + } + else + Audio_out::default_buf_info(p, audiofreq_, audiobits_, audiochannels_); debug_printf ("buf=%p frags=%d fragsize=%d bytes=%d", buf, p->fragments, p->fragsize, p->bytes); return 0; @@ -1398,20 +1417,37 @@ fhandler_dev_dsp::_ioctl (unsigned int cmd, void *buf) return -1; } audio_buf_info *p = (audio_buf_info *) buf; - if (audio_in_) { - audio_in_->buf_info (p, audiofreq_, audiobits_, audiochannels_); - } else { - Audio_in::default_buf_info(p, audiofreq_, audiobits_, audiochannels_); - } + if (audio_in_) + audio_in_->buf_info (p, audiofreq_, audiobits_, audiochannels_); + else if (fragment_has_been_set) + { + p->bytes = 0; + p->fragsize = max (Audio::blockSize (80.0 / fragstotal_, + audiofreq_, audiobits_, + audiochannels_), + fragsize_); + p->fragstotal = fragstotal_; + p->fragments = 0; + } + else + Audio_in::default_buf_info(p, audiofreq_, audiobits_, audiochannels_); debug_printf ("buf=%p frags=%d fragsize=%d bytes=%d", buf, p->fragments, p->fragsize, p->bytes); return 0; } CASE (SNDCTL_DSP_SETFRAGMENT) - // Fake!! esound & mikmod require this on non PowerPC platforms. - // + { + if (audio_out_ || audio_in_) + return 0; /* Too late to set fragment. Ignore. */ + int *p = (int *) buf; + fragstotal_ = min (*p >> 16, MAX_BLOCKS); + fragsize_ = 1 << (*p & 0xffff); + if (fragstotal_ < 2) + fragstotal_ = 2; + fragment_has_been_set = true; return 0; + } CASE (SNDCTL_DSP_GETFMTS) *intbuf = AFMT_S16_LE | AFMT_U8; // only native formats returned here @@ -1472,3 +1508,48 @@ fhandler_dev_dsp::_fixup_after_exec () audio_out_ = NULL; } } + +bool +fhandler_dev_dsp::_write_ready () +{ + audio_buf_info info; + if (audio_out_) + { + audio_out_->buf_info (&info, audiofreq_, audiobits_, audiochannels_); + return info.bytes > 0; + } + else + return true; +} + +bool +fhandler_dev_dsp::_read_ready () +{ + audio_buf_info info; + if (audio_in_) + { + audio_in_->buf_info (&info, audiofreq_, audiobits_, audiochannels_); + return info.bytes > 0; + } + else + return true; +} + +bool +fhandler_dev_dsp::write_ready () +{ + return base ()->_write_ready (); +} + +bool +fhandler_dev_dsp::read_ready () +{ + return base ()->_read_ready (); +} + +bool +fhandler_dev_dsp::open_setup (int flags) +{ + set_flags ((flags & ~O_TEXT) | O_BINARY); + return fhandler_base::open_setup (flags); +} diff --git a/winsup/cygwin/fhandler/mixer.cc b/winsup/cygwin/fhandler/mixer.cc new file mode 100644 index 0000000000..f4997f952c --- /dev/null +++ b/winsup/cygwin/fhandler/mixer.cc @@ -0,0 +1,164 @@ +/* fhandler_dev_mixer: code to emulate OSS sound model /dev/mixer + + Written by Takashi Yano + +This file is part of Cygwin. + +This software is a copyrighted work licensed under the terms of the +Cygwin license. Please consult the file "CYGWIN_LICENSE" for +details. */ + +#include "winsup.h" +#include +#include "cygerrno.h" +#include "path.h" +#include "fhandler.h" +#include "dtable.h" +#include "cygheap.h" +#include + +ssize_t +fhandler_dev_mixer::write (const void *ptr, size_t len) +{ + set_errno (EINVAL); + return -1; +} + +void +fhandler_dev_mixer::read (void *ptr, size_t& len) +{ + len = -1; + set_errno (EINVAL); +} + +int +fhandler_dev_mixer::open (int flags, mode_t) +{ + int ret = -1, err = 0; + switch (flags & O_ACCMODE) + { + case O_RDWR: + case O_WRONLY: + case O_RDONLY: + if (waveInGetNumDevs () == 0 && waveOutGetNumDevs () == 0) + err = ENXIO; + break; + default: + err = EINVAL; + } + + if (err) + set_errno (err); + else + { + ret = open_null (flags); + rec_source = SOUND_MIXER_MIC; + } + + return ret; +} + +static DWORD +volume_oss_to_winmm (int vol_oss) +{ + unsigned int vol_l, vol_r; + DWORD vol_winmm; + + vol_l = ((unsigned int) vol_oss) & 0xff; + vol_r = ((unsigned int) vol_oss) >> 8; + vol_l = min ((vol_l * 65535 + 50) / 100, 65535); + vol_r = min ((vol_r * 65535 + 50) / 100, 65535); + vol_winmm = (vol_r << 16) | vol_l; + + return vol_winmm; +} + +static int +volume_winmm_to_oss (DWORD vol_winmm) +{ + int vol_l, vol_r; + + vol_l = vol_winmm & 0xffff; + vol_r = vol_winmm >> 16; + vol_l = min ((vol_l * 100 + 32768) / 65535, 100); + vol_r = min ((vol_r * 100 + 32768) / 65535, 100); + return (vol_r << 8) | vol_l; +} + +int +fhandler_dev_mixer::ioctl (unsigned int cmd, void *buf) +{ + int ret = 0; + DWORD id, flag; + DWORD vol; + WAVEOUTCAPS woc; + switch (cmd) + { + case SOUND_MIXER_READ_DEVMASK: + *(int *) buf = SOUND_MASK_VOLUME | SOUND_MASK_MIC | SOUND_MASK_LINE; + break; + case SOUND_MIXER_READ_RECMASK: + *(int *) buf = SOUND_MASK_MIC | SOUND_MASK_LINE; + break; + case SOUND_MIXER_READ_STEREODEVS: + *(int *) buf = SOUND_MASK_VOLUME | SOUND_MASK_LINE; + break; + case SOUND_MIXER_READ_CAPS: + *(int *) buf = SOUND_CAP_EXCL_INPUT; + break; + case MIXER_WRITE (SOUND_MIXER_RECSRC): + /* Dummy implementation */ + if (*(int *) buf == 0 || ((*(int *) buf) & SOUND_MASK_MIC)) + rec_source = SOUND_MIXER_MIC; + else if ((*(int *) buf) & SOUND_MASK_LINE) + rec_source = SOUND_MIXER_LINE; + break; + case MIXER_READ (SOUND_MIXER_RECSRC): + /* Dummy implementation */ + *(int *) buf = 1 << rec_source; + break; + case MIXER_WRITE (SOUND_MIXER_VOLUME): + waveOutMessage ((HWAVEOUT)WAVE_MAPPER, DRVM_MAPPER_PREFERRED_GET, + (DWORD_PTR)&id, (DWORD_PTR)&flag); + waveOutGetDevCaps ((UINT)id, &woc, sizeof (woc)); + vol = volume_oss_to_winmm (*(int *) buf); + if (!(woc.dwSupport & WAVECAPS_LRVOLUME)) + vol = max(vol & 0xffff, (vol >> 16) & 0xffff); + if (waveOutSetVolume ((HWAVEOUT)WAVE_MAPPER, vol) != MMSYSERR_NOERROR) + { + set_errno (EINVAL); + ret = -1; + } + break; + case MIXER_READ (SOUND_MIXER_VOLUME): + waveOutMessage ((HWAVEOUT)WAVE_MAPPER, DRVM_MAPPER_PREFERRED_GET, + (DWORD_PTR)&id, (DWORD_PTR)&flag); + waveOutGetDevCaps ((UINT)id, &woc, sizeof (woc)); + if (waveOutGetVolume ((HWAVEOUT)WAVE_MAPPER, &vol) != MMSYSERR_NOERROR) + { + set_errno (EINVAL); + ret = -1; + break; + } + if (!(woc.dwSupport & WAVECAPS_LRVOLUME)) + vol |= (vol & 0xffff) << 16; + *(int *) buf = volume_winmm_to_oss (vol); + break; + default: + for (int i = 0; i < SOUND_MIXER_NRDEVICES; i++) + { + if (cmd == (unsigned int) MIXER_WRITE (i)) + goto out; + if (cmd == (unsigned int) MIXER_READ (i)) + { + *(int *) buf = 0; + goto out; + } + } + set_errno (EINVAL); + ret = -1; + break; + } +out: + return ret; +} diff --git a/winsup/cygwin/fhandler/pipe.cc b/winsup/cygwin/fhandler/pipe.cc index c47226bea0..8077082ee1 100644 --- a/winsup/cygwin/fhandler/pipe.cc +++ b/winsup/cygwin/fhandler/pipe.cc @@ -13,6 +13,7 @@ details. */ #include "security.h" #include "path.h" #include "fhandler.h" +#include "select.h" #include "dtable.h" #include "cygheap.h" #include "pinfo.h" @@ -53,13 +54,14 @@ fhandler_pipe::set_pipe_non_blocking (bool nonblocking) NTSTATUS status; IO_STATUS_BLOCK io; FILE_PIPE_INFORMATION fpi; + bool was_blocking_read_pipe_new = was_blocking_read_pipe; if (get_device () == FH_PIPER && nonblocking && !was_blocking_read_pipe) { status = NtQueryInformationFile (get_handle (), &io, &fpi, sizeof fpi, FilePipeInformation); if (NT_SUCCESS (status)) - was_blocking_read_pipe = + was_blocking_read_pipe_new = (fpi.CompletionMode == FILE_PIPE_QUEUE_OPERATION); } @@ -70,6 +72,11 @@ fhandler_pipe::set_pipe_non_blocking (bool nonblocking) FilePipeInformation); if (!NT_SUCCESS (status)) debug_printf ("NtSetInformationFile(FilePipeInformation): %y", status); + else + { + was_blocking_read_pipe = was_blocking_read_pipe_new; + is_blocking_read_pipe = !nonblocking; + } } int @@ -259,9 +266,9 @@ fhandler_pipe::fadvise (off_t offset, off_t length, int advice) } int -fhandler_pipe::ftruncate (off_t length, bool allow_truncate) +fhandler_pipe::fallocate (int mode, off_t offset, off_t length) { - return allow_truncate ? EINVAL : ESPIPE; + return (mode & __FALLOC_FL_TRUNCATE) ? EINVAL : ESPIPE; } char * @@ -299,6 +306,9 @@ fhandler_pipe::raw_read (void *ptr, size_t& len) if (!len) return; + if (is_blocking_read_pipe) + set_pipe_non_blocking (true); + DWORD timeout = is_nonblocking () ? 0 : INFINITE; DWORD waitret = cygwait (read_mtx, timeout); switch (waitret) @@ -429,6 +439,7 @@ fhandler_pipe_fifo::raw_write (const void *ptr, size_t len) NTSTATUS status = STATUS_SUCCESS; IO_STATUS_BLOCK io; HANDLE evt; + bool short_write_once = false; if (!len) return 0; @@ -467,6 +478,7 @@ fhandler_pipe_fifo::raw_write (const void *ptr, size_t len) len1 = chunk; else len1 = (ULONG) left; + /* NtWriteFile returns success with # of bytes written == 0 if writing on a non-blocking pipe fails because the pipe buffer doesn't have sufficient space. @@ -494,9 +506,16 @@ fhandler_pipe_fifo::raw_write (const void *ptr, size_t len) (PVOID) ptr, len1, NULL, NULL); if (status == STATUS_PENDING) { - while (WAIT_TIMEOUT == - (waitret = cygwait (evt, (DWORD) 0, cw_cancel | cw_sig))) + do { + /* To allow constant reader_closed() checking even if the + signal has been set up with SA_RESTART, we're handling + the signal here --> cw_sig_eintr. */ + waitret = cygwait (evt, (DWORD) 0, cw_cancel | cw_sig_eintr); + /* Break out if no SA_RESTART. */ + if (waitret == WAIT_SIGNALED + && !_my_tls.call_signal_handler ()) + break; if (reader_closed ()) { CancelIo (get_handle ()); @@ -504,9 +523,20 @@ fhandler_pipe_fifo::raw_write (const void *ptr, size_t len) raise (SIGPIPE); goto out; } - else - cygwait (select_sem, 10); + /* Break out on completion */ + if (waitret == WAIT_OBJECT_0) + break; + /* If we got a timeout in the blocking case, and we already + did a short write, we got a signal in the previous loop. */ + if (waitret == WAIT_TIMEOUT && short_write_once) + { + waitret = WAIT_SIGNALED; + break; + } + cygwait (select_sem, 10, cw_cancel); } + /* Loop in case of blocking write or SA_RESTART */ + while (waitret == WAIT_TIMEOUT || waitret == WAIT_SIGNALED); /* If io.Status is STATUS_CANCELLED after CancelIo, IO has actually been cancelled and io.Information contains the number of bytes processed so far. @@ -520,13 +550,38 @@ fhandler_pipe_fifo::raw_write (const void *ptr, size_t len) status = STATUS_THREAD_CANCELED; else if (waitret == WAIT_SIGNALED) status = STATUS_THREAD_SIGNALED; + else if (waitret == WAIT_TIMEOUT && io.Status == STATUS_CANCELLED) + status = STATUS_SUCCESS; else status = io.Status; } - if (!is_nonblocking () || !NT_SUCCESS (status) || io.Information > 0 - || len <= PIPE_BUF) + if (status != STATUS_THREAD_SIGNALED && !NT_SUCCESS (status)) break; - len1 >>= 1; + if (io.Information > 0 || len <= PIPE_BUF || short_write_once) + break; + /* Independent of being blocking or non-blocking, if we're here, + the pipe has less space than requested. If the pipe is a + non-Cygwin pipe, just try the old strategy of trying a half + write. If the pipe has at + least PIPE_BUF bytes available, try to write all matching + PIPE_BUF sized blocks. If it's less than PIPE_BUF, try + the next less power of 2 bytes. This is not really the Linux + strategy because Linux is filling the pages of a pipe buffer + in a very implementation-defined way we can't emulate, but it + resembles it closely enough to get useful results. */ + ssize_t avail = pipe_data_available (-1, this, get_handle (), + PDA_WRITE); + if (avail < 1) /* error or pipe closed */ + break; + if (avail > len1) /* somebody read from the pipe */ + avail = len1; + if (avail == 1) /* 1 byte left or non-Cygwin pipe */ + len1 >>= 1; + else if (avail >= PIPE_BUF) + len1 = avail & ~(PIPE_BUF - 1); + else + len1 = 1 << (31 - __builtin_clzl (avail)); + short_write_once = true; } if (isclosed ()) /* A signal handler might have closed the fd. */ { @@ -556,7 +611,7 @@ fhandler_pipe_fifo::raw_write (const void *ptr, size_t len) else __seterrno_from_nt_status (status); - if (nbytes_now == 0) + if (nbytes_now == 0 || short_write_once) break; } out: @@ -1219,15 +1274,9 @@ fhandler_pipe::temporary_query_hdl () &pipename_key, &pipename_pid, &pipename_id) != 3) return NULL; /* Non cygwin pipe? */ - if (wincap.has_query_process_handle_info ()) - return get_query_hdl_per_process (name, ntfn); /* Since Win8 */ - else - return get_query_hdl_per_system (name, ntfn); /* Win7 */ + return get_query_hdl_per_process (name, ntfn); /* Since Win8 */ } -/* This function is faster than get_query_hdl_per_system(), however, - only works since Windows 8 because ProcessHandleInformation is not - suppoted by NtQueryInformationProcess() before Windows 8. */ HANDLE fhandler_pipe::get_query_hdl_per_process (WCHAR *name, OBJECT_NAME_INFORMATION *ntfn) @@ -1325,77 +1374,6 @@ fhandler_pipe::get_query_hdl_per_process (WCHAR *name, return NULL; } -/* This function is slower than get_query_hdl_per_process(), however, - works even before Windows 8. */ -HANDLE -fhandler_pipe::get_query_hdl_per_system (WCHAR *name, - OBJECT_NAME_INFORMATION *ntfn) -{ - NTSTATUS status; - SIZE_T n_handle = 65536; - PSYSTEM_HANDLE_INFORMATION shi; - do - { /* Enumerate handles */ - SIZE_T nbytes = - sizeof (ULONG) + n_handle * sizeof (SYSTEM_HANDLE_TABLE_ENTRY_INFO); - shi = (PSYSTEM_HANDLE_INFORMATION) HeapAlloc (GetProcessHeap (), - 0, nbytes); - if (!shi) - return NULL; - status = NtQuerySystemInformation (SystemHandleInformation, - shi, nbytes, NULL); - if (NT_SUCCESS (status)) - break; - HeapFree (GetProcessHeap (), 0, shi); - n_handle *= 2; - } - while (n_handle < (1L<<23) && status == STATUS_INFO_LENGTH_MISMATCH); - if (!NT_SUCCESS (status)) - return NULL; - - for (LONG i = (LONG) shi->NumberOfHandles - 1; i >= 0; i--) - { - /* Check for the peculiarity of cygwin read pipe */ - const ULONG access = FILE_READ_DATA | FILE_READ_EA - | FILE_WRITE_EA /* marker */ - | FILE_READ_ATTRIBUTES | FILE_WRITE_ATTRIBUTES - | READ_CONTROL | SYNCHRONIZE; - if (shi->Handles[i].GrantedAccess != access) - continue; - - /* Retrieve handle */ - HANDLE proc = OpenProcess (PROCESS_DUP_HANDLE, 0, - shi->Handles[i].UniqueProcessId); - if (!proc) - continue; - HANDLE h = (HANDLE)(intptr_t) shi->Handles[i].HandleValue; - BOOL res = DuplicateHandle (proc, h, GetCurrentProcess (), &h, - FILE_READ_DATA, 0, 0); - if (!res) - goto close_proc; - - /* Check object name */ - ULONG len; - status = NtQueryObject (h, ObjectNameInformation, ntfn, 65536, &len); - if (!NT_SUCCESS (status) || !ntfn->Name.Buffer) - goto close_handle; - ntfn->Name.Buffer[ntfn->Name.Length / sizeof (WCHAR)] = L'\0'; - if (wcscmp (name, ntfn->Name.Buffer) == 0) - { - query_hdl_proc = proc; - query_hdl_value = (HANDLE)(intptr_t) shi->Handles[i].HandleValue; - HeapFree (GetProcessHeap (), 0, shi); - return h; - } -close_handle: - CloseHandle (h); -close_proc: - CloseHandle (proc); - } - HeapFree (GetProcessHeap (), 0, shi); - return NULL; -} - void fhandler_pipe::spawn_worker (int fileno_stdin, int fileno_stdout, int fileno_stderr) @@ -1421,6 +1399,7 @@ fhandler_pipe::spawn_worker (int fileno_stdin, int fileno_stdout, { fhandler_pipe *pipe = (fhandler_pipe *)(fhandler_base *) cfd; pipe->set_pipe_non_blocking (false); + need_send_noncygchld_sig = true; } /* If multiple writers including non-cygwin app exist, the non-cygwin @@ -1446,3 +1425,21 @@ fhandler_pipe::spawn_worker (int fileno_stdin, int fileno_stdout, t->kill_pgrp (__SIGNONCYGCHLD); } } + +void +fhandler_pipe::sigproc_worker (void) +{ + cygheap_fdenum cfd (false); + while (cfd.next () >= 0) + if (cfd->get_dev () == FH_PIPEW) + { + fhandler_pipe *pipe = (fhandler_pipe *)(fhandler_base *) cfd; + if (pipe->need_close_query_hdl ()) + pipe->close_query_handle (); + } + else if (cfd->get_dev () == FH_PIPER) + { + fhandler_pipe *pipe = (fhandler_pipe *)(fhandler_base *) cfd; + pipe->is_blocking_read_pipe = true; + } +} diff --git a/winsup/cygwin/fhandler/proc.cc b/winsup/cygwin/fhandler/proc.cc index 92bcc564dd..fcd64417f4 100644 --- a/winsup/cygwin/fhandler/proc.cc +++ b/winsup/cygwin/fhandler/proc.cc @@ -11,6 +11,7 @@ details. */ #include #include #include +#include #include "cygerrno.h" #include "security.h" #include "path.h" @@ -49,16 +50,20 @@ static off_t format_proc_filesystems (void *, char *&); static off_t format_proc_swaps (void *, char *&); static off_t format_proc_devices (void *, char *&); static off_t format_proc_misc (void *, char *&); +static off_t format_proc_locales (void *, char *&); +static off_t format_proc_codesets (void *, char *&); /* names of objects in /proc */ static const virt_tab_t proc_tab[] = { { _VN ("."), FH_PROC, virt_directory, NULL }, { _VN (".."), FH_PROC, virt_directory, NULL }, + { _VN ("codesets"), FH_PROC, virt_file, format_proc_codesets }, { _VN ("cpuinfo"), FH_PROC, virt_file, format_proc_cpuinfo }, { _VN ("cygdrive"), FH_PROC, virt_symlink, format_proc_cygdrive }, { _VN ("devices"), FH_PROC, virt_file, format_proc_devices }, { _VN ("filesystems"), FH_PROC, virt_file, format_proc_filesystems }, { _VN ("loadavg"), FH_PROC, virt_file, format_proc_loadavg }, + { _VN ("locales"), FH_PROC, virt_file, format_proc_locales }, { _VN ("meminfo"), FH_PROC, virt_file, format_proc_meminfo }, { _VN ("misc"), FH_PROC, virt_file, format_proc_misc }, { _VN ("mounts"), FH_PROC, virt_symlink, format_proc_mounts }, @@ -650,7 +655,6 @@ format_proc_cpuinfo (void *, char *&destbuf) char *buf = tp.c_get (); char *bufptr = buf; - //WORD num_cpu_groups = 1; /* Pre Windows 7, only one group... */ WORD num_cpu_per_group = __get_cpus_per_group (); cpu_num_p = wcpcpy (cpu_key, L"\\Registry\\Machine\\HARDWARE\\DESCRIPTION" @@ -1380,8 +1384,8 @@ format_proc_cpuinfo (void *, char *&destbuf) ftcprint (features2, 0, "perfmon_v2"); /* Performance Monitoring Version 2 */ } - /* cpuid 0x80000008 ebx */ - if (maxe >= 0x80000008) + /* AMD cpuid 0x80000008 ebx */ + if (is_amd && maxe >= 0x80000008) { /* cpuid (&unused, &features1, &unused, &unused, 0x80000008, 0); */ /* from above ^ */ @@ -1391,16 +1395,19 @@ format_proc_cpuinfo (void *, char *&destbuf) /* ftcprint (features1, 4, "rdpru"); *//* user level rd proc reg */ /* ftcprint (features1, 6, "mba"); *//* memory BW alloc */ /* ftcprint (features1, 9, "wbnoinvd"); *//* wbnoinvd instruction */ - ftcprint (features1, 14, "ibrs"); /* ind br restricted spec */ ftcprint (features1, 12, "ibpb"); /* ind br pred barrier */ + ftcprint (features1, 14, "ibrs"); /* ind br restricted spec */ ftcprint (features1, 15, "stibp"); /* 1 thread ind br pred */ - ftcprint (features1, 16, "ibrs_enhanced"); /* IBRS_ALL enhanced IBRS always on */ + ftcprint (features1, 16, "ibrs_enhanced"); /* ibrs_enhanced IBRS always on */ /* ftcprint (features1, 17, "stibp_always_on"); */ /* stibp always on */ -/* ftcprint (features1, 18, "ibrs_pref");*//* IBRS_PREF IBRS preferred */ +/* ftcprint (features1, 18, "ibrs_pref");*//* ibrs_pref IBRS preferred */ /* ftcprint (features1, 23, "amd_ppin"); *//* protected proc id no */ /* ftcprint (features1, 24, "ssbd"); *//* spec store byp dis */ /* ftcprint (features1, 25, "virt_ssbd");*//* vir spec store byp dis */ /* ftcprint (features1, 26, "ssb_no"); *//* ssb fixed in hardware */ +/* ftcprint (features1, 27, "cppc"); *//* collab proc perf ctl */ +/* ftcprint (features1, 28, "amd_psfd"); *//* predictive store fwd dis */ +/* ftcprint (features1, 31, "brs"); *//* branch sampling */ } /* cpuid 0x00000021 ebx|edx|ecx == "IntelTDX " */ @@ -1479,6 +1486,14 @@ format_proc_cpuinfo (void *, char *&destbuf) /* ftcprint (features1, 6, "split_lock_detect");*//* MSR_TEST_CTRL split lock */ + /* Windows [20]20H1/[20]2004/19041 user shadow stack */ + if (maxf >= 0x00000007 && wincap.has_user_shstk ()) + { + /* cpuid 0x00000007 ecx CET shadow stack */ + cpuid (&unused, &unused, &features1, &unused, 0x00000007, 0); + ftcprint (features1, 7, "user_shstk"); /* user shadow stack */ + } + /* cpuid 0x00000007:1 eax */ if (maxf >= 0x00000007) { @@ -1486,6 +1501,11 @@ format_proc_cpuinfo (void *, char *&destbuf) ftcprint (features1, 4, "avx_vnni"); /* vex enc NN vec */ ftcprint (features1, 5, "avx512_bf16"); /* vec bfloat16 short */ +/* ftcprint (features1, 7, "cmpccxadd"); */ /* CMPccXADD instructions */ +/* ftcprint (features1, 18, "lkgs"); */ /* load kernel (userspace) GS */ +/* ftcprint (features1, 21, "amx_fp16"); */ /* AMX fp16 Support */ +/* ftcprint (features1, 23, "avx_ifma"); */ /* Support for VPMADD52[H,L]UQ */ + ftcprint (features1, 26, "lam"); /* Linear Address Masking */ } /* AMD cpuid 0x80000008 ebx */ @@ -1502,14 +1522,15 @@ format_proc_cpuinfo (void *, char *&destbuf) /* ftcprint (features1, 12, "ibpb" ); */ /* ind br pred barrier */ /* ftcprint (features1, 14, "ibrs" ); */ /* ind br restricted spec */ /* ftcprint (features1, 15, "stibp"); */ /* 1 thread ind br pred */ -/* ftcprint (features1, 16, "ibrs_enhanced");*//* IBRS_ALL enhanced IBRS always on */ +/* ftcprint (features1, 16, "ibrs_enhanced"); */ /* ibrs_enhanced IBRS always on */ /* ftcprint (features1, 17, "stibp_always_on"); */ /* stibp always on */ -/* ftcprint (features1, 18, "ibrs_pref");*//* IBRS_PREF IBRS preferred */ +/* ftcprint (features1, 18, "ibrs_pref"); */ /* ibrs_pref IBRS preferred */ ftcprint (features1, 23, "amd_ppin"); /* protected proc id no */ /* ftcprint (features1, 24, "ssbd"); */ /* spec store byp dis */ ftcprint (features1, 25, "virt_ssbd"); /* vir spec store byp dis */ /* ftcprint (features1, 26, "ssb_no"); */ /* ssb fixed in hardware */ ftcprint (features1, 27, "cppc"); /* collab proc perf ctl */ +/* ftcprint (features1, 28, "amd_psfd"); */ /* predictive store fwd dis */ ftcprint (features1, 31, "brs"); /* branch sampling */ } @@ -1550,6 +1571,7 @@ format_proc_cpuinfo (void *, char *&destbuf) ftcprint (features1, 15, "v_vmsave_vmload"); /* virt vmsave vmload */ ftcprint (features1, 16, "vgif"); /* virt glb int flag */ ftcprint (features1, 20, "v_spec_ctrl"); /* virt spec ctrl support */ + ftcprint (features1, 25, "vnmi"); /* virt NMI */ /* ftcprint (features1, 28, "svme_addr_chk"); *//* secure vmexit addr check */ } @@ -1564,6 +1586,7 @@ format_proc_cpuinfo (void *, char *&destbuf) ftcprint (features1, 4, "ospke"); /* OS prot keys en */ ftcprint (features1, 5, "waitpkg"); /* umon/umwait/tpause */ ftcprint (features1, 6, "avx512_vbmi2"); /* vec bit manip 2 */ +/* ftcprint (features1, 7, "shstk"); */ /* Shadow stack */ ftcprint (features1, 8, "gfni"); /* Galois field instr */ ftcprint (features1, 9, "vaes"); /* vector AES */ ftcprint (features1, 10, "vpclmulqdq"); /* nc mul dbl quad */ @@ -1629,7 +1652,7 @@ format_proc_cpuinfo (void *, char *&destbuf) /* ftcprint (features2, 11, "sev_64b");*//* SEV 64 bit host guest only */ /* ftcprint (features2, 12, "sev_rest_inj"); *//* SEV restricted injection */ /* ftcprint (features2, 13, "sev_alt_inj"); *//* SEV alternate injection */ -/* ftcprint (features2, 14, "sev_es_dbg_swap");*//* SEV-ES debug state swap */ + ftcprint (features2, 14, "debug_swap"); /* SEV-ES full debug state swap */ /* ftcprint (features2, 15, "no_host_ibs"); *//* host IBS unsupported */ /* ftcprint (features2, 16, "vte"); *//* virtual transparent encryption */ } @@ -2068,4 +2091,296 @@ format_proc_misc (void *, char *&destbuf) return bufptr - buf; } +static char * +add_locale (char *bufptr, const char *posix_locale, const char *codeset, + bool explicit_utf8, const char *modifier, const wchar_t *win_locale) +{ + const char *start = bufptr; + bufptr = stpcpy (bufptr, posix_locale); + if (explicit_utf8) + bufptr = stpcpy (bufptr, ".utf8"); + if (modifier && modifier[0]) + bufptr = stpcpy (bufptr, modifier); + if (bufptr - start < 16) + { + if (bufptr - start < 8) + bufptr = stpcpy (bufptr, "\t"); + bufptr = stpcpy (bufptr, "\t"); + } + bufptr = stpcpy (bufptr, "\t"); + start = bufptr; + bufptr = stpcpy (bufptr, codeset); + if (win_locale && win_locale[0]) + { + if (bufptr - start < 16) + { + if (bufptr - start < 8) + bufptr = stpcpy (bufptr, "\t"); + bufptr = stpcpy (bufptr, "\t"); + } + bufptr = stpcpy (bufptr, "\t"); + bufptr += wcstombs (bufptr, win_locale, wcslen (win_locale) * 2); + } + bufptr = stpcpy (bufptr, "\n"); + return bufptr; +} + +static BOOL +format_proc_locale_proc (LPWSTR win_locale, DWORD info, LPARAM param) +{ + char **bufptr_p = (char **) param; + wchar_t iso15924_postfix[ENCODING_LEN + 1] = { 0 }; + wchar_t iso15924[ENCODING_LEN + 1] = { 0 }; + wchar_t iso3166[ENCODING_LEN + 1] = { 0 }; + wchar_t iso639[ENCODING_LEN + 1] = { 0 }; + wchar_t currency[9] = { 0 }; + char modifier[ENCODING_LEN + 1] = { 0 }; + char posix_loc[ENCODING_LEN + 1]; + char posix_loc_and_modifier[ENCODING_LEN + 1]; + char codeset[ENCODING_LEN + 1]; + wchar_t *cp; + + /* Skip language-only locales, e. g. "en" */ + if (!(cp = wcschr (win_locale, L'-'))) + return TRUE; + ++cp; + /* Script inside? Scripts are Upper/Lower, e. g. "Latn" */ + if (iswupper (cp[0]) && iswlower (cp[1])) + { + wchar_t *cp2; + + /* Skip language-Script locales, missing country */ + if (!(cp2 = wcschr (cp + 2, L'-'))) + return TRUE; + /* Otherwise, store in iso15924 */ + wcpcpy (wcpncpy (iso15924, cp, cp2 - cp), L";"); + } + cp = wcsrchr (win_locale, L'-'); + if (cp) + { + /* Skip numeric iso3166 country name. */ + if (iswdigit (cp[1])) + return TRUE; + /* Special case postfix after iso3166 country name: ca-ES-valencia. + Use the postfix thingy as script so it will become a @modifier */ + if (iswlower (cp[1])) + wcpcpy (iso15924_postfix, cp + 1); + } + + if (!GetLocaleInfoEx (win_locale, LOCALE_SISO639LANGNAME, iso639, 10)) + return TRUE; + GetLocaleInfoEx (win_locale, LOCALE_SISO3166CTRYNAME, iso3166, 10); + + snprintf (posix_loc, sizeof posix_loc, "%.3ls_%.3ls", iso639, iso3166); + /* Inuktitut: equivalent @latin due to lack of info on Linux */ + if (!wcscmp (iso639, L"iu")) + { + if (wcscmp (iso15924, L"Latn;")) + return TRUE; + } + /* Javanese: only use @latin locale. */ + else if (!wcscmp (iso639, L"jv")) + { + if (wcscmp (iso15924, L"Latn;")) + return TRUE; + } + /* Mongolian: only use @mongolian locale. */ + else if (!wcscmp (iso639, L"mn")) + { + if (wcscmp (iso15924, L"Mong;")) + return TRUE; + } + /* Serbian: Windows default is Latin, Linux default is Cyrillic. + We want the Linux default and attach @latin otherwise */ + else if (!wcscmp (iso639, L"sr")) + { + snprintf (posix_loc, sizeof posix_loc, "sr_%.27ls", iso3166); + if (!wcscmp (iso15924, L"Latn;")) + stpcpy (modifier, "@latin"); + } + /* Tamazight: no modifier, iso639 is "ber" on Linux. + "zgh-Tfng-MA" is equivalent to "ber_MA". */ + else if (!wcscmp (iso639, L"zgh")) + snprintf (posix_loc, sizeof posix_loc, "ber_%.27ls", iso3166); + /* Tamazight: "tzm-Latn-DZ" is equivalent to "ber_DZ", + skip everything else. */ + else if (!wcscmp (iso639, L"tzm")) + { + if (!wcscmp (iso3166, L"DZ") && !wcscmp (iso15924, L"Latn;")) + snprintf (posix_loc, sizeof posix_loc, "ber_%.27ls", iso3166); + else + return TRUE; + } + /* "sd-IN" is no valid Windows locale, only "sd-Deva-IN" is. However, + asking for LOCALE_SSCRIPTS below returns "Arab;" because the first "sd" + locale Windows finds is "sd-Arab-PK", so we have to override this here. */ + else if (!wcscmp (iso639, L"sd") && !wcscmp (iso3166, L"IN")) + strcpy (posix_loc, "sd_IN"); + /* In all other cases, we check if the script from the Windows + locale is the default locale in that language. If not, we + add it as modifier if possible, or skip it */ + else if (iso15924[0]) + { + wchar_t scriptless_win_locale[ENCODING_LEN + 1]; + wchar_t default_iso15924[ENCODING_LEN + 1]; + + wcpcpy (wcpcpy (wcpcpy (scriptless_win_locale, iso639), L"-"), + iso3166); + if ((GetLocaleInfoEx (scriptless_win_locale, LOCALE_SSCRIPTS, + default_iso15924, ENCODING_LEN + 1) + || GetLocaleInfoEx (iso639, LOCALE_SSCRIPTS, + default_iso15924, ENCODING_LEN + 1)) + && !wcsstr (default_iso15924, iso15924)) + { + if (!wcscmp (iso15924, L"Latn;")) + stpcpy (modifier, "@latin"); + else if (!wcscmp (iso15924, L"Cyrl;")) + stpcpy (modifier, "@cyrillic"); + else if (!wcscmp (iso15924, L"Deva;")) + stpcpy (modifier, "@devanagari"); + else if (!wcscmp (iso15924, L"Adlm;")) + stpcpy (modifier, "@adlam"); + else + return TRUE; + } + } + else if (iso15924_postfix[0]) + { + modifier[0] = '@'; + wcstombs (modifier + 1, iso15924_postfix, 31); + } + + stpcpy (stpcpy (posix_loc_and_modifier, posix_loc), modifier); + __set_charset_from_locale (posix_loc_and_modifier, codeset); + *bufptr_p = add_locale (*bufptr_p, posix_loc, codeset, false, modifier, + win_locale); + if (strcmp (codeset, "UTF-8") != 0) + *bufptr_p = add_locale (*bufptr_p, posix_loc, "UTF-8", true, modifier, + win_locale); + + /* Only one cross each */ + if (modifier[0]) + return TRUE; + + /* Check for locales sporting an additional modifier for + changing the codeset and other stuff. */ + if (!wcscmp (iso639, L"be") && !wcscmp (iso3166, L"BY")) + stpcpy (modifier, "@latin"); + else if (!wcscmp (iso639, L"tt") && !wcscmp (iso3166, L"RU")) + stpcpy (modifier, "@iqtelif"); + else if (!wcscmp (iso639, L"sd") && !wcscmp (iso3166, L"IN")) + stpcpy (modifier, "@devanagari"); + /* If the base locale is ISO-8859-1 and the locale defines currency + as EUR, add a @euro locale. For historical reasons there's also + a greek @euro locale, albeit it doesn't change the codeset. */ + else if ((!strcmp (codeset, "ISO-8859-1") + || !strcmp (posix_loc, "el_GR")) + && GetLocaleInfoEx (win_locale, LOCALE_SINTLSYMBOL, currency, 9) + && !wcsncmp (currency, L"EUR", 3)) + stpcpy (modifier, "@euro"); + else if (!wcscmp (iso639, L"ja") + || !wcscmp (iso639, L"ko") + || !wcscmp (iso639, L"zh")) + stpcpy (modifier, "@cjknarrow"); + else + return TRUE; + + stpcpy (stpcpy (posix_loc_and_modifier, posix_loc), modifier); + __set_charset_from_locale (posix_loc_and_modifier, codeset); + *bufptr_p = add_locale (*bufptr_p, posix_loc, codeset, false, modifier, + win_locale); + if (strcmp (codeset, "UTF-8") != 0 && strcmp (modifier, "@euro") != 0) + *bufptr_p = add_locale (*bufptr_p, posix_loc, "UTF-8", true, modifier, + win_locale); + + return TRUE; +} + +static off_t +format_proc_locales (void *, char *&destbuf) +{ + tmp_pathbuf tp; + char *buf = tp.t_get (); + char *bufptr = buf; + + bufptr = stpcpy (bufptr, "Locale:\t\t\tCodeset:\t\tWindows-Locale:\n"); + bufptr = add_locale (bufptr, "C", "ANSI_X3.4-1968", false, NULL, NULL); + bufptr = add_locale (bufptr, "C", "UTF-8", true, NULL, NULL); + bufptr = add_locale (bufptr, "POSIX", "ANSI_X3.4-1968", false, NULL, NULL); + + EnumSystemLocalesEx (format_proc_locale_proc, + LOCALE_WINDOWS | LOCALE_SUPPLEMENTAL, + (LPARAM) &bufptr, NULL); + + destbuf = (char *) crealloc_abort (destbuf, bufptr - buf); + memcpy (destbuf, buf, bufptr - buf); + return bufptr - buf; +} + +static off_t +format_proc_codesets (void *, char *&destbuf) +{ + tmp_pathbuf tp; + char *buf = tp.c_get (); + char *bufptr = stpcpy (buf, + "ASCII\n" + "BIG5\n" + "CP1125\n" + "CP1250\n" + "CP1251\n" + "CP1252\n" + "CP1253\n" + "CP1254\n" + "CP1255\n" + "CP1256\n" + "CP1257\n" + "CP1258\n" + "CP437\n" + "CP720\n" + "CP737\n" + "CP775\n" + "CP850\n" + "CP852\n" + "CP855\n" + "CP857\n" + "CP858\n" + "CP862\n" + "CP866\n" + "CP874\n" + "CP932\n" + "EUC-CN\n" + "EUC-JP\n" + "EUC-KR\n" + "GB18030\n" + "GB2312\n" + "GBK\n" + "GEORGIAN-PS\n" + "ISO-8859-1\n" + "ISO-8859-10\n" + "ISO-8859-11\n" + "ISO-8859-13\n" + "ISO-8859-14\n" + "ISO-8859-15\n" + "ISO-8859-16\n" + "ISO-8859-2\n" + "ISO-8859-3\n" + "ISO-8859-4\n" + "ISO-8859-5\n" + "ISO-8859-6\n" + "ISO-8859-7\n" + "ISO-8859-8\n" + "ISO-8859-9\n" + "KOI8-R\n" + "KOI8-T\n" + "KOI8-U\n" + "PT154\n" + "SJIS\n" + "TIS-620\n" + "UTF-8\n"); + + destbuf = (char *) crealloc_abort (destbuf, bufptr - buf); + memcpy (destbuf, buf, bufptr - buf); + return bufptr - buf; +} + #undef print diff --git a/winsup/cygwin/fhandler/process.cc b/winsup/cygwin/fhandler/process.cc index eab9673e5b..a63030b65c 100644 --- a/winsup/cygwin/fhandler/process.cc +++ b/winsup/cygwin/fhandler/process.cc @@ -468,7 +468,7 @@ static off_t format_process_ctty (void *data, char *&destbuf) { _pinfo *p = (_pinfo *) data; - if (p->ctty < 0) + if (!CTTY_IS_VALID (p->ctty)) { destbuf = (char *) crealloc_abort (destbuf, 2); return __small_sprintf (destbuf, "\n"); @@ -860,8 +860,11 @@ format_process_maps (void *data, char *&destbuf) /* The heap info on the cygheap is also in the same spot in each process because the cygheap is located at the same address. */ user_heap_info user_heap; + shared_region_info region_info; ReadProcessMemory (proc, &cygheap->user_heap, &user_heap, sizeof user_heap, NULL); + ReadProcessMemory (proc, &cygheap->shared_regions, ®ion_info, + sizeof region_info, NULL); off_t len = 0; @@ -1060,12 +1063,14 @@ format_process_maps (void *data, char *&destbuf) strcpy (posix_modname, "[peb]"); else if (cur.abase == (char *) &SharedUserData) strcpy (posix_modname, "[shared-user-data]"); - else if (cur.abase == (char *) cygwin_shared) + else if (cur.abase == region_info.cygwin_shared_addr) strcpy (posix_modname, "[cygwin-shared]"); - else if (cur.abase == (char *) user_shared) + else if (cur.abase == region_info.user_shared_addr) strcpy (posix_modname, "[cygwin-user-shared]"); - else if (cur.abase == (char *) *proc_pinfo) + else if (cur.abase == region_info.myself_shared_addr) strcpy (posix_modname, "[procinfo]"); + else if (cur.abase == region_info.console_shared_addr) + strcpy (posix_modname, "[cygwin-shared-console]"); else if (cur.abase == (char *) cygheap) strcpy (posix_modname, "[cygheap]"); else if (cur.abase == user_heap.base) @@ -1093,7 +1098,7 @@ format_process_stat (void *data, char *&destbuf) /* ctty maj is 31:16, min is 15:0; tty_nr s/b maj 15:8, min 31:20, 7:0; maj is 31:16 >> 16 & fff << 8; min is 15:0 >> 8 & ff << 20 | & ff */ int tty_nr = 0; - if (p->ctty > 0) + if (CTTY_IS_VALID (p->ctty)) tty_nr = (((p->ctty >> 8) & 0xff) << 20) | (((p->ctty >> 16) & 0xfff) << 8) | (p->ctty & 0xff); diff --git a/winsup/cygwin/fhandler/pty.cc b/winsup/cygwin/fhandler/pty.cc index 17b7b32df7..12a0ab377c 100644 --- a/winsup/cygwin/fhandler/pty.cc +++ b/winsup/cygwin/fhandler/pty.cc @@ -58,7 +58,7 @@ struct pipe_reply { DWORD error; }; -HANDLE attach_mutex; +HANDLE NO_COPY attach_mutex; DWORD acquire_attach_mutex (DWORD t) { @@ -550,8 +550,7 @@ fhandler_pty_master::accept_input () { /* Slave attaches to a different console than master. Therefore reattach here. */ - DWORD resume_pid = - attach_console_temporarily (target_pid, helper_pid); + DWORD resume_pid = attach_console_temporarily (target_pid); cp_to = GetConsoleCP (); resume_from_temporarily_attach (resume_pid); } @@ -768,10 +767,11 @@ fhandler_pty_master::process_slave_output (char *buf, size_t len, int pktmode_on /* pty slave stuff */ -fhandler_pty_slave::fhandler_pty_slave (int unit) +fhandler_pty_slave::fhandler_pty_slave (int unit, dev_t via) : fhandler_pty_common (), inuse (NULL), output_handle_nat (NULL), io_handle_nat (NULL), slave_reading (NULL), num_reader (0) { + dev_referred_via = via; if (unit >= 0) dev ().parse (DEV_PTYS_MAJOR, unit); } @@ -974,7 +974,7 @@ fhandler_pty_slave::open (int flags, mode_t) set_output_handle (to_master_local); if (_major (myself->ctty) == DEV_CONS_MAJOR - && !(!pinfo (myself->ppid) && getenv ("ConEmuPID"))) + && !(!pinfo (myself->ppid) && GetModuleHandle ("ConEmuHk64.dll"))) /* This process is supposed to be a master process which is running on console. Invisible console will be created in primary slave process to prevent overriding code page @@ -1053,6 +1053,8 @@ fhandler_pty_slave::close () fhandler_pty_common::close (); if (!ForceCloseHandle (output_mutex)) termios_printf ("CloseHandle (output_mutex<%p>), %E", output_mutex); + if (!get_ttyp ()->invisible_console_pid && myself->ctty == CTTY_RELEASED) + FreeConsole(); if (get_ttyp ()->invisible_console_pid && !pinfo (get_ttyp ()->invisible_console_pid)) get_ttyp ()->invisible_console_pid = 0; @@ -1616,12 +1618,12 @@ fhandler_pty_slave::dup (fhandler_base *child, int flags) /* This code was added in Oct 2001 for some undisclosed reason. However, setting the controlling tty on a dup causes rxvt to hang when the parent does a dup since the controlling pgid changes. - Specifically testing for -2 (ctty has been setsid'ed) works around - this problem. However, it's difficult to see scenarios in which you - have a dup'able fd, no controlling tty, and not having run setsid. - So, we might want to consider getting rid of the set_ctty in tty-like dup - methods entirely at some point */ - if (myself->ctty != -2) + Specifically testing for CTTY_RELEASED (ctty has been setsid'ed) + works around this problem. However, it's difficult to see scenarios + in which you have a dup'able fd, no controlling tty, and not having + run setsid. So, we might want to consider getting rid of the + set_ctty in tty-like dup methods entirely at some point */ + if (myself->ctty != CTTY_RELEASED) myself->set_ctty (this, flags); report_tty_counts (child, "duped slave", ""); return 0; @@ -1786,7 +1788,7 @@ fhandler_pty_slave::ioctl (unsigned int cmd, void *arg) int fhandler_pty_slave::fstat (struct stat *st) { - fhandler_base::fstat (st); + fhandler_termios::fstat (st); bool to_close = false; if (!input_available_event) @@ -1991,13 +1993,14 @@ fhandler_pty_slave::fchown (uid_t uid, gid_t gid) /******************************************************* fhandler_pty_master */ -fhandler_pty_master::fhandler_pty_master (int unit) +fhandler_pty_master::fhandler_pty_master (int unit, dev_t via) : fhandler_pty_common (), pktmode (0), master_ctl (NULL), master_thread (NULL), from_master_nat (NULL), to_master_nat (NULL), from_slave_nat (NULL), to_slave_nat (NULL), echo_r (NULL), echo_w (NULL), dwProcessId (0), to_master (NULL), from_master (NULL), master_fwd_thread (NULL) { + dev_referred_via = via; if (unit >= 0) dev ().parse (DEV_PTYM_MAJOR, unit); set_name ("/dev/ptmx"); @@ -2121,7 +2124,6 @@ fhandler_pty_master::close () WaitForSingleObject (helper_h_process, INFINITE); CloseHandle (helper_h_process); CloseHandle (helper_goodbye); - helper_pid = 0; helper_h_process = 0; helper_goodbye = NULL; } @@ -2700,7 +2702,7 @@ fhandler_pty_master::pty_master_fwd_thread (const master_fwd_thread_param_t *p) termios_printf ("Started."); for (;;) { - p->ttyp->fwd_last_time = GetTickCount (); + p->ttyp->fwd_last_time = GetTickCount64 (); DWORD n; p->ttyp->fwd_not_empty = ::bytes_available (n, p->from_slave_nat) && n; @@ -2845,7 +2847,7 @@ fhandler_pty_master::pty_master_fwd_thread (const master_fwd_thread_param_t *p) /* Slave attaches to a different console than master. Therefore reattach here. */ DWORD resume_pid = - attach_console_temporarily (target_pid, p->helper_pid); + attach_console_temporarily (target_pid); cp_from = GetConsoleOutputCP (); resume_from_temporarily_attach (resume_pid); } @@ -3002,7 +3004,7 @@ fhandler_pty_master::setup () goto err; if (!attach_mutex) - attach_mutex = CreateMutex (&sa, FALSE, NULL); + attach_mutex = CreateMutex (&sec_none_nih, FALSE, NULL); /* Create master control pipe which allows the master to duplicate the pty pipe handles to processes which deserve it. */ @@ -3033,56 +3035,6 @@ fhandler_pty_master::setup () } WaitForSingleObject (thread_param_copied_event, INFINITE); - if (wincap.has_broken_attach_console () - && _major (myself->ctty) == DEV_CONS_MAJOR - && !(!pinfo (myself->ppid) && getenv ("ConEmuPID"))) - { - HANDLE hello = CreateEvent (&sec_none, true, false, NULL); - HANDLE goodbye = CreateEvent (&sec_none, true, false, NULL); - WCHAR cmd[MAX_PATH]; - path_conv helper ("/bin/cygwin-console-helper.exe"); - size_t len = helper.get_wide_win32_path_len (); - helper.get_wide_win32_path (cmd); - __small_swprintf (cmd + len, L" %p %p", hello, goodbye); - - STARTUPINFOEXW si; - PROCESS_INFORMATION pi; - ZeroMemory (&si, sizeof (si)); - si.StartupInfo.cb = sizeof (STARTUPINFOEXW); - - SIZE_T bytesRequired; - InitializeProcThreadAttributeList (NULL, 1, 0, &bytesRequired); - si.lpAttributeList = (PPROC_THREAD_ATTRIBUTE_LIST) - HeapAlloc (GetProcessHeap (), 0, bytesRequired); - InitializeProcThreadAttributeList (si.lpAttributeList, - 1, 0, &bytesRequired); - HANDLE handles_to_inherit[] = {hello, goodbye}; - UpdateProcThreadAttribute (si.lpAttributeList, - 0, - PROC_THREAD_ATTRIBUTE_HANDLE_LIST, - handles_to_inherit, - sizeof (handles_to_inherit), - NULL, NULL); - if (CreateProcessW (NULL, cmd, &sec_none, &sec_none, - TRUE, EXTENDED_STARTUPINFO_PRESENT, - NULL, NULL, &si.StartupInfo, &pi)) - { - WaitForSingleObject (hello, INFINITE); - CloseHandle (hello); - CloseHandle (pi.hThread); - helper_goodbye = goodbye; - helper_pid = pi.dwProcessId; - helper_h_process = pi.hProcess; - } - else - { - CloseHandle (hello); - CloseHandle (goodbye); - } - DeleteProcThreadAttributeList (si.lpAttributeList); - HeapFree (GetProcessHeap (), 0, si.lpAttributeList); - } - master_fwd_thread = new cygthread (::pty_master_fwd_thread, this, "ptymf"); if (!master_fwd_thread) { @@ -3182,8 +3134,22 @@ fhandler_pty_common::process_opost_output (HANDLE h, const void *ptr, return res; /* Discard write data */ while (towrite) { + ssize_t space = towrite; if (!is_echo) { + IO_STATUS_BLOCK iosb = {{0}, 0}; + FILE_PIPE_LOCAL_INFORMATION fpli = {0}; + NTSTATUS status; + + status = NtQueryInformationFile (h, &iosb, &fpli, sizeof (fpli), + FilePipeLocalInformation); + if (!NT_SUCCESS (status)) + { + if (towrite < len) + break; + len = -1; + return FALSE; + } if (ttyp->output_stopped && is_nonblocking) { if (towrite < len) @@ -3195,13 +3161,18 @@ fhandler_pty_common::process_opost_output (HANDLE h, const void *ptr, return TRUE; } } - while (ttyp->output_stopped) - cygwait (10); + if (ttyp->output_stopped || fpli.WriteQuotaAvailable == 0) + { + cygwait (1); + continue; + } + space = fpli.WriteQuotaAvailable; } if (!(ttyp->ti.c_oflag & OPOST)) // raw output mode { DWORD n = MIN (OUT_BUFFER_SIZE, towrite); + n = MIN (n, space); res = WriteFile (h, ptr, n, &n, NULL); if (!res) break; @@ -3214,7 +3185,7 @@ fhandler_pty_common::process_opost_output (HANDLE h, const void *ptr, char *buf = (char *)ptr; DWORD n = 0; ssize_t rc = 0; - while (n < OUT_BUFFER_SIZE && rc < towrite) + while (n < OUT_BUFFER_SIZE && n < space && rc < towrite) { switch (buf[rc]) { @@ -3896,7 +3867,6 @@ fhandler_pty_master::get_master_fwd_thread_param (master_fwd_thread_param_t *p) p->from_slave_nat = from_slave_nat; p->output_mutex = output_mutex; p->ttyp = get_ttyp (); - p->helper_pid = helper_pid; SetEvent (thread_param_copied_event); } @@ -4172,13 +4142,8 @@ fhandler_pty_slave::cleanup_for_non_cygwin_app (handle_set_t *p, tty *ttyp, DWORD force_switch_to) { ttyp->wait_fwd (); - DWORD current_pid = myself->exec_dwProcessId ?: myself->dwProcessId; - DWORD switch_to = force_switch_to; WaitForSingleObject (p->pipe_sw_mutex, INFINITE); - if (!switch_to) - switch_to = get_console_process_id (current_pid, false, true, true); - if (!switch_to) - switch_to = get_console_process_id (current_pid, false, true, false); + DWORD switch_to = get_winpid_to_hand_over (ttyp, force_switch_to); if ((!switch_to && (ttyp->pcon_activated || stdin_is_ptys)) && ttyp->pty_input_state_eq (tty::to_nat)) { @@ -4231,7 +4196,7 @@ fhandler_pty_slave::setpgid_aux (pid_t pid) 0, TRUE, DUPLICATE_SAME_ACCESS); CloseHandle (pcon_owner); DWORD target_pid = get_ttyp ()->nat_pipe_owner_pid; - resume_pid = attach_console_temporarily (target_pid, 0); + resume_pid = attach_console_temporarily (target_pid); attach_restore = true; } else @@ -4277,15 +4242,12 @@ fhandler_pty_slave::release_ownership_of_nat_pipe (tty *ttyp, } DWORD -fhandler_pty_common::attach_console_temporarily (DWORD target_pid, - DWORD helper_pid) +fhandler_pty_common::attach_console_temporarily (DWORD target_pid) { DWORD resume_pid = 0; acquire_attach_mutex (mutex_timeout); pinfo pinfo_resume (myself->ppid); - if (helper_pid) - resume_pid = helper_pid; - else if (pinfo_resume) + if (pinfo_resume) resume_pid = pinfo_resume->dwProcessId; if (!resume_pid) resume_pid = get_console_process_id (myself->dwProcessId, false); diff --git a/winsup/cygwin/fhandler/socket.cc b/winsup/cygwin/fhandler/socket.cc index f7c5ff6294..c0cef7d3ee 100644 --- a/winsup/cygwin/fhandler/socket.cc +++ b/winsup/cygwin/fhandler/socket.cc @@ -86,7 +86,7 @@ struct __old_ifreq { int fhandler_socket::ioctl (unsigned int cmd, void *p) { - extern int get_ifconf (struct ifconf *ifc, int what); /* net.cc */ + extern int get_ifconf (struct ifconf *ifc, unsigned int what); /* net.cc */ int res; struct ifconf ifc, *ifcp; struct ifreq *ifrp; diff --git a/winsup/cygwin/fhandler/tape.cc b/winsup/cygwin/fhandler/tape.cc index 0e235f16c6..732fd1bb7f 100644 --- a/winsup/cygwin/fhandler/tape.cc +++ b/winsup/cygwin/fhandler/tape.cc @@ -894,9 +894,9 @@ mtinfo_drive::get_status (HANDLE mt, struct mtget *get) } int -mtinfo_drive::set_options (HANDLE mt, int32_t options) +mtinfo_drive::set_options (HANDLE mt, uint32_t options) { - int32_t what = (options & MT_ST_OPTIONS); + uint32_t what = (options & MT_ST_OPTIONS); bool call_setparams = false; bool set; TAPE_SET_DRIVE_PARAMETERS sdp = diff --git a/winsup/cygwin/fhandler/termios.cc b/winsup/cygwin/fhandler/termios.cc index 517e74e774..d106955dcc 100644 --- a/winsup/cygwin/fhandler/termios.cc +++ b/winsup/cygwin/fhandler/termios.cc @@ -111,7 +111,7 @@ fhandler_termios::tcsetpgrp (const pid_t pgid) int fhandler_termios::tcgetpgrp () { - if (myself->ctty > 0 && myself->ctty == tc ()->ntty) + if (CTTY_IS_VALID (myself->ctty) && myself->ctty == tc ()->ntty) return tc ()->pgid; set_errno (ENOTTY); return -1; @@ -359,8 +359,7 @@ fhandler_termios::process_sigs (char c, tty* ttyp, fhandler_termios *fh) DWORD resume_pid = 0; if (fh && !fh->is_console ()) resume_pid = - fhandler_pty_common::attach_console_temporarily - (p->dwProcessId, fh->get_helper_pid ()); + fhandler_pty_common::attach_console_temporarily (p->dwProcessId); if (fh && p == myself && being_debugged ()) { /* Avoid deadlock in gdb on console. */ fh->tcflush(TCIFLUSH); @@ -686,32 +685,39 @@ fhandler_termios::sigflush () pid_t fhandler_termios::tcgetsid () { - if (myself->ctty > 0 && myself->ctty == tc ()->ntty) + if (CTTY_IS_VALID (myself->ctty) && myself->ctty == tc ()->ntty) return tc ()->getsid (); set_errno (ENOTTY); return -1; } +int +fhandler_termios::fstat (struct stat *buf) +{ + fhandler_base::fstat (buf); + if (dev_referred_via > 0) + buf->st_rdev = dev_referred_via; + return 0; +} + static bool is_console_app (const WCHAR *filename) { HANDLE h; - const int id_offset = 92; h = CreateFileW (filename, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL); char buf[1024]; DWORD n; ReadFile (h, buf, sizeof (buf), &n, 0); CloseHandle (h); - char *p = (char *) memmem (buf, n, "PE\0\0", 4); - if (p && p + id_offset < buf + n) - return p[id_offset] == '\003'; /* 02: GUI, 03: console */ - else - { - wchar_t *e = wcsrchr (filename, L'.'); - if (e && (wcscasecmp (e, L".bat") == 0 || wcscasecmp (e, L".cmd") == 0)) - return true; - } + /* The offset of Subsystem is the same for both IMAGE_NT_HEADERS32 and + IMAGE_NT_HEADERS64, so only IMAGE_NT_HEADERS32 is used here. */ + IMAGE_NT_HEADERS32 *p = (IMAGE_NT_HEADERS32 *) memmem (buf, n, "PE\0\0", 4); + if (p && (char *) &p->OptionalHeader.DllCharacteristics <= buf + n) + return p->OptionalHeader.Subsystem == IMAGE_SUBSYSTEM_WINDOWS_CUI; + wchar_t *e = wcsrchr (filename, L'.'); + if (e && (wcscasecmp (e, L".bat") == 0 || wcscasecmp (e, L".cmd") == 0)) + return true; return false; } @@ -731,14 +737,18 @@ fhandler_termios::ioctl (int cmd, void *varg) termios_printf ("myself->ctty %d, myself->sid %d, myself->pid %d, arg %d, tc()->getsid () %d\n", myself->ctty, myself->sid, myself->pid, arg, tc ()->getsid ()); - if (myself->ctty > 0 || myself->sid != myself->pid || (!arg && tc ()->getsid () > 0)) + if (CTTY_IS_VALID (myself->ctty) || myself->sid != myself->pid + || (!arg && tc ()->getsid () > 0)) { set_errno (EPERM); return -1; } - myself->ctty = -1; - myself->set_ctty (this, 0); + if (!myself->set_ctty (this, 0)) + { + set_errno (EPERM); + return -1; + } return 0; } diff --git a/winsup/cygwin/flock.cc b/winsup/cygwin/flock.cc index 50db7fe28e..0f1efa01d4 100644 --- a/winsup/cygwin/flock.cc +++ b/winsup/cygwin/flock.cc @@ -951,10 +951,8 @@ fhandler_base::lock (int a_op, struct flock *fl) a_flags = F_POSIX; /* default */ /* FIXME: For BSD flock(2) we need a valid, per file table entry OS handle. - Therefore we can't allow using flock(2) on nohandle devices and - pre-Windows 8 console handles (recognized by their odd handle value). */ - if ((a_flags & F_FLOCK) - && (nohandle () || (((uintptr_t) get_handle () & 0x3) == 0x3))) + Therefore we can't allow using flock(2) on nohandle devices. */ + if ((a_flags & F_FLOCK) && nohandle ()) { set_errno (EINVAL); debug_printf ("BSD locking on nohandle and old-style console devices " diff --git a/winsup/cygwin/fork.cc b/winsup/cygwin/fork.cc index 0dac93f8a9..0742ab3633 100644 --- a/winsup/cygwin/fork.cc +++ b/winsup/cygwin/fork.cc @@ -158,7 +158,7 @@ frok::child (volatile char * volatile here) char buf[80]; /* This is useful for debugging fork problems. Use gdb to attach to the pid reported here. */ - if (GetEnvironmentVariableA ("MSYS_FORK_SLEEP", buf, sizeof (buf))) + if (GetEnvironmentVariableA ("CYGWIN_FORK_SLEEP", buf, sizeof (buf))) { small_printf ("Sleeping %d after fork, pid %u\n", atoi (buf), GetCurrentProcessId ()); Sleep (atoi (buf)); @@ -639,7 +639,7 @@ dofork (void **proc, bool *with_forkables) else { res = grouped.child (stackp); - in_forkee = false; + __in_forkee = FORKED; ischild = true; /* might have been reset by fork mem copy */ } } diff --git a/winsup/cygwin/forkable.cc b/winsup/cygwin/forkable.cc index 350a95c3e4..cd317a1ae0 100644 --- a/winsup/cygwin/forkable.cc +++ b/winsup/cygwin/forkable.cc @@ -27,10 +27,6 @@ details. */ #include #include -/* Allow concurrent processes to use the same dll or exe - * via their hardlink while we delete our hardlink. */ -extern NTSTATUS unlink_nt_shareable (path_conv &pc); - #define MUTEXSEP L"@" #define PATHSEP L"\\" @@ -132,7 +128,7 @@ rmdirs (WCHAR ntmaxpathbuf[NT_MAX_PATH]) RtlInitUnicodeString (&fn, ntmaxpathbuf); path_conv pc (&fn); - unlink_nt_shareable (pc); /* move to bin */ + unlink_nt (pc, true); /* move to bin */ } if (!pfdi->NextEntryOffset) @@ -313,7 +309,7 @@ struct namepart { bool create_dir; }; /* mutex name is formed along dir names */ -static namepart NO_COPY_RO const +static namepart const forkable_nameparts[] = { /* text textfunc mutex_from_dir create */ { L"", rootname, false, false, }, diff --git a/winsup/cygwin/glob.cc b/winsup/cygwin/glob.cc index 0d9f9c8853..90ec473aea 100644 --- a/winsup/cygwin/glob.cc +++ b/winsup/cygwin/glob.cc @@ -71,7 +71,7 @@ __FBSDID("$FreeBSD: src/lib/libc/gen/glob.c,v 1.28 2010/05/12 17:44:00 gordon Ex * GLOB_NOCHECK is specified. * 2. Illegal byte sequences in filenames are handled by treating them as * single-byte characters with a value of the first byte of the sequence - * cast to wchar_t. + * cast to wint_t. * 3. State-dependent encodings are not currently supported. */ @@ -90,18 +90,11 @@ __FBSDID("$FreeBSD: src/lib/libc/gen/glob.c,v 1.28 2010/05/12 17:44:00 gordon Ex #include #include #include +#include #include "collate.h" #ifdef __CYGWIN__ -#include -#include "path.h" -#include "fhandler.h" -#include "dtable.h" -#include "cygheap.h" -#include "cygwin/version.h" - -#define CCHAR(c) (ignore_case_with_glob ? towlower (CHAR (c)) : CHAR (c)) #define Cchar(c) (ignore_case_with_glob ? towlower (c) : (c)) #endif @@ -110,6 +103,8 @@ __FBSDID("$FreeBSD: src/lib/libc/gen/glob.c,v 1.28 2010/05/12 17:44:00 gordon Ex #define DOLLAR '$' #define DOT '.' +#define COLON ':' +#define EQUALS '=' #define EOS '\0' #define LBRACKET '[' #define NOT '!' @@ -128,12 +123,13 @@ __FBSDID("$FreeBSD: src/lib/libc/gen/glob.c,v 1.28 2010/05/12 17:44:00 gordon Ex #ifndef DEBUG -#define M_QUOTE 0x8000000000ULL -#define M_PROTECT 0x4000000000ULL -#define M_MASK 0xffffffffffULL -#define M_CHAR 0x00ffffffffULL +#define M_QUOTE 0x40000000U +#define M_PROTECT 0x20000000U +#define M_MASK 0x70ffffffU +#define M_COLL_MASK 0x700000ffU +#define M_CHAR 0x00ffffffU -typedef uint_fast64_t Char; +typedef wint_t Char; #else @@ -155,14 +151,18 @@ typedef char Char; #define M_ONE META('?') #define M_RNG META('-') #define M_SET META('[') +#define M_NAMED META(':') +#define M_EQUIV META('=') +#define M_COLL(_ccnt) META('.' | ((_ccnt) << 8)) +#define M_COLL_P(_c) (((_c) & M_COLL_MASK) == META('.')) +#define M_COLL_CNT(_c) (((_c) & ~M_COLL_MASK) >> 8) #define ismeta(c) (((c)&M_QUOTE) != 0) - static int compare(const void *, const void *); static int g_Ctoc(const Char *, char *, size_t); static int g_lstat(Char *, struct stat *, glob_t *); static DIR *g_opendir(Char *, glob_t *); -static const Char *g_strchr(const Char *, wchar_t); +static const Char *g_strchr(const Char *, wint_t); #ifdef notdef static Char *g_strcat(Char *, const Char *); #endif @@ -181,6 +181,36 @@ static int match(Char *, Char *, Char *); static void qprintf(const char *, Char *); #endif +/* Return value is either EOS, COLON, DOT, EQUALS, or LBRACKET if no class + expression found. */ +static inline Char +check_classes_expr(const Char *&cptr, wint_t *classbuf = NULL, + size_t classbufsize = 0) +{ + const Char *ctype = NULL; + + if (*cptr == LBRACKET && + (cptr[1] == COLON || cptr[1] == DOT || cptr[1] == EQUALS)) { + ctype = ++cptr; + while (*++cptr != EOS && + (*cptr != *ctype || cptr[1] != RBRACKET)) + ; + if (*cptr == EOS) + return EOS; + if (classbuf) { + const Char *class_p = ctype + 1; + size_t clen = cptr - class_p; + + if (clen < classbufsize) + *wcipncpy (classbuf, class_p, clen) = '\0'; + else + ctype = NULL; + } + cptr++; /* Advance cptr to closing RBRACKET of class expr */ + } + return ctype ? *ctype : LBRACKET; +} + int glob(const char *__restrict pattern, int flags, int (*errfunc)(const char *, int), glob_t *__restrict pglob) { @@ -188,7 +218,7 @@ glob(const char *__restrict pattern, int flags, int (*errfunc)(const char *, int size_t limit; Char *bufnext, *bufend, patbuf[MAXPATHLEN], prot; mbstate_t mbs; - wchar_t wc; + wint_t wc; size_t clen; patnext = pattern; @@ -213,7 +243,7 @@ glob(const char *__restrict pattern, int flags, int (*errfunc)(const char *, int if (flags & GLOB_NOESCAPE) { memset(&mbs, 0, sizeof(mbs)); while (bufend - bufnext >= MB_CUR_MAX) { - clen = mbrtowc(&wc, patnext, MB_LEN_MAX, &mbs); + clen = mbrtowi(&wc, patnext, MB_LEN_MAX, &mbs); if (clen == (size_t)-1 || clen == (size_t)-2) return (GLOB_NOMATCH); else if (clen == 0) @@ -233,7 +263,7 @@ glob(const char *__restrict pattern, int flags, int (*errfunc)(const char *, int prot = M_PROTECT; } else prot = 0; - clen = mbrtowc(&wc, patnext, MB_LEN_MAX, &mbs); + clen = mbrtowi(&wc, patnext, MB_LEN_MAX, &mbs); if (clen == (size_t)-1 || clen == (size_t)-2) return (GLOB_NOMATCH); else if (clen == 0) @@ -296,8 +326,10 @@ globexp2(const Char *ptr, const Char *pattern, glob_t *pglob, int *rv, size_t *l for (i = 0, pe = ++ptr; *pe; pe++) if (*pe == LBRACKET) { /* Ignore everything between [] */ - for (pm = pe++; *pe != RBRACKET && *pe != EOS; pe++) - continue; + for (pm = pe++; *pe != RBRACKET && *pe != EOS; pe++) { + if (check_classes_expr (pe) == EOS) + break; + } if (*pe == EOS) { /* * We could not find a matching RBRACKET. @@ -324,8 +356,10 @@ globexp2(const Char *ptr, const Char *pattern, glob_t *pglob, int *rv, size_t *l switch (*pm) { case LBRACKET: /* Ignore everything between [] */ - for (pm1 = pm++; *pm != RBRACKET && *pm != EOS; pm++) - continue; + for (pm1 = pm++; *pm != RBRACKET && *pm != EOS; pm++) { + if (check_classes_expr (pm) == EOS) + break; + } if (*pm == EOS) { /* * We could not find a matching RBRACKET. @@ -441,7 +475,6 @@ globtilde(const Char *pattern, Char *patbuf, size_t patbuf_len, glob_t *pglob) return patbuf; } - /* * The main glob() routine: compiles the pattern (optionally processing * quotes), calls glob1() to do the real pattern matching, and finally @@ -451,7 +484,7 @@ globtilde(const Char *pattern, Char *patbuf, size_t patbuf_len, glob_t *pglob) static int glob0(const Char *pattern, glob_t *pglob, size_t *limit) { - const Char *qpatnext; + const Char *qpatnext, *qpatrbsrch; int err; size_t oldpathc; Char *bufnext, c, patbuf[MAXPATHLEN]; @@ -467,8 +500,13 @@ glob0(const Char *pattern, glob_t *pglob, size_t *limit) c = *qpatnext; if (c == NOT) ++qpatnext; - if (*qpatnext == EOS || - g_strchr(qpatnext+1, RBRACKET) == NULL) { + for (qpatrbsrch = qpatnext; + *qpatrbsrch != RBRACKET && *qpatrbsrch != EOS; + ++qpatrbsrch) { + if (check_classes_expr (qpatrbsrch) == EOS) + break; + } + if (*qpatrbsrch == EOS) { *bufnext++ = LBRACKET; if (c == NOT) --qpatnext; @@ -479,12 +517,59 @@ glob0(const Char *pattern, glob_t *pglob, size_t *limit) *bufnext++ = M_NOT; c = *qpatnext++; do { - *bufnext++ = CHAR(c); + wint_t wclass[64]; + Char ctype; + + ctype = check_classes_expr(--qpatnext, wclass, + 64); + ++qpatnext; + if (ctype == COLON) { + wctype_t type; + char cclass[64]; + + /* No worries, char classes are + ASCII-only anyway */ + wcitoascii (cclass, wclass); + if ((type = wctype (cclass))) { + *bufnext++ = M_NAMED; + *bufnext++ = CHAR (type); + } + continue; + } + if (ctype == EQUALS) { + if (wclass[0] && !wclass[1]) { + *bufnext++ = M_EQUIV; + *bufnext++ = CHAR (wclass[0]); + } + continue; + } + if (ctype == DOT && + is_unicode_coll_elem (wclass)) { + *bufnext++ = + M_COLL (wcilen (wclass)); + wint_t *wcp = wclass; + while ((*bufnext++ = *wcp++)) + ; + --bufnext; /* drop NUL */ + } else + *bufnext++ = CHAR(c); if (*qpatnext == RANGE && (c = qpatnext[1]) != RBRACKET) { *bufnext++ = M_RNG; - *bufnext++ = CHAR(c); - qpatnext += 2; + + ctype = check_classes_expr(++qpatnext, + wclass, 64); + if (ctype == DOT && + is_unicode_coll_elem (wclass)) { + *bufnext++ = + M_COLL (wcilen (wclass)); + wint_t *wcp = wclass; + while ((*bufnext++ = *wcp++)) + ; + --bufnext; /* drop NUL */ + } else + *bufnext++ = CHAR(c); + ++qpatnext; } } while ((c = *qpatnext++) != RBRACKET); pglob->gl_flags |= GLOB_MAGCHAR; @@ -538,7 +623,7 @@ glob0(const Char *pattern, glob_t *pglob, size_t *limit) static int compare(const void *p, const void *q) { - return(strcmp(*(char **)p, *(char **)q)); + return(strcoll(*(char **)p, *(char **)q)); } static int @@ -663,7 +748,7 @@ glob3(Char *pathbuf, Char *pathend, Char *pathend_last, while ((dp = (*readdirfunc)(dirp))) { char *sc; Char *dc; - wchar_t wc; + wint_t wc; size_t clen; mbstate_t mbs; @@ -674,7 +759,7 @@ glob3(Char *pathbuf, Char *pathend, Char *pathend_last, dc = pathend; sc = dp->d_name; while (dc < pathend_last) { - clen = mbrtowc(&wc, sc, MB_LEN_MAX, &mbs); + clen = mbrtowi(&wc, sc, MB_LEN_MAX, &mbs); if (clen == (size_t)-1 || clen == (size_t)-2) { wc = *sc; clen = 1; @@ -771,11 +856,12 @@ static int match(Char *name, Char *pat, Char *patend) { int ok, negate_range; - Char c, k; + Char *c, *k; + size_t k_len; while (pat < patend) { - c = *pat++; - switch (c & M_MASK) { + c = pat++; + switch (*c & M_MASK) { case M_ALL: if (pat == patend) return(1); @@ -790,26 +876,53 @@ match(Char *name, Char *pat, Char *patend) break; case M_SET: ok = 0; - if ((k = *name++) == EOS) + if (*(k = name) == EOS) return(0); + k_len = next_unicode_char (k); + name += k_len; if ((negate_range = ((*pat & M_MASK) == M_NOT)) != EOS) ++pat; - while (((c = *pat++) & M_MASK) != M_END) + while ((*(c = pat++) & M_MASK) != M_END) { + size_t len1 = 1, len2 = 1; + + if ((*c & M_MASK) == M_NAMED) { + if (iswctype (*k, *pat++)) + ok = 1; + continue; + } + if ((*c & M_MASK) == M_EQUIV) { + if (is_unicode_equiv (*k, *pat++)) + ok = 1; + continue; + } + if (M_COLL_P(*c)) { + len1 = M_COLL_CNT(*c); + ++c; + pat += len1; + } if ((*pat & M_MASK) == M_RNG) { + if (M_COLL_P(pat[1])) + len2 = M_COLL_CNT(*++pat); +#ifdef __CYGWIN__ + if ((!__get_current_collate_locale ()->win_locale[0]) ? +#else if (__collate_load_error ? - CCHAR(c) <= CCHAR(k) && CCHAR(k) <= CCHAR(pat[1]) : - __collate_range_cmp(CCHAR(c), CCHAR(k)) <= 0 - && __collate_range_cmp(CCHAR(k), CCHAR(pat[1])) <= 0 +#endif + *c <= *k && *k <= pat[1] : + __wscollate_range_cmp(c, k, len1, k_len) <= 0 + && __wscollate_range_cmp(k, pat + 1, k_len, len2) <= 0 ) ok = 1; - pat += 2; - } else if (c == k) + pat += len2 + 1; + } else if (len1 == k_len && + wcincmp (c, k, len1) == 0) ok = 1; + } if (ok == negate_range) return(0); break; default: - if (Cchar(*name++) != Cchar(c)) + if (Cchar(*name++) != Cchar(*c)) return(0); break; } @@ -883,7 +996,7 @@ g_stat(Char *fn, struct stat *sb, glob_t *pglob) } static const Char * -g_strchr(const Char *str, wchar_t ch) +g_strchr(const Char *str, wint_t ch) { do { @@ -901,7 +1014,7 @@ g_Ctoc(const Char *str, char *buf, size_t len) memset(&mbs, 0, sizeof(mbs)); while (len >= (size_t) MB_CUR_MAX) { - clen = wcrtomb(buf, *str, &mbs); + clen = wirtomb(buf, CHAR (*str), &mbs); if (clen == (size_t)-1) return (1); if (*str == L'\0') diff --git a/winsup/cygwin/globals.cc b/winsup/cygwin/globals.cc index bb37ca27dd..ab2c205609 100644 --- a/winsup/cygwin/globals.cc +++ b/winsup/cygwin/globals.cc @@ -76,8 +76,6 @@ bool disable_pcon; bool winjitdebug = false; bool nativeinnerlinks = true; -bool NO_COPY in_forkee; - /* Taken from BSD libc: This variable is zero until a process has created a pthread. It is used to avoid calling locking functions in libc when they are not required. @@ -99,9 +97,6 @@ char NO_COPY almost_null[1]; extern "C" { -/* We never have a collate load error. */ -const int __collate_load_error = 0; - /* Heavily-used const UNICODE_STRINGs are defined here once. The idea is a speed improvement by not having to initialize a UNICODE_STRING every time we make a string comparison. The _RDATA trick allows defining the strings @@ -189,6 +184,17 @@ const int __collate_load_error = 0; /* impure_ptr */ _GLOBAL_REENT, }; int _check_for_executable = true; + + /* This was a bool initially, just indicating if we're in the forked + child during fork(2). However, we need an indicator accessible from + plain C we can ask if we're in a forked child even after fork(2) + finished. Therefore redefined how we use this variable. */ + enum { + NOT_FORKED = 0, + FORKING = 1, + FORKED = 2 + }; + int NO_COPY __in_forkee; }; int NO_COPY __api_fatal_exit_val = 1; diff --git a/winsup/cygwin/grp.cc b/winsup/cygwin/grp.cc index b06ad37912..5f80d7aa7e 100644 --- a/winsup/cygwin/grp.cc +++ b/winsup/cygwin/grp.cc @@ -424,9 +424,20 @@ gr_ent::enumerate_local () DWORD dlen = DNLEN + 1; SID_NAME_USE acc_type; - LookupAccountNameW (NULL, - ((PLOCALGROUP_INFO_0) buf)[cnt++].lgrpi0_name, - sid, &slen, dom, &dlen, &acc_type); + if (!LookupAccountNameW (NULL, + ((PLOCALGROUP_INFO_0) buf)[cnt++].lgrpi0_name, + sid, &slen, dom, &dlen, &acc_type)) + continue; + /* Skip builtin groups if we're enumerating AD as well to avoid + duplication. Don't skip "Power Users" and "Device Owners" + accounts, they don't show up in AD enumeration. */ + if (cygheap->dom.member_machine () + && nss_db_enum_primary () + && sid_id_auth (sid) == 5 /* SECURITY_NT_AUTHORITY */ + && sid_sub_auth (sid, 0) == SECURITY_BUILTIN_DOMAIN_RID + && sid_sub_auth (sid, 1) != DOMAIN_ALIAS_RID_POWER_USERS + && sid_sub_auth (sid, 1) != DOMAIN_ALIAS_RID_DEVICE_OWNERS) + continue; fetch_user_arg_t arg; arg.type = SID_arg; arg.sid = &sid; diff --git a/winsup/cygwin/include/aio.h b/winsup/cygwin/include/aio.h index 523a47870c..7ddd17e838 100644 --- a/winsup/cygwin/include/aio.h +++ b/winsup/cygwin/include/aio.h @@ -73,7 +73,7 @@ ssize_t aio_return (struct aiocb *); int aio_suspend (const struct aiocb *const [], int, const struct timespec *); int aio_write (struct aiocb *); -int lio_listio (int, struct aiocb *__restrict const [__restrict], int, +int lio_listio (int, struct aiocb *__restrict const [__restrict_arr], int, struct sigevent *__restrict); #ifdef __cplusplus diff --git a/winsup/cygwin/include/asm/socket.h b/winsup/cygwin/include/asm/socket.h index 9aeb889b87..276df3a0b5 100644 --- a/winsup/cygwin/include/asm/socket.h +++ b/winsup/cygwin/include/asm/socket.h @@ -17,8 +17,8 @@ details. */ #define IOC_IN 0x80000000 /* copy in parameters */ #define _IO(x,y) (IOC_VOID|(x<<8)|y) -#define _IOR(x,y,t) (IOC_OUT|(((long)sizeof(t)&IOCPARM_MASK)<<16)|(x<<8)|y) -#define _IOW(x,y,t) (IOC_IN|(((long)sizeof(t)&IOCPARM_MASK)<<16)|(x<<8)|y) +#define _IOR(x,y,t) (IOC_OUT|((sizeof(t)&IOCPARM_MASK)<<16)|(x<<8)|y) +#define _IOW(x,y,t) (IOC_IN|((sizeof(t)&IOCPARM_MASK)<<16)|(x<<8)|y) #define SIOCATMARK _IOR('s', 7, long) /* at oob mark? */ #define FIONREAD _IOR('f', 127, long) /* get # bytes to read */ diff --git a/winsup/cygwin/include/cygwin/limits.h b/winsup/cygwin/include/cygwin/limits.h index aefc7c7bdb..ea3e2836a4 100644 --- a/winsup/cygwin/include/cygwin/limits.h +++ b/winsup/cygwin/include/cygwin/limits.h @@ -56,4 +56,11 @@ details. */ #define __PATH_MAX 4096 #define __PIPE_BUF 4096 +/* XATTR_NAME_MAX is the maximum XATTR name length excluding the null + * terminator. Since only XATTRs in the `user' namespace are allowed and the + * `user.' prefix is not stored, the maximum is increased by 5. */ +#define XATTR_NAME_MAX 260 +#define XATTR_SIZE_MAX 65536 +#define XATTR_LIST_MAX 65536 + #endif /* _CYGWIN_LIMITS_H__ */ diff --git a/winsup/cygwin/include/cygwin/socket.h b/winsup/cygwin/include/cygwin/socket.h index 33f18091c6..dc56cb0f57 100644 --- a/winsup/cygwin/include/cygwin/socket.h +++ b/winsup/cygwin/include/cygwin/socket.h @@ -225,6 +225,8 @@ struct OLD_msghdr #define IPTOS_LOWDELAY 0x10 #define IPTOS_THROUGHPUT 0x08 #define IPTOS_RELIABILITY 0x04 +#define IPTOS_LOWCOST 0x02 +#define IPTOS_MINCOST IPTOS_LOWCOST #endif /* These need to appear somewhere around here */ diff --git a/winsup/cygwin/include/cygwin/version.h b/winsup/cygwin/include/cygwin/version.h index f3c93e1835..2e624a968c 100644 --- a/winsup/cygwin/include/cygwin/version.h +++ b/winsup/cygwin/include/cygwin/version.h @@ -10,8 +10,8 @@ details. */ the Cygwin shared library". This version is used to track important changes to the DLL and is mainly informative in nature. */ -#define CYGWIN_VERSION_DLL_MAJOR 3004 -#define CYGWIN_VERSION_DLL_MINOR 10 +#define CYGWIN_VERSION_DLL_MAJOR 3005 +#define CYGWIN_VERSION_DLL_MINOR 4 /* CYGWIN_VERSION_DLL_COMBINED gives us a single number representing the combined DLL major and minor numbers. */ @@ -479,12 +479,18 @@ details. */ 343: Change FD_SETSIZE and NOFILE. 344: Remove _alloca. 345: Reinstantiate _alloca. + 346: (Belatedly) add posix_spawn_file_actions_addchdir_np, + posix_spawn_file_actions_addfchdir_np. + 347: Add c16rtomb, c32rtomb, mbrtoc16, mbrtoc32. + 348: Add c8rtomb, mbrtoc. + 349: Add fallocate. + 350: Add close_range. Note that we forgot to bump the api for ualarm, strtoll, strtoull, sigaltstack, sethostname. */ #define CYGWIN_VERSION_API_MAJOR 0 -#define CYGWIN_VERSION_API_MINOR 345 +#define CYGWIN_VERSION_API_MINOR 350 /* There is also a compatibity version number associated with the shared memory regions. It is incremented when incompatible changes are made to the shared @@ -532,9 +538,9 @@ details. */ The mkvers.sh script at the top level produces a .cc file which initializes a cygwin_version structure based on the above version information and - creates a string table for grepping via "fgrep '%%%' cygwinwhatever.dll" + creates a string table for grepping via "grep -F '%%%' cygwinwhatever.dll" if you are using GNU grep. Otherwise you may want to do a - "strings cygwinwhatever.dll | fgrep '%%%'" instead. + "strings cygwinwhatever.dll | grep -F '%%%'" instead. This will produce output such as: diff --git a/winsup/cygwin/include/cygwin/wait.h b/winsup/cygwin/include/cygwin/wait.h index 7e40c8d6c7..0d42e89206 100644 --- a/winsup/cygwin/include/cygwin/wait.h +++ b/winsup/cygwin/include/cygwin/wait.h @@ -16,12 +16,13 @@ details. */ #define WUNTRACED 2 #define WCONTINUED 8 #define __W_CONTINUED 0xffff +#define __WCOREFLAG 0x80 /* A status is 16 bits, and looks like: <1 byte info> <1 byte code> == 0, child has exited, info is the exit value - == 1..7e, child has exited, info is the signal number. + == 1..7e, child has exited, code is the signal number. == 7f, child has stopped, info was the signal number. == 80, there was a core dump. */ @@ -34,6 +35,6 @@ details. */ #define WEXITSTATUS(_w) (((_w) >> 8) & 0xff) #define WTERMSIG(_w) ((_w) & 0x7f) #define WSTOPSIG WEXITSTATUS -#define WCOREDUMP(_w) (WIFSIGNALED(_w) && ((_w) & 0x80)) +#define WCOREDUMP(_w) (WIFSIGNALED(_w) && ((_w) & __WCOREFLAG)) #endif /* _CYGWIN_WAIT_H */ diff --git a/winsup/cygwin/include/fcntl.h b/winsup/cygwin/include/fcntl.h index ed396eab64..340aed4402 100644 --- a/winsup/cygwin/include/fcntl.h +++ b/winsup/cygwin/include/fcntl.h @@ -9,7 +9,9 @@ details. */ #ifndef _FCNTL_H #define _FCNTL_H +#include #include + #define O_NDELAY _FNDELAY /* F_LCK_MANDATORY: Request mandatory locks for this file descriptor. @@ -40,13 +42,26 @@ details. */ #define POSIX_FADV_DONTNEED 4 #define POSIX_FADV_NOREUSE 5 -#ifdef __cplusplus -extern "C" { +#if __GNU_VISIBLE +#define FALLOC_FL_PUNCH_HOLE 0x0001 +#define FALLOC_FL_ZERO_RANGE 0x0002 +#define FALLOC_FL_UNSHARE_RANGE 0x0004 +#define FALLOC_FL_COLLAPSE_RANGE 0x0008 +#define FALLOC_FL_INSERT_RANGE 0x0010 +#define FALLOC_FL_KEEP_SIZE 0x1000 +/* Internal flags */ +#define __FALLOC_FL_TRUNCATE 0x2000 +#define __FALLOC_FL_ZERO_HOLES 0x4000 #endif + +__BEGIN_DECLS + extern int posix_fadvise (int, off_t, off_t, int); extern int posix_fallocate (int, off_t, off_t); -#ifdef __cplusplus -} +#if __GNU_VISIBLE +extern int fallocate (int, int, off_t, off_t); #endif +__END_DECLS + #endif /* _FCNTL_H */ diff --git a/winsup/cygwin/include/getopt.h b/winsup/cygwin/include/getopt.h index c5af1acd46..63e068b5c8 100644 --- a/winsup/cygwin/include/getopt.h +++ b/winsup/cygwin/include/getopt.h @@ -85,4 +85,4 @@ int getopt_long_only (int, char *const *, const char *, const struct option *, i #endif /* __GETOPT_LONG_H__ */ #endif /* __UNISTD_GETOPT__ */ -#endif /*_INSIDE_NEWLIB*/ +#endif /*_LIBC */ diff --git a/winsup/cygwin/include/limits.h b/winsup/cygwin/include/limits.h index 51cc8835d8..28b7527f51 100644 --- a/winsup/cygwin/include/limits.h +++ b/winsup/cygwin/include/limits.h @@ -375,9 +375,8 @@ details. */ #undef BC_STRING_MAX #define BC_STRING_MAX 1000 -/* Maximum number of bytes in a character class name. Not implemented. */ -#undef CHARCLASS_NAME_MAX -/* #define CHARCLASS_NAME_MAX >= _POSIX2_CHARCLASS_NAME_MAX */ +/* Maximum number of bytes in a character class name. */ +#define CHARCLASS_NAME_MAX 14 /* Maximum number of weights that can be assigned to an entry of the LC_COLLATE order keyword in the locale definition file. */ diff --git a/winsup/cygwin/include/machine/_arc4random.h b/winsup/cygwin/include/machine/_arc4random.h index 2078c35972..2f3347e33a 100644 --- a/winsup/cygwin/include/machine/_arc4random.h +++ b/winsup/cygwin/include/machine/_arc4random.h @@ -25,4 +25,14 @@ extern int __isthreaded; __lock_release (_arc4random_mutex); \ } while (0) +static inline void +_arc4random_forkdetect(void) +{ + extern int __in_forkee; + + if (__in_forkee) + rs = NULL; +} +#define _ARC4RANDOM_FORKDETECT() _arc4random_forkdetect () + #endif /* _MACHINE_ARC4RANDOM_H */ diff --git a/winsup/cygwin/include/regex.h b/winsup/cygwin/include/regex.h index 02c617e506..3bea3df4f3 100644 --- a/winsup/cygwin/include/regex.h +++ b/winsup/cygwin/include/regex.h @@ -1,4 +1,6 @@ /*- + * SPDX-License-Identifier: BSD-3-Clause + * * Copyright (c) 1992 Henry Spencer. * Copyright (c) 1992, 1993 * The Regents of the University of California. All rights reserved. @@ -14,7 +16,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -38,32 +40,20 @@ #define _REGEX_H_ #include -#include <_ansi.h> #include /* types */ -#ifdef __CYGWIN__ -typedef _off_t regoff_t; - -#define __need_size_t -#include -#else /* !__CYGWIN__ */ typedef __off_t regoff_t; #ifndef _SIZE_T_DECLARED typedef __size_t size_t; #define _SIZE_T_DECLARED #endif -#endif /* !__CYGWIN__ */ typedef struct { int re_magic; size_t re_nsub; /* number of parenthesized subexpressions */ -#ifdef __CYGWIN__ const char *re_endp; /* end pointer for REG_PEND */ -#else - __const char *re_endp; /* end pointer for REG_PEND */ -#endif struct re_guts *re_g; /* none of your business :-) */ } regex_t; @@ -81,12 +71,10 @@ typedef struct { #define REG_NOSPEC 0020 #define REG_PEND 0040 #define REG_DUMP 0200 +#define REG_POSIX 0400 /* only POSIX-compliant regex (libregex) */ /* regerror() flags */ #define REG_ENOSYS (-1) -#ifdef __CYGWIN__ -#define REG_NOERROR 0 /* GNU extension */ -#endif #define REG_NOMATCH 1 #define REG_BADPAT 2 #define REG_ECOLLATE 3 diff --git a/winsup/cygwin/include/uchar.h b/winsup/cygwin/include/uchar.h new file mode 100644 index 0000000000..ed548ac736 --- /dev/null +++ b/winsup/cygwin/include/uchar.h @@ -0,0 +1,37 @@ +#ifndef _UCHAR_H +#define _UCHAR_H + +#include +#include + +/* Either C2x or if C++ doesn't already define char8_t */ +#if __ISO_C_VISIBLE >= 2020 && !defined (__cpp_char8_t) +typedef unsigned char char8_t; +#endif + +/* C++11 already defines those types. */ +#if !defined (__cplusplus) || (__cplusplus - 0 < 201103L) +typedef __uint_least16_t char16_t; +typedef __uint_least32_t char32_t; +#endif + +__BEGIN_DECLS + +/* Either C2x or if C++ defines char8_t */ +#if __ISO_C_VISIBLE >= 2020 || defined (__cpp_char8_t) +size_t c8rtomb(char * __restrict, char8_t, mbstate_t * __restrict); +size_t mbrtoc8(char8_t * __restrict, const char * __restrict, size_t, + mbstate_t * __restrict); +#endif + +size_t c16rtomb(char * __restrict, char16_t, mbstate_t * __restrict); +size_t mbrtoc16(char16_t * __restrict, const char * __restrict, size_t, + mbstate_t * __restrict); + +size_t c32rtomb(char * __restrict, char32_t, mbstate_t * __restrict); +size_t mbrtoc32(char32_t * __restrict, const char * __restrict, size_t, + mbstate_t * __restrict); + +__END_DECLS + +#endif /* _UCHAR_H */ diff --git a/winsup/cygwin/libc/fnmatch.c b/winsup/cygwin/libc/fnmatch.c index 410254ab86..a1cb5d1e46 100644 --- a/winsup/cygwin/libc/fnmatch.c +++ b/winsup/cygwin/libc/fnmatch.c @@ -52,7 +52,7 @@ __FBSDID("$FreeBSD: head/lib/libc/gen/fnmatch.c 288309 2015-09-27 12:52:18Z jill * 1. Patterns with illegal byte sequences match nothing. * 2. Illegal byte sequences in the "string" argument are handled by treating * them as single-byte characters with a value of the first byte of the - * sequence cast to wchar_t. + * sequence cast to wint_t. * 3. Multibyte conversion state objects (mbstate_t) are passed around and * used for most, but not all, conversions. Further work will be required * to support state-dependent encodings. @@ -72,80 +72,77 @@ __FBSDID("$FreeBSD: head/lib/libc/gen/fnmatch.c 288309 2015-09-27 12:52:18Z jill #define RANGE_NOMATCH 0 #define RANGE_ERROR (-1) -static int rangematch(const char *, wchar_t, int, char **, mbstate_t *); -static int fnmatch1(const char *, const char *, const char *, int, mbstate_t, - mbstate_t); +static int rangematch(const wint_t *, wint_t *, int, wint_t **, mbstate_t *); int -fnmatch(const char *pattern, const char *string, int flags) +fnmatch(const char *in_pattern, const char *in_string, int flags) { - static const mbstate_t initial; + size_t pclen = strlen (in_pattern); + size_t sclen = strlen (in_string); + wint_t *pattern = (wint_t *) alloca ((pclen + 1) * sizeof (wint_t)); + wint_t *string = (wint_t *) alloca ((sclen + 1) * sizeof (wint_t)); - return (fnmatch1(pattern, string, string, flags, initial, initial)); -} - -static int -fnmatch1(const char *pattern, const char *string, const char *stringstart, - int flags, mbstate_t patmbs, mbstate_t strmbs) -{ - const char *bt_pattern, *bt_string; + const wint_t *stringstart = string; + const wint_t *bt_pattern, *bt_string; + mbstate_t patmbs = { 0 }; + mbstate_t strmbs = { 0 }; mbstate_t bt_patmbs, bt_strmbs; - char *newp; - char c; - wchar_t pc, sc; - size_t pclen, sclen; + wint_t *newp; + wint_t *c; + wint_t *pc, *sc; + + pclen = mbsnrtowci (pattern, &in_pattern, (size_t) -1, pclen, &patmbs); + if (pclen == (size_t) -1) + return (FNM_NOMATCH); + pattern[pclen] = '\0'; + sclen = mbsnrtowci (string, &in_string, (size_t) -1, sclen, &strmbs); + if (sclen == (size_t) -1) + return (FNM_NOMATCH); + string[sclen] = '\0'; bt_pattern = bt_string = NULL; for (;;) { - pclen = mbrtowc(&pc, pattern, MB_LEN_MAX, &patmbs); - if (pclen == (size_t)-1 || pclen == (size_t)-2) - return (FNM_NOMATCH); - pattern += pclen; - sclen = mbrtowc(&sc, string, MB_LEN_MAX, &strmbs); - if (sclen == (size_t)-1 || sclen == (size_t)-2) { - sc = (unsigned char)*string; - sclen = 1; - memset(&strmbs, 0, sizeof(strmbs)); - } - switch (pc) { + pc = pattern++; + sc = string; + switch (*pc) { case EOS: - if ((flags & FNM_LEADING_DIR) && sc == '/') + if ((flags & FNM_LEADING_DIR) && *sc == '/') return (0); - if (sc == EOS) + if (*sc == EOS) return (0); goto backtrack; case '?': - if (sc == EOS) + if (*sc == EOS) return (FNM_NOMATCH); - if (sc == '/' && (flags & FNM_PATHNAME)) + if (*sc == '/' && (flags & FNM_PATHNAME)) goto backtrack; - if (sc == '.' && (flags & FNM_PERIOD) && + if (*sc == '.' && (flags & FNM_PERIOD) && (string == stringstart || ((flags & FNM_PATHNAME) && *(string - 1) == '/'))) goto backtrack; - string += sclen; + ++string; break; case '*': - c = *pattern; + c = pattern; /* Collapse multiple stars. */ - while (c == '*') - c = *++pattern; + while (*c == '*') + *c = *++pattern; - if (sc == '.' && (flags & FNM_PERIOD) && + if (*sc == '.' && (flags & FNM_PERIOD) && (string == stringstart || ((flags & FNM_PATHNAME) && *(string - 1) == '/'))) goto backtrack; /* Optimize for pattern with * at end or before /. */ - if (c == EOS) + if (*c == EOS) if (flags & FNM_PATHNAME) return ((flags & FNM_LEADING_DIR) || - strchr(string, '/') == NULL ? + wcichr(string, '/') == NULL ? 0 : FNM_NOMATCH); else return (0); - else if (c == '/' && flags & FNM_PATHNAME) { - if ((string = strchr(string, '/')) == NULL) + else if (*c == '/' && flags & FNM_PATHNAME) { + if ((string = wcichr(string, '/')) == NULL) return (FNM_NOMATCH); break; } @@ -156,47 +153,46 @@ fnmatch1(const char *pattern, const char *string, const char *stringstart, * there is no way having it match more characters * can help us, given that we are already here. */ - bt_pattern = pattern, bt_patmbs = patmbs; - bt_string = string, bt_strmbs = strmbs; + bt_pattern = pattern; + bt_patmbs = patmbs; + bt_string = string; + bt_strmbs = strmbs; break; case '[': - if (sc == EOS) + if (*sc == EOS) return (FNM_NOMATCH); - if (sc == '/' && (flags & FNM_PATHNAME)) + if (*sc == '/' && (flags & FNM_PATHNAME)) goto backtrack; - if (sc == '.' && (flags & FNM_PERIOD) && + if (*sc == '.' && (flags & FNM_PERIOD) && (string == stringstart || ((flags & FNM_PATHNAME) && *(string - 1) == '/'))) goto backtrack; - switch (rangematch(pattern, sc, flags, &newp, - &patmbs)) { + int ret = rangematch(pattern, sc, flags, &newp, + &patmbs); + switch (ret) { case RANGE_ERROR: goto norm; - case RANGE_MATCH: - pattern = newp; - break; case RANGE_NOMATCH: goto backtrack; + default: /* > 0 ... case RANGE_MATCH */ + pattern = newp; + break; } - string += sclen; + string += ret; break; case '\\': if (!(flags & FNM_NOESCAPE)) { - pclen = mbrtowc(&pc, pattern, MB_LEN_MAX, - &patmbs); - if (pclen == (size_t)-1 || pclen == (size_t)-2) - return (FNM_NOMATCH); - pattern += pclen; + pc = pattern++; } fallthrough; default: norm: - string += sclen; - if (pc == sc) + ++string; + if (*pc == *sc) ; else if ((flags & FNM_CASEFOLD) && - (towlower(pc) == towlower(sc))) + (towlower(*pc) == towlower(*sc))) ; else { backtrack: @@ -208,22 +204,16 @@ fnmatch1(const char *pattern, const char *string, const char *stringstart, */ if (bt_pattern == NULL) return (FNM_NOMATCH); - sclen = mbrtowc(&sc, bt_string, MB_LEN_MAX, - &bt_strmbs); - if (sclen == (size_t)-1 || - sclen == (size_t)-2) { - sc = (unsigned char)*bt_string; - sclen = 1; - memset(&bt_strmbs, 0, - sizeof(bt_strmbs)); - } - if (sc == EOS) + sc = (wint_t *) bt_string; + if (*sc == EOS) return (FNM_NOMATCH); - if (sc == '/' && flags & FNM_PATHNAME) + if (*sc == '/' && flags & FNM_PATHNAME) return (FNM_NOMATCH); - bt_string += sclen; - pattern = bt_pattern, patmbs = bt_patmbs; - string = bt_string, strmbs = bt_strmbs; + ++bt_string; + pattern = (wint_t *) bt_pattern; + patmbs = bt_patmbs; + string = (wint_t *) bt_string; + strmbs = bt_strmbs; } break; } @@ -231,18 +221,46 @@ fnmatch1(const char *pattern, const char *string, const char *stringstart, /* NOTREACHED */ } +/* Return value is either '\0', ':', '.', '=', or '[' if no class + expression found. cptr_p is set to the next character which needs + checking. */ +static inline wint_t +check_classes_expr(const wint_t **cptr_p, wint_t *classbuf, size_t classbufsize) +{ + const wint_t *ctype = NULL; + const wint_t *cptr = *cptr_p; + + if (*cptr == '[' && + (cptr[1] == ':' || cptr[1] == '.' || cptr[1] == '=')) { + ctype = ++cptr; + while (*++cptr && (*cptr != *ctype || cptr[1] != ']')) + ; + if (!*cptr) + return '\0'; + if (classbuf) { + const wint_t *class_p = ctype + 1; + size_t clen = cptr - class_p; + + if (clen < classbufsize) + *wcipncpy (classbuf, class_p, clen) = '\0'; + else + ctype = NULL; + } + cptr += 2; /* Advance cptr to next char after class expr. */ + } + *cptr_p = cptr; + return ctype ? *ctype : '['; +} + static int -rangematch(const char *pattern, wchar_t test, int flags, char **newp, +rangematch(const wint_t *pattern, wint_t *test, int flags, wint_t **newp, mbstate_t *patmbs) { int negate, ok; - wchar_t c, c2; - size_t pclen; - const char *origpat; -#ifndef __CYGWIN__ - struct xlocale_collate *table = - (struct xlocale_collate*)__get_locale()->components[XLC_COLLATE]; -#endif + wint_t *c, *c2; + //size_t pclen; + const wint_t *origpat; + size_t tlen = next_unicode_char (test); /* * A bracket expression starting with an unquoted circumflex @@ -254,8 +272,10 @@ rangematch(const char *pattern, wchar_t test, int flags, char **newp, if ( (negate = (*pattern == '!' || *pattern == '^')) ) ++pattern; - if (flags & FNM_CASEFOLD) - test = towlower(test); + if (flags & FNM_CASEFOLD) { + for (int idx = 0; idx < tlen; ++idx) + test[idx] = towlower(test[idx]); + } /* * A right bracket shall lose its special meaning and represent @@ -265,6 +285,11 @@ rangematch(const char *pattern, wchar_t test, int flags, char **newp, ok = 0; origpat = pattern; for (;;) { + wint_t wclass[64], wclass2[64]; + char cclass[64]; + wint_t ctype; + size_t clen = 1, c2len = 1; + if (*pattern == ']' && pattern > origpat) { pattern++; break; @@ -274,47 +299,69 @@ rangematch(const char *pattern, wchar_t test, int flags, char **newp, return (RANGE_NOMATCH); } else if (*pattern == '\\' && !(flags & FNM_NOESCAPE)) pattern++; - pclen = mbrtowc(&c, pattern, MB_LEN_MAX, patmbs); - if (pclen == (size_t)-1 || pclen == (size_t)-2) - return (RANGE_NOMATCH); - pattern += pclen; - - if (flags & FNM_CASEFOLD) - c = towlower(c); + switch (ctype = check_classes_expr (&pattern, wclass, 64)) { + case ':': + /* No worries, char classes are ASCII-only */ + wcitoascii (cclass, wclass); + if (iswctype (*test, wctype (cclass))) + ok = 1; + continue; + case '=': + if (wcilen (wclass) == 1 && + is_unicode_equiv (*test, *wclass)) + ok = 1; + continue; + case '.': + if (!is_unicode_coll_elem (wclass)) + return (RANGE_NOMATCH); + c = wclass; + clen = wcilen (wclass); + break; + default: + c = (wint_t *) pattern++; + break; + } + if (flags & FNM_CASEFOLD) { + for (int idx = 0; idx < tlen; ++idx) + c[idx] = towlower(c[idx]); + } if (*pattern == '-' && *(pattern + 1) != EOS && *(pattern + 1) != ']') { if (*++pattern == '\\' && !(flags & FNM_NOESCAPE)) if (*pattern != EOS) pattern++; - pclen = mbrtowc(&c2, pattern, MB_LEN_MAX, patmbs); - if (pclen == (size_t)-1 || pclen == (size_t)-2) - return (RANGE_NOMATCH); - pattern += pclen; - if (c2 == EOS) + const wint_t *orig_pattern = pattern; + switch (ctype = check_classes_expr (&pattern, wclass2, + 64)) { + case '.': + if (!is_unicode_coll_elem (wclass2)) + return (RANGE_NOMATCH); + c2 = wclass2; + c2len = wcilen (wclass2); + break; + default: + pattern = orig_pattern; + c2 = (wint_t *) pattern++; + } + if (*c2 == EOS) return (RANGE_ERROR); - if (flags & FNM_CASEFOLD) - c2 = towlower(c2); + if (flags & FNM_CASEFOLD) { + for (int idx = 0; idx < tlen; ++idx) + c2[idx] = towlower(c2[idx]); + } -#ifdef __CYGWIN__ - if (__collate_load_error ? - c <= test && test <= c2 : - __collate_range_cmp(c, test) <= 0 - && __collate_range_cmp(test, c2) <= 0 - ) -#else - if (table->__collate_load_error ? - c <= test && test <= c2 : - __collate_range_cmp(table, c, test) <= 0 - && __collate_range_cmp(table, test, c2) <= 0 + if ((!__get_current_collate_locale ()->win_locale[0]) ? + *c <= *test && *test <= *c2 : + __wscollate_range_cmp(c, test, clen, tlen) <= 0 + && __wscollate_range_cmp(test, c2, tlen, c2len) <= 0 ) -#endif ok = 1; - } else if (c == test) + } else if (clen == tlen && wcincmp (c, test, clen) == 0) ok = 1; } - *newp = (char *)pattern; - return (ok == negate ? RANGE_NOMATCH : RANGE_MATCH); + *newp = (wint_t *) pattern; + return (ok == negate ? RANGE_NOMATCH : tlen); } diff --git a/winsup/cygwin/libc/strptime.cc b/winsup/cygwin/libc/strptime.cc index dc55723101..dc6771fe5e 100644 --- a/winsup/cygwin/libc/strptime.cc +++ b/winsup/cygwin/libc/strptime.cc @@ -301,10 +301,19 @@ first_day (int year) return ret; } -/* This simplifies the calls to conv_num enormously. */ +/* This simplifies the calls to __conv_num enormously. */ #define ALT_DIGITS ((alt_format & ALT_O) ? *alt_digits : NULL) -static const unsigned char *conv_num(const unsigned char *, int *, uint, uint, +#define conv_num(_b,_d,_l,_u,_a) \ + ({ \ + const unsigned char *_ret; \ + _ret = __conv_num((_b),(_d),(_l),(_u),(_a)); \ + if (!_ret) \ + return NULL; \ + _ret; \ + }) + +static const unsigned char *__conv_num(const unsigned char *, int *, uint, uint, alt_digits_t *); static const unsigned char *find_string(const unsigned char *, int *, const char * const *, @@ -326,6 +335,8 @@ __strptime(const char *buf, const char *fmt, struct tm *tm, const char *new_fmt; uint ulim; int ymd = 0; + bool got_I = false; + bool got_pm = false; bp = (const unsigned char *)buf; const struct lc_time_T *_CurrentTimeLocale = __get_time_locale (locale); @@ -528,6 +539,7 @@ again: switch (c = *fmt++) { case 'H': LEGAL_ALT(ALT_O); bp = conv_num(bp, &tm->tm_hour, 0, 23, ALT_DIGITS); + got_I = false; continue; case 'l': /* The hour (12-hour clock representation). */ @@ -538,6 +550,7 @@ again: switch (c = *fmt++) { bp = conv_num(bp, &tm->tm_hour, 1, 12, ALT_DIGITS); if (tm->tm_hour == 12) tm->tm_hour = 0; + got_I = true; continue; case 'j': /* The day of year. */ @@ -564,9 +577,7 @@ again: switch (c = *fmt++) { case 'p': /* The locale's equivalent of AM/PM. */ bp = find_string(bp, &i, _ctloc(am_pm), NULL, 2, locale); - if (tm->tm_hour > 11) - return NULL; - tm->tm_hour += i * 12; + got_pm = (i == 1); LEGAL_ALT(0); continue; @@ -742,8 +753,12 @@ again: switch (c = *fmt++) { default: /* Unknown/unsupported conversion. */ return NULL; } + } + if (got_I && got_pm) + tm->tm_hour += 12; + if (bp && (era || got_eoff)) { /* Default to current era. */ @@ -842,7 +857,7 @@ strptime (const char *__restrict buf, const char *__restrict fmt, } static const unsigned char * -conv_num(const unsigned char *buf, int *dest, uint llim, uint ulim, +__conv_num(const unsigned char *buf, int *dest, uint llim, uint ulim, alt_digits_t *alt_digits) { uint result = 0; diff --git a/winsup/cygwin/linux-locale-helpers/README b/winsup/cygwin/linux-locale-helpers/README new file mode 100644 index 0000000000..2489416bc8 --- /dev/null +++ b/winsup/cygwin/linux-locale-helpers/README @@ -0,0 +1,10 @@ +These scripts and helper applications are used to create locale data +required for complete locale support, but either missing in Windows +or implemented in a non-POSIXy way. + +The script has to run from inside a glibc git clone. +The C tools can be built without any special options. + +All three tools generate the new locale headers (lc_collelem.h, +lc_era.h, lc_msg.h) in the current working directory. They can just +be copied to local_includes and commited without further changes. diff --git a/winsup/cygwin/linux-locale-helpers/fetch-lc-def-codesets-from-linux b/winsup/cygwin/linux-locale-helpers/fetch-lc-def-codesets-from-linux new file mode 100755 index 0000000000..9bb0533418 --- /dev/null +++ b/winsup/cygwin/linux-locale-helpers/fetch-lc-def-codesets-from-linux @@ -0,0 +1,25 @@ +#!/bin/bash +( + cat <<-EOF + /* This struct of default codesets has been generated by fetching + locale data from a Linux system using $(rpm -q glibc | head -1) on $(date +%F) */ + struct default_codeset_t + { + const char *locale; + const char *codeset; + } default_codeset[] = + { + EOF + locale -a | \ + awk '{ + if ( index ($1, "_") == 0 ) next # No aliases + if ( index ($1, ".") > 0 ) next # No explicit codesets + locale = $1 + cmd = "LC_CTYPE=" locale " locale -ck LC_CTYPE | grep charmap" + cmd | getline codeset + codeset = gensub (/charmap="(.*)"/, "\\1", 1, codeset) + codeset = gensub (/BIG5.*/, "BIG5", 1, codeset); + printf " { \"%s\", \"%s\" },\n", locale, codeset; + }' + echo "};" +) > lc_def_codesets.h diff --git a/winsup/cygwin/linux-locale-helpers/fetch-lc_collate-elements-from-glibc b/winsup/cygwin/linux-locale-helpers/fetch-lc_collate-elements-from-glibc new file mode 100755 index 0000000000..a0ff0e62f1 --- /dev/null +++ b/winsup/cygwin/linux-locale-helpers/fetch-lc_collate-elements-from-glibc @@ -0,0 +1,61 @@ +#!/bin/bash +# +# SPDX-License-Identifier: BSD-2-Clause +# +# Assuming +# +# git clone https://sourceware.org/git/glibc.git +# cd glibc +# +topdir="$(git rev-parse --show-toplevel)" +if [ -z "${topdir}" ] +then + echo "Not a git dir? Exit." + exit 1 +fi +cd "${topdir}" +glibc_conf="$(grep 'GNU C Library' configure.ac)" +if [ -z "${glibc_conf}" ] +then + echo "No GLibc configure.ac? Wrong git repo? Exit." + exit 1 +fi +if [ ! -f version.h ] +then + echo "No version.h file? Exit." + exit 1 +fi +version=$(sed -n -e 's/#define VERSION "\(.*\)"/\1/p' version.h) +if [ -z "${version}" ] +then + echo "Malformed version.h file. Exit." + exit 1 +fi +if [ ! -d localedata/locales ] +then + echo "No localedata/locales subdir. Broken repo? Exit." + exit 1 +fi +( + cd localedata/locales + cat <<-EOF + /* This struct of collating elements data has been generated by fetching + locale data from a GLibc ${version} source dir on $(date +%F). */ + struct collating_element_t + { + const char32_t *element; + const char *locale; + }; + + collating_element_t collating_element[] = + { + EOF + grep -r collating-element * \ + | sed -e 's#^\([^:]*\):collating-element[ \t]*\([^ \t]*\)[ \t]*from[ \t]*"\(.*\)".*$# { U"\3", "\1" }, /* \2 */# + s//\\U0000\1/g + s//\\U000\1/g + s//\\U00\1/g + s/iso14651_t1_common//g' \ + | sort + echo "};" +) > lc_collelem.h diff --git a/winsup/cygwin/linux-locale-helpers/fetch-lc_messages-from-linux.c b/winsup/cygwin/linux-locale-helpers/fetch-lc_messages-from-linux.c new file mode 100644 index 0000000000..e83bad66ff --- /dev/null +++ b/winsup/cygwin/linux-locale-helpers/fetch-lc_messages-from-linux.c @@ -0,0 +1,169 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ +#define _GNU_SOURCE +#include +#include +#include +#include +#include +#include +#include +#include + +struct lc_msg_t { + char locale[64]; + char yesstr[256]; + char nostr[256]; + char yesexpr[256]; + char noexpr[256]; +} msg[512]; +int mcnt = 0; + +char * +xfrm_utf (const wchar_t *ws) +{ + static char xfrm[256]; + char *p = xfrm; + int wconst = 0; + + while (*ws) + { + if (*ws < 0x80 && (!wconst || !wcschr (L"aAbBcCdDeEfF", *ws))) + { + *p++ = *ws; + wconst = 0; + } + else + { + p += sprintf (p, "\\x%04lx", *ws); + wconst = 1; + } + ++ws; + } + *p = '\0'; + return xfrm; +} + +void +read_locale_messages (char *name) +{ + char *nl; + char locale[64]; + wchar_t nlbuf[256]; + + strcpy (locale, name); + nl = strchr (locale, '@'); + if (nl) + stpcpy (stpcpy (nl, ".utf8"), strchr (name, '@')); + else + strcat (locale, ".utf8"); + printf ("%s\n", locale); + setlocale (LC_ALL, locale); + + strcpy (msg[mcnt].locale, name); + nl = nl_langinfo (YESSTR); + mbstowcs (nlbuf, nl, 256); + strcpy (msg[mcnt].yesstr, xfrm_utf (nlbuf)); + nl = nl_langinfo (NOSTR); + mbstowcs (nlbuf, nl, 256); + strcpy (msg[mcnt].nostr, xfrm_utf (nlbuf)); + nl = nl_langinfo (YESEXPR); + mbstowcs (nlbuf, nl, 256); + strcpy (msg[mcnt].yesexpr, xfrm_utf (nlbuf)); + nl = nl_langinfo (NOEXPR); + mbstowcs (nlbuf, nl, 256); + strcpy (msg[mcnt].noexpr, xfrm_utf (nlbuf)); + /* Serbian locale rename weirdness */ + if (!strncmp (msg[mcnt].locale, "sr_RS", 5)) + { + /* Create additional equivalent entry for the old locale sr_SP. */ + ++mcnt; + memcpy (&msg[mcnt], &msg[mcnt - 1], sizeof msg[mcnt]); + msg[mcnt].locale[3] = 'S'; + msg[mcnt].locale[4] = 'P'; + /* Create additional equivalent entry for sr_ME@latin missing in Linux. */ + if (!strcmp (msg[mcnt].locale, "sr_SP@latin")) + { + ++mcnt; + memcpy (&msg[mcnt], &msg[mcnt - 1], sizeof msg[mcnt]); + msg[mcnt].locale[3] = 'M'; + msg[mcnt].locale[4] = 'E'; + } + } + ++mcnt; +} + +int +locale_cmp (const void *a, const void *b) +{ + struct lc_msg_t *la = (struct lc_msg_t *) a; + struct lc_msg_t *lb = (struct lc_msg_t *) b; + return strcmp (la->locale, lb->locale); +} + +void +create_list () +{ + FILE *fp = fopen ("lc_msg.h", "w"); + FILE *pp = popen ("rpm -q glibc", "r"); + char vers[64]; + int i; + struct tm *tm; + time_t tim; + char tstr[64]; + + fgets (vers, 64, pp); + pclose (pp); + if (strchr (vers, '\n')) + *strchr (vers, '\n') = '\0'; + tim = time (NULL); + tm = gmtime (&tim); + strftime (tstr, 64, "%F", tm); + fprintf (fp, +"/* This struct of LC_MESSAGES data has been generated by fetching locale\n" +" data from a Linux system using %s on %s. */\n" +"\n" +"struct lc_msg_t\n" +"{\n" +" const char *locale;\n" +" const wchar_t *yesexpr;\n" +" const wchar_t *noexpr;\n" +" const wchar_t *yesstr;\n" +" const wchar_t *nostr;\n" +"};\n" +"\n" +"static struct lc_msg_t lc_msg[] =\n" +"{\n", vers, tstr); + + qsort (msg, mcnt, sizeof (struct lc_msg_t), locale_cmp); + for (i = 0; i < mcnt; ++i) + fprintf (fp, " { \"%s\", L\"%s\", L\"%s\", L\"%s\", L\"%s\" },\n", + msg[i].locale, + msg[i].yesexpr, msg[i].noexpr, + msg[i].yesstr, msg[i].nostr); + fputs ("};\n", fp); + fclose (fp); +} + +int +main () +{ + char name[32], *c; + FILE *pp; + + pp = popen ("locale -a | grep -a '_' | grep -F -v .", "r"); + if (!pp) + { + perror ("popen failed"); + return 1; + } + while (fgets (name, 32, pp)) + { + c = strchr (name, '\n'); + if (c) + *c = '\0'; + read_locale_messages (name); + } + pclose (pp); + create_list (); + return 0; +} diff --git a/winsup/cygwin/linux-locale-helpers/fetch-lc_time_era-from-linux.c b/winsup/cygwin/linux-locale-helpers/fetch-lc_time_era-from-linux.c new file mode 100644 index 0000000000..66dc7aa39a --- /dev/null +++ b/winsup/cygwin/linux-locale-helpers/fetch-lc_time_era-from-linux.c @@ -0,0 +1,237 @@ +/* SPDX-License-Identifier: BSD-2-Clause */ +#define _GNU_SOURCE +#include +#include +#include +#include +#include +#include +#include +#include + +struct lc_era_t { + char locale[64]; + char *date_fmt; + char *d_fmt; + char *d_t_fmt; + char *t_fmt; + char *t_fmt_ampm; + char *era; + char *era_d_fmt; + char *era_d_t_fmt; + char *era_t_fmt; + char *alt_digits; +} era[512]; +int ecnt = 0; + +char * +xfrm_utf (const wchar_t *ws, int slist) +{ + static char xfrm[4096]; + char *p = xfrm; + int wconst = 0; + + while (*ws) + { + if (*ws < 0x80 && (!wconst || !wcschr (L"aAbBcCdDeEfF", *ws))) + { + *p++ = *ws; + wconst = 0; + } + else + { + p += sprintf (p, "\\x%04lx", *ws); + wconst = 1; + } + ++ws; + if (!*ws && slist) + { + ++ws; + if (*ws) + p += sprintf (p, ";"); + } + } + *p = '\0'; + return xfrm; +} + +char * +xfrm_slist (const char *slist) +{ + static wchar_t wxfrm[4096], *wp; + char *xfrm, *p, *ret; + + wp = wxfrm; + while (*slist) + { + size_t len = mbstowcs (wp, slist, wxfrm + 4096 - wp) + 1; + slist += strlen (slist) + 1; + wp += len; + } + *wp++ = L'\0'; + xfrm = xfrm_utf (wxfrm, 1); + p = xfrm; + while (*p) + p += strlen (p) + 1; + ++p; + ret = (char *) malloc (p - xfrm); + memcpy (ret, xfrm, p - xfrm); + return ret; +} + +void +read_locale_era (char *name) +{ + char *nl, *nlera, *altd; + char locale[64]; + wchar_t nlbuf[256]; + + strcpy (locale, name); + nl = strchr (locale, '@'); + if (nl) + stpcpy (stpcpy (nl, ".utf8"), strchr (name, '@')); + else + strcat (locale, ".utf8"); + printf ("%s\n", locale); + setlocale (LC_ALL, locale); + + nlera = nl_langinfo (ERA); + altd = nl_langinfo (ALT_DIGITS); + + if (!*nlera && !*altd) + return; + + strcpy (era[ecnt].locale, name); + nl = nl_langinfo (_DATE_FMT); + mbstowcs (nlbuf, nl, 256); + era[ecnt].date_fmt = strdup (xfrm_utf (nlbuf, 0)); + nl = nl_langinfo (D_FMT); + mbstowcs (nlbuf, nl, 256); + era[ecnt].d_fmt = strdup (xfrm_utf (nlbuf, 0)); + nl = nl_langinfo (D_T_FMT); + mbstowcs (nlbuf, nl, 256); + era[ecnt].d_t_fmt = strdup (xfrm_utf (nlbuf, 0)); + nl = nl_langinfo (T_FMT); + mbstowcs (nlbuf, nl, 256); + era[ecnt].t_fmt = strdup (xfrm_utf (nlbuf, 0)); + nl = nl_langinfo (T_FMT_AMPM); + mbstowcs (nlbuf, nl, 256); + era[ecnt].t_fmt_ampm = strdup (xfrm_utf (nlbuf, 0)); + + era[ecnt].era = *nlera ? xfrm_slist (nlera) : "\0"; + era[ecnt].alt_digits = *altd ? xfrm_slist (altd) : "\0"; + + nl = nl_langinfo (ERA_D_FMT); + mbstowcs (nlbuf, nl, 256); + era[ecnt].era_d_fmt = strdup (xfrm_utf (nlbuf, 0)); + nl = nl_langinfo (ERA_D_T_FMT); + mbstowcs (nlbuf, nl, 256); + era[ecnt].era_d_t_fmt = strdup (xfrm_utf (nlbuf, 0)); + nl = nl_langinfo (ERA_T_FMT); + mbstowcs (nlbuf, nl, 256); + era[ecnt].era_t_fmt = strdup (xfrm_utf (nlbuf, 0)); + /* Serbian locale rename weirdness */ + if (!strncmp (era[ecnt].locale, "sr_RS", 5)) + { + /* Create additional equivalent entries for the old locale sr_SP. */ + ++ecnt; + memcpy (&era[ecnt], &era[ecnt - 1], sizeof era[ecnt]); + era[ecnt].locale[3] = 'S'; + era[ecnt].locale[4] = 'P'; + /* Create additional equivalent entry for sr_ME@latin missing in Linux. */ + if (!strcmp (era[ecnt].locale, "sr_SP@latin")) + { + ++ecnt; + memcpy (&era[ecnt], &era[ecnt - 1], sizeof era[ecnt]); + era[ecnt].locale[3] = 'M'; + era[ecnt].locale[4] = 'E'; + } + } + ++ecnt; +} + +int +locale_cmp (const void *a, const void *b) +{ + struct lc_era_t *la = (struct lc_era_t *) a; + struct lc_era_t *lb = (struct lc_era_t *) b; + return strcmp (la->locale, lb->locale); +} + +void +create_list () +{ + FILE *fp = fopen ("lc_era.h", "w"); + FILE *pp = popen ("rpm -q glibc", "r"); + char vers[64]; + int i; + struct tm *tm; + time_t tim; + char tstr[64]; + + fgets (vers, 64, pp); + pclose (pp); + if (strchr (vers, '\n')) + *strchr (vers, '\n') = '\0'; + tim = time (NULL); + tm = gmtime (&tim); + strftime (tstr, 64, "%F", tm); + fprintf (fp, +"/* This struct of LC_TIME ERA data has been generated by fetching locale\n" +" data from a Linux system using %s on %s. */\n" +"\n" +"struct lc_era_t\n" +"{\n" +" const char *locale;\n" +" const wchar_t *date_fmt;\n" +" const wchar_t *d_fmt;\n" +" const wchar_t *d_t_fmt;\n" +" const wchar_t *t_fmt;\n" +" const wchar_t *t_fmt_ampm;\n" +" const wchar_t *era;\n" +" const wchar_t *era_d_fmt;\n" +" const wchar_t *era_d_t_fmt;\n" +" const wchar_t *era_t_fmt;\n" +" const wchar_t *alt_digits;\n" +"};\n" +"\n" +"static struct lc_era_t lc_era[] =\n" +"{\n", vers, tstr); + + qsort (era, ecnt, sizeof (struct lc_era_t), locale_cmp); + for (i = 0; i < ecnt; ++i) + fprintf (fp, " { \"%s\", L\"%s\", L\"%s\", L\"%s\", L\"%s\", L\"%s\", " + "L\"%s\", L\"%s\", L\"%s\", L\"%s\", L\"%s\" },\n", + era[i].locale, era[i].date_fmt, + era[i].d_fmt, era[i].d_t_fmt, + era[i].t_fmt, era[i].t_fmt_ampm, + era[i].era, era[i].era_d_fmt, + era[i].era_d_t_fmt, era[i].era_t_fmt, + era[i].alt_digits); + fputs ("};\n", fp); + fclose (fp); +} + +int +main () +{ + char name[32], *c; + FILE *pp; + + pp = popen ("locale -a | grep -a '_' | grep -F -v .", "r"); + if (!pp) + { + perror ("popen failed"); + return 1; + } + while (fgets (name, 32, pp)) + { + c = strchr (name, '\n'); + if (c) + *c = '\0'; + read_locale_era (name); + } + pclose (pp); + create_list (); + return 0; +} diff --git a/winsup/cygwin/local_includes/collate.h b/winsup/cygwin/local_includes/collate.h index a89829a833..498d5e1cd4 100644 --- a/winsup/cygwin/local_includes/collate.h +++ b/winsup/cygwin/local_includes/collate.h @@ -13,7 +13,14 @@ extern "C" { extern const int __collate_load_error; -extern int __collate_range_cmp (int c1, int c2); +extern int __wcollate_range_cmp (wint_t, wint_t); +extern int __wscollate_range_cmp (wint_t *, wint_t *, size_t, size_t); + +int is_unicode_equiv (wint_t, wint_t); + +int is_unicode_coll_elem (const wint_t *); + +size_t next_unicode_char (wint_t *); #ifdef __cplusplus }; diff --git a/winsup/cygwin/local_includes/cygheap.h b/winsup/cygwin/local_includes/cygheap.h index c33f378500..b38cb9d1d7 100644 --- a/winsup/cygwin/local_includes/cygheap.h +++ b/winsup/cygwin/local_includes/cygheap.h @@ -196,12 +196,6 @@ class cygheap_user /* cwd cache stuff. */ -enum fcwd_version_t { - FCWD_OLD, - FCWD_W7, - FCWD_W8 -}; - /* This class is used to store the CWD. The CWD storage in the RTL_USER_PROCESS_PARAMETERS block is only an afterthought now. The actual CWD storage is a FAST_CWD structure which is allocated on the process heap. @@ -211,64 +205,17 @@ enum fcwd_version_t { details depending on OS version from the calling functions. The layout of all structures has been tested on 32 and 64 bit. */ class fcwd_access_t { - /* This is the layout used in Windows 8 and later. */ - struct FAST_CWD_8 { - LONG ReferenceCount; /* Only release when this is 0. */ - HANDLE DirectoryHandle; - ULONG OldDismountCount; /* Reflects the system DismountCount - at the time the CWD has been set. */ - UNICODE_STRING Path; /* Path's Buffer member always refers - to the following Buffer array. */ - LONG FSCharacteristics; /* Taken from FileFsDeviceInformation */ - WCHAR Buffer[MAX_PATH] __attribute ((aligned (8))); - }; - /* This is the layout used in Windows 7. */ - struct FAST_CWD_7 { - UNICODE_STRING Path; /* Path's Buffer member always refers - to the following Buffer array. */ - HANDLE DirectoryHandle; - LONG FSCharacteristics; /* Taken from FileFsDeviceInformation */ - LONG ReferenceCount; /* Only release when this is 0. */ - ULONG OldDismountCount; /* Reflects the system DismountCount - at the time the CWD has been set. */ - WCHAR Buffer[MAX_PATH] __attribute ((aligned (8))); - }; - /* This is the old FAST_CWD structure up to the patch from KB 2393802, - release in February 2011. */ - struct FAST_CWD_OLD { - LONG ReferenceCount; /* Only release when this is 0. */ - HANDLE DirectoryHandle; - ULONG OldDismountCount; /* Reflects the system DismountCount + LONG ReferenceCount; /* Only release when this is 0. */ + HANDLE DirectoryHandle; + ULONG OldDismountCount; /* Reflects the system DismountCount at the time the CWD has been set. */ - UNICODE_STRING Path; /* Path's Buffer member always refers + UNICODE_STRING Path; /* Path's Buffer member always refers to the following Buffer array. */ - WCHAR Buffer[MAX_PATH]; - }; - union { - FAST_CWD_OLD fold; - FAST_CWD_7 f7; - FAST_CWD_8 f8; - }; - -#define IMPLEMENT(type, name) \ - type name () { \ - switch (fast_cwd_version ()) { \ - case FCWD_OLD: \ - default: \ - return fold.name; \ - case FCWD_W7: \ - return f7.name; \ - case FCWD_W8: \ - return f8.name; \ - } \ - } - IMPLEMENT (LONG &, ReferenceCount) - IMPLEMENT (HANDLE &, DirectoryHandle) - IMPLEMENT (ULONG &, OldDismountCount) - IMPLEMENT (UNICODE_STRING &, Path) - IMPLEMENT (WCHAR *, Buffer) - void SetFSCharacteristics (LONG val); - static fcwd_version_t &fast_cwd_version (void); + LONG FSCharacteristics; /* Taken from FileFsDeviceInformation */ + /* fcwd_access_t is dynamically allocated with a size of + sizeof(fcwd_access_t) + cwd.Length. Preallocating 2 chars + here allows to append a trailing backslash and NUL. */ + WCHAR Buffer[2] __attribute ((aligned (8))); public: void CopyPath (UNICODE_STRING &target); @@ -295,10 +242,6 @@ class cwdstuff ntdll.dll pointing to the FAST_CWD structure which constitutes the CWD. Unfortunately RtlpCurDirRef is not exported from ntdll.dll. */ fcwd_access_t **fast_cwd_ptr; - /* Type of FAST_CWD used on this system. Keeping this information - available in shared memory avoids to test for the version every time - around. Default to new version. */ - fcwd_version_t fast_cwd_version; void override_win32_cwd (bool init, ULONG old_dismount_count); public: @@ -359,6 +302,15 @@ struct user_heap_info void init (); }; +/* This info is maintained for /proc//maps ONLY! */ +struct shared_region_info +{ + void *cygwin_shared_addr; + void *user_shared_addr; + void *myself_shared_addr; + void *console_shared_addr; +}; + class cygheap_domain_info { PWCHAR pdom_name; @@ -562,6 +514,7 @@ struct init_cygheap: public mini_cygheap cygheap_ugid_cache ugid_cache; cygheap_user user; user_heap_info user_heap; + shared_region_info shared_regions; mode_t umask; LONG rlim_as_id; unsigned long rlim_core; diff --git a/winsup/cygwin/local_includes/devices.h b/winsup/cygwin/local_includes/devices.h index 8f718dd17a..1e035f9d6a 100644 --- a/winsup/cygwin/local_includes/devices.h +++ b/winsup/cygwin/local_includes/devices.h @@ -71,6 +71,7 @@ enum fh_devices FH_DEV = FHDEV (DEV_VIRTFS_MAJOR, 193), FH_CYGDRIVE= FHDEV (DEV_VIRTFS_MAJOR, 192), FH_DEV_FD = FHDEV (DEV_VIRTFS_MAJOR, 191), + FH_DEV_DISK= FHDEV (DEV_VIRTFS_MAJOR, 190), FH_SIGNALFD= FHDEV (DEV_VIRTFS_MAJOR, 13), FH_TIMERFD = FHDEV (DEV_VIRTFS_MAJOR, 14), @@ -242,6 +243,7 @@ enum fh_devices FH_URANDOM = FHDEV (DEV_MEM_MAJOR, 9), DEV_SOUND_MAJOR = 14, + FH_OSS_MIXER = FHDEV (DEV_SOUND_MAJOR, 0), FH_OSS_DSP = FHDEV (DEV_SOUND_MAJOR, 3), DEV_SOCK_MAJOR = 30, @@ -414,6 +416,8 @@ extern const _device dev_piper_storage; #define piper_dev ((device *) &dev_piper_storage) extern const _device dev_pipew_storage; #define pipew_dev ((device *) &dev_pipew_storage) +extern const _device dev_dev_disk_storage; +#define dev_disk_dev ((device *) &dev_dev_disk_storage) extern const _device dev_proc_storage; #define proc_dev ((device *) &dev_proc_storage) extern const _device dev_dev_storage; @@ -438,7 +442,8 @@ extern const _device dev_fs_storage; #define isprocsys_dev(devn) (devn == FH_PROCSYS) #define isvirtual_dev(devn) \ - (isproc_dev (devn) || devn == FH_CYGDRIVE || devn == FH_NETDRIVE || devn == FH_DEV_FD) + (isproc_dev (devn) || devn == FH_CYGDRIVE || devn == FH_NETDRIVE \ + || devn == FH_DEV_FD || devn == FH_DEV_DISK) #define iscons_dev(n) \ ((device::major ((dev_t) (n)) == DEV_CONS_MAJOR) \ diff --git a/winsup/cygwin/local_includes/errmap.h b/winsup/cygwin/local_includes/errmap.h index 326b35b6c2..a0b3ff4006 100644 --- a/winsup/cygwin/local_includes/errmap.h +++ b/winsup/cygwin/local_includes/errmap.h @@ -438,7 +438,7 @@ static const int errmap[] = 0, /* 430 */ 0, /* 431 */ 0, /* 432 */ - 0, /* 433 */ + ENODEV, /* ERROR_NO_SUCH_DEVICE */ 0, /* 434 */ 0, /* 435 */ 0, /* 436 */ @@ -1115,7 +1115,7 @@ static const int errmap[] = 0, /* ERROR_DEVICE_NOT_PARTITIONED */ 0, /* ERROR_UNABLE_TO_LOCK_MEDIA */ 0, /* ERROR_UNABLE_TO_UNLOAD_MEDIA */ - 0, /* ERROR_MEDIA_CHANGED */ + ENODEV, /* ERROR_MEDIA_CHANGED */ EIO, /* ERROR_BUS_RESET */ ENOMEDIUM, /* ERROR_NO_MEDIA_IN_DRIVE */ 0, /* ERROR_NO_UNICODE_TRANSLATION */ diff --git a/winsup/cygwin/local_includes/fhandler.h b/winsup/cygwin/local_includes/fhandler.h index f017a6d6ee..000004479b 100644 --- a/winsup/cygwin/local_includes/fhandler.h +++ b/winsup/cygwin/local_includes/fhandler.h @@ -14,6 +14,7 @@ details. */ #include #include #include +#include /* It appears that 64K is the block size used for buffered I/O on NT. Using this blocksize in read/write calls in the application results @@ -37,9 +38,20 @@ details. */ ERROR_NOT_ENOUGH_MEMORY occurs in win7 if this value is used. */ #define INREC_SIZE 2048 +/* Helper function to allow checking if some offset in a file is so far + beyond EOF, that at least one sparse chunk fits into the span. */ +inline bool +span_sparse_chunk (off_t new_pos, off_t old_eof) +{ + return roundup2 (old_eof, FILE_SPARSE_GRANULARITY) + FILE_SPARSE_GRANULARITY + <= rounddown (new_pos, FILE_SPARSE_GRANULARITY); +} + extern const char *windows_device_names[]; extern struct __cygwin_perfile *perfile_table; #define __fmode (*(user_data->fmode_ptr)) +extern const char dev_disk[]; +extern const size_t dev_disk_len; extern const char proc[]; extern const size_t proc_len; extern const char procsys[]; @@ -387,7 +399,7 @@ class fhandler_base virtual ssize_t fgetxattr (const char *, void *, size_t); virtual int fsetxattr (const char *, const void *, size_t, int); virtual int fadvise (off_t, off_t, int); - virtual int ftruncate (off_t, bool); + virtual int fallocate (int, off_t, off_t); virtual int link (const char *); virtual int utimens (const struct timespec *); virtual int fsync (); @@ -1185,6 +1197,8 @@ class fhandler_pipe: public fhandler_pipe_fifo private: HANDLE read_mtx; pid_t popen_pid; + bool was_blocking_read_pipe; + bool is_blocking_read_pipe; HANDLE query_hdl; HANDLE hdl_cnt_mtx; HANDLE query_hdl_proc; @@ -1193,10 +1207,8 @@ class fhandler_pipe: public fhandler_pipe_fifo uint64_t pipename_key; DWORD pipename_pid; LONG pipename_id; - bool was_blocking_read_pipe; void release_select_sem (const char *); HANDLE get_query_hdl_per_process (WCHAR *, OBJECT_NAME_INFORMATION *); - HANDLE get_query_hdl_per_system (WCHAR *, OBJECT_NAME_INFORMATION *); public: fhandler_pipe (); @@ -1223,7 +1235,7 @@ class fhandler_pipe: public fhandler_pipe_fifo int fstat (struct stat *buf); int fstatvfs (struct statvfs *buf); int fadvise (off_t, off_t, int); - int ftruncate (off_t, bool); + int fallocate (int, off_t, off_t); int init (HANDLE, DWORD, mode_t, int64_t); static int create (fhandler_pipe *[2], unsigned, int); static DWORD create (LPSECURITY_ATTRIBUTES, HANDLE *, HANDLE *, DWORD, @@ -1277,6 +1289,7 @@ class fhandler_pipe: public fhandler_pipe_fifo } static void spawn_worker (int fileno_stdin, int fileno_stdout, int fileno_stderr); + static void sigproc_worker (void); }; #define CYGWIN_FIFO_PIPE_NAME_LEN 47 @@ -1711,6 +1724,10 @@ class fhandler_disk_file: public fhandler_base uint64_t fs_ioc_getflags (); int fs_ioc_setflags (uint64_t); + falloc_allocate (int, off_t, off_t); + falloc_punch_hole (off_t, off_t); + falloc_zero_range (int, off_t, off_t); + public: fhandler_disk_file (); fhandler_disk_file (path_conv &pc); @@ -1730,7 +1747,7 @@ class fhandler_disk_file: public fhandler_base ssize_t fgetxattr (const char *, void *, size_t); int fsetxattr (const char *, const void *, size_t, int); int fadvise (off_t, off_t, int); - int ftruncate (off_t, bool); + int fallocate (int, off_t, off_t); int link (const char *); int utimens (const struct timespec *); int fstatvfs (struct statvfs *buf); @@ -1910,6 +1927,17 @@ class fhandler_serial: public fhandler_base #define release_output_mutex() \ __release_output_mutex (__PRETTY_FUNCTION__, __LINE__) +/* + -1: CTTY is not initialized yet. Can associate with the TTY + which is associated with the own session. + -2: CTTY has been released by setsid(). Can associate with + a new TTY as CTTY, but cannot associate with the TTYs + already associated with other sessions. +*/ +#define CTTY_UNINITIALIZED -1 +#define CTTY_RELEASED -2 +#define CTTY_IS_VALID(c) ((c) > 0) + extern DWORD mutex_timeout; DWORD acquire_attach_mutex (DWORD t); void release_attach_mutex (void); @@ -1930,6 +1958,7 @@ class fhandler_termios: public fhandler_base virtual void acquire_input_mutex_if_necessary (DWORD ms) {}; virtual void release_input_mutex_if_necessary (void) {}; virtual void discard_input () {}; + dev_t dev_referred_via; /* Result status of processing keys in process_sigs(). */ enum process_sig_state { @@ -1969,6 +1998,7 @@ class fhandler_termios: public fhandler_base void echo_erase (int force = 0); virtual off_t lseek (off_t, int); pid_t tcgetsid (); + virtual int fstat (struct stat *buf); fhandler_termios (void *) {} @@ -1992,7 +2022,6 @@ class fhandler_termios: public fhandler_base virtual void setpgid_aux (pid_t pid) {} virtual bool need_console_handler () { return false; } virtual bool need_send_ctrl_c_event () { return true; } - virtual DWORD get_helper_pid () { return 0; } struct ptys_handle_set_t { @@ -2007,6 +2036,7 @@ class fhandler_termios: public fhandler_base HANDLE output_handle; HANDLE input_mutex; HANDLE output_mutex; + _minor_t unit; }; class spawn_worker { @@ -2133,6 +2163,8 @@ class dev_console char *cons_rapoi; bool cursor_key_app_mode; bool disable_master_thread; + tty::cons_mode curr_input_mode; + tty::cons_mode curr_output_mode; bool master_thread_suspended; int num_processed; /* Number of input events in the current input buffer already processed by cons_master_thread(). */ @@ -2175,10 +2207,11 @@ class fhandler_console: public fhandler_termios HANDLE thread_sync_event; private: static const unsigned MAX_WRITE_CHARS; - static console_state *shared_console_info; + static console_state *shared_console_info[MAX_CONS_DEV + 1]; static bool invisible_console; HANDLE input_mutex, output_mutex; handle_set_t handle_set; + _minor_t unit; /* Used when we encounter a truncated multi-byte sequence. The lead bytes are stored here and revisited in the next write call. */ @@ -2202,13 +2235,14 @@ class fhandler_console: public fhandler_termios const unsigned char *write_normal (unsigned const char*, unsigned const char *); void char_command (char); bool set_raw_win32_keyboard_mode (bool); + void set_console_title (char *); /* Input calls */ int igncr_enabled (); void set_cursor_maybe (); static bool create_invisible_console_workaround (bool force); static console_state *open_shared_console (HWND, HANDLE&, bool&); - static void fix_tab_position (HANDLE h); + static void fix_tab_position (HANDLE h, pid_t owner); /* console mode calls */ const handle_set_t *get_handle_set (void) {return &handle_set;} @@ -2217,11 +2251,13 @@ class fhandler_console: public fhandler_termios static void set_output_mode (tty::cons_mode m, const termios *t, const handle_set_t *p); + static BOOL CALLBACK enum_windows (HWND hw, LPARAM lp); + public: pid_t tc_getpgid () { - return shared_console_info ? - shared_console_info->tty_min_state.getpgid () : 0; + return shared_console_info[unit] ? + shared_console_info[unit]->tty_min_state.getpgid () : 0; } fhandler_console (fh_devices); static console_state *open_shared_console (HWND hw, HANDLE& h) @@ -2258,12 +2294,12 @@ class fhandler_console: public fhandler_termios int ioctl (unsigned int cmd, void *); int init (HANDLE, DWORD, mode_t); bool mouse_aware (MOUSE_EVENT_RECORD& mouse_event); - bool focus_aware () {return shared_console_info->con.use_focus;} + bool focus_aware () {return shared_console_info[unit]->con.use_focus;} bool get_cons_readahead_valid () { acquire_input_mutex (INFINITE); - bool ret = shared_console_info->con.cons_rapoi != NULL && - *shared_console_info->con.cons_rapoi; + bool ret = shared_console_info[unit]->con.cons_rapoi != NULL && + *shared_console_info[unit]->con.cons_rapoi; release_input_mutex (); return ret; } @@ -2287,7 +2323,9 @@ class fhandler_console: public fhandler_termios void copy_from (fhandler_base *x) { pc.free_strings (); + dev_t via = this->dev_referred_via; /* Do not copy dev_referred_via */ *this = *reinterpret_cast (x); + this->dev_referred_via = via; _copy_from_reset_helper (); } @@ -2308,11 +2346,9 @@ class fhandler_console: public fhandler_termios void acquire_input_mutex_if_necessary (DWORD ms) { acquire_input_mutex (ms); - acquire_attach_mutex (ms); } void release_input_mutex_if_necessary (void) { - release_attach_mutex (); release_input_mutex (); } @@ -2331,6 +2367,21 @@ class fhandler_console: public fhandler_termios static void set_console_mode_to_native (); bool need_console_handler (); static void set_disable_master_thread (bool x, fhandler_console *cons = NULL); + static DWORD attach_console (pid_t, bool *err = NULL); + static void detach_console (DWORD, pid_t); + pid_t get_owner (); + void wpbuf_put (char c); + void wpbuf_send (); + int fstat (struct stat *buf); + + class console_unit + { + int n; + public: + operator console_state * () const; + operator int () const { return n; } + console_unit (int, HANDLE *input_mutex = NULL); + }; friend tty_min * tty_list::get_cttyp (); }; @@ -2384,7 +2435,7 @@ class fhandler_pty_common: public fhandler_termios bool stub_only = false, bool nat = false); bool to_be_read_from_nat_pipe (void); - static DWORD attach_console_temporarily (DWORD target_pid, DWORD helper_pid); + static DWORD attach_console_temporarily (DWORD target_pid); static void resume_from_temporarily_attach (DWORD resume_pid); protected: @@ -2411,7 +2462,7 @@ class fhandler_pty_slave: public fhandler_pty_common typedef ptys_handle_set_t handle_set_t; /* Constructor */ - fhandler_pty_slave (int); + fhandler_pty_slave (int, dev_t via = 0); void set_output_handle_nat (HANDLE h) { output_handle_nat = h; } HANDLE& get_output_handle_nat () { return output_handle_nat; } @@ -2449,7 +2500,9 @@ class fhandler_pty_slave: public fhandler_pty_common void copy_from (fhandler_base *x) { pc.free_strings (); + dev_t via = this->dev_referred_via; /* Do not copy dev_referred_via */ *this = *reinterpret_cast (x); + this->dev_referred_via = via; _copy_from_reset_helper (); } @@ -2507,7 +2560,6 @@ class fhandler_pty_master: public fhandler_pty_common HANDLE from_slave_nat; HANDLE output_mutex; tty *ttyp; - DWORD helper_pid; }; private: int pktmode; // non-zero if pty in a packet mode. @@ -2521,12 +2573,11 @@ class fhandler_pty_master: public fhandler_pty_common HANDLE thread_param_copied_event; HANDLE helper_goodbye; HANDLE helper_h_process; - DWORD helper_pid; public: HANDLE get_echo_handle () const { return echo_r; } /* Constructor */ - fhandler_pty_master (int); + fhandler_pty_master (int, dev_t via = 0); static DWORD pty_master_thread (const master_thread_param_t *p); static DWORD pty_master_fwd_thread (const master_fwd_thread_param_t *p); @@ -2569,7 +2620,9 @@ class fhandler_pty_master: public fhandler_pty_common void copy_from (fhandler_base *x) { pc.free_strings (); + dev_t via = this->dev_referred_via; /* Do not copy dev_referred_via */ *this = *reinterpret_cast (x); + this->dev_referred_via = via; _copy_from_reset_helper (); } @@ -2584,7 +2637,6 @@ class fhandler_pty_master: public fhandler_pty_common void get_master_fwd_thread_param (master_fwd_thread_param_t *p); void set_mask_flusho (bool m) { get_ttyp ()->mask_flusho = m; } bool need_send_ctrl_c_event (); - DWORD get_helper_pid () { return helper_pid; } }; class fhandler_dev_null: public fhandler_base @@ -2758,6 +2810,35 @@ class fhandler_windows: public fhandler_base } }; +class fhandler_dev_mixer: public fhandler_base +{ + private: + int rec_source; + public: + fhandler_dev_mixer () {} + int open (int, mode_t mode = 0); + ssize_t write (const void *, size_t); + void read (void *, size_t&); + int ioctl (unsigned int, void *); + + fhandler_dev_mixer (void *) {} + + void copy_from (fhandler_base *x) + { + pc.free_strings (); + *this = *reinterpret_cast (x); + _copy_from_reset_helper (); + } + + fhandler_dev_mixer *clone (cygheap_types malloc_type = HEAP_FHANDLER) + { + void *ptr = (void *) ccalloc (malloc_type, 1, sizeof (fhandler_dev_mixer)); + fhandler_dev_mixer *fh = new (ptr) fhandler_dev_mixer (ptr); + fh->copy_from (this); + return fh; + } +}; + class fhandler_dev_dsp: public fhandler_base { public: @@ -2772,6 +2853,9 @@ class fhandler_dev_dsp: public fhandler_base Audio_out *audio_out_; Audio_in *audio_in_; bool being_closed; + bool fragment_has_been_set; + int fragstotal_; + int fragsize_; public: fhandler_dev_dsp (); fhandler_dev_dsp *base () const {return (fhandler_dev_dsp *)archetype;} @@ -2784,11 +2868,12 @@ class fhandler_dev_dsp: public fhandler_base int close (); void fixup_after_fork (HANDLE); void fixup_after_exec (); + bool open_setup (int); private: - ssize_t _write (const void *, size_t); - void _read (void *, size_t&); - int _ioctl (unsigned int, void *); + ssize_t _write (const void *, size_t, fhandler_dev_dsp *); + void _read (void *, size_t&, fhandler_dev_dsp *); + int _ioctl (unsigned int, void *, fhandler_dev_dsp *); int _fcntl (int cmd, intptr_t); void _fixup_after_fork (HANDLE); void _fixup_after_exec (); @@ -2796,6 +2881,9 @@ class fhandler_dev_dsp: public fhandler_base void close_audio_in (); void close_audio_out (bool = false); + bool _read_ready(); + bool _write_ready(); + public: bool use_archetype () const {return true;} @@ -2815,6 +2903,15 @@ class fhandler_dev_dsp: public fhandler_base fh->copy_from (this); return fh; } + + /* select.cc */ + select_record *select_read (select_stuff *); + select_record *select_write (select_stuff *); + select_record *select_except (select_stuff *); + + bool read_ready (); + bool write_ready (); + bool is_closed () { return being_closed; }; }; class fhandler_virtual : public fhandler_base @@ -3127,6 +3224,57 @@ class fhandler_procnet: public fhandler_proc } }; +class fhandler_dev_disk: public fhandler_virtual +{ +public: + enum dev_disk_location { + unknown_loc, invalid_loc, disk_dir, + /* Keep these in sync with dev_disk.cc:by_dir_names array: */ + disk_by_drive, disk_by_id, disk_by_label, + disk_by_partuuid, disk_by_uuid, disk_by_voluuid + }; + +private: + dev_disk_location loc; + bool loc_is_link; + + void init_dev_disk (); + void ensure_inited () + { + if (loc == unknown_loc) + init_dev_disk (); + } + + int drive_from_id; + int part_from_id; + + public: + fhandler_dev_disk (); + fhandler_dev_disk (void *) {} + virtual_ftype_t exists(); + DIR *opendir (int fd); + int closedir (DIR *); + int readdir (DIR *, dirent *); + int open (int flags, mode_t mode = 0); + int fstat (struct stat *buf); + bool fill_filebuf (); + + void copy_from (fhandler_base *x) + { + pc.free_strings (); + *this = *reinterpret_cast (x); + _copy_from_reset_helper (); + } + + fhandler_dev_disk *clone (cygheap_types malloc_type = HEAP_FHANDLER) + { + void *ptr = (void *) ccalloc (malloc_type, 1, sizeof (fhandler_dev_disk)); + fhandler_dev_disk *fh = new (ptr) fhandler_dev_disk (ptr); + fh->copy_from (this); + return fh; + } +}; + class fhandler_dev_fd: public fhandler_virtual { public: @@ -3297,7 +3445,7 @@ class fhandler_mqueue: public fhandler_disk_file ssize_t fgetxattr (const char *, void *, size_t) NO_IMPL; int fsetxattr (const char *, const void *, size_t, int) NO_IMPL; int fadvise (off_t, off_t, int) NO_IMPL; - int ftruncate (off_t, bool) NO_IMPL; + int fallocate (int, off_t, off_t) NO_IMPL; int link (const char *) NO_IMPL; int mkdir (mode_t) NO_IMPL; ssize_t pread (void *, size_t, off_t, void *aio = NULL) NO_IMPL; @@ -3353,6 +3501,7 @@ typedef union char __dev_raw[sizeof (fhandler_dev_raw)]; char __dev_tape[sizeof (fhandler_dev_tape)]; char __dev_zero[sizeof (fhandler_dev_zero)]; + char __dev_disk[sizeof (fhandler_dev_disk)]; char __dev_fd[sizeof (fhandler_dev_fd)]; char __disk_file[sizeof (fhandler_disk_file)]; char __fifo[sizeof (fhandler_fifo)]; diff --git a/winsup/cygwin/local_includes/lc_collelem.h b/winsup/cygwin/local_includes/lc_collelem.h new file mode 100644 index 0000000000..49774550c4 --- /dev/null +++ b/winsup/cygwin/local_includes/lc_collelem.h @@ -0,0 +1,2936 @@ +/* This struct of collating elements data has been generated by fetching + locale data from a GLibc 2.18.90 source dir on 2023-02-19. */ +struct collating_element_t +{ + const char32_t *element; + const char *locale; +}; + +collating_element_t collating_element[] = +{ + { U"\U00000027\U00000059", "ha_NG" }, /* <'1Y> */ + { U"\U00000027\U00000079", "ha_NG" }, /* <'1y> */ + { U"\U00000041\U00000041", "da_DK" }, /* */ + { U"\U00000041\U00000041", "nb_NO" }, /* */ + { U"\U00000041\U00000061", "da_DK" }, /* */ + { U"\U00000041\U00000061", "nb_NO" }, /* */ + { U"\U00000041\U00000300", "ig_NG" }, /* */ + { U"\U00000041\U00000300", "yo_NG" }, /* */ + { U"\U00000041\U00000301", "ig_NG" }, /* */ + { U"\U00000041\U00000301", "yo_NG" }, /* */ + { U"\U00000041\U00000302", "yo_NG" }, /* > */ + { U"\U00000041\U0000030C", "yo_NG" }, /* */ + { U"\U00000043\U00000027\U00000048", "br_FR" }, /* */ + { U"\U00000043\U00000027\U00000068", "br_FR" }, /* */ + { U"\U00000043\U00000043\U00000053", "hu_HU" }, /* */ + { U"\U00000043\U00000043\U00000073", "hu_HU" }, /* */ + { U"\U00000043\U00000048", "br_FR" }, /* */ + { U"\U00000043\U00000048", "cs_CZ" }, /* */ + { U"\U00000043\U00000048", "cy_GB" }, /* */ + { U"\U00000043\U00000048", "es_US" }, /* */ + { U"\U00000043\U00000048", "hsb_DE" }, /* */ + { U"\U00000043\U00000048", "ig_NG" }, /* */ + { U"\U00000043\U00000048", "ik_CA" }, /* */ + { U"\U00000043\U00000048", "om_KE" }, /* */ + { U"\U00000043\U00000053", "hu_HU" }, /* */ + { U"\U00000043\U00000063\U00000053", "hu_HU" }, /* */ + { U"\U00000043\U00000063\U00000073", "hu_HU" }, /* */ + { U"\U00000043\U00000068", "br_FR" }, /* */ + { U"\U00000043\U00000068", "cs_CZ" }, /* */ + { U"\U00000043\U00000068", "cy_GB" }, /* */ + { U"\U00000043\U00000068", "es_US" }, /* */ + { U"\U00000043\U00000068", "hsb_DE" }, /* */ + { U"\U00000043\U00000068", "ig_NG" }, /* */ + { U"\U00000043\U00000068", "ik_CA" }, /* */ + { U"\U00000043\U00000068", "om_KE" }, /* */ + { U"\U00000043\U00000073", "hu_HU" }, /* */ + { U"\U00000044\U00000044", "cy_GB" }, /* */ + { U"\U00000044\U00000044\U0000005A", "hu_HU" }, /* */ + { U"\U00000044\U00000044\U0000005A\U00000053", "hu_HU" }, /* */ + { U"\U00000044\U00000044\U0000005A\U00000073", "hu_HU" }, /* */ + { U"\U00000044\U00000044\U0000007A", "hu_HU" }, /* */ + { U"\U00000044\U00000044\U0000007A\U00000053", "hu_HU" }, /* */ + { U"\U00000044\U00000044\U0000007A\U00000073", "hu_HU" }, /* */ + { U"\U00000044\U00000048", "om_KE" }, /* */ + { U"\U00000044\U00000048", "sq_AL" }, /* */ + { U"\U00000044\U0000005A", "hu_HU" }, /* */ + { U"\U00000044\U0000005A\U00000053", "hu_HU" }, /* */ + { U"\U00000044\U0000005A\U00000073", "hu_HU" }, /* */ + { U"\U00000044\U00000064", "cy_GB" }, /* */ + { U"\U00000044\U00000064\U0000005A", "hu_HU" }, /* */ + { U"\U00000044\U00000064\U0000005A\U00000053", "hu_HU" }, /* */ + { U"\U00000044\U00000064\U0000005A\U00000073", "hu_HU" }, /* */ + { U"\U00000044\U00000064\U0000007A", "hu_HU" }, /* */ + { U"\U00000044\U00000064\U0000007A\U00000053", "hu_HU" }, /* */ + { U"\U00000044\U00000064\U0000007A\U00000073", "hu_HU" }, /* */ + { U"\U00000044\U00000068", "om_KE" }, /* */ + { U"\U00000044\U00000068", "sq_AL" }, /* */ + { U"\U00000044\U0000007A", "hu_HU" }, /* */ + { U"\U00000044\U0000007A\U00000053", "hu_HU" }, /* */ + { U"\U00000044\U0000007A\U00000073", "hu_HU" }, /* */ + { U"\U00000044\U00000179", "hsb_DE" }, /* */ + { U"\U00000044\U0000017A", "hsb_DE" }, /* */ + { U"\U00000044\U0000017D", "bs_BA" }, /* */ + { U"\U00000044\U0000017D", "hr_HR" }, /* */ + { U"\U00000044\U0000017D", "sr_RS" }, /* */ + { U"\U00000044\U0000017E", "bs_BA" }, /* */ + { U"\U00000044\U0000017E", "hr_HR" }, /* */ + { U"\U00000044\U0000017E", "sr_RS" }, /* */ + { U"\U00000045\U00000300", "ig_NG" }, /* */ + { U"\U00000045\U00000300", "yo_NG" }, /* */ + { U"\U00000045\U00000301", "ig_NG" }, /* */ + { U"\U00000045\U00000301", "yo_NG" }, /* */ + { U"\U00000045\U00000302", "yo_NG" }, /* > */ + { U"\U00000045\U0000030C", "yo_NG" }, /* */ + { U"\U00000045\U00000323", "yo_NG" }, /* */ + { U"\U00000045\U00000323\U00000300", "yo_NG" }, /* */ + { U"\U00000045\U00000323\U00000301", "yo_NG" }, /* */ + { U"\U00000046\U00000046", "cy_GB" }, /* */ + { U"\U00000046\U00000066", "cy_GB" }, /* */ + { U"\U00000047\U00000027", "uz_UZ" }, /* */ + { U"\U00000047\U00000027", "uz_UZ@cyrillic" }, /* */ + { U"\U00000047\U00000042", "ig_NG" }, /* */ + { U"\U00000047\U00000042", "yo_NG" }, /* */ + { U"\U00000047\U00000047\U00000059", "hu_HU" }, /* */ + { U"\U00000047\U00000047\U00000079", "hu_HU" }, /* */ + { U"\U00000047\U00000048", "ig_NG" }, /* */ + { U"\U00000047\U0000004A", "sq_AL" }, /* */ + { U"\U00000047\U00000057", "ig_NG" }, /* */ + { U"\U00000047\U00000059", "hu_HU" }, /* */ + { U"\U00000047\U00000062", "ig_NG" }, /* */ + { U"\U00000047\U00000062", "yo_NG" }, /* */ + { U"\U00000047\U00000067\U00000059", "hu_HU" }, /* */ + { U"\U00000047\U00000067\U00000079", "hu_HU" }, /* */ + { U"\U00000047\U00000068", "ig_NG" }, /* */ + { U"\U00000047\U0000006A", "sq_AL" }, /* */ + { U"\U00000047\U00000077", "ig_NG" }, /* */ + { U"\U00000047\U00000079", "hu_HU" }, /* */ + { U"\U00000047\U00000126", "mt_MT" }, /* */ + { U"\U00000047\U00000127", "mt_MT" }, /* */ + { U"\U00000049\U00000045", "mt_MT" }, /* */ + { U"\U00000049\U00000065", "mt_MT" }, /* */ + { U"\U00000049\U00000300", "ig_NG" }, /* */ + { U"\U00000049\U00000300", "yo_NG" }, /* */ + { U"\U00000049\U00000301", "ig_NG" }, /* */ + { U"\U00000049\U00000301", "yo_NG" }, /* */ + { U"\U00000049\U00000302", "yo_NG" }, /* > */ + { U"\U00000049\U0000030C", "yo_NG" }, /* */ + { U"\U00000049\U00000323", "ig_NG" }, /* */ + { U"\U00000049\U00000323\U00000300", "ig_NG" }, /* */ + { U"\U00000049\U00000323\U00000301", "ig_NG" }, /* */ + { U"\U0000004B\U00000048", "om_KE" }, /* */ + { U"\U0000004B\U00000050", "ig_NG" }, /* */ + { U"\U0000004B\U00000057", "ig_NG" }, /* */ + { U"\U0000004B\U00000068", "om_KE" }, /* */ + { U"\U0000004B\U00000070", "ig_NG" }, /* */ + { U"\U0000004B\U00000077", "ig_NG" }, /* */ + { U"\U0000004C\U0000004A", "bs_BA" }, /* */ + { U"\U0000004C\U0000004A", "hr_HR" }, /* */ + { U"\U0000004C\U0000004A", "sr_RS" }, /* */ + { U"\U0000004C\U0000004C", "cy_GB" }, /* */ + { U"\U0000004C\U0000004C", "es_US" }, /* */ + { U"\U0000004C\U0000004C", "sq_AL" }, /* */ + { U"\U0000004C\U0000004C\U00000059", "hu_HU" }, /* */ + { U"\U0000004C\U0000004C\U00000079", "hu_HU" }, /* */ + { U"\U0000004C\U00000059", "hu_HU" }, /* */ + { U"\U0000004C\U0000006A", "bs_BA" }, /* */ + { U"\U0000004C\U0000006A", "hr_HR" }, /* */ + { U"\U0000004C\U0000006A", "sr_RS" }, /* */ + { U"\U0000004C\U0000006C", "cy_GB" }, /* */ + { U"\U0000004C\U0000006C", "es_US" }, /* */ + { U"\U0000004C\U0000006C", "sq_AL" }, /* */ + { U"\U0000004C\U0000006C\U00000059", "hu_HU" }, /* */ + { U"\U0000004C\U0000006C\U00000079", "hu_HU" }, /* */ + { U"\U0000004C\U00000079", "hu_HU" }, /* */ + { U"\U0000004C\U00000323", "ik_CA" }, /* */ + { U"\U0000004D\U00000300", "yo_NG" }, /* */ + { U"\U0000004D\U00000301", "yo_NG" }, /* */ + { U"\U0000004D\U00000304", "yo_NG" }, /* */ + { U"\U0000004E\U00000047", "cy_GB" }, /* */ + { U"\U0000004E\U00000047", "fil_PH" }, /* */ + { U"\U0000004E\U00000047", "mi_NZ" }, /* */ + { U"\U0000004E\U00000047", "tl_PH" }, /* */ + { U"\U0000004E\U0000004A", "bs_BA" }, /* */ + { U"\U0000004E\U0000004A", "hr_HR" }, /* */ + { U"\U0000004E\U0000004A", "sq_AL" }, /* */ + { U"\U0000004E\U0000004A", "sr_RS" }, /* */ + { U"\U0000004E\U0000004E\U00000059", "hu_HU" }, /* */ + { U"\U0000004E\U0000004E\U00000079", "hu_HU" }, /* */ + { U"\U0000004E\U00000057", "ig_NG" }, /* */ + { U"\U0000004E\U00000059", "hu_HU" }, /* */ + { U"\U0000004E\U00000059", "ig_NG" }, /* */ + { U"\U0000004E\U00000059", "om_KE" }, /* */ + { U"\U0000004E\U00000067", "cy_GB" }, /* */ + { U"\U0000004E\U00000067", "fil_PH" }, /* */ + { U"\U0000004E\U00000067", "mi_NZ" }, /* */ + { U"\U0000004E\U00000067", "tl_PH" }, /* */ + { U"\U0000004E\U0000006A", "bs_BA" }, /* */ + { U"\U0000004E\U0000006A", "hr_HR" }, /* */ + { U"\U0000004E\U0000006A", "sq_AL" }, /* */ + { U"\U0000004E\U0000006A", "sr_RS" }, /* */ + { U"\U0000004E\U0000006E\U00000059", "hu_HU" }, /* */ + { U"\U0000004E\U0000006E\U00000079", "hu_HU" }, /* */ + { U"\U0000004E\U00000077", "ig_NG" }, /* */ + { U"\U0000004E\U00000079", "hu_HU" }, /* */ + { U"\U0000004E\U00000079", "ig_NG" }, /* */ + { U"\U0000004E\U00000079", "om_KE" }, /* */ + { U"\U0000004E\U00000300", "yo_NG" }, /* */ + { U"\U0000004E\U00000301", "yo_NG" }, /* */ + { U"\U0000004E\U00000304", "yo_NG" }, /* */ + { U"\U0000004E\U00000307", "ig_NG" }, /* */ + { U"\U0000004F\U00000027", "uz_UZ" }, /* */ + { U"\U0000004F\U00000027", "uz_UZ@cyrillic" }, /* */ + { U"\U0000004F\U00000300", "ig_NG" }, /* */ + { U"\U0000004F\U00000300", "yo_NG" }, /* */ + { U"\U0000004F\U00000301", "ig_NG" }, /* */ + { U"\U0000004F\U00000301", "yo_NG" }, /* */ + { U"\U0000004F\U00000302", "yo_NG" }, /* > */ + { U"\U0000004F\U0000030C", "yo_NG" }, /* */ + { U"\U0000004F\U00000323", "ig_NG" }, /* */ + { U"\U0000004F\U00000323", "yo_NG" }, /* */ + { U"\U0000004F\U00000323\U00000300", "ig_NG" }, /* */ + { U"\U0000004F\U00000323\U00000300", "yo_NG" }, /* */ + { U"\U0000004F\U00000323\U00000301", "ig_NG" }, /* */ + { U"\U0000004F\U00000323\U00000301", "yo_NG" }, /* */ + { U"\U0000004F\U00000358", "nan_TW@latin" }, /* */ + { U"\U00000050\U00000048", "cy_GB" }, /* */ + { U"\U00000050\U00000048", "om_KE" }, /* */ + { U"\U00000050\U00000068", "cy_GB" }, /* */ + { U"\U00000050\U00000068", "om_KE" }, /* */ + { U"\U00000052\U00000048", "cy_GB" }, /* */ + { U"\U00000052\U00000052", "sq_AL" }, /* */ + { U"\U00000052\U00000068", "cy_GB" }, /* */ + { U"\U00000052\U00000072", "sq_AL" }, /* */ + { U"\U00000052\U00000303", "ha_NG" }, /* */ + { U"\U00000053\U00000048", "ha_NG" }, /* */ + { U"\U00000053\U00000048", "ig_NG" }, /* */ + { U"\U00000053\U00000048", "om_KE" }, /* */ + { U"\U00000053\U00000048", "sq_AL" }, /* */ + { U"\U00000053\U00000052", "ik_CA" }, /* */ + { U"\U00000053\U00000053\U0000005A", "hu_HU" }, /* */ + { U"\U00000053\U00000053\U0000007A", "hu_HU" }, /* */ + { U"\U00000053\U0000005A", "hu_HU" }, /* */ + { U"\U00000053\U00000068", "ha_NG" }, /* */ + { U"\U00000053\U00000068", "ig_NG" }, /* */ + { U"\U00000053\U00000068", "om_KE" }, /* */ + { U"\U00000053\U00000068", "sq_AL" }, /* */ + { U"\U00000053\U00000072", "ik_CA" }, /* */ + { U"\U00000053\U00000073\U0000005A", "hu_HU" }, /* */ + { U"\U00000053\U00000073\U0000007A", "hu_HU" }, /* */ + { U"\U00000053\U0000007A", "hu_HU" }, /* */ + { U"\U00000053\U00000323", "yo_NG" }, /* */ + { U"\U00000054\U00000048", "cy_GB" }, /* */ + { U"\U00000054\U00000048", "sq_AL" }, /* */ + { U"\U00000054\U00000053", "ha_NG" }, /* */ + { U"\U00000054\U00000054\U00000059", "hu_HU" }, /* */ + { U"\U00000054\U00000054\U00000079", "hu_HU" }, /* */ + { U"\U00000054\U00000059", "hu_HU" }, /* */ + { U"\U00000054\U00000068", "cy_GB" }, /* */ + { U"\U00000054\U00000068", "sq_AL" }, /* */ + { U"\U00000054\U00000073", "ha_NG" }, /* */ + { U"\U00000054\U00000074\U00000059", "hu_HU" }, /* */ + { U"\U00000054\U00000074\U00000079", "hu_HU" }, /* */ + { U"\U00000054\U00000079", "hu_HU" }, /* */ + { U"\U00000055\U00000300", "ig_NG" }, /* */ + { U"\U00000055\U00000300", "yo_NG" }, /* */ + { U"\U00000055\U00000301", "ig_NG" }, /* */ + { U"\U00000055\U00000301", "yo_NG" }, /* */ + { U"\U00000055\U00000302", "yo_NG" }, /* > */ + { U"\U00000055\U0000030C", "yo_NG" }, /* */ + { U"\U00000055\U00000323", "ig_NG" }, /* */ + { U"\U00000055\U00000323\U00000300", "ig_NG" }, /* */ + { U"\U00000055\U00000323\U00000301", "ig_NG" }, /* */ + { U"\U00000057\U00000048", "mi_NZ" }, /* */ + { U"\U00000057\U00000068", "mi_NZ" }, /* */ + { U"\U00000058\U00000048", "sq_AL" }, /* */ + { U"\U00000058\U00000068", "sq_AL" }, /* */ + { U"\U0000005A\U00000048", "sq_AL" }, /* */ + { U"\U0000005A\U00000053", "hu_HU" }, /* */ + { U"\U0000005A\U0000005A\U00000053", "hu_HU" }, /* */ + { U"\U0000005A\U0000005A\U00000073", "hu_HU" }, /* */ + { U"\U0000005A\U00000068", "sq_AL" }, /* */ + { U"\U0000005A\U00000073", "hu_HU" }, /* */ + { U"\U0000005A\U0000007A\U00000053", "hu_HU" }, /* */ + { U"\U0000005A\U0000007A\U00000073", "hu_HU" }, /* */ + { U"\U00000061\U00000041", "da_DK" }, /* */ + { U"\U00000061\U00000041", "nb_NO" }, /* */ + { U"\U00000061\U00000061", "da_DK" }, /* */ + { U"\U00000061\U00000061", "nb_NO" }, /* */ + { U"\U00000061\U00000300", "ig_NG" }, /* */ + { U"\U00000061\U00000300", "yo_NG" }, /* */ + { U"\U00000061\U00000301", "ig_NG" }, /* */ + { U"\U00000061\U00000301", "yo_NG" }, /* */ + { U"\U00000061\U00000302", "yo_NG" }, /* > */ + { U"\U00000061\U0000030C", "yo_NG" }, /* */ + { U"\U00000063\U00000027\U00000048", "br_FR" }, /* */ + { U"\U00000063\U00000027\U00000068", "br_FR" }, /* */ + { U"\U00000063\U00000043\U00000053", "hu_HU" }, /* */ + { U"\U00000063\U00000043\U00000073", "hu_HU" }, /* */ + { U"\U00000063\U00000048", "br_FR" }, /* */ + { U"\U00000063\U00000048", "cy_GB" }, /* */ + { U"\U00000063\U00000048", "es_US" }, /* */ + { U"\U00000063\U00000048", "hsb_DE" }, /* */ + { U"\U00000063\U00000048", "ig_NG" }, /* */ + { U"\U00000063\U00000048", "ik_CA" }, /* */ + { U"\U00000063\U00000053", "hu_HU" }, /* */ + { U"\U00000063\U00000063\U00000053", "hu_HU" }, /* */ + { U"\U00000063\U00000063\U00000073", "hu_HU" }, /* */ + { U"\U00000063\U00000068", "br_FR" }, /* */ + { U"\U00000063\U00000068", "cs_CZ" }, /* */ + { U"\U00000063\U00000068", "cy_GB" }, /* */ + { U"\U00000063\U00000068", "es_US" }, /* */ + { U"\U00000063\U00000068", "hsb_DE" }, /* */ + { U"\U00000063\U00000068", "ig_NG" }, /* */ + { U"\U00000063\U00000068", "ik_CA" }, /* */ + { U"\U00000063\U00000068", "om_KE" }, /* */ + { U"\U00000063\U00000073", "hu_HU" }, /* */ + { U"\U00000064\U00000044", "cy_GB" }, /* */ + { U"\U00000064\U00000044\U0000005A", "hu_HU" }, /* */ + { U"\U00000064\U00000044\U0000005A\U00000053", "hu_HU" }, /* */ + { U"\U00000064\U00000044\U0000005A\U00000073", "hu_HU" }, /* */ + { U"\U00000064\U00000044\U0000007A", "hu_HU" }, /* */ + { U"\U00000064\U00000044\U0000007A\U00000053", "hu_HU" }, /* */ + { U"\U00000064\U00000044\U0000007A\U00000073", "hu_HU" }, /* */ + { U"\U00000064\U00000048", "sq_AL" }, /* */ + { U"\U00000064\U0000005A", "hu_HU" }, /* */ + { U"\U00000064\U0000005A\U00000053", "hu_HU" }, /* */ + { U"\U00000064\U0000005A\U00000073", "hu_HU" }, /* */ + { U"\U00000064\U00000064", "cy_GB" }, /* */ + { U"\U00000064\U00000064\U0000005A", "hu_HU" }, /* */ + { U"\U00000064\U00000064\U0000005A\U00000053", "hu_HU" }, /* */ + { U"\U00000064\U00000064\U0000005A\U00000073", "hu_HU" }, /* */ + { U"\U00000064\U00000064\U0000007A", "hu_HU" }, /* */ + { U"\U00000064\U00000064\U0000007A\U00000053", "hu_HU" }, /* */ + { U"\U00000064\U00000064\U0000007A\U00000073", "hu_HU" }, /* */ + { U"\U00000064\U00000068", "om_KE" }, /* */ + { U"\U00000064\U00000068", "sq_AL" }, /* */ + { U"\U00000064\U0000007A", "hu_HU" }, /* */ + { U"\U00000064\U0000007A\U00000053", "hu_HU" }, /* */ + { U"\U00000064\U0000007A\U00000073", "hu_HU" }, /* */ + { U"\U00000064\U00000179", "hsb_DE" }, /* */ + { U"\U00000064\U0000017A", "hsb_DE" }, /* */ + { U"\U00000064\U0000017D", "bs_BA" }, /* */ + { U"\U00000064\U0000017D", "hr_HR" }, /* */ + { U"\U00000064\U0000017D", "sr_RS" }, /* */ + { U"\U00000064\U0000017E", "bs_BA" }, /* */ + { U"\U00000064\U0000017E", "hr_HR" }, /* */ + { U"\U00000064\U0000017E", "sr_RS" }, /* */ + { U"\U00000065\U00000300", "ig_NG" }, /* */ + { U"\U00000065\U00000300", "yo_NG" }, /* */ + { U"\U00000065\U00000301", "ig_NG" }, /* */ + { U"\U00000065\U00000301", "yo_NG" }, /* */ + { U"\U00000065\U00000302", "yo_NG" }, /* > */ + { U"\U00000065\U0000030C", "yo_NG" }, /* */ + { U"\U00000065\U00000323", "yo_NG" }, /* */ + { U"\U00000065\U00000323\U00000300", "yo_NG" }, /* */ + { U"\U00000065\U00000323\U00000301", "yo_NG" }, /* */ + { U"\U00000066\U00000046", "cy_GB" }, /* */ + { U"\U00000066\U00000066", "cy_GB" }, /* */ + { U"\U00000067\U00000027", "uz_UZ" }, /* */ + { U"\U00000067\U00000027", "uz_UZ@cyrillic" }, /* */ + { U"\U00000067\U00000042", "ig_NG" }, /* */ + { U"\U00000067\U00000042", "yo_NG" }, /* */ + { U"\U00000067\U00000047\U00000059", "hu_HU" }, /* */ + { U"\U00000067\U00000047\U00000079", "hu_HU" }, /* */ + { U"\U00000067\U00000048", "ig_NG" }, /* */ + { U"\U00000067\U0000004A", "sq_AL" }, /* */ + { U"\U00000067\U00000057", "ig_NG" }, /* */ + { U"\U00000067\U00000059", "hu_HU" }, /* */ + { U"\U00000067\U00000062", "ig_NG" }, /* */ + { U"\U00000067\U00000062", "yo_NG" }, /* */ + { U"\U00000067\U00000067\U00000059", "hu_HU" }, /* */ + { U"\U00000067\U00000067\U00000079", "hu_HU" }, /* */ + { U"\U00000067\U00000068", "ig_NG" }, /* */ + { U"\U00000067\U0000006A", "sq_AL" }, /* */ + { U"\U00000067\U00000077", "ig_NG" }, /* */ + { U"\U00000067\U00000079", "hu_HU" }, /* */ + { U"\U00000067\U00000126", "mt_MT" }, /* */ + { U"\U00000067\U00000127", "mt_MT" }, /* */ + { U"\U00000069\U00000045", "mt_MT" }, /* */ + { U"\U00000069\U00000065", "mt_MT" }, /* */ + { U"\U00000069\U00000300", "ig_NG" }, /* */ + { U"\U00000069\U00000300", "yo_NG" }, /* */ + { U"\U00000069\U00000301", "ig_NG" }, /* */ + { U"\U00000069\U00000301", "yo_NG" }, /* */ + { U"\U00000069\U00000302", "yo_NG" }, /* > */ + { U"\U00000069\U0000030C", "yo_NG" }, /* */ + { U"\U00000069\U00000323", "ig_NG" }, /* */ + { U"\U00000069\U00000323\U00000300", "ig_NG" }, /* */ + { U"\U00000069\U00000323\U00000301", "ig_NG" }, /* */ + { U"\U0000006B\U00000050", "ig_NG" }, /* */ + { U"\U0000006B\U00000057", "ig_NG" }, /* */ + { U"\U0000006B\U00000068", "om_KE" }, /* */ + { U"\U0000006B\U00000070", "ig_NG" }, /* */ + { U"\U0000006B\U00000077", "ig_NG" }, /* */ + { U"\U0000006C\U0000004A", "bs_BA" }, /* */ + { U"\U0000006C\U0000004A", "hr_HR" }, /* */ + { U"\U0000006C\U0000004A", "sr_RS" }, /* */ + { U"\U0000006C\U0000004C", "cy_GB" }, /* */ + { U"\U0000006C\U0000004C", "es_US" }, /* */ + { U"\U0000006C\U0000004C", "sq_AL" }, /* */ + { U"\U0000006C\U0000004C\U00000059", "hu_HU" }, /* */ + { U"\U0000006C\U0000004C\U00000079", "hu_HU" }, /* */ + { U"\U0000006C\U00000059", "hu_HU" }, /* */ + { U"\U0000006C\U0000006A", "bs_BA" }, /* */ + { U"\U0000006C\U0000006A", "hr_HR" }, /* */ + { U"\U0000006C\U0000006A", "sr_RS" }, /* */ + { U"\U0000006C\U0000006C", "cy_GB" }, /* */ + { U"\U0000006C\U0000006C", "es_US" }, /* */ + { U"\U0000006C\U0000006C", "sq_AL" }, /* */ + { U"\U0000006C\U0000006C\U00000059", "hu_HU" }, /* */ + { U"\U0000006C\U0000006C\U00000079", "hu_HU" }, /* */ + { U"\U0000006C\U00000079", "hu_HU" }, /* */ + { U"\U0000006C\U00000323", "ik_CA" }, /* */ + { U"\U0000006D\U00000300", "yo_NG" }, /* */ + { U"\U0000006D\U00000301", "yo_NG" }, /* */ + { U"\U0000006D\U00000304", "yo_NG" }, /* */ + { U"\U0000006E\U00000047", "cy_GB" }, /* */ + { U"\U0000006E\U00000047", "fil_PH" }, /* */ + { U"\U0000006E\U00000047", "mi_NZ" }, /* */ + { U"\U0000006E\U00000047", "tl_PH" }, /* */ + { U"\U0000006E\U0000004A", "bs_BA" }, /* */ + { U"\U0000006E\U0000004A", "hr_HR" }, /* */ + { U"\U0000006E\U0000004A", "sq_AL" }, /* */ + { U"\U0000006E\U0000004A", "sr_RS" }, /* */ + { U"\U0000006E\U0000004E\U00000059", "hu_HU" }, /* */ + { U"\U0000006E\U0000004E\U00000079", "hu_HU" }, /* */ + { U"\U0000006E\U00000057", "ig_NG" }, /* */ + { U"\U0000006E\U00000059", "hu_HU" }, /* */ + { U"\U0000006E\U00000059", "ig_NG" }, /* */ + { U"\U0000006E\U00000067", "cy_GB" }, /* */ + { U"\U0000006E\U00000067", "fil_PH" }, /* */ + { U"\U0000006E\U00000067", "mi_NZ" }, /* */ + { U"\U0000006E\U00000067", "tl_PH" }, /* */ + { U"\U0000006E\U0000006A", "bs_BA" }, /* */ + { U"\U0000006E\U0000006A", "hr_HR" }, /* */ + { U"\U0000006E\U0000006A", "sq_AL" }, /* */ + { U"\U0000006E\U0000006A", "sr_RS" }, /* */ + { U"\U0000006E\U0000006E\U00000059", "hu_HU" }, /* */ + { U"\U0000006E\U0000006E\U00000079", "hu_HU" }, /* */ + { U"\U0000006E\U00000077", "ig_NG" }, /* */ + { U"\U0000006E\U00000079", "hu_HU" }, /* */ + { U"\U0000006E\U00000079", "ig_NG" }, /* */ + { U"\U0000006E\U00000079", "om_KE" }, /* */ + { U"\U0000006E\U00000300", "yo_NG" }, /* */ + { U"\U0000006E\U00000301", "yo_NG" }, /* */ + { U"\U0000006E\U00000304", "yo_NG" }, /* */ + { U"\U0000006E\U00000307", "ig_NG" }, /* */ + { U"\U0000006F\U00000027", "uz_UZ" }, /* */ + { U"\U0000006F\U00000027", "uz_UZ@cyrillic" }, /* */ + { U"\U0000006F\U00000300", "ig_NG" }, /* */ + { U"\U0000006F\U00000300", "yo_NG" }, /* */ + { U"\U0000006F\U00000301", "ig_NG" }, /* */ + { U"\U0000006F\U00000301", "yo_NG" }, /* */ + { U"\U0000006F\U00000302", "yo_NG" }, /* > */ + { U"\U0000006F\U0000030C", "yo_NG" }, /* */ + { U"\U0000006F\U00000323", "ig_NG" }, /* */ + { U"\U0000006F\U00000323", "yo_NG" }, /* */ + { U"\U0000006F\U00000323\U00000300", "ig_NG" }, /* */ + { U"\U0000006F\U00000323\U00000300", "yo_NG" }, /* */ + { U"\U0000006F\U00000323\U00000301", "ig_NG" }, /* */ + { U"\U0000006F\U00000323\U00000301", "yo_NG" }, /* */ + { U"\U0000006F\U00000358", "nan_TW@latin" }, /* */ + { U"\U00000070\U00000048", "cy_GB" }, /* */ + { U"\U00000070\U00000068", "cy_GB" }, /* */ + { U"\U00000070\U00000068", "om_KE" }, /* */ + { U"\U00000072\U00000048", "cy_GB" }, /* */ + { U"\U00000072\U00000052", "sq_AL" }, /* */ + { U"\U00000072\U00000068", "cy_GB" }, /* */ + { U"\U00000072\U00000072", "sq_AL" }, /* */ + { U"\U00000072\U00000303", "ha_NG" }, /* */ + { U"\U00000073\U00000048", "ha_NG" }, /* */ + { U"\U00000073\U00000048", "ig_NG" }, /* */ + { U"\U00000073\U00000048", "sq_AL" }, /* */ + { U"\U00000073\U00000052", "ik_CA" }, /* */ + { U"\U00000073\U00000053\U0000005A", "hu_HU" }, /* */ + { U"\U00000073\U00000053\U0000007A", "hu_HU" }, /* */ + { U"\U00000073\U0000005A", "hu_HU" }, /* */ + { U"\U00000073\U00000068", "ha_NG" }, /* */ + { U"\U00000073\U00000068", "ig_NG" }, /* */ + { U"\U00000073\U00000068", "om_KE" }, /* */ + { U"\U00000073\U00000068", "sq_AL" }, /* */ + { U"\U00000073\U00000072", "ik_CA" }, /* */ + { U"\U00000073\U00000073\U0000005A", "hu_HU" }, /* */ + { U"\U00000073\U00000073\U0000007A", "hu_HU" }, /* */ + { U"\U00000073\U0000007A", "hu_HU" }, /* */ + { U"\U00000073\U00000323", "yo_NG" }, /* */ + { U"\U00000074\U00000048", "cy_GB" }, /* */ + { U"\U00000074\U00000048", "sq_AL" }, /* */ + { U"\U00000074\U00000053", "ha_NG" }, /* */ + { U"\U00000074\U00000054\U00000059", "hu_HU" }, /* */ + { U"\U00000074\U00000054\U00000079", "hu_HU" }, /* */ + { U"\U00000074\U00000059", "hu_HU" }, /* */ + { U"\U00000074\U00000068", "cy_GB" }, /* */ + { U"\U00000074\U00000068", "sq_AL" }, /* */ + { U"\U00000074\U00000073", "ha_NG" }, /* */ + { U"\U00000074\U00000074\U00000059", "hu_HU" }, /* */ + { U"\U00000074\U00000074\U00000079", "hu_HU" }, /* */ + { U"\U00000074\U00000079", "hu_HU" }, /* */ + { U"\U00000075\U00000300", "ig_NG" }, /* */ + { U"\U00000075\U00000300", "yo_NG" }, /* */ + { U"\U00000075\U00000301", "ig_NG" }, /* */ + { U"\U00000075\U00000301", "yo_NG" }, /* */ + { U"\U00000075\U00000302", "yo_NG" }, /* > */ + { U"\U00000075\U0000030C", "yo_NG" }, /* */ + { U"\U00000075\U00000323", "ig_NG" }, /* */ + { U"\U00000075\U00000323\U00000300", "ig_NG" }, /* */ + { U"\U00000075\U00000323\U00000301", "ig_NG" }, /* */ + { U"\U00000077\U00000048", "mi_NZ" }, /* */ + { U"\U00000077\U00000068", "mi_NZ" }, /* */ + { U"\U00000078\U00000048", "sq_AL" }, /* */ + { U"\U00000078\U00000068", "sq_AL" }, /* */ + { U"\U0000007A\U00000048", "sq_AL" }, /* */ + { U"\U0000007A\U00000053", "hu_HU" }, /* */ + { U"\U0000007A\U0000005A\U00000053", "hu_HU" }, /* */ + { U"\U0000007A\U0000005A\U00000073", "hu_HU" }, /* */ + { U"\U0000007A\U00000068", "sq_AL" }, /* */ + { U"\U0000007A\U00000073", "hu_HU" }, /* */ + { U"\U0000007A\U0000007A\U00000053", "hu_HU" }, /* */ + { U"\U0000007A\U0000007A\U00000073", "hu_HU" }, /* */ + { U"\U00000141\U00000323", "ik_CA" }, /* */ + { U"\U00000142\U00000323", "ik_CA" }, /* */ + { U"\U00000412\U0000042C", "uk_UA" }, /* */ + { U"\U00000412\U0000044C", "uk_UA" }, /* */ + { U"\U00000414\U0000042C", "uk_UA" }, /* */ + { U"\U00000414\U0000044C", "uk_UA" }, /* */ + { U"\U00000417\U0000042C", "uk_UA" }, /* */ + { U"\U00000417\U0000044C", "uk_UA" }, /* */ + { U"\U0000041B\U0000042C", "uk_UA" }, /* */ + { U"\U0000041B\U0000044C", "uk_UA" }, /* */ + { U"\U0000041D\U0000042C", "uk_UA" }, /* */ + { U"\U0000041D\U0000044C", "uk_UA" }, /* */ + { U"\U00000420\U0000042C", "uk_UA" }, /* */ + { U"\U00000420\U0000044C", "uk_UA" }, /* */ + { U"\U00000421\U0000042C", "uk_UA" }, /* */ + { U"\U00000421\U0000044C", "uk_UA" }, /* */ + { U"\U00000422\U0000042C", "uk_UA" }, /* */ + { U"\U00000422\U0000044C", "uk_UA" }, /* */ + { U"\U00000426\U0000042C", "uk_UA" }, /* */ + { U"\U00000426\U0000044C", "uk_UA" }, /* */ + { U"\U00000432\U0000042C", "uk_UA" }, /* */ + { U"\U00000432\U0000044C", "uk_UA" }, /* */ + { U"\U00000434\U0000042C", "uk_UA" }, /* */ + { U"\U00000434\U0000044C", "uk_UA" }, /* */ + { U"\U00000437\U0000042C", "uk_UA" }, /* */ + { U"\U00000437\U0000044C", "uk_UA" }, /* */ + { U"\U0000043B\U0000042C", "uk_UA" }, /* */ + { U"\U0000043B\U0000044C", "uk_UA" }, /* */ + { U"\U0000043D\U0000042C", "uk_UA" }, /* */ + { U"\U0000043D\U0000044C", "uk_UA" }, /* */ + { U"\U00000440\U0000042C", "uk_UA" }, /* */ + { U"\U00000440\U0000044C", "uk_UA" }, /* */ + { U"\U00000441\U0000042C", "uk_UA" }, /* */ + { U"\U00000441\U0000044C", "uk_UA" }, /* */ + { U"\U00000442\U0000042C", "uk_UA" }, /* */ + { U"\U00000442\U0000044C", "uk_UA" }, /* */ + { U"\U00000446\U0000042C", "uk_UA" }, /* */ + { U"\U00000446\U0000044C", "uk_UA" }, /* */ + { U"\U000005D1\U000005BF", "yi_US" }, /* */ + { U"\U000005DB\U000005BC", "yi_US" }, /* */ + { U"\U000005E4\U000005BC", "yi_US" }, /* */ + { U"\U000005E4\U000005BF", "yi_US" }, /* */ + { U"\U000005E9\U000005C2", "yi_US" }, /* */ + { U"\U000005EA\U000005BC", "yi_US" }, /* */ + { U"\U00000626\U00000627", "ug_CN" }, /* */ + { U"\U00000626\U00000648", "ug_CN" }, /* */ + { U"\U00000626\U00000649", "ug_CN" }, /* */ + { U"\U00000626\U000006C6", "ug_CN" }, /* */ + { U"\U00000626\U000006C7", "ug_CN" }, /* */ + { U"\U00000626\U000006C8", "ug_CN" }, /* */ + { U"\U00000626\U000006D0", "ug_CN" }, /* */ + { U"\U00000626\U000006D5", "ug_CN" }, /* */ + { U"\U00000627\U00000653", "fa_IR" }, /* */ + { U"\U00000627\U00000654", "fa_IR" }, /* */ + { U"\U00000627\U00000655", "fa_IR" }, /* */ + { U"\U00000648\U00000654", "fa_IR" }, /* */ + { U"\U00000649\U00000654", "fa_IR" }, /* */ + { U"\U0000064A\U00000654", "fa_IR" }, /* */ + { U"\U000006CC\U00000654", "fa_IR" }, /* */ + { U"\U00000915\U0000094D\U00000937", "mr_IN" }, /* */ + { U"\U0000091C\U0000094D\U0000091E", "mr_IN" }, /* */ + { U"\U00000936\U0000094D\U00000930", "mr_IN" }, /* */ + { U"\U00000A95\U00000ACD\U00000AB7", "" }, /* */ + { U"\U00000A9C\U00000ACD\U00000A9E", "" }, /* */ + { U"\U00000AA4\U00000ACD\U00000AB0", "" }, /* */ + { U"\U00000AB6\U00000ACD\U00000AB0", "" }, /* */ + { U"\U00000B15\U00000B4D\U00000B37", "or_IN" }, /* */ + { U"\U00000B21\U00000B3C", "or_IN" }, /* */ + { U"\U00000B22\U00000B3C", "or_IN" }, /* */ + { U"\U00000B95\U00000BCD", "" }, /* */ + { U"\U00000B95\U00000BCD\U00000BB7", "" }, /* */ + { U"\U00000B99\U00000BCD", "" }, /* */ + { U"\U00000B9A\U00000BCD", "" }, /* */ + { U"\U00000B9C\U00000BCD", "" }, /* */ + { U"\U00000B9E\U00000BCD", "" }, /* */ + { U"\U00000B9F\U00000BCD", "" }, /* */ + { U"\U00000BA3\U00000BCD", "" }, /* */ + { U"\U00000BA4\U00000BCD", "" }, /* */ + { U"\U00000BA8\U00000BCD", "" }, /* */ + { U"\U00000BA9\U00000BCD", "" }, /* */ + { U"\U00000BAA\U00000BCD", "" }, /* */ + { U"\U00000BAE\U00000BCD", "" }, /* */ + { U"\U00000BAF\U00000BCD", "" }, /* */ + { U"\U00000BB0\U00000BCD", "" }, /* */ + { U"\U00000BB1\U00000BCD", "" }, /* */ + { U"\U00000BB2\U00000BCD", "" }, /* */ + { U"\U00000BB3\U00000BCD", "" }, /* */ + { U"\U00000BB4\U00000BCD", "" }, /* */ + { U"\U00000BB5\U00000BCD", "" }, /* */ + { U"\U00000BB6\U00000BCD", "" }, /* */ + { U"\U00000BB7\U00000BCD", "" }, /* */ + { U"\U00000BB8\U00000BCD", "" }, /* */ + { U"\U00000BB8\U00000BCD\U00000BB0\U00000BC0", "" }, /* */ + { U"\U00000BB9\U00000BCD", "" }, /* */ + { U"\U00000BC6\U00000BBE", "" }, /* */ + { U"\U00000BC6\U00000BD7", "" }, /* */ + { U"\U00000BC7\U00000BBE", "" }, /* */ + { U"\U00000CBF\U00000CD5", "" }, /* */ + { U"\U00000CC6\U00000CC2", "" }, /* */ + { U"\U00000CC6\U00000CC2\U00000CD5", "" }, /* */ + { U"\U00000CC6\U00000CD5", "" }, /* */ + { U"\U00000CC6\U00000CD6", "" }, /* */ + { U"\U00000CCA\U00000CD5", "" }, /* */ + { U"\U00000D15\U00000D4D", "" }, /* */ + { U"\U00000D16\U00000D4D", "" }, /* */ + { U"\U00000D17\U00000D4D", "" }, /* */ + { U"\U00000D18\U00000D4D", "" }, /* */ + { U"\U00000D19\U00000D4D", "" }, /* */ + { U"\U00000D1A\U00000D4D", "" }, /* */ + { U"\U00000D1B\U00000D4D", "" }, /* */ + { U"\U00000D1C\U00000D4D", "" }, /* */ + { U"\U00000D1D\U00000D4D", "" }, /* */ + { U"\U00000D1E\U00000D4D", "" }, /* */ + { U"\U00000D1F\U00000D4D", "" }, /* */ + { U"\U00000D20\U00000D4D", "" }, /* */ + { U"\U00000D21\U00000D4D", "" }, /* */ + { U"\U00000D22\U00000D4D", "" }, /* */ + { U"\U00000D23\U00000D4D", "" }, /* */ + { U"\U00000D24\U00000D4D", "" }, /* */ + { U"\U00000D25\U00000D4D", "" }, /* */ + { U"\U00000D26\U00000D4D", "" }, /* */ + { U"\U00000D27\U00000D4D", "" }, /* */ + { U"\U00000D28\U00000D4D", "" }, /* */ + { U"\U00000D2A\U00000D4D", "" }, /* */ + { U"\U00000D2B\U00000D4D", "" }, /* */ + { U"\U00000D2C\U00000D4D", "" }, /* */ + { U"\U00000D2D\U00000D4D", "" }, /* */ + { U"\U00000D2E\U00000D4D", "" }, /* */ + { U"\U00000D2F\U00000D4D", "" }, /* */ + { U"\U00000D30\U00000D4D", "" }, /* */ + { U"\U00000D31\U00000D4D", "" }, /* */ + { U"\U00000D32\U00000D4D", "" }, /* */ + { U"\U00000D33\U00000D4D", "" }, /* */ + { U"\U00000D34\U00000D4D", "" }, /* */ + { U"\U00000D35\U00000D4D", "" }, /* */ + { U"\U00000D36\U00000D4D", "" }, /* */ + { U"\U00000D37\U00000D4D", "" }, /* */ + { U"\U00000D38\U00000D4D", "" }, /* */ + { U"\U00000D39\U00000D4D", "" }, /* */ + { U"\U00000D41\U00000D4D", "" }, /* */ + { U"\U00000D46\U00000D3E", "" }, /* */ + { U"\U00000D46\U00000D57", "" }, /* */ + { U"\U00000D47\U00000D3E", "" }, /* */ + { U"\U00000E40\U00000E01", "th_TH" }, /* */ + { U"\U00000E40\U00000E02", "th_TH" }, /* */ + { U"\U00000E40\U00000E03", "th_TH" }, /* */ + { U"\U00000E40\U00000E04", "th_TH" }, /* */ + { U"\U00000E40\U00000E05", "th_TH" }, /* */ + { U"\U00000E40\U00000E06", "th_TH" }, /* */ + { U"\U00000E40\U00000E07", "th_TH" }, /* */ + { U"\U00000E40\U00000E08", "th_TH" }, /* */ + { U"\U00000E40\U00000E09", "th_TH" }, /* */ + { U"\U00000E40\U00000E0A", "th_TH" }, /* */ + { U"\U00000E40\U00000E0B", "th_TH" }, /* */ + { U"\U00000E40\U00000E0C", "th_TH" }, /* */ + { U"\U00000E40\U00000E0D", "th_TH" }, /* */ + { U"\U00000E40\U00000E0E", "th_TH" }, /* */ + { U"\U00000E40\U00000E0F", "th_TH" }, /* */ + { U"\U00000E40\U00000E10", "th_TH" }, /* */ + { U"\U00000E40\U00000E11", "th_TH" }, /* */ + { U"\U00000E40\U00000E12", "th_TH" }, /* */ + { U"\U00000E40\U00000E13", "th_TH" }, /* */ + { U"\U00000E40\U00000E14", "th_TH" }, /* */ + { U"\U00000E40\U00000E15", "th_TH" }, /* */ + { U"\U00000E40\U00000E16", "th_TH" }, /* */ + { U"\U00000E40\U00000E17", "th_TH" }, /* */ + { U"\U00000E40\U00000E18", "th_TH" }, /* */ + { U"\U00000E40\U00000E19", "th_TH" }, /* */ + { U"\U00000E40\U00000E1A", "th_TH" }, /* */ + { U"\U00000E40\U00000E1B", "th_TH" }, /* */ + { U"\U00000E40\U00000E1C", "th_TH" }, /* */ + { U"\U00000E40\U00000E1D", "th_TH" }, /* */ + { U"\U00000E40\U00000E1E", "th_TH" }, /* */ + { U"\U00000E40\U00000E1F", "th_TH" }, /* */ + { U"\U00000E40\U00000E20", "th_TH" }, /* */ + { U"\U00000E40\U00000E21", "th_TH" }, /* */ + { U"\U00000E40\U00000E22", "th_TH" }, /* */ + { U"\U00000E40\U00000E23", "th_TH" }, /* */ + { U"\U00000E40\U00000E25", "th_TH" }, /* */ + { U"\U00000E40\U00000E27", "th_TH" }, /* */ + { U"\U00000E40\U00000E28", "th_TH" }, /* */ + { U"\U00000E40\U00000E29", "th_TH" }, /* */ + { U"\U00000E40\U00000E2A", "th_TH" }, /* */ + { U"\U00000E40\U00000E2B", "th_TH" }, /* */ + { U"\U00000E40\U00000E2C", "th_TH" }, /* */ + { U"\U00000E40\U00000E2D", "th_TH" }, /* */ + { U"\U00000E40\U00000E2E", "th_TH" }, /* */ + { U"\U00000E41\U00000E01", "th_TH" }, /* */ + { U"\U00000E41\U00000E02", "th_TH" }, /* */ + { U"\U00000E41\U00000E03", "th_TH" }, /* */ + { U"\U00000E41\U00000E04", "th_TH" }, /* */ + { U"\U00000E41\U00000E05", "th_TH" }, /* */ + { U"\U00000E41\U00000E06", "th_TH" }, /* */ + { U"\U00000E41\U00000E07", "th_TH" }, /* */ + { U"\U00000E41\U00000E08", "th_TH" }, /* */ + { U"\U00000E41\U00000E09", "th_TH" }, /* */ + { U"\U00000E41\U00000E0A", "th_TH" }, /* */ + { U"\U00000E41\U00000E0B", "th_TH" }, /* */ + { U"\U00000E41\U00000E0C", "th_TH" }, /* */ + { U"\U00000E41\U00000E0D", "th_TH" }, /* */ + { U"\U00000E41\U00000E0E", "th_TH" }, /* */ + { U"\U00000E41\U00000E0F", "th_TH" }, /* */ + { U"\U00000E41\U00000E10", "th_TH" }, /* */ + { U"\U00000E41\U00000E11", "th_TH" }, /* */ + { U"\U00000E41\U00000E12", "th_TH" }, /* */ + { U"\U00000E41\U00000E13", "th_TH" }, /* */ + { U"\U00000E41\U00000E14", "th_TH" }, /* */ + { U"\U00000E41\U00000E15", "th_TH" }, /* */ + { U"\U00000E41\U00000E16", "th_TH" }, /* */ + { U"\U00000E41\U00000E17", "th_TH" }, /* */ + { U"\U00000E41\U00000E18", "th_TH" }, /* */ + { U"\U00000E41\U00000E19", "th_TH" }, /* */ + { U"\U00000E41\U00000E1A", "th_TH" }, /* */ + { U"\U00000E41\U00000E1B", "th_TH" }, /* */ + { U"\U00000E41\U00000E1C", "th_TH" }, /* */ + { U"\U00000E41\U00000E1D", "th_TH" }, /* */ + { U"\U00000E41\U00000E1E", "th_TH" }, /* */ + { U"\U00000E41\U00000E1F", "th_TH" }, /* */ + { U"\U00000E41\U00000E20", "th_TH" }, /* */ + { U"\U00000E41\U00000E21", "th_TH" }, /* */ + { U"\U00000E41\U00000E22", "th_TH" }, /* */ + { U"\U00000E41\U00000E23", "th_TH" }, /* */ + { U"\U00000E41\U00000E25", "th_TH" }, /* */ + { U"\U00000E41\U00000E27", "th_TH" }, /* */ + { U"\U00000E41\U00000E28", "th_TH" }, /* */ + { U"\U00000E41\U00000E29", "th_TH" }, /* */ + { U"\U00000E41\U00000E2A", "th_TH" }, /* */ + { U"\U00000E41\U00000E2B", "th_TH" }, /* */ + { U"\U00000E41\U00000E2C", "th_TH" }, /* */ + { U"\U00000E41\U00000E2D", "th_TH" }, /* */ + { U"\U00000E41\U00000E2E", "th_TH" }, /* */ + { U"\U00000E42\U00000E01", "th_TH" }, /* */ + { U"\U00000E42\U00000E02", "th_TH" }, /* */ + { U"\U00000E42\U00000E03", "th_TH" }, /* */ + { U"\U00000E42\U00000E04", "th_TH" }, /* */ + { U"\U00000E42\U00000E05", "th_TH" }, /* */ + { U"\U00000E42\U00000E06", "th_TH" }, /* */ + { U"\U00000E42\U00000E07", "th_TH" }, /* */ + { U"\U00000E42\U00000E08", "th_TH" }, /* */ + { U"\U00000E42\U00000E09", "th_TH" }, /* */ + { U"\U00000E42\U00000E0A", "th_TH" }, /* */ + { U"\U00000E42\U00000E0B", "th_TH" }, /* */ + { U"\U00000E42\U00000E0C", "th_TH" }, /* */ + { U"\U00000E42\U00000E0D", "th_TH" }, /* */ + { U"\U00000E42\U00000E0E", "th_TH" }, /* */ + { U"\U00000E42\U00000E0F", "th_TH" }, /* */ + { U"\U00000E42\U00000E10", "th_TH" }, /* */ + { U"\U00000E42\U00000E11", "th_TH" }, /* */ + { U"\U00000E42\U00000E12", "th_TH" }, /* */ + { U"\U00000E42\U00000E13", "th_TH" }, /* */ + { U"\U00000E42\U00000E14", "th_TH" }, /* */ + { U"\U00000E42\U00000E15", "th_TH" }, /* */ + { U"\U00000E42\U00000E16", "th_TH" }, /* */ + { U"\U00000E42\U00000E17", "th_TH" }, /* */ + { U"\U00000E42\U00000E18", "th_TH" }, /* */ + { U"\U00000E42\U00000E19", "th_TH" }, /* */ + { U"\U00000E42\U00000E1A", "th_TH" }, /* */ + { U"\U00000E42\U00000E1B", "th_TH" }, /* */ + { U"\U00000E42\U00000E1C", "th_TH" }, /* */ + { U"\U00000E42\U00000E1D", "th_TH" }, /* */ + { U"\U00000E42\U00000E1E", "th_TH" }, /* */ + { U"\U00000E42\U00000E1F", "th_TH" }, /* */ + { U"\U00000E42\U00000E20", "th_TH" }, /* */ + { U"\U00000E42\U00000E21", "th_TH" }, /* */ + { U"\U00000E42\U00000E22", "th_TH" }, /* */ + { U"\U00000E42\U00000E23", "th_TH" }, /* */ + { U"\U00000E42\U00000E25", "th_TH" }, /* */ + { U"\U00000E42\U00000E27", "th_TH" }, /* */ + { U"\U00000E42\U00000E28", "th_TH" }, /* */ + { U"\U00000E42\U00000E29", "th_TH" }, /* */ + { U"\U00000E42\U00000E2A", "th_TH" }, /* */ + { U"\U00000E42\U00000E2B", "th_TH" }, /* */ + { U"\U00000E42\U00000E2C", "th_TH" }, /* */ + { U"\U00000E42\U00000E2D", "th_TH" }, /* */ + { U"\U00000E42\U00000E2E", "th_TH" }, /* */ + { U"\U00000E43\U00000E01", "th_TH" }, /* */ + { U"\U00000E43\U00000E02", "th_TH" }, /* */ + { U"\U00000E43\U00000E03", "th_TH" }, /* */ + { U"\U00000E43\U00000E04", "th_TH" }, /* */ + { U"\U00000E43\U00000E05", "th_TH" }, /* */ + { U"\U00000E43\U00000E06", "th_TH" }, /* */ + { U"\U00000E43\U00000E07", "th_TH" }, /* */ + { U"\U00000E43\U00000E08", "th_TH" }, /* */ + { U"\U00000E43\U00000E09", "th_TH" }, /* */ + { U"\U00000E43\U00000E0A", "th_TH" }, /* */ + { U"\U00000E43\U00000E0B", "th_TH" }, /* */ + { U"\U00000E43\U00000E0C", "th_TH" }, /* */ + { U"\U00000E43\U00000E0D", "th_TH" }, /* */ + { U"\U00000E43\U00000E0E", "th_TH" }, /* */ + { U"\U00000E43\U00000E0F", "th_TH" }, /* */ + { U"\U00000E43\U00000E10", "th_TH" }, /* */ + { U"\U00000E43\U00000E11", "th_TH" }, /* */ + { U"\U00000E43\U00000E12", "th_TH" }, /* */ + { U"\U00000E43\U00000E13", "th_TH" }, /* */ + { U"\U00000E43\U00000E14", "th_TH" }, /* */ + { U"\U00000E43\U00000E15", "th_TH" }, /* */ + { U"\U00000E43\U00000E16", "th_TH" }, /* */ + { U"\U00000E43\U00000E17", "th_TH" }, /* */ + { U"\U00000E43\U00000E18", "th_TH" }, /* */ + { U"\U00000E43\U00000E19", "th_TH" }, /* */ + { U"\U00000E43\U00000E1A", "th_TH" }, /* */ + { U"\U00000E43\U00000E1B", "th_TH" }, /* */ + { U"\U00000E43\U00000E1C", "th_TH" }, /* */ + { U"\U00000E43\U00000E1D", "th_TH" }, /* */ + { U"\U00000E43\U00000E1E", "th_TH" }, /* */ + { U"\U00000E43\U00000E1F", "th_TH" }, /* */ + { U"\U00000E43\U00000E20", "th_TH" }, /* */ + { U"\U00000E43\U00000E21", "th_TH" }, /* */ + { U"\U00000E43\U00000E22", "th_TH" }, /* */ + { U"\U00000E43\U00000E23", "th_TH" }, /* */ + { U"\U00000E43\U00000E25", "th_TH" }, /* */ + { U"\U00000E43\U00000E27", "th_TH" }, /* */ + { U"\U00000E43\U00000E28", "th_TH" }, /* */ + { U"\U00000E43\U00000E29", "th_TH" }, /* */ + { U"\U00000E43\U00000E2A", "th_TH" }, /* */ + { U"\U00000E43\U00000E2B", "th_TH" }, /* */ + { U"\U00000E43\U00000E2C", "th_TH" }, /* */ + { U"\U00000E43\U00000E2D", "th_TH" }, /* */ + { U"\U00000E43\U00000E2E", "th_TH" }, /* */ + { U"\U00000E44\U00000E01", "th_TH" }, /* */ + { U"\U00000E44\U00000E02", "th_TH" }, /* */ + { U"\U00000E44\U00000E03", "th_TH" }, /* */ + { U"\U00000E44\U00000E04", "th_TH" }, /* */ + { U"\U00000E44\U00000E05", "th_TH" }, /* */ + { U"\U00000E44\U00000E06", "th_TH" }, /* */ + { U"\U00000E44\U00000E07", "th_TH" }, /* */ + { U"\U00000E44\U00000E08", "th_TH" }, /* */ + { U"\U00000E44\U00000E09", "th_TH" }, /* */ + { U"\U00000E44\U00000E0A", "th_TH" }, /* */ + { U"\U00000E44\U00000E0B", "th_TH" }, /* */ + { U"\U00000E44\U00000E0C", "th_TH" }, /* */ + { U"\U00000E44\U00000E0D", "th_TH" }, /* */ + { U"\U00000E44\U00000E0E", "th_TH" }, /* */ + { U"\U00000E44\U00000E0F", "th_TH" }, /* */ + { U"\U00000E44\U00000E10", "th_TH" }, /* */ + { U"\U00000E44\U00000E11", "th_TH" }, /* */ + { U"\U00000E44\U00000E12", "th_TH" }, /* */ + { U"\U00000E44\U00000E13", "th_TH" }, /* */ + { U"\U00000E44\U00000E14", "th_TH" }, /* */ + { U"\U00000E44\U00000E15", "th_TH" }, /* */ + { U"\U00000E44\U00000E16", "th_TH" }, /* */ + { U"\U00000E44\U00000E17", "th_TH" }, /* */ + { U"\U00000E44\U00000E18", "th_TH" }, /* */ + { U"\U00000E44\U00000E19", "th_TH" }, /* */ + { U"\U00000E44\U00000E1A", "th_TH" }, /* */ + { U"\U00000E44\U00000E1B", "th_TH" }, /* */ + { U"\U00000E44\U00000E1C", "th_TH" }, /* */ + { U"\U00000E44\U00000E1D", "th_TH" }, /* */ + { U"\U00000E44\U00000E1E", "th_TH" }, /* */ + { U"\U00000E44\U00000E1F", "th_TH" }, /* */ + { U"\U00000E44\U00000E20", "th_TH" }, /* */ + { U"\U00000E44\U00000E21", "th_TH" }, /* */ + { U"\U00000E44\U00000E22", "th_TH" }, /* */ + { U"\U00000E44\U00000E23", "th_TH" }, /* */ + { U"\U00000E44\U00000E25", "th_TH" }, /* */ + { U"\U00000E44\U00000E27", "th_TH" }, /* */ + { U"\U00000E44\U00000E28", "th_TH" }, /* */ + { U"\U00000E44\U00000E29", "th_TH" }, /* */ + { U"\U00000E44\U00000E2A", "th_TH" }, /* */ + { U"\U00000E44\U00000E2B", "th_TH" }, /* */ + { U"\U00000E44\U00000E2C", "th_TH" }, /* */ + { U"\U00000E44\U00000E2D", "th_TH" }, /* */ + { U"\U00000E44\U00000E2E", "th_TH" }, /* */ + { U"\U00000EC0\U00000E81", "lo_LA" }, /* */ + { U"\U00000EC0\U00000E82", "lo_LA" }, /* */ + { U"\U00000EC0\U00000E84", "lo_LA" }, /* */ + { U"\U00000EC0\U00000E87", "lo_LA" }, /* */ + { U"\U00000EC0\U00000E88", "lo_LA" }, /* */ + { U"\U00000EC0\U00000E8A", "lo_LA" }, /* */ + { U"\U00000EC0\U00000E8D", "lo_LA" }, /* */ + { U"\U00000EC0\U00000E94", "lo_LA" }, /* */ + { U"\U00000EC0\U00000E95", "lo_LA" }, /* */ + { U"\U00000EC0\U00000E96", "lo_LA" }, /* */ + { U"\U00000EC0\U00000E97", "lo_LA" }, /* */ + { U"\U00000EC0\U00000E99", "lo_LA" }, /* */ + { U"\U00000EC0\U00000E9A", "lo_LA" }, /* */ + { U"\U00000EC0\U00000E9B", "lo_LA" }, /* */ + { U"\U00000EC0\U00000E9C", "lo_LA" }, /* */ + { U"\U00000EC0\U00000E9D", "lo_LA" }, /* */ + { U"\U00000EC0\U00000E9E", "lo_LA" }, /* */ + { U"\U00000EC0\U00000E9F", "lo_LA" }, /* */ + { U"\U00000EC0\U00000EA1", "lo_LA" }, /* */ + { U"\U00000EC0\U00000EA2", "lo_LA" }, /* */ + { U"\U00000EC0\U00000EA3", "lo_LA" }, /* */ + { U"\U00000EC0\U00000EA5", "lo_LA" }, /* */ + { U"\U00000EC0\U00000EA7", "lo_LA" }, /* */ + { U"\U00000EC0\U00000EAA", "lo_LA" }, /* */ + { U"\U00000EC0\U00000EAB", "lo_LA" }, /* */ + { U"\U00000EC0\U00000EAD", "lo_LA" }, /* */ + { U"\U00000EC0\U00000EAE", "lo_LA" }, /* */ + { U"\U00000EC0\U00000EDC", "lo_LA" }, /* */ + { U"\U00000EC0\U00000EDD", "lo_LA" }, /* */ + { U"\U00000EC1\U00000E81", "lo_LA" }, /* */ + { U"\U00000EC1\U00000E82", "lo_LA" }, /* */ + { U"\U00000EC1\U00000E84", "lo_LA" }, /* */ + { U"\U00000EC1\U00000E87", "lo_LA" }, /* */ + { U"\U00000EC1\U00000E88", "lo_LA" }, /* */ + { U"\U00000EC1\U00000E8A", "lo_LA" }, /* */ + { U"\U00000EC1\U00000E8D", "lo_LA" }, /* */ + { U"\U00000EC1\U00000E94", "lo_LA" }, /* */ + { U"\U00000EC1\U00000E95", "lo_LA" }, /* */ + { U"\U00000EC1\U00000E96", "lo_LA" }, /* */ + { U"\U00000EC1\U00000E97", "lo_LA" }, /* */ + { U"\U00000EC1\U00000E99", "lo_LA" }, /* */ + { U"\U00000EC1\U00000E9A", "lo_LA" }, /* */ + { U"\U00000EC1\U00000E9B", "lo_LA" }, /* */ + { U"\U00000EC1\U00000E9C", "lo_LA" }, /* */ + { U"\U00000EC1\U00000E9D", "lo_LA" }, /* */ + { U"\U00000EC1\U00000E9E", "lo_LA" }, /* */ + { U"\U00000EC1\U00000E9F", "lo_LA" }, /* */ + { U"\U00000EC1\U00000EA1", "lo_LA" }, /* */ + { U"\U00000EC1\U00000EA2", "lo_LA" }, /* */ + { U"\U00000EC1\U00000EA3", "lo_LA" }, /* */ + { U"\U00000EC1\U00000EA5", "lo_LA" }, /* */ + { U"\U00000EC1\U00000EA7", "lo_LA" }, /* */ + { U"\U00000EC1\U00000EAA", "lo_LA" }, /* */ + { U"\U00000EC1\U00000EAB", "lo_LA" }, /* */ + { U"\U00000EC1\U00000EAD", "lo_LA" }, /* */ + { U"\U00000EC1\U00000EAE", "lo_LA" }, /* */ + { U"\U00000EC1\U00000EDC", "lo_LA" }, /* */ + { U"\U00000EC1\U00000EDD", "lo_LA" }, /* */ + { U"\U00000EC2\U00000E81", "lo_LA" }, /* */ + { U"\U00000EC2\U00000E82", "lo_LA" }, /* */ + { U"\U00000EC2\U00000E84", "lo_LA" }, /* */ + { U"\U00000EC2\U00000E87", "lo_LA" }, /* */ + { U"\U00000EC2\U00000E88", "lo_LA" }, /* */ + { U"\U00000EC2\U00000E8A", "lo_LA" }, /* */ + { U"\U00000EC2\U00000E8D", "lo_LA" }, /* */ + { U"\U00000EC2\U00000E94", "lo_LA" }, /* */ + { U"\U00000EC2\U00000E95", "lo_LA" }, /* */ + { U"\U00000EC2\U00000E96", "lo_LA" }, /* */ + { U"\U00000EC2\U00000E97", "lo_LA" }, /* */ + { U"\U00000EC2\U00000E99", "lo_LA" }, /* */ + { U"\U00000EC2\U00000E9A", "lo_LA" }, /* */ + { U"\U00000EC2\U00000E9B", "lo_LA" }, /* */ + { U"\U00000EC2\U00000E9C", "lo_LA" }, /* */ + { U"\U00000EC2\U00000E9D", "lo_LA" }, /* */ + { U"\U00000EC2\U00000E9E", "lo_LA" }, /* */ + { U"\U00000EC2\U00000E9F", "lo_LA" }, /* */ + { U"\U00000EC2\U00000EA1", "lo_LA" }, /* */ + { U"\U00000EC2\U00000EA2", "lo_LA" }, /* */ + { U"\U00000EC2\U00000EA3", "lo_LA" }, /* */ + { U"\U00000EC2\U00000EA5", "lo_LA" }, /* */ + { U"\U00000EC2\U00000EA7", "lo_LA" }, /* */ + { U"\U00000EC2\U00000EAA", "lo_LA" }, /* */ + { U"\U00000EC2\U00000EAB", "lo_LA" }, /* */ + { U"\U00000EC2\U00000EAD", "lo_LA" }, /* */ + { U"\U00000EC2\U00000EAE", "lo_LA" }, /* */ + { U"\U00000EC2\U00000EDC", "lo_LA" }, /* */ + { U"\U00000EC2\U00000EDD", "lo_LA" }, /* */ + { U"\U00000EC3\U00000E81", "lo_LA" }, /* */ + { U"\U00000EC3\U00000E82", "lo_LA" }, /* */ + { U"\U00000EC3\U00000E84", "lo_LA" }, /* */ + { U"\U00000EC3\U00000E87", "lo_LA" }, /* */ + { U"\U00000EC3\U00000E88", "lo_LA" }, /* */ + { U"\U00000EC3\U00000E8A", "lo_LA" }, /* */ + { U"\U00000EC3\U00000E8D", "lo_LA" }, /* */ + { U"\U00000EC3\U00000E94", "lo_LA" }, /* */ + { U"\U00000EC3\U00000E95", "lo_LA" }, /* */ + { U"\U00000EC3\U00000E96", "lo_LA" }, /* */ + { U"\U00000EC3\U00000E97", "lo_LA" }, /* */ + { U"\U00000EC3\U00000E99", "lo_LA" }, /* */ + { U"\U00000EC3\U00000E9A", "lo_LA" }, /* */ + { U"\U00000EC3\U00000E9B", "lo_LA" }, /* */ + { U"\U00000EC3\U00000E9C", "lo_LA" }, /* */ + { U"\U00000EC3\U00000E9D", "lo_LA" }, /* */ + { U"\U00000EC3\U00000E9E", "lo_LA" }, /* */ + { U"\U00000EC3\U00000E9F", "lo_LA" }, /* */ + { U"\U00000EC3\U00000EA1", "lo_LA" }, /* */ + { U"\U00000EC3\U00000EA2", "lo_LA" }, /* */ + { U"\U00000EC3\U00000EA3", "lo_LA" }, /* */ + { U"\U00000EC3\U00000EA5", "lo_LA" }, /* */ + { U"\U00000EC3\U00000EA7", "lo_LA" }, /* */ + { U"\U00000EC3\U00000EAA", "lo_LA" }, /* */ + { U"\U00000EC3\U00000EAB", "lo_LA" }, /* */ + { U"\U00000EC3\U00000EAD", "lo_LA" }, /* */ + { U"\U00000EC3\U00000EAE", "lo_LA" }, /* */ + { U"\U00000EC3\U00000EDC", "lo_LA" }, /* */ + { U"\U00000EC3\U00000EDD", "lo_LA" }, /* */ + { U"\U00000EC4\U00000E81", "lo_LA" }, /* */ + { U"\U00000EC4\U00000E82", "lo_LA" }, /* */ + { U"\U00000EC4\U00000E84", "lo_LA" }, /* */ + { U"\U00000EC4\U00000E87", "lo_LA" }, /* */ + { U"\U00000EC4\U00000E88", "lo_LA" }, /* */ + { U"\U00000EC4\U00000E8A", "lo_LA" }, /* */ + { U"\U00000EC4\U00000E8D", "lo_LA" }, /* */ + { U"\U00000EC4\U00000E94", "lo_LA" }, /* */ + { U"\U00000EC4\U00000E95", "lo_LA" }, /* */ + { U"\U00000EC4\U00000E96", "lo_LA" }, /* */ + { U"\U00000EC4\U00000E97", "lo_LA" }, /* */ + { U"\U00000EC4\U00000E99", "lo_LA" }, /* */ + { U"\U00000EC4\U00000E9A", "lo_LA" }, /* */ + { U"\U00000EC4\U00000E9B", "lo_LA" }, /* */ + { U"\U00000EC4\U00000E9C", "lo_LA" }, /* */ + { U"\U00000EC4\U00000E9D", "lo_LA" }, /* */ + { U"\U00000EC4\U00000E9E", "lo_LA" }, /* */ + { U"\U00000EC4\U00000E9F", "lo_LA" }, /* */ + { U"\U00000EC4\U00000EA1", "lo_LA" }, /* */ + { U"\U00000EC4\U00000EA2", "lo_LA" }, /* */ + { U"\U00000EC4\U00000EA3", "lo_LA" }, /* */ + { U"\U00000EC4\U00000EA5", "lo_LA" }, /* */ + { U"\U00000EC4\U00000EA7", "lo_LA" }, /* */ + { U"\U00000EC4\U00000EAA", "lo_LA" }, /* */ + { U"\U00000EC4\U00000EAB", "lo_LA" }, /* */ + { U"\U00000EC4\U00000EAD", "lo_LA" }, /* */ + { U"\U00000EC4\U00000EAE", "lo_LA" }, /* */ + { U"\U00000EC4\U00000EDC", "lo_LA" }, /* */ + { U"\U00000EC4\U00000EDD", "lo_LA" }, /* */ + { U"\U00000F42\U00000F45", "" }, /* */ + { U"\U00000F42\U00000F49", "" }, /* */ + { U"\U00000F42\U00000F4F", "" }, /* */ + { U"\U00000F42\U00000F51", "" }, /* */ + { U"\U00000F42\U00000F51\U00000F42", "" }, /* */ + { U"\U00000F42\U00000F51\U00000F44", "" }, /* */ + { U"\U00000F42\U00000F51\U00000F51", "" }, /* */ + { U"\U00000F42\U00000F51\U00000F53", "" }, /* */ + { U"\U00000F42\U00000F51\U00000F56", "" }, /* */ + { U"\U00000F42\U00000F51\U00000F58", "" }, /* */ + { U"\U00000F42\U00000F51\U00000F60", "" }, /* */ + { U"\U00000F42\U00000F51\U00000F62", "" }, /* */ + { U"\U00000F42\U00000F51\U00000F63", "" }, /* */ + { U"\U00000F42\U00000F51\U00000F66", "" }, /* */ + { U"\U00000F42\U00000F51\U00000F72", "" }, /* */ + { U"\U00000F42\U00000F51\U00000F72\U00000F72", "" }, /* */ + { U"\U00000F42\U00000F51\U00000F74", "" }, /* */ + { U"\U00000F42\U00000F51\U00000F7A", "" }, /* */ + { U"\U00000F42\U00000F51\U00000F7B", "" }, /* */ + { U"\U00000F42\U00000F51\U00000F7C", "" }, /* */ + { U"\U00000F42\U00000F51\U00000F7D", "" }, /* */ + { U"\U00000F42\U00000F51\U00000F7E", "" }, /* */ + { U"\U00000F42\U00000F51\U00000FAD", "" }, /* */ + { U"\U00000F42\U00000F53", "" }, /* */ + { U"\U00000F42\U00000F53\U00000F42", "" }, /* */ + { U"\U00000F42\U00000F53\U00000F44", "" }, /* */ + { U"\U00000F42\U00000F53\U00000F51", "" }, /* */ + { U"\U00000F42\U00000F53\U00000F53", "" }, /* */ + { U"\U00000F42\U00000F53\U00000F56", "" }, /* */ + { U"\U00000F42\U00000F53\U00000F58", "" }, /* */ + { U"\U00000F42\U00000F53\U00000F5D", "" }, /* */ + { U"\U00000F42\U00000F53\U00000F60", "" }, /* */ + { U"\U00000F42\U00000F53\U00000F62", "" }, /* */ + { U"\U00000F42\U00000F53\U00000F63", "" }, /* */ + { U"\U00000F42\U00000F53\U00000F66", "" }, /* */ + { U"\U00000F42\U00000F53\U00000F72", "" }, /* */ + { U"\U00000F42\U00000F53\U00000F72\U00000F72", "" }, /* */ + { U"\U00000F42\U00000F53\U00000F74", "" }, /* */ + { U"\U00000F42\U00000F53\U00000F7A", "" }, /* */ + { U"\U00000F42\U00000F53\U00000F7B", "" }, /* */ + { U"\U00000F42\U00000F53\U00000F7C", "" }, /* */ + { U"\U00000F42\U00000F53\U00000F7D", "" }, /* */ + { U"\U00000F42\U00000F53\U00000F7E", "" }, /* */ + { U"\U00000F42\U00000F53\U00000FAD", "" }, /* */ + { U"\U00000F42\U00000F59", "" }, /* */ + { U"\U00000F42\U00000F5E", "" }, /* */ + { U"\U00000F42\U00000F5F", "" }, /* */ + { U"\U00000F42\U00000F61", "" }, /* */ + { U"\U00000F42\U00000F64", "" }, /* */ + { U"\U00000F42\U00000F66", "" }, /* */ + { U"\U00000F42\U00000F66\U00000F42", "" }, /* */ + { U"\U00000F42\U00000F66\U00000F44", "" }, /* */ + { U"\U00000F42\U00000F66\U00000F51", "" }, /* */ + { U"\U00000F42\U00000F66\U00000F53", "" }, /* */ + { U"\U00000F42\U00000F66\U00000F56", "" }, /* */ + { U"\U00000F42\U00000F66\U00000F58", "" }, /* */ + { U"\U00000F42\U00000F66\U00000F60", "" }, /* */ + { U"\U00000F42\U00000F66\U00000F62", "" }, /* */ + { U"\U00000F42\U00000F66\U00000F63", "" }, /* */ + { U"\U00000F42\U00000F66\U00000F66", "" }, /* */ + { U"\U00000F42\U00000F66\U00000F72", "" }, /* */ + { U"\U00000F42\U00000F66\U00000F72\U00000F72", "" }, /* */ + { U"\U00000F42\U00000F66\U00000F74", "" }, /* */ + { U"\U00000F42\U00000F66\U00000F7A", "" }, /* */ + { U"\U00000F42\U00000F66\U00000F7B", "" }, /* */ + { U"\U00000F42\U00000F66\U00000F7C", "" }, /* */ + { U"\U00000F42\U00000F66\U00000F7D", "" }, /* */ + { U"\U00000F42\U00000F66\U00000FAD", "" }, /* */ + { U"\U00000F51\U00000F40", "" }, /* */ + { U"\U00000F51\U00000F42", "" }, /* */ + { U"\U00000F51\U00000F42\U00000F42", "" }, /* */ + { U"\U00000F51\U00000F42\U00000F44", "" }, /* */ + { U"\U00000F51\U00000F42\U00000F51", "" }, /* */ + { U"\U00000F51\U00000F42\U00000F53", "" }, /* */ + { U"\U00000F51\U00000F42\U00000F56", "" }, /* */ + { U"\U00000F51\U00000F42\U00000F58", "" }, /* */ + { U"\U00000F51\U00000F42\U00000F5D", "" }, /* */ + { U"\U00000F51\U00000F42\U00000F60", "" }, /* */ + { U"\U00000F51\U00000F42\U00000F62", "" }, /* */ + { U"\U00000F51\U00000F42\U00000F63", "" }, /* */ + { U"\U00000F51\U00000F42\U00000F66", "" }, /* */ + { U"\U00000F51\U00000F42\U00000F72", "" }, /* */ + { U"\U00000F51\U00000F42\U00000F74", "" }, /* */ + { U"\U00000F51\U00000F42\U00000F7A", "" }, /* */ + { U"\U00000F51\U00000F42\U00000F7B", "" }, /* */ + { U"\U00000F51\U00000F42\U00000F7C", "" }, /* */ + { U"\U00000F51\U00000F42\U00000F7D", "" }, /* */ + { U"\U00000F51\U00000F42\U00000FAD", "" }, /* */ + { U"\U00000F51\U00000F42\U00000FB1", "" }, /* */ + { U"\U00000F51\U00000F42\U00000FB2", "" }, /* */ + { U"\U00000F51\U00000F44", "" }, /* */ + { U"\U00000F51\U00000F44\U00000F42", "" }, /* */ + { U"\U00000F51\U00000F44\U00000F44", "" }, /* */ + { U"\U00000F51\U00000F44\U00000F51", "" }, /* */ + { U"\U00000F51\U00000F44\U00000F53", "" }, /* */ + { U"\U00000F51\U00000F44\U00000F56", "" }, /* */ + { U"\U00000F51\U00000F44\U00000F58", "" }, /* */ + { U"\U00000F51\U00000F44\U00000F60", "" }, /* */ + { U"\U00000F51\U00000F44\U00000F62", "" }, /* */ + { U"\U00000F51\U00000F44\U00000F63", "" }, /* */ + { U"\U00000F51\U00000F44\U00000F66", "" }, /* */ + { U"\U00000F51\U00000F44\U00000F72", "" }, /* */ + { U"\U00000F51\U00000F44\U00000F72\U00000F72", "" }, /* */ + { U"\U00000F51\U00000F44\U00000F74", "" }, /* */ + { U"\U00000F51\U00000F44\U00000F7A", "" }, /* */ + { U"\U00000F51\U00000F44\U00000F7B", "" }, /* */ + { U"\U00000F51\U00000F44\U00000F7C", "" }, /* */ + { U"\U00000F51\U00000F44\U00000F7D", "" }, /* */ + { U"\U00000F51\U00000F44\U00000FAD", "" }, /* */ + { U"\U00000F51\U00000F54", "" }, /* */ + { U"\U00000F51\U00000F56", "" }, /* */ + { U"\U00000F51\U00000F56\U00000F42", "" }, /* */ + { U"\U00000F51\U00000F56\U00000F44", "" }, /* */ + { U"\U00000F51\U00000F56\U00000F51", "" }, /* */ + { U"\U00000F51\U00000F56\U00000F53", "" }, /* */ + { U"\U00000F51\U00000F56\U00000F56", "" }, /* */ + { U"\U00000F51\U00000F56\U00000F58", "" }, /* */ + { U"\U00000F51\U00000F56\U00000F60", "" }, /* */ + { U"\U00000F51\U00000F56\U00000F62", "" }, /* */ + { U"\U00000F51\U00000F56\U00000F63", "" }, /* */ + { U"\U00000F51\U00000F56\U00000F66", "" }, /* */ + { U"\U00000F51\U00000F56\U00000F72", "" }, /* */ + { U"\U00000F51\U00000F56\U00000F72\U00000F72", "" }, /* */ + { U"\U00000F51\U00000F56\U00000F74", "" }, /* */ + { U"\U00000F51\U00000F56\U00000F7A", "" }, /* */ + { U"\U00000F51\U00000F56\U00000F7B", "" }, /* */ + { U"\U00000F51\U00000F56\U00000F7C", "" }, /* */ + { U"\U00000F51\U00000F56\U00000F7D", "" }, /* */ + { U"\U00000F51\U00000F56\U00000FAD", "" }, /* */ + { U"\U00000F51\U00000F56\U00000FB1", "" }, /* */ + { U"\U00000F51\U00000F56\U00000FB2", "" }, /* */ + { U"\U00000F51\U00000F58", "" }, /* */ + { U"\U00000F51\U00000F58\U00000F42", "" }, /* */ + { U"\U00000F51\U00000F58\U00000F44", "" }, /* */ + { U"\U00000F51\U00000F58\U00000F51", "" }, /* */ + { U"\U00000F51\U00000F58\U00000F53", "" }, /* */ + { U"\U00000F51\U00000F58\U00000F56", "" }, /* */ + { U"\U00000F51\U00000F58\U00000F58", "" }, /* */ + { U"\U00000F51\U00000F58\U00000F5D", "" }, /* */ + { U"\U00000F51\U00000F58\U00000F60", "" }, /* */ + { U"\U00000F51\U00000F58\U00000F62", "" }, /* */ + { U"\U00000F51\U00000F58\U00000F63", "" }, /* */ + { U"\U00000F51\U00000F58\U00000F66", "" }, /* */ + { U"\U00000F51\U00000F58\U00000F72", "" }, /* */ + { U"\U00000F51\U00000F58\U00000F72\U00000F72", "" }, /* */ + { U"\U00000F51\U00000F58\U00000F74", "" }, /* */ + { U"\U00000F51\U00000F58\U00000F7A", "" }, /* */ + { U"\U00000F51\U00000F58\U00000F7B", "" }, /* */ + { U"\U00000F51\U00000F58\U00000F7C", "" }, /* */ + { U"\U00000F51\U00000F58\U00000F7D", "" }, /* */ + { U"\U00000F51\U00000F58\U00000FAD", "" }, /* */ + { U"\U00000F51\U00000F58\U00000FB1", "" }, /* */ + { U"\U00000F56\U00000F40", "" }, /* */ + { U"\U00000F56\U00000F42", "" }, /* */ + { U"\U00000F56\U00000F42\U00000F42", "" }, /* */ + { U"\U00000F56\U00000F42\U00000F44", "" }, /* */ + { U"\U00000F56\U00000F42\U00000F51", "" }, /* */ + { U"\U00000F56\U00000F42\U00000F53", "" }, /* */ + { U"\U00000F56\U00000F42\U00000F56", "" }, /* */ + { U"\U00000F56\U00000F42\U00000F58", "" }, /* */ + { U"\U00000F56\U00000F42\U00000F5D", "" }, /* */ + { U"\U00000F56\U00000F42\U00000F60", "" }, /* */ + { U"\U00000F56\U00000F42\U00000F62", "" }, /* */ + { U"\U00000F56\U00000F42\U00000F63", "" }, /* */ + { U"\U00000F56\U00000F42\U00000F72", "" }, /* */ + { U"\U00000F56\U00000F42\U00000F72\U00000F72", "" }, /* */ + { U"\U00000F56\U00000F42\U00000F74", "" }, /* */ + { U"\U00000F56\U00000F42\U00000F7A", "" }, /* */ + { U"\U00000F56\U00000F42\U00000F7B", "" }, /* */ + { U"\U00000F56\U00000F42\U00000F7C", "" }, /* */ + { U"\U00000F56\U00000F42\U00000F7D", "" }, /* */ + { U"\U00000F56\U00000F42\U00000F7E", "" }, /* */ + { U"\U00000F56\U00000F42\U00000FAD", "" }, /* */ + { U"\U00000F56\U00000F42\U00000FB1", "" }, /* */ + { U"\U00000F56\U00000F42\U00000FB2", "" }, /* */ + { U"\U00000F56\U00000F42\U00000FB3", "" }, /* */ + { U"\U00000F56\U00000F45", "" }, /* */ + { U"\U00000F56\U00000F4F", "" }, /* */ + { U"\U00000F56\U00000F51", "" }, /* */ + { U"\U00000F56\U00000F51\U00000F42", "" }, /* */ + { U"\U00000F56\U00000F51\U00000F44", "" }, /* */ + { U"\U00000F56\U00000F51\U00000F51", "" }, /* */ + { U"\U00000F56\U00000F51\U00000F53", "" }, /* */ + { U"\U00000F56\U00000F51\U00000F56", "" }, /* */ + { U"\U00000F56\U00000F51\U00000F58", "" }, /* */ + { U"\U00000F56\U00000F51\U00000F60", "" }, /* */ + { U"\U00000F56\U00000F51\U00000F62", "" }, /* */ + { U"\U00000F56\U00000F51\U00000F63", "" }, /* */ + { U"\U00000F56\U00000F51\U00000F66", "" }, /* */ + { U"\U00000F56\U00000F51\U00000F72", "" }, /* */ + { U"\U00000F56\U00000F51\U00000F72\U00000F72", "" }, /* */ + { U"\U00000F56\U00000F51\U00000F74", "" }, /* */ + { U"\U00000F56\U00000F51\U00000F7A", "" }, /* */ + { U"\U00000F56\U00000F51\U00000F7B", "" }, /* */ + { U"\U00000F56\U00000F51\U00000F7C", "" }, /* */ + { U"\U00000F56\U00000F51\U00000F7D", "" }, /* */ + { U"\U00000F56\U00000F51\U00000F7E", "" }, /* */ + { U"\U00000F56\U00000F51\U00000FAD", "" }, /* */ + { U"\U00000F56\U00000F59", "" }, /* */ + { U"\U00000F56\U00000F5E", "" }, /* */ + { U"\U00000F56\U00000F5F", "" }, /* */ + { U"\U00000F56\U00000F62", "" }, /* */ + { U"\U00000F56\U00000F62\U00000F90", "" }, /* */ + { U"\U00000F56\U00000F62\U00000F92", "" }, /* */ + { U"\U00000F56\U00000F62\U00000F94", "" }, /* */ + { U"\U00000F56\U00000F62\U00000F97", "" }, /* */ + { U"\U00000F56\U00000F62\U00000F99", "" }, /* */ + { U"\U00000F56\U00000F62\U00000F9F", "" }, /* */ + { U"\U00000F56\U00000F62\U00000FA1", "" }, /* */ + { U"\U00000F56\U00000F62\U00000FA3", "" }, /* */ + { U"\U00000F56\U00000F62\U00000FA9", "" }, /* */ + { U"\U00000F56\U00000F62\U00000FAB", "" }, /* */ + { U"\U00000F56\U00000F63\U00000F90", "" }, /* */ + { U"\U00000F56\U00000F63\U00000F92", "" }, /* */ + { U"\U00000F56\U00000F63\U00000F94", "" }, /* */ + { U"\U00000F56\U00000F63\U00000F95", "" }, /* */ + { U"\U00000F56\U00000F63\U00000F97", "" }, /* */ + { U"\U00000F56\U00000F63\U00000F9F", "" }, /* */ + { U"\U00000F56\U00000F63\U00000FA1", "" }, /* */ + { U"\U00000F56\U00000F64", "" }, /* */ + { U"\U00000F56\U00000F66", "" }, /* */ + { U"\U00000F56\U00000F66\U00000F42", "" }, /* */ + { U"\U00000F56\U00000F66\U00000F44", "" }, /* */ + { U"\U00000F56\U00000F66\U00000F51", "" }, /* */ + { U"\U00000F56\U00000F66\U00000F53", "" }, /* */ + { U"\U00000F56\U00000F66\U00000F56", "" }, /* */ + { U"\U00000F56\U00000F66\U00000F58", "" }, /* */ + { U"\U00000F56\U00000F66\U00000F60", "" }, /* */ + { U"\U00000F56\U00000F66\U00000F62", "" }, /* */ + { U"\U00000F56\U00000F66\U00000F63", "" }, /* */ + { U"\U00000F56\U00000F66\U00000F66", "" }, /* */ + { U"\U00000F56\U00000F66\U00000F72", "" }, /* */ + { U"\U00000F56\U00000F66\U00000F72\U00000F72", "" }, /* */ + { U"\U00000F56\U00000F66\U00000F74", "" }, /* */ + { U"\U00000F56\U00000F66\U00000F7A", "" }, /* */ + { U"\U00000F56\U00000F66\U00000F7B", "" }, /* */ + { U"\U00000F56\U00000F66\U00000F7C", "" }, /* */ + { U"\U00000F56\U00000F66\U00000F7D", "" }, /* */ + { U"\U00000F56\U00000F66\U00000F7E", "" }, /* */ + { U"\U00000F56\U00000F66\U00000F90", "" }, /* */ + { U"\U00000F56\U00000F66\U00000F92", "" }, /* */ + { U"\U00000F56\U00000F66\U00000F94", "" }, /* */ + { U"\U00000F56\U00000F66\U00000F99", "" }, /* */ + { U"\U00000F56\U00000F66\U00000F9F", "" }, /* */ + { U"\U00000F56\U00000F66\U00000FA1", "" }, /* */ + { U"\U00000F56\U00000F66\U00000FA3", "" }, /* */ + { U"\U00000F56\U00000F66\U00000FA9", "" }, /* */ + { U"\U00000F56\U00000F66\U00000FAD", "" }, /* */ + { U"\U00000F56\U00000F66\U00000FB2", "" }, /* */ + { U"\U00000F56\U00000F66\U00000FB3", "" }, /* */ + { U"\U00000F58\U00000F41", "" }, /* */ + { U"\U00000F58\U00000F42", "" }, /* */ + { U"\U00000F58\U00000F42\U00000F42", "" }, /* */ + { U"\U00000F58\U00000F42\U00000F44", "" }, /* */ + { U"\U00000F58\U00000F42\U00000F51", "" }, /* */ + { U"\U00000F58\U00000F42\U00000F53", "" }, /* */ + { U"\U00000F58\U00000F42\U00000F56", "" }, /* */ + { U"\U00000F58\U00000F42\U00000F58", "" }, /* */ + { U"\U00000F58\U00000F42\U00000F60", "" }, /* */ + { U"\U00000F58\U00000F42\U00000F62", "" }, /* */ + { U"\U00000F58\U00000F42\U00000F63", "" }, /* */ + { U"\U00000F58\U00000F42\U00000F72", "" }, /* */ + { U"\U00000F58\U00000F42\U00000F72\U00000F72", "" }, /* */ + { U"\U00000F58\U00000F42\U00000F74", "" }, /* */ + { U"\U00000F58\U00000F42\U00000F7A", "" }, /* */ + { U"\U00000F58\U00000F42\U00000F7B", "" }, /* */ + { U"\U00000F58\U00000F42\U00000F7C", "" }, /* */ + { U"\U00000F58\U00000F42\U00000F7D", "" }, /* */ + { U"\U00000F58\U00000F42\U00000FAD", "" }, /* */ + { U"\U00000F58\U00000F42\U00000FB1", "" }, /* */ + { U"\U00000F58\U00000F42\U00000FB2", "" }, /* */ + { U"\U00000F58\U00000F44", "" }, /* */ + { U"\U00000F58\U00000F44\U00000F42", "" }, /* */ + { U"\U00000F58\U00000F44\U00000F44", "" }, /* */ + { U"\U00000F58\U00000F44\U00000F51", "" }, /* */ + { U"\U00000F58\U00000F44\U00000F53", "" }, /* */ + { U"\U00000F58\U00000F44\U00000F56", "" }, /* */ + { U"\U00000F58\U00000F44\U00000F58", "" }, /* */ + { U"\U00000F58\U00000F44\U00000F60", "" }, /* */ + { U"\U00000F58\U00000F44\U00000F62", "" }, /* */ + { U"\U00000F58\U00000F44\U00000F63", "" }, /* */ + { U"\U00000F58\U00000F44\U00000F72", "" }, /* */ + { U"\U00000F58\U00000F44\U00000F72\U00000F72", "" }, /* */ + { U"\U00000F58\U00000F44\U00000F74", "" }, /* */ + { U"\U00000F58\U00000F44\U00000F7A", "" }, /* */ + { U"\U00000F58\U00000F44\U00000F7B", "" }, /* */ + { U"\U00000F58\U00000F44\U00000F7C", "" }, /* */ + { U"\U00000F58\U00000F44\U00000F7D", "" }, /* */ + { U"\U00000F58\U00000F44\U00000FAD", "" }, /* */ + { U"\U00000F58\U00000F46", "" }, /* */ + { U"\U00000F58\U00000F47", "" }, /* */ + { U"\U00000F58\U00000F49", "" }, /* */ + { U"\U00000F58\U00000F50", "" }, /* */ + { U"\U00000F58\U00000F51", "" }, /* */ + { U"\U00000F58\U00000F51\U00000F42", "" }, /* */ + { U"\U00000F58\U00000F51\U00000F44", "" }, /* */ + { U"\U00000F58\U00000F51\U00000F51", "" }, /* */ + { U"\U00000F58\U00000F51\U00000F53", "" }, /* */ + { U"\U00000F58\U00000F51\U00000F56", "" }, /* */ + { U"\U00000F58\U00000F51\U00000F58", "" }, /* */ + { U"\U00000F58\U00000F51\U00000F60", "" }, /* */ + { U"\U00000F58\U00000F51\U00000F62", "" }, /* */ + { U"\U00000F58\U00000F51\U00000F63", "" }, /* */ + { U"\U00000F58\U00000F51\U00000F66", "" }, /* */ + { U"\U00000F58\U00000F51\U00000F72", "" }, /* */ + { U"\U00000F58\U00000F51\U00000F72\U00000F72", "" }, /* */ + { U"\U00000F58\U00000F51\U00000F74", "" }, /* */ + { U"\U00000F58\U00000F51\U00000F7A", "" }, /* */ + { U"\U00000F58\U00000F51\U00000F7B", "" }, /* */ + { U"\U00000F58\U00000F51\U00000F7C", "" }, /* */ + { U"\U00000F58\U00000F51\U00000F7D", "" }, /* */ + { U"\U00000F58\U00000F51\U00000FAD", "" }, /* */ + { U"\U00000F58\U00000F53", "" }, /* */ + { U"\U00000F58\U00000F53\U00000F42", "" }, /* */ + { U"\U00000F58\U00000F53\U00000F44", "" }, /* */ + { U"\U00000F58\U00000F53\U00000F51", "" }, /* */ + { U"\U00000F58\U00000F53\U00000F53", "" }, /* */ + { U"\U00000F58\U00000F53\U00000F56", "" }, /* */ + { U"\U00000F58\U00000F53\U00000F58", "" }, /* */ + { U"\U00000F58\U00000F53\U00000F60", "" }, /* */ + { U"\U00000F58\U00000F53\U00000F62", "" }, /* */ + { U"\U00000F58\U00000F53\U00000F63", "" }, /* */ + { U"\U00000F58\U00000F53\U00000F66", "" }, /* */ + { U"\U00000F58\U00000F53\U00000F72", "" }, /* */ + { U"\U00000F58\U00000F53\U00000F72\U00000F72", "" }, /* */ + { U"\U00000F58\U00000F53\U00000F74", "" }, /* */ + { U"\U00000F58\U00000F53\U00000F7A", "" }, /* */ + { U"\U00000F58\U00000F53\U00000F7B", "" }, /* */ + { U"\U00000F58\U00000F53\U00000F7C", "" }, /* */ + { U"\U00000F58\U00000F53\U00000F7D", "" }, /* */ + { U"\U00000F58\U00000F53\U00000F7E", "" }, /* */ + { U"\U00000F58\U00000F53\U00000FAD", "" }, /* */ + { U"\U00000F58\U00000F5A", "" }, /* */ + { U"\U00000F58\U00000F5B", "" }, /* */ + { U"\U00000F60\U00000F41", "" }, /* */ + { U"\U00000F60\U00000F42", "" }, /* */ + { U"\U00000F60\U00000F42\U00000F42", "" }, /* */ + { U"\U00000F60\U00000F42\U00000F44", "" }, /* */ + { U"\U00000F60\U00000F42\U00000F51", "" }, /* */ + { U"\U00000F60\U00000F42\U00000F53", "" }, /* */ + { U"\U00000F60\U00000F42\U00000F56", "" }, /* */ + { U"\U00000F60\U00000F42\U00000F58", "" }, /* */ + { U"\U00000F60\U00000F42\U00000F60", "" }, /* */ + { U"\U00000F60\U00000F42\U00000F62", "" }, /* */ + { U"\U00000F60\U00000F42\U00000F63", "" }, /* */ + { U"\U00000F60\U00000F42\U00000F66", "" }, /* */ + { U"\U00000F60\U00000F42\U00000F72", "" }, /* */ + { U"\U00000F60\U00000F42\U00000F72\U00000F72", "" }, /* */ + { U"\U00000F60\U00000F42\U00000F74", "" }, /* */ + { U"\U00000F60\U00000F42\U00000F7A", "" }, /* */ + { U"\U00000F60\U00000F42\U00000F7B", "" }, /* */ + { U"\U00000F60\U00000F42\U00000F7C", "" }, /* */ + { U"\U00000F60\U00000F42\U00000F7D", "" }, /* */ + { U"\U00000F60\U00000F42\U00000F7E", "" }, /* */ + { U"\U00000F60\U00000F42\U00000FAD", "" }, /* */ + { U"\U00000F60\U00000F42\U00000FB1", "" }, /* */ + { U"\U00000F60\U00000F42\U00000FB2", "" }, /* */ + { U"\U00000F60\U00000F46", "" }, /* */ + { U"\U00000F60\U00000F47", "" }, /* */ + { U"\U00000F60\U00000F50", "" }, /* */ + { U"\U00000F60\U00000F51", "" }, /* */ + { U"\U00000F60\U00000F51\U00000F42", "" }, /* */ + { U"\U00000F60\U00000F51\U00000F44", "" }, /* */ + { U"\U00000F60\U00000F51\U00000F51", "" }, /* */ + { U"\U00000F60\U00000F51\U00000F53", "" }, /* */ + { U"\U00000F60\U00000F51\U00000F56", "" }, /* */ + { U"\U00000F60\U00000F51\U00000F58", "" }, /* */ + { U"\U00000F60\U00000F51\U00000F5D", "" }, /* */ + { U"\U00000F60\U00000F51\U00000F60", "" }, /* */ + { U"\U00000F60\U00000F51\U00000F62", "" }, /* */ + { U"\U00000F60\U00000F51\U00000F63", "" }, /* */ + { U"\U00000F60\U00000F51\U00000F66", "" }, /* */ + { U"\U00000F60\U00000F51\U00000F72", "" }, /* */ + { U"\U00000F60\U00000F51\U00000F72\U00000F72", "" }, /* */ + { U"\U00000F60\U00000F51\U00000F74", "" }, /* */ + { U"\U00000F60\U00000F51\U00000F7A", "" }, /* */ + { U"\U00000F60\U00000F51\U00000F7B", "" }, /* */ + { U"\U00000F60\U00000F51\U00000F7C", "" }, /* */ + { U"\U00000F60\U00000F51\U00000F7D", "" }, /* */ + { U"\U00000F60\U00000F51\U00000F7E", "" }, /* */ + { U"\U00000F60\U00000F51\U00000FAD", "" }, /* */ + { U"\U00000F60\U00000F51\U00000FB2", "" }, /* */ + { U"\U00000F60\U00000F55", "" }, /* */ + { U"\U00000F60\U00000F56", "" }, /* */ + { U"\U00000F60\U00000F56\U00000F42", "" }, /* */ + { U"\U00000F60\U00000F56\U00000F44", "" }, /* */ + { U"\U00000F60\U00000F56\U00000F51", "" }, /* */ + { U"\U00000F60\U00000F56\U00000F53", "" }, /* */ + { U"\U00000F60\U00000F56\U00000F56", "" }, /* */ + { U"\U00000F60\U00000F56\U00000F58", "" }, /* */ + { U"\U00000F60\U00000F56\U00000F60", "" }, /* */ + { U"\U00000F60\U00000F56\U00000F62", "" }, /* */ + { U"\U00000F60\U00000F56\U00000F63", "" }, /* */ + { U"\U00000F60\U00000F56\U00000F66", "" }, /* */ + { U"\U00000F60\U00000F56\U00000F72", "" }, /* */ + { U"\U00000F60\U00000F56\U00000F72\U00000F72", "" }, /* */ + { U"\U00000F60\U00000F56\U00000F74", "" }, /* */ + { U"\U00000F60\U00000F56\U00000F7A", "" }, /* */ + { U"\U00000F60\U00000F56\U00000F7B", "" }, /* */ + { U"\U00000F60\U00000F56\U00000F7C", "" }, /* */ + { U"\U00000F60\U00000F56\U00000F7D", "" }, /* */ + { U"\U00000F60\U00000F56\U00000F7E", "" }, /* */ + { U"\U00000F60\U00000F56\U00000FAD", "" }, /* */ + { U"\U00000F60\U00000F56\U00000FB1", "" }, /* */ + { U"\U00000F60\U00000F56\U00000FB2", "" }, /* */ + { U"\U00000F60\U00000F5A", "" }, /* */ + { U"\U00000F60\U00000F5B", "" }, /* */ + { U"\U00000F62\U00000F90", "" }, /* */ + { U"\U00000F62\U00000F92", "" }, /* */ + { U"\U00000F62\U00000F94", "" }, /* */ + { U"\U00000F62\U00000F97", "" }, /* */ + { U"\U00000F62\U00000F99", "" }, /* */ + { U"\U00000F62\U00000F9F", "" }, /* */ + { U"\U00000F62\U00000FA1", "" }, /* */ + { U"\U00000F62\U00000FA3", "" }, /* */ + { U"\U00000F62\U00000FA6", "" }, /* */ + { U"\U00000F62\U00000FA8", "" }, /* */ + { U"\U00000F62\U00000FA9", "" }, /* */ + { U"\U00000F62\U00000FAB", "" }, /* */ + { U"\U00000F63\U00000F90", "" }, /* */ + { U"\U00000F63\U00000F92", "" }, /* */ + { U"\U00000F63\U00000F94", "" }, /* */ + { U"\U00000F63\U00000F95", "" }, /* */ + { U"\U00000F63\U00000F97", "" }, /* */ + { U"\U00000F63\U00000F9F", "" }, /* */ + { U"\U00000F63\U00000FA1", "" }, /* */ + { U"\U00000F63\U00000FA4", "" }, /* */ + { U"\U00000F63\U00000FA6", "" }, /* */ + { U"\U00000F63\U00000FB7", "" }, /* */ + { U"\U00000F66\U00000F90", "" }, /* */ + { U"\U00000F66\U00000F92", "" }, /* */ + { U"\U00000F66\U00000F94", "" }, /* */ + { U"\U00000F66\U00000F99", "" }, /* */ + { U"\U00000F66\U00000F9F", "" }, /* */ + { U"\U00000F66\U00000FA1", "" }, /* */ + { U"\U00000F66\U00000FA3", "" }, /* */ + { U"\U00000F66\U00000FA4", "" }, /* */ + { U"\U00000F66\U00000FA6", "" }, /* */ + { U"\U00000F66\U00000FA8", "" }, /* */ + { U"\U00000F66\U00000FA9", "" }, /* */ + { U"\U00000F71\U00000F72", "" }, /* */ + { U"\U00000F71\U00000F74", "" }, /* */ + { U"\U00000F71\U00000F80", "" }, /* */ + { U"\U00000F88\U00000F90", "" }, /* */ + { U"\U00000F88\U00000F91", "" }, /* */ + { U"\U00000F89\U00000FA4", "" }, /* */ + { U"\U00000F89\U00000FA5", "" }, /* */ + { U"\U00000F89\U00000FAD", "" }, /* */ + { U"\U00000F89\U00000FBA", "" }, /* */ + { U"\U00001000\U00001037\U0000103A", "" }, /* */ + { U"\U00001000\U00001039", "" }, /* */ + { U"\U00001000\U0000103A", "" }, /* */ + { U"\U00001000\U0000103B\U0000103D\U00001014\U0000103A\U0000102F\U00001015\U0000103A", "" }, /* */ + { U"\U00001001\U00001037\U0000103A", "" }, /* */ + { U"\U00001001\U00001039", "" }, /* */ + { U"\U00001001\U0000103A", "" }, /* */ + { U"\U00001002\U00001037\U0000103A", "" }, /* */ + { U"\U00001002\U00001039", "" }, /* */ + { U"\U00001002\U0000103A", "" }, /* */ + { U"\U00001003\U00001037\U0000103A", "" }, /* */ + { U"\U00001003\U00001039", "" }, /* */ + { U"\U00001003\U0000103A", "" }, /* */ + { U"\U00001004\U00001037\U0000103A", "" }, /* */ + { U"\U00001004\U00001039", "" }, /* */ + { U"\U00001004\U0000103A", "" }, /* */ + { U"\U00001005\U00001037\U0000103A", "" }, /* */ + { U"\U00001005\U00001039", "" }, /* */ + { U"\U00001005\U0000103A", "" }, /* */ + { U"\U00001006\U00001037\U0000103A", "" }, /* */ + { U"\U00001006\U00001039", "" }, /* */ + { U"\U00001006\U0000103A", "" }, /* */ + { U"\U00001007\U00001037\U0000103A", "" }, /* */ + { U"\U00001007\U00001039", "" }, /* */ + { U"\U00001007\U0000103A", "" }, /* */ + { U"\U00001009\U00001037\U0000103A", "" }, /* */ + { U"\U00001009\U00001039", "" }, /* */ + { U"\U00001009\U0000103A", "" }, /* */ + { U"\U0000100A\U00001037\U0000103A", "" }, /* */ + { U"\U0000100A\U00001039", "" }, /* */ + { U"\U0000100A\U0000103A", "" }, /* */ + { U"\U0000100B\U00001037\U0000103A", "" }, /* */ + { U"\U0000100B\U00001039", "" }, /* */ + { U"\U0000100B\U0000103A", "" }, /* */ + { U"\U0000100C\U00001037\U0000103A", "" }, /* */ + { U"\U0000100C\U00001039", "" }, /* */ + { U"\U0000100C\U0000103A", "" }, /* */ + { U"\U0000100D\U00001037\U0000103A", "" }, /* */ + { U"\U0000100D\U00001039", "" }, /* */ + { U"\U0000100D\U0000103A", "" }, /* */ + { U"\U0000100E\U00001037\U0000103A", "" }, /* */ + { U"\U0000100E\U00001039", "" }, /* */ + { U"\U0000100E\U0000103A", "" }, /* */ + { U"\U0000100F\U00001037\U0000103A", "" }, /* */ + { U"\U0000100F\U00001039", "" }, /* */ + { U"\U0000100F\U0000103A", "" }, /* */ + { U"\U00001010\U00001037\U0000103A", "" }, /* */ + { U"\U00001010\U00001039", "" }, /* */ + { U"\U00001010\U0000103A", "" }, /* */ + { U"\U00001011\U00001037\U0000103A", "" }, /* */ + { U"\U00001011\U00001039", "" }, /* */ + { U"\U00001011\U00001039\U00001019\U00001004\U0000103A\U00001038", "" }, /* */ + { U"\U00001011\U0000103A", "" }, /* */ + { U"\U00001012\U00001037\U0000103A", "" }, /* */ + { U"\U00001012\U00001039", "" }, /* */ + { U"\U00001012\U0000103A", "" }, /* */ + { U"\U00001013\U00001037\U0000103A", "" }, /* */ + { U"\U00001013\U00001039", "" }, /* */ + { U"\U00001013\U0000103A", "" }, /* */ + { U"\U00001014\U00001037\U0000103A", "" }, /* */ + { U"\U00001014\U00001039", "" }, /* */ + { U"\U00001014\U0000103A", "" }, /* */ + { U"\U00001015\U00001037\U0000103A", "" }, /* */ + { U"\U00001015\U00001039", "" }, /* */ + { U"\U00001015\U0000103A", "" }, /* */ + { U"\U00001016\U00001037\U0000103A", "" }, /* */ + { U"\U00001016\U00001039", "" }, /* */ + { U"\U00001016\U0000103A", "" }, /* */ + { U"\U00001017\U00001037\U0000103A", "" }, /* */ + { U"\U00001017\U00001039", "" }, /* */ + { U"\U00001017\U0000103A", "" }, /* */ + { U"\U00001018\U00001037\U0000103A", "" }, /* */ + { U"\U00001018\U00001039", "" }, /* */ + { U"\U00001018\U0000103A", "" }, /* */ + { U"\U00001019\U00001037\U0000103A", "" }, /* */ + { U"\U00001019\U00001039", "" }, /* */ + { U"\U00001019\U0000103A", "" }, /* */ + { U"\U0000101A\U00001031\U0000102C\U00001000\U0000103A\U0000103B\U0000102C\U00001038", "" }, /* */ + { U"\U0000101A\U00001037\U0000103A", "" }, /* */ + { U"\U0000101A\U00001039", "" }, /* */ + { U"\U0000101A\U0000103A", "" }, /* */ + { U"\U0000101B\U00001037\U0000103A", "" }, /* */ + { U"\U0000101B\U00001039", "" }, /* */ + { U"\U0000101B\U0000103A", "" }, /* */ + { U"\U0000101C\U00001000\U0000103A\U0000103B\U0000102C", "" }, /* */ + { U"\U0000101C\U00001037\U0000103A", "" }, /* */ + { U"\U0000101C\U00001039", "" }, /* */ + { U"\U0000101C\U00001039\U00001018\U00001000\U0000103A", "" }, /* */ + { U"\U0000101C\U0000103A", "" }, /* */ + { U"\U0000101D\U00001037\U0000103A", "" }, /* */ + { U"\U0000101D\U00001039", "" }, /* */ + { U"\U0000101D\U0000103A", "" }, /* */ + { U"\U0000101E\U00001037\U0000103A", "" }, /* */ + { U"\U0000101E\U00001039", "" }, /* */ + { U"\U0000101E\U00001039\U00001019\U0000102E", "" }, /* */ + { U"\U0000101E\U0000103A", "" }, /* */ + { U"\U0000101F\U00001037\U0000103A", "" }, /* */ + { U"\U0000101F\U00001039", "" }, /* */ + { U"\U0000101F\U0000103A", "" }, /* */ + { U"\U00001020\U00001037\U0000103A", "" }, /* */ + { U"\U00001020\U00001039", "" }, /* */ + { U"\U00001020\U0000103A", "" }, /* */ + { U"\U00001023\U00001005\U00001037\U0000103A", "" }, /* */ + { U"\U00001023\U00001005\U00001039", "" }, /* */ + { U"\U00001023\U00001005\U0000103A", "" }, /* */ + { U"\U00001023\U0000100B\U00001037\U0000103A", "" }, /* */ + { U"\U00001023\U0000100B\U00001039", "" }, /* */ + { U"\U00001023\U0000100B\U0000103A", "" }, /* */ + { U"\U00001023\U00001010\U00001037\U0000103A", "" }, /* */ + { U"\U00001023\U00001010\U00001039", "" }, /* */ + { U"\U00001023\U00001010\U0000103A", "" }, /* */ + { U"\U00001023\U00001012\U00001037\U0000103A", "" }, /* */ + { U"\U00001023\U00001012\U00001039", "" }, /* */ + { U"\U00001023\U00001012\U0000103A", "" }, /* */ + { U"\U00001023\U00001014\U00001037\U0000103A", "" }, /* */ + { U"\U00001023\U00001014\U00001039", "" }, /* */ + { U"\U00001023\U00001014\U0000103A", "" }, /* */ + { U"\U00001023\U00001019\U00001037\U0000103A", "" }, /* */ + { U"\U00001023\U00001019\U00001039", "" }, /* */ + { U"\U00001023\U00001019\U0000103A", "" }, /* */ + { U"\U00001023\U0000101E\U00001037\U0000103A", "" }, /* */ + { U"\U00001023\U0000101E\U00001039", "" }, /* */ + { U"\U00001023\U0000101E\U0000103A", "" }, /* */ + { U"\U00001023\U0000103F", "" }, /* */ + { U"\U00001025\U00001000\U00001037\U0000103A", "" }, /* */ + { U"\U00001025\U00001000\U00001039", "" }, /* */ + { U"\U00001025\U00001000\U0000103A", "" }, /* */ + { U"\U00001025\U00001005\U00001037\U0000103A", "" }, /* */ + { U"\U00001025\U00001005\U00001039", "" }, /* */ + { U"\U00001025\U00001005\U0000103A", "" }, /* */ + { U"\U00001025\U0000100A\U00001037\U0000103A", "" }, /* */ + { U"\U00001025\U0000100A\U00001039", "" }, /* */ + { U"\U00001025\U0000100A\U0000103A", "" }, /* */ + { U"\U00001025\U0000100F\U00001037\U0000103A", "" }, /* */ + { U"\U00001025\U0000100F\U00001039", "" }, /* */ + { U"\U00001025\U0000100F\U0000103A", "" }, /* */ + { U"\U00001025\U00001010\U00001037\U0000103A", "" }, /* */ + { U"\U00001025\U00001010\U00001039", "" }, /* */ + { U"\U00001025\U00001010\U0000103A", "" }, /* */ + { U"\U00001025\U00001012\U00001037\U0000103A", "" }, /* */ + { U"\U00001025\U00001012\U00001039", "" }, /* */ + { U"\U00001025\U00001012\U0000103A", "" }, /* */ + { U"\U00001025\U00001014\U00001037\U0000103A", "" }, /* */ + { U"\U00001025\U00001014\U00001039", "" }, /* */ + { U"\U00001025\U00001014\U0000103A", "" }, /* */ + { U"\U00001025\U00001015\U00001037\U0000103A", "" }, /* */ + { U"\U00001025\U00001015\U00001039", "" }, /* */ + { U"\U00001025\U00001015\U0000103A", "" }, /* */ + { U"\U00001025\U00001019\U00001037\U0000103A", "" }, /* */ + { U"\U00001025\U00001019\U00001039", "" }, /* */ + { U"\U00001025\U00001019\U0000103A", "" }, /* */ + { U"\U00001025\U0000101E\U00001037\U0000103A", "" }, /* */ + { U"\U00001025\U0000101E\U00001039", "" }, /* */ + { U"\U00001025\U0000101E\U0000103A", "" }, /* */ + { U"\U00001025\U0000102E", "" }, /* */ + { U"\U00001025\U0000102F\U00001036", "" }, /* */ + { U"\U00001025\U0000103F", "" }, /* */ + { U"\U00001027\U0000100A\U00001037\U0000103A", "" }, /* */ + { U"\U00001027\U0000100A\U00001039", "" }, /* */ + { U"\U00001027\U0000100A\U0000103A", "" }, /* */ + { U"\U00001029\U0000100B\U00001037\U0000103A", "" }, /* */ + { U"\U00001029\U0000100B\U00001039", "" }, /* */ + { U"\U00001029\U0000100B\U0000103A", "" }, /* */ + { U"\U00001029\U00001010\U00001037\U0000103A", "" }, /* */ + { U"\U00001029\U00001010\U00001039", "" }, /* */ + { U"\U00001029\U00001010\U0000103A", "" }, /* */ + { U"\U00001029\U00001031\U0000102C\U00001004\U00001037\U0000103A", "" }, /* */ + { U"\U00001029\U00001031\U0000102C\U00001004\U00001039", "" }, /* */ + { U"\U00001029\U00001031\U0000102C\U00001004\U0000103A", "" }, /* */ + { U"\U0000102B", "" }, /* */ + { U"\U0000102B\U00001000\U00001037\U0000103A", "" }, /* */ + { U"\U0000102B\U00001000\U00001039", "" }, /* */ + { U"\U0000102B\U00001000\U0000103A", "" }, /* */ + { U"\U0000102B\U00001001\U00001037\U0000103A", "" }, /* */ + { U"\U0000102B\U00001001\U00001039", "" }, /* */ + { U"\U0000102B\U00001001\U0000103A", "" }, /* */ + { U"\U0000102B\U00001002\U00001037\U0000103A", "" }, /* */ + { U"\U0000102B\U00001002\U00001039", "" }, /* */ + { U"\U0000102B\U00001002\U0000103A", "" }, /* */ + { U"\U0000102B\U00001003\U00001037\U0000103A", "" }, /* */ + { U"\U0000102B\U00001003\U00001039", "" }, /* */ + { U"\U0000102B\U00001003\U0000103A", "" }, /* */ + { U"\U0000102B\U00001004\U00001037\U0000103A", "" }, /* */ + { U"\U0000102B\U00001004\U0000103A", "" }, /* */ + { U"\U0000102B\U00001004\U0000103A\U00001039", "" }, /* */ + { U"\U0000102B\U00001005\U00001037\U0000103A", "" }, /* */ + { U"\U0000102B\U00001005\U00001039", "" }, /* */ + { U"\U0000102B\U00001005\U0000103A", "" }, /* */ + { U"\U0000102B\U00001006\U00001037\U0000103A", "" }, /* */ + { U"\U0000102B\U00001006\U00001039", "" }, /* */ + { U"\U0000102B\U00001006\U0000103A", "" }, /* */ + { U"\U0000102B\U00001007\U00001037\U0000103A", "" }, /* */ + { U"\U0000102B\U00001007\U00001039", "" }, /* */ + { U"\U0000102B\U00001007\U0000103A", "" }, /* */ + { U"\U0000102B\U00001009\U00001037\U0000103A", "" }, /* */ + { U"\U0000102B\U00001009\U00001039", "" }, /* */ + { U"\U0000102B\U00001009\U0000103A", "" }, /* */ + { U"\U0000102B\U0000100A\U00001037\U0000103A", "" }, /* */ + { U"\U0000102B\U0000100A\U00001039", "" }, /* */ + { U"\U0000102B\U0000100A\U0000103A", "" }, /* */ + { U"\U0000102B\U0000100B\U00001037\U0000103A", "" }, /* */ + { U"\U0000102B\U0000100B\U00001039", "" }, /* */ + { U"\U0000102B\U0000100B\U0000103A", "" }, /* */ + { U"\U0000102B\U0000100C\U00001037\U0000103A", "" }, /* */ + { U"\U0000102B\U0000100C\U00001039", "" }, /* */ + { U"\U0000102B\U0000100C\U0000103A", "" }, /* */ + { U"\U0000102B\U0000100D\U00001037\U0000103A", "" }, /* */ + { U"\U0000102B\U0000100D\U00001039", "" }, /* */ + { U"\U0000102B\U0000100D\U0000103A", "" }, /* */ + { U"\U0000102B\U0000100E\U00001037\U0000103A", "" }, /* */ + { U"\U0000102B\U0000100E\U00001039", "" }, /* */ + { U"\U0000102B\U0000100E\U0000103A", "" }, /* */ + { U"\U0000102B\U0000100F\U00001037\U0000103A", "" }, /* */ + { U"\U0000102B\U0000100F\U00001039", "" }, /* */ + { U"\U0000102B\U0000100F\U0000103A", "" }, /* */ + { U"\U0000102B\U00001010\U00001037\U0000103A", "" }, /* */ + { U"\U0000102B\U00001010\U00001039", "" }, /* */ + { U"\U0000102B\U00001010\U0000103A", "" }, /* */ + { U"\U0000102B\U00001011\U00001037\U0000103A", "" }, /* */ + { U"\U0000102B\U00001011\U00001039", "" }, /* */ + { U"\U0000102B\U00001011\U0000103A", "" }, /* */ + { U"\U0000102B\U00001012\U00001037\U0000103A", "" }, /* */ + { U"\U0000102B\U00001012\U00001039", "" }, /* */ + { U"\U0000102B\U00001012\U0000103A", "" }, /* */ + { U"\U0000102B\U00001013\U00001037\U0000103A", "" }, /* */ + { U"\U0000102B\U00001013\U00001039", "" }, /* */ + { U"\U0000102B\U00001013\U0000103A", "" }, /* */ + { U"\U0000102B\U00001014\U00001037\U0000103A", "" }, /* */ + { U"\U0000102B\U00001014\U00001039", "" }, /* */ + { U"\U0000102B\U00001014\U0000103A", "" }, /* */ + { U"\U0000102B\U00001015\U00001037\U0000103A", "" }, /* */ + { U"\U0000102B\U00001015\U00001039", "" }, /* */ + { U"\U0000102B\U00001015\U0000103A", "" }, /* */ + { U"\U0000102B\U00001016\U00001037\U0000103A", "" }, /* */ + { U"\U0000102B\U00001016\U00001039", "" }, /* */ + { U"\U0000102B\U00001016\U0000103A", "" }, /* */ + { U"\U0000102B\U00001017\U00001037\U0000103A", "" }, /* */ + { U"\U0000102B\U00001017\U00001039", "" }, /* */ + { U"\U0000102B\U00001017\U0000103A", "" }, /* */ + { U"\U0000102B\U00001018\U00001037\U0000103A", "" }, /* */ + { U"\U0000102B\U00001018\U00001039", "" }, /* */ + { U"\U0000102B\U00001018\U0000103A", "" }, /* */ + { U"\U0000102B\U00001019\U00001037\U0000103A", "" }, /* */ + { U"\U0000102B\U00001019\U00001039", "" }, /* */ + { U"\U0000102B\U00001019\U0000103A", "" }, /* */ + { U"\U0000102B\U0000101A\U00001037\U0000103A", "" }, /* */ + { U"\U0000102B\U0000101A\U00001039", "" }, /* */ + { U"\U0000102B\U0000101A\U0000103A", "" }, /* */ + { U"\U0000102B\U0000101B\U00001037\U0000103A", "" }, /* */ + { U"\U0000102B\U0000101B\U00001039", "" }, /* */ + { U"\U0000102B\U0000101B\U0000103A", "" }, /* */ + { U"\U0000102B\U0000101C\U00001037\U0000103A", "" }, /* */ + { U"\U0000102B\U0000101C\U00001039", "" }, /* */ + { U"\U0000102B\U0000101C\U0000103A", "" }, /* */ + { U"\U0000102B\U0000101D\U00001037\U0000103A", "" }, /* */ + { U"\U0000102B\U0000101D\U00001039", "" }, /* */ + { U"\U0000102B\U0000101D\U0000103A", "" }, /* */ + { U"\U0000102B\U0000101E\U00001037\U0000103A", "" }, /* */ + { U"\U0000102B\U0000101E\U00001039", "" }, /* */ + { U"\U0000102B\U0000101E\U0000103A", "" }, /* */ + { U"\U0000102B\U0000101F\U00001037\U0000103A", "" }, /* */ + { U"\U0000102B\U0000101F\U00001039", "" }, /* */ + { U"\U0000102B\U0000101F\U0000103A", "" }, /* */ + { U"\U0000102B\U00001020\U00001037\U0000103A", "" }, /* */ + { U"\U0000102B\U00001020\U00001039", "" }, /* */ + { U"\U0000102B\U00001020\U0000103A", "" }, /* */ + { U"\U0000102C", "" }, /* */ + { U"\U0000102C\U00001000\U00001037\U0000103A", "" }, /* */ + { U"\U0000102C\U00001000\U00001039", "" }, /* */ + { U"\U0000102C\U00001000\U0000103A", "" }, /* */ + { U"\U0000102C\U00001001\U00001037\U0000103A", "" }, /* */ + { U"\U0000102C\U00001001\U00001039", "" }, /* */ + { U"\U0000102C\U00001001\U0000103A", "" }, /* */ + { U"\U0000102C\U00001002\U00001037\U0000103A", "" }, /* */ + { U"\U0000102C\U00001002\U00001039", "" }, /* */ + { U"\U0000102C\U00001002\U0000103A", "" }, /* */ + { U"\U0000102C\U00001003\U00001037\U0000103A", "" }, /* */ + { U"\U0000102C\U00001003\U00001039", "" }, /* */ + { U"\U0000102C\U00001003\U0000103A", "" }, /* */ + { U"\U0000102C\U00001004\U00001037\U0000103A", "" }, /* */ + { U"\U0000102C\U00001004\U0000103A", "" }, /* */ + { U"\U0000102C\U00001004\U0000103A\U00001039", "" }, /* */ + { U"\U0000102C\U00001005\U00001037\U0000103A", "" }, /* */ + { U"\U0000102C\U00001005\U00001039", "" }, /* */ + { U"\U0000102C\U00001005\U0000103A", "" }, /* */ + { U"\U0000102C\U00001006\U00001037\U0000103A", "" }, /* */ + { U"\U0000102C\U00001006\U00001039", "" }, /* */ + { U"\U0000102C\U00001006\U0000103A", "" }, /* */ + { U"\U0000102C\U00001007\U00001037\U0000103A", "" }, /* */ + { U"\U0000102C\U00001007\U00001039", "" }, /* */ + { U"\U0000102C\U00001007\U0000103A", "" }, /* */ + { U"\U0000102C\U00001009\U00001037\U0000103A", "" }, /* */ + { U"\U0000102C\U00001009\U00001039", "" }, /* */ + { U"\U0000102C\U00001009\U0000103A", "" }, /* */ + { U"\U0000102C\U0000100A\U00001037\U0000103A", "" }, /* */ + { U"\U0000102C\U0000100A\U00001039", "" }, /* */ + { U"\U0000102C\U0000100A\U0000103A", "" }, /* */ + { U"\U0000102C\U0000100B\U00001037\U0000103A", "" }, /* */ + { U"\U0000102C\U0000100B\U00001039", "" }, /* */ + { U"\U0000102C\U0000100B\U0000103A", "" }, /* */ + { U"\U0000102C\U0000100C\U00001037\U0000103A", "" }, /* */ + { U"\U0000102C\U0000100C\U00001039", "" }, /* */ + { U"\U0000102C\U0000100C\U0000103A", "" }, /* */ + { U"\U0000102C\U0000100D\U00001037\U0000103A", "" }, /* */ + { U"\U0000102C\U0000100D\U00001039", "" }, /* */ + { U"\U0000102C\U0000100D\U0000103A", "" }, /* */ + { U"\U0000102C\U0000100E\U00001037\U0000103A", "" }, /* */ + { U"\U0000102C\U0000100E\U00001039", "" }, /* */ + { U"\U0000102C\U0000100E\U0000103A", "" }, /* */ + { U"\U0000102C\U0000100F\U00001037\U0000103A", "" }, /* */ + { U"\U0000102C\U0000100F\U00001039", "" }, /* */ + { U"\U0000102C\U0000100F\U0000103A", "" }, /* */ + { U"\U0000102C\U00001010\U00001037\U0000103A", "" }, /* */ + { U"\U0000102C\U00001010\U00001039", "" }, /* */ + { U"\U0000102C\U00001010\U0000103A", "" }, /* */ + { U"\U0000102C\U00001011\U00001037\U0000103A", "" }, /* */ + { U"\U0000102C\U00001011\U00001039", "" }, /* */ + { U"\U0000102C\U00001011\U0000103A", "" }, /* */ + { U"\U0000102C\U00001012\U00001037\U0000103A", "" }, /* */ + { U"\U0000102C\U00001012\U00001039", "" }, /* */ + { U"\U0000102C\U00001012\U0000103A", "" }, /* */ + { U"\U0000102C\U00001013\U00001037\U0000103A", "" }, /* */ + { U"\U0000102C\U00001013\U00001039", "" }, /* */ + { U"\U0000102C\U00001013\U0000103A", "" }, /* */ + { U"\U0000102C\U00001014\U00001037\U0000103A", "" }, /* */ + { U"\U0000102C\U00001014\U00001039", "" }, /* */ + { U"\U0000102C\U00001014\U0000103A", "" }, /* */ + { U"\U0000102C\U00001015\U00001037\U0000103A", "" }, /* */ + { U"\U0000102C\U00001015\U00001039", "" }, /* */ + { U"\U0000102C\U00001015\U0000103A", "" }, /* */ + { U"\U0000102C\U00001016\U00001037\U0000103A", "" }, /* */ + { U"\U0000102C\U00001016\U00001039", "" }, /* */ + { U"\U0000102C\U00001016\U0000103A", "" }, /* */ + { U"\U0000102C\U00001017\U00001037\U0000103A", "" }, /* */ + { U"\U0000102C\U00001017\U00001039", "" }, /* */ + { U"\U0000102C\U00001017\U0000103A", "" }, /* */ + { U"\U0000102C\U00001018\U00001037\U0000103A", "" }, /* */ + { U"\U0000102C\U00001018\U00001039", "" }, /* */ + { U"\U0000102C\U00001018\U0000103A", "" }, /* */ + { U"\U0000102C\U00001019\U00001037\U0000103A", "" }, /* */ + { U"\U0000102C\U00001019\U00001039", "" }, /* */ + { U"\U0000102C\U00001019\U0000103A", "" }, /* */ + { U"\U0000102C\U0000101A\U00001037\U0000103A", "" }, /* */ + { U"\U0000102C\U0000101A\U00001039", "" }, /* */ + { U"\U0000102C\U0000101A\U0000103A", "" }, /* */ + { U"\U0000102C\U0000101B\U00001037\U0000103A", "" }, /* */ + { U"\U0000102C\U0000101B\U00001039", "" }, /* */ + { U"\U0000102C\U0000101B\U0000103A", "" }, /* */ + { U"\U0000102C\U0000101C\U00001037\U0000103A", "" }, /* */ + { U"\U0000102C\U0000101C\U00001039", "" }, /* */ + { U"\U0000102C\U0000101C\U0000103A", "" }, /* */ + { U"\U0000102C\U0000101D\U00001037\U0000103A", "" }, /* */ + { U"\U0000102C\U0000101D\U00001039", "" }, /* */ + { U"\U0000102C\U0000101D\U0000103A", "" }, /* */ + { U"\U0000102C\U0000101E\U00001037\U0000103A", "" }, /* */ + { U"\U0000102C\U0000101E\U00001039", "" }, /* */ + { U"\U0000102C\U0000101E\U0000103A", "" }, /* */ + { U"\U0000102C\U0000101F\U00001037\U0000103A", "" }, /* */ + { U"\U0000102C\U0000101F\U00001039", "" }, /* */ + { U"\U0000102C\U0000101F\U0000103A", "" }, /* */ + { U"\U0000102C\U00001020\U00001037\U0000103A", "" }, /* */ + { U"\U0000102C\U00001020\U00001039", "" }, /* */ + { U"\U0000102C\U00001020\U0000103A", "" }, /* */ + { U"\U0000102C\U0000103A", "" }, /* */ + { U"\U0000102C\U0000103F", "" }, /* */ + { U"\U0000102D", "" }, /* */ + { U"\U0000102D\U00001000\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U00001000\U00001039", "" }, /* */ + { U"\U0000102D\U00001000\U0000103A", "" }, /* */ + { U"\U0000102D\U00001001\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U00001001\U00001039", "" }, /* */ + { U"\U0000102D\U00001001\U0000103A", "" }, /* */ + { U"\U0000102D\U00001002\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U00001002\U00001039", "" }, /* */ + { U"\U0000102D\U00001002\U0000103A", "" }, /* */ + { U"\U0000102D\U00001003\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U00001003\U00001039", "" }, /* */ + { U"\U0000102D\U00001003\U0000103A", "" }, /* */ + { U"\U0000102D\U00001004\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U00001004\U0000103A", "" }, /* */ + { U"\U0000102D\U00001004\U0000103A\U00001039", "" }, /* */ + { U"\U0000102D\U00001005\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U00001005\U00001039", "" }, /* */ + { U"\U0000102D\U00001005\U0000103A", "" }, /* */ + { U"\U0000102D\U00001006\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U00001006\U00001039", "" }, /* */ + { U"\U0000102D\U00001006\U0000103A", "" }, /* */ + { U"\U0000102D\U00001007\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U00001007\U00001039", "" }, /* */ + { U"\U0000102D\U00001007\U0000103A", "" }, /* */ + { U"\U0000102D\U00001009\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U00001009\U00001039", "" }, /* */ + { U"\U0000102D\U00001009\U0000103A", "" }, /* */ + { U"\U0000102D\U0000100A\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U0000100A\U00001039", "" }, /* */ + { U"\U0000102D\U0000100A\U0000103A", "" }, /* */ + { U"\U0000102D\U0000100B\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U0000100B\U00001039", "" }, /* */ + { U"\U0000102D\U0000100B\U0000103A", "" }, /* */ + { U"\U0000102D\U0000100C\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U0000100C\U00001039", "" }, /* */ + { U"\U0000102D\U0000100C\U0000103A", "" }, /* */ + { U"\U0000102D\U0000100D\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U0000100D\U00001039", "" }, /* */ + { U"\U0000102D\U0000100D\U0000103A", "" }, /* */ + { U"\U0000102D\U0000100E\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U0000100E\U00001039", "" }, /* */ + { U"\U0000102D\U0000100E\U0000103A", "" }, /* */ + { U"\U0000102D\U0000100F\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U0000100F\U00001039", "" }, /* */ + { U"\U0000102D\U0000100F\U0000103A", "" }, /* */ + { U"\U0000102D\U00001010\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U00001010\U00001039", "" }, /* */ + { U"\U0000102D\U00001010\U0000103A", "" }, /* */ + { U"\U0000102D\U00001011\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U00001011\U00001039", "" }, /* */ + { U"\U0000102D\U00001011\U0000103A", "" }, /* */ + { U"\U0000102D\U00001012\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U00001012\U00001039", "" }, /* */ + { U"\U0000102D\U00001012\U0000103A", "" }, /* */ + { U"\U0000102D\U00001013\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U00001013\U00001039", "" }, /* */ + { U"\U0000102D\U00001013\U0000103A", "" }, /* */ + { U"\U0000102D\U00001014\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U00001014\U00001039", "" }, /* */ + { U"\U0000102D\U00001014\U0000103A", "" }, /* */ + { U"\U0000102D\U00001015\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U00001015\U00001039", "" }, /* */ + { U"\U0000102D\U00001015\U0000103A", "" }, /* */ + { U"\U0000102D\U00001016\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U00001016\U00001039", "" }, /* */ + { U"\U0000102D\U00001016\U0000103A", "" }, /* */ + { U"\U0000102D\U00001017\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U00001017\U00001039", "" }, /* */ + { U"\U0000102D\U00001017\U0000103A", "" }, /* */ + { U"\U0000102D\U00001018\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U00001018\U00001039", "" }, /* */ + { U"\U0000102D\U00001018\U0000103A", "" }, /* */ + { U"\U0000102D\U00001019\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U00001019\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U00001019\U00001039", "" }, /* */ + { U"\U0000102D\U00001019\U0000103A", "" }, /* */ + { U"\U0000102D\U00001019\U0000103A\U00001037", "" }, /* */ + { U"\U0000102D\U00001019\U0000103A\U00001038", "" }, /* */ + { U"\U0000102D\U0000101A\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U0000101A\U00001039", "" }, /* */ + { U"\U0000102D\U0000101A\U0000103A", "" }, /* */ + { U"\U0000102D\U0000101B\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U0000101B\U00001039", "" }, /* */ + { U"\U0000102D\U0000101B\U0000103A", "" }, /* */ + { U"\U0000102D\U0000101C\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U0000101C\U00001039", "" }, /* */ + { U"\U0000102D\U0000101C\U0000103A", "" }, /* */ + { U"\U0000102D\U0000101D\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U0000101D\U00001039", "" }, /* */ + { U"\U0000102D\U0000101D\U0000103A", "" }, /* */ + { U"\U0000102D\U0000101E\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U0000101E\U00001039", "" }, /* */ + { U"\U0000102D\U0000101E\U0000103A", "" }, /* */ + { U"\U0000102D\U0000101F\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U0000101F\U00001039", "" }, /* */ + { U"\U0000102D\U0000101F\U0000103A", "" }, /* */ + { U"\U0000102D\U00001020\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U00001020\U00001039", "" }, /* */ + { U"\U0000102D\U00001020\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F", "" }, /* */ + { U"\U0000102D\U0000102F\U00001000\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U00001000\U00001039", "" }, /* */ + { U"\U0000102D\U0000102F\U00001000\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U00001001\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U00001001\U00001039", "" }, /* */ + { U"\U0000102D\U0000102F\U00001001\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U00001002\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U00001002\U00001039", "" }, /* */ + { U"\U0000102D\U0000102F\U00001002\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U00001003\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U00001003\U00001039", "" }, /* */ + { U"\U0000102D\U0000102F\U00001003\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U00001004\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U00001004\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U00001004\U0000103A\U00001039", "" }, /* */ + { U"\U0000102D\U0000102F\U00001005\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U00001005\U00001039", "" }, /* */ + { U"\U0000102D\U0000102F\U00001005\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U00001006\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U00001006\U00001039", "" }, /* */ + { U"\U0000102D\U0000102F\U00001006\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U00001007\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U00001007\U00001039", "" }, /* */ + { U"\U0000102D\U0000102F\U00001007\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U00001009\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U00001009\U00001039", "" }, /* */ + { U"\U0000102D\U0000102F\U00001009\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U0000100A\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U0000100A\U00001039", "" }, /* */ + { U"\U0000102D\U0000102F\U0000100A\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U0000100B\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U0000100B\U00001039", "" }, /* */ + { U"\U0000102D\U0000102F\U0000100B\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U0000100C\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U0000100C\U00001039", "" }, /* */ + { U"\U0000102D\U0000102F\U0000100C\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U0000100D\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U0000100D\U00001039", "" }, /* */ + { U"\U0000102D\U0000102F\U0000100D\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U0000100E\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U0000100E\U00001039", "" }, /* */ + { U"\U0000102D\U0000102F\U0000100E\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U0000100F\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U0000100F\U00001039", "" }, /* */ + { U"\U0000102D\U0000102F\U0000100F\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U00001010\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U00001010\U00001039", "" }, /* */ + { U"\U0000102D\U0000102F\U00001010\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U00001011\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U00001011\U00001039", "" }, /* */ + { U"\U0000102D\U0000102F\U00001011\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U00001012\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U00001012\U00001039", "" }, /* */ + { U"\U0000102D\U0000102F\U00001012\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U00001013\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U00001013\U00001039", "" }, /* */ + { U"\U0000102D\U0000102F\U00001013\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U00001014\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U00001014\U00001039", "" }, /* */ + { U"\U0000102D\U0000102F\U00001014\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U00001015\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U00001015\U00001039", "" }, /* */ + { U"\U0000102D\U0000102F\U00001015\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U00001016\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U00001016\U00001039", "" }, /* */ + { U"\U0000102D\U0000102F\U00001016\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U00001017\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U00001017\U00001039", "" }, /* */ + { U"\U0000102D\U0000102F\U00001017\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U00001018\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U00001018\U00001039", "" }, /* */ + { U"\U0000102D\U0000102F\U00001018\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U00001019\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U00001019\U00001039", "" }, /* */ + { U"\U0000102D\U0000102F\U00001019\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U0000101A\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U0000101A\U00001039", "" }, /* */ + { U"\U0000102D\U0000102F\U0000101A\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U0000101B\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U0000101B\U00001039", "" }, /* */ + { U"\U0000102D\U0000102F\U0000101B\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U0000101C\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U0000101C\U00001039", "" }, /* */ + { U"\U0000102D\U0000102F\U0000101C\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U0000101D\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U0000101D\U00001039", "" }, /* */ + { U"\U0000102D\U0000102F\U0000101D\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U0000101E\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U0000101E\U00001039", "" }, /* */ + { U"\U0000102D\U0000102F\U0000101E\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U0000101F\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U0000101F\U00001039", "" }, /* */ + { U"\U0000102D\U0000102F\U0000101F\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U00001020\U00001037\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U00001020\U00001039", "" }, /* */ + { U"\U0000102D\U0000102F\U00001020\U0000103A", "" }, /* */ + { U"\U0000102D\U0000102F\U0000103F", "" }, /* */ + { U"\U0000102D\U00001036", "" }, /* */ + { U"\U0000102D\U00001036\U00001037", "" }, /* */ + { U"\U0000102D\U00001036\U00001038", "" }, /* */ + { U"\U0000102D\U0000103F", "" }, /* */ + { U"\U0000102E", "" }, /* */ + { U"\U0000102E\U00001000\U00001037\U0000103A", "" }, /* */ + { U"\U0000102E\U00001000\U00001039", "" }, /* */ + { U"\U0000102E\U00001000\U0000103A", "" }, /* */ + { U"\U0000102E\U00001001\U00001037\U0000103A", "" }, /* */ + { U"\U0000102E\U00001001\U00001039", "" }, /* */ + { U"\U0000102E\U00001001\U0000103A", "" }, /* */ + { U"\U0000102E\U00001002\U00001037\U0000103A", "" }, /* */ + { U"\U0000102E\U00001002\U00001039", "" }, /* */ + { U"\U0000102E\U00001002\U0000103A", "" }, /* */ + { U"\U0000102E\U00001003\U00001037\U0000103A", "" }, /* */ + { U"\U0000102E\U00001003\U00001039", "" }, /* */ + { U"\U0000102E\U00001003\U0000103A", "" }, /* */ + { U"\U0000102E\U00001004\U00001037\U0000103A", "" }, /* */ + { U"\U0000102E\U00001004\U0000103A", "" }, /* */ + { U"\U0000102E\U00001004\U0000103A\U00001039", "" }, /* */ + { U"\U0000102E\U00001005\U00001037\U0000103A", "" }, /* */ + { U"\U0000102E\U00001005\U00001039", "" }, /* */ + { U"\U0000102E\U00001005\U0000103A", "" }, /* */ + { U"\U0000102E\U00001006\U00001037\U0000103A", "" }, /* */ + { U"\U0000102E\U00001006\U00001039", "" }, /* */ + { U"\U0000102E\U00001006\U0000103A", "" }, /* */ + { U"\U0000102E\U00001007\U00001037\U0000103A", "" }, /* */ + { U"\U0000102E\U00001007\U00001039", "" }, /* */ + { U"\U0000102E\U00001007\U0000103A", "" }, /* */ + { U"\U0000102E\U00001009\U00001037\U0000103A", "" }, /* */ + { U"\U0000102E\U00001009\U00001039", "" }, /* */ + { U"\U0000102E\U00001009\U0000103A", "" }, /* */ + { U"\U0000102E\U0000100A\U00001037\U0000103A", "" }, /* */ + { U"\U0000102E\U0000100A\U00001039", "" }, /* */ + { U"\U0000102E\U0000100A\U0000103A", "" }, /* */ + { U"\U0000102E\U0000100B\U00001037\U0000103A", "" }, /* */ + { U"\U0000102E\U0000100B\U00001039", "" }, /* */ + { U"\U0000102E\U0000100B\U0000103A", "" }, /* */ + { U"\U0000102E\U0000100C\U00001037\U0000103A", "" }, /* */ + { U"\U0000102E\U0000100C\U00001039", "" }, /* */ + { U"\U0000102E\U0000100C\U0000103A", "" }, /* */ + { U"\U0000102E\U0000100D\U00001037\U0000103A", "" }, /* */ + { U"\U0000102E\U0000100D\U00001039", "" }, /* */ + { U"\U0000102E\U0000100D\U0000103A", "" }, /* */ + { U"\U0000102E\U0000100E\U00001037\U0000103A", "" }, /* */ + { U"\U0000102E\U0000100E\U00001039", "" }, /* */ + { U"\U0000102E\U0000100E\U0000103A", "" }, /* */ + { U"\U0000102E\U0000100F\U00001037\U0000103A", "" }, /* */ + { U"\U0000102E\U0000100F\U00001039", "" }, /* */ + { U"\U0000102E\U0000100F\U0000103A", "" }, /* */ + { U"\U0000102E\U00001010\U00001037\U0000103A", "" }, /* */ + { U"\U0000102E\U00001010\U00001039", "" }, /* */ + { U"\U0000102E\U00001010\U0000103A", "" }, /* */ + { U"\U0000102E\U00001011\U00001037\U0000103A", "" }, /* */ + { U"\U0000102E\U00001011\U00001039", "" }, /* */ + { U"\U0000102E\U00001011\U0000103A", "" }, /* */ + { U"\U0000102E\U00001012\U00001037\U0000103A", "" }, /* */ + { U"\U0000102E\U00001012\U00001039", "" }, /* */ + { U"\U0000102E\U00001012\U0000103A", "" }, /* */ + { U"\U0000102E\U00001013\U00001037\U0000103A", "" }, /* */ + { U"\U0000102E\U00001013\U00001039", "" }, /* */ + { U"\U0000102E\U00001013\U0000103A", "" }, /* */ + { U"\U0000102E\U00001014\U00001037\U0000103A", "" }, /* */ + { U"\U0000102E\U00001014\U00001039", "" }, /* */ + { U"\U0000102E\U00001014\U0000103A", "" }, /* */ + { U"\U0000102E\U00001015\U00001037\U0000103A", "" }, /* */ + { U"\U0000102E\U00001015\U00001039", "" }, /* */ + { U"\U0000102E\U00001015\U0000103A", "" }, /* */ + { U"\U0000102E\U00001016\U00001037\U0000103A", "" }, /* */ + { U"\U0000102E\U00001016\U00001039", "" }, /* */ + { U"\U0000102E\U00001016\U0000103A", "" }, /* */ + { U"\U0000102E\U00001017\U00001037\U0000103A", "" }, /* */ + { U"\U0000102E\U00001017\U00001039", "" }, /* */ + { U"\U0000102E\U00001017\U0000103A", "" }, /* */ + { U"\U0000102E\U00001018\U00001037\U0000103A", "" }, /* */ + { U"\U0000102E\U00001018\U00001039", "" }, /* */ + { U"\U0000102E\U00001018\U0000103A", "" }, /* */ + { U"\U0000102E\U00001019\U00001037\U0000103A", "" }, /* */ + { U"\U0000102E\U00001019\U00001039", "" }, /* */ + { U"\U0000102E\U00001019\U0000103A", "" }, /* */ + { U"\U0000102E\U0000101A\U00001037\U0000103A", "" }, /* */ + { U"\U0000102E\U0000101A\U00001039", "" }, /* */ + { U"\U0000102E\U0000101A\U0000103A", "" }, /* */ + { U"\U0000102E\U0000101B\U00001037\U0000103A", "" }, /* */ + { U"\U0000102E\U0000101B\U00001039", "" }, /* */ + { U"\U0000102E\U0000101B\U0000103A", "" }, /* */ + { U"\U0000102E\U0000101C\U00001037\U0000103A", "" }, /* */ + { U"\U0000102E\U0000101C\U00001039", "" }, /* */ + { U"\U0000102E\U0000101C\U0000103A", "" }, /* */ + { U"\U0000102E\U0000101D\U00001037\U0000103A", "" }, /* */ + { U"\U0000102E\U0000101D\U00001039", "" }, /* */ + { U"\U0000102E\U0000101D\U0000103A", "" }, /* */ + { U"\U0000102E\U0000101E\U00001037\U0000103A", "" }, /* */ + { U"\U0000102E\U0000101E\U00001039", "" }, /* */ + { U"\U0000102E\U0000101E\U0000103A", "" }, /* */ + { U"\U0000102E\U0000101F\U00001037\U0000103A", "" }, /* */ + { U"\U0000102E\U0000101F\U00001039", "" }, /* */ + { U"\U0000102E\U0000101F\U0000103A", "" }, /* */ + { U"\U0000102E\U00001020\U00001037\U0000103A", "" }, /* */ + { U"\U0000102E\U00001020\U00001039", "" }, /* */ + { U"\U0000102E\U00001020\U0000103A", "" }, /* */ + { U"\U0000102E\U0000103F", "" }, /* */ + { U"\U0000102F", "" }, /* */ + { U"\U0000102F\U00001000\U00001037\U0000103A", "" }, /* */ + { U"\U0000102F\U00001000\U00001039", "" }, /* */ + { U"\U0000102F\U00001000\U0000103A", "" }, /* */ + { U"\U0000102F\U00001001\U00001037\U0000103A", "" }, /* */ + { U"\U0000102F\U00001001\U00001039", "" }, /* */ + { U"\U0000102F\U00001001\U0000103A", "" }, /* */ + { U"\U0000102F\U00001002\U00001037\U0000103A", "" }, /* */ + { U"\U0000102F\U00001002\U00001039", "" }, /* */ + { U"\U0000102F\U00001002\U0000103A", "" }, /* */ + { U"\U0000102F\U00001003\U00001037\U0000103A", "" }, /* */ + { U"\U0000102F\U00001003\U00001039", "" }, /* */ + { U"\U0000102F\U00001003\U0000103A", "" }, /* */ + { U"\U0000102F\U00001004\U00001037\U0000103A", "" }, /* */ + { U"\U0000102F\U00001004\U0000103A", "" }, /* */ + { U"\U0000102F\U00001004\U0000103A\U00001039", "" }, /* */ + { U"\U0000102F\U00001005\U00001037\U0000103A", "" }, /* */ + { U"\U0000102F\U00001005\U00001039", "" }, /* */ + { U"\U0000102F\U00001005\U0000103A", "" }, /* */ + { U"\U0000102F\U00001006\U00001037\U0000103A", "" }, /* */ + { U"\U0000102F\U00001006\U00001039", "" }, /* */ + { U"\U0000102F\U00001006\U0000103A", "" }, /* */ + { U"\U0000102F\U00001007\U00001037\U0000103A", "" }, /* */ + { U"\U0000102F\U00001007\U00001039", "" }, /* */ + { U"\U0000102F\U00001007\U0000103A", "" }, /* */ + { U"\U0000102F\U00001009\U00001037\U0000103A", "" }, /* */ + { U"\U0000102F\U00001009\U00001039", "" }, /* */ + { U"\U0000102F\U00001009\U0000103A", "" }, /* */ + { U"\U0000102F\U0000100A\U00001037\U0000103A", "" }, /* */ + { U"\U0000102F\U0000100A\U00001039", "" }, /* */ + { U"\U0000102F\U0000100A\U0000103A", "" }, /* */ + { U"\U0000102F\U0000100B\U00001037\U0000103A", "" }, /* */ + { U"\U0000102F\U0000100B\U00001039", "" }, /* */ + { U"\U0000102F\U0000100B\U0000103A", "" }, /* */ + { U"\U0000102F\U0000100C\U00001037\U0000103A", "" }, /* */ + { U"\U0000102F\U0000100C\U00001039", "" }, /* */ + { U"\U0000102F\U0000100C\U0000103A", "" }, /* */ + { U"\U0000102F\U0000100D\U00001037\U0000103A", "" }, /* */ + { U"\U0000102F\U0000100D\U00001039", "" }, /* */ + { U"\U0000102F\U0000100D\U0000103A", "" }, /* */ + { U"\U0000102F\U0000100E\U00001037\U0000103A", "" }, /* */ + { U"\U0000102F\U0000100E\U00001039", "" }, /* */ + { U"\U0000102F\U0000100E\U0000103A", "" }, /* */ + { U"\U0000102F\U0000100F\U00001037\U0000103A", "" }, /* */ + { U"\U0000102F\U0000100F\U00001039", "" }, /* */ + { U"\U0000102F\U0000100F\U0000103A", "" }, /* */ + { U"\U0000102F\U00001010\U00001037\U0000103A", "" }, /* */ + { U"\U0000102F\U00001010\U00001039", "" }, /* */ + { U"\U0000102F\U00001010\U0000103A", "" }, /* */ + { U"\U0000102F\U00001011\U00001037\U0000103A", "" }, /* */ + { U"\U0000102F\U00001011\U00001039", "" }, /* */ + { U"\U0000102F\U00001011\U0000103A", "" }, /* */ + { U"\U0000102F\U00001012\U00001037\U0000103A", "" }, /* */ + { U"\U0000102F\U00001012\U00001039", "" }, /* */ + { U"\U0000102F\U00001012\U0000103A", "" }, /* */ + { U"\U0000102F\U00001013\U00001037\U0000103A", "" }, /* */ + { U"\U0000102F\U00001013\U00001039", "" }, /* */ + { U"\U0000102F\U00001013\U0000103A", "" }, /* */ + { U"\U0000102F\U00001014\U00001037\U0000103A", "" }, /* */ + { U"\U0000102F\U00001014\U00001039", "" }, /* */ + { U"\U0000102F\U00001014\U0000103A", "" }, /* */ + { U"\U0000102F\U00001015\U00001037\U0000103A", "" }, /* */ + { U"\U0000102F\U00001015\U00001039", "" }, /* */ + { U"\U0000102F\U00001015\U0000103A", "" }, /* */ + { U"\U0000102F\U00001016\U00001037\U0000103A", "" }, /* */ + { U"\U0000102F\U00001016\U00001039", "" }, /* */ + { U"\U0000102F\U00001016\U0000103A", "" }, /* */ + { U"\U0000102F\U00001017\U00001037\U0000103A", "" }, /* */ + { U"\U0000102F\U00001017\U00001039", "" }, /* */ + { U"\U0000102F\U00001017\U0000103A", "" }, /* */ + { U"\U0000102F\U00001018\U00001037\U0000103A", "" }, /* */ + { U"\U0000102F\U00001018\U00001039", "" }, /* */ + { U"\U0000102F\U00001018\U0000103A", "" }, /* */ + { U"\U0000102F\U00001019\U00001037\U0000103A", "" }, /* */ + { U"\U0000102F\U00001019\U00001037\U0000103A", "" }, /* */ + { U"\U0000102F\U00001019\U00001039", "" }, /* */ + { U"\U0000102F\U00001019\U0000103A", "" }, /* */ + { U"\U0000102F\U00001019\U0000103A\U00001037", "" }, /* */ + { U"\U0000102F\U00001019\U0000103A\U00001038", "" }, /* */ + { U"\U0000102F\U0000101A\U00001037\U0000103A", "" }, /* */ + { U"\U0000102F\U0000101A\U00001039", "" }, /* */ + { U"\U0000102F\U0000101A\U0000103A", "" }, /* */ + { U"\U0000102F\U0000101B\U00001037\U0000103A", "" }, /* */ + { U"\U0000102F\U0000101B\U00001039", "" }, /* */ + { U"\U0000102F\U0000101B\U0000103A", "" }, /* */ + { U"\U0000102F\U0000101C\U00001037\U0000103A", "" }, /* */ + { U"\U0000102F\U0000101C\U00001039", "" }, /* */ + { U"\U0000102F\U0000101C\U0000103A", "" }, /* */ + { U"\U0000102F\U0000101D\U00001037\U0000103A", "" }, /* */ + { U"\U0000102F\U0000101D\U00001039", "" }, /* */ + { U"\U0000102F\U0000101D\U0000103A", "" }, /* */ + { U"\U0000102F\U0000101E\U00001037\U0000103A", "" }, /* */ + { U"\U0000102F\U0000101E\U00001039", "" }, /* */ + { U"\U0000102F\U0000101E\U0000103A", "" }, /* */ + { U"\U0000102F\U0000101F\U00001037\U0000103A", "" }, /* */ + { U"\U0000102F\U0000101F\U00001039", "" }, /* */ + { U"\U0000102F\U0000101F\U0000103A", "" }, /* */ + { U"\U0000102F\U00001020\U00001037\U0000103A", "" }, /* */ + { U"\U0000102F\U00001020\U00001039", "" }, /* */ + { U"\U0000102F\U00001020\U0000103A", "" }, /* */ + { U"\U0000102F\U00001036", "" }, /* */ + { U"\U0000102F\U00001036\U00001037", "" }, /* */ + { U"\U0000102F\U00001036\U00001038", "" }, /* */ + { U"\U0000102F\U0000103F", "" }, /* */ + { U"\U00001030", "" }, /* */ + { U"\U00001030\U00001000\U00001037\U0000103A", "" }, /* */ + { U"\U00001030\U00001000\U00001039", "" }, /* */ + { U"\U00001030\U00001000\U0000103A", "" }, /* */ + { U"\U00001030\U00001001\U00001037\U0000103A", "" }, /* */ + { U"\U00001030\U00001001\U00001039", "" }, /* */ + { U"\U00001030\U00001001\U0000103A", "" }, /* */ + { U"\U00001030\U00001002\U00001037\U0000103A", "" }, /* */ + { U"\U00001030\U00001002\U00001039", "" }, /* */ + { U"\U00001030\U00001002\U0000103A", "" }, /* */ + { U"\U00001030\U00001003\U00001037\U0000103A", "" }, /* */ + { U"\U00001030\U00001003\U00001039", "" }, /* */ + { U"\U00001030\U00001003\U0000103A", "" }, /* */ + { U"\U00001030\U00001004\U00001037\U0000103A", "" }, /* */ + { U"\U00001030\U00001004\U0000103A", "" }, /* */ + { U"\U00001030\U00001004\U0000103A\U00001039", "" }, /* */ + { U"\U00001030\U00001005\U00001037\U0000103A", "" }, /* */ + { U"\U00001030\U00001005\U00001039", "" }, /* */ + { U"\U00001030\U00001005\U0000103A", "" }, /* */ + { U"\U00001030\U00001006\U00001037\U0000103A", "" }, /* */ + { U"\U00001030\U00001006\U00001039", "" }, /* */ + { U"\U00001030\U00001006\U0000103A", "" }, /* */ + { U"\U00001030\U00001007\U00001037\U0000103A", "" }, /* */ + { U"\U00001030\U00001007\U00001039", "" }, /* */ + { U"\U00001030\U00001007\U0000103A", "" }, /* */ + { U"\U00001030\U00001009\U00001037\U0000103A", "" }, /* */ + { U"\U00001030\U00001009\U00001039", "" }, /* */ + { U"\U00001030\U00001009\U0000103A", "" }, /* */ + { U"\U00001030\U0000100A\U00001037\U0000103A", "" }, /* */ + { U"\U00001030\U0000100A\U00001039", "" }, /* */ + { U"\U00001030\U0000100A\U0000103A", "" }, /* */ + { U"\U00001030\U0000100B\U00001037\U0000103A", "" }, /* */ + { U"\U00001030\U0000100B\U00001039", "" }, /* */ + { U"\U00001030\U0000100B\U0000103A", "" }, /* */ + { U"\U00001030\U0000100C\U00001037\U0000103A", "" }, /* */ + { U"\U00001030\U0000100C\U00001039", "" }, /* */ + { U"\U00001030\U0000100C\U0000103A", "" }, /* */ + { U"\U00001030\U0000100D\U00001037\U0000103A", "" }, /* */ + { U"\U00001030\U0000100D\U00001039", "" }, /* */ + { U"\U00001030\U0000100D\U0000103A", "" }, /* */ + { U"\U00001030\U0000100E\U00001037\U0000103A", "" }, /* */ + { U"\U00001030\U0000100E\U00001039", "" }, /* */ + { U"\U00001030\U0000100E\U0000103A", "" }, /* */ + { U"\U00001030\U0000100F\U00001037\U0000103A", "" }, /* */ + { U"\U00001030\U0000100F\U00001039", "" }, /* */ + { U"\U00001030\U0000100F\U0000103A", "" }, /* */ + { U"\U00001030\U00001010\U00001037\U0000103A", "" }, /* */ + { U"\U00001030\U00001010\U00001039", "" }, /* */ + { U"\U00001030\U00001010\U0000103A", "" }, /* */ + { U"\U00001030\U00001011\U00001037\U0000103A", "" }, /* */ + { U"\U00001030\U00001011\U00001039", "" }, /* */ + { U"\U00001030\U00001011\U0000103A", "" }, /* */ + { U"\U00001030\U00001012\U00001037\U0000103A", "" }, /* */ + { U"\U00001030\U00001012\U00001039", "" }, /* */ + { U"\U00001030\U00001012\U0000103A", "" }, /* */ + { U"\U00001030\U00001013\U00001037\U0000103A", "" }, /* */ + { U"\U00001030\U00001013\U00001039", "" }, /* */ + { U"\U00001030\U00001013\U0000103A", "" }, /* */ + { U"\U00001030\U00001014\U00001037\U0000103A", "" }, /* */ + { U"\U00001030\U00001014\U00001039", "" }, /* */ + { U"\U00001030\U00001014\U0000103A", "" }, /* */ + { U"\U00001030\U00001015\U00001037\U0000103A", "" }, /* */ + { U"\U00001030\U00001015\U00001039", "" }, /* */ + { U"\U00001030\U00001015\U0000103A", "" }, /* */ + { U"\U00001030\U00001016\U00001037\U0000103A", "" }, /* */ + { U"\U00001030\U00001016\U00001039", "" }, /* */ + { U"\U00001030\U00001016\U0000103A", "" }, /* */ + { U"\U00001030\U00001017\U00001037\U0000103A", "" }, /* */ + { U"\U00001030\U00001017\U00001039", "" }, /* */ + { U"\U00001030\U00001017\U0000103A", "" }, /* */ + { U"\U00001030\U00001018\U00001037\U0000103A", "" }, /* */ + { U"\U00001030\U00001018\U00001039", "" }, /* */ + { U"\U00001030\U00001018\U0000103A", "" }, /* */ + { U"\U00001030\U00001019\U00001037\U0000103A", "" }, /* */ + { U"\U00001030\U00001019\U00001039", "" }, /* */ + { U"\U00001030\U00001019\U0000103A", "" }, /* */ + { U"\U00001030\U0000101A\U00001037\U0000103A", "" }, /* */ + { U"\U00001030\U0000101A\U00001039", "" }, /* */ + { U"\U00001030\U0000101A\U0000103A", "" }, /* */ + { U"\U00001030\U0000101B\U00001037\U0000103A", "" }, /* */ + { U"\U00001030\U0000101B\U00001039", "" }, /* */ + { U"\U00001030\U0000101B\U0000103A", "" }, /* */ + { U"\U00001030\U0000101C\U00001037\U0000103A", "" }, /* */ + { U"\U00001030\U0000101C\U00001039", "" }, /* */ + { U"\U00001030\U0000101C\U0000103A", "" }, /* */ + { U"\U00001030\U0000101D\U00001037\U0000103A", "" }, /* */ + { U"\U00001030\U0000101D\U00001039", "" }, /* */ + { U"\U00001030\U0000101D\U0000103A", "" }, /* */ + { U"\U00001030\U0000101E\U00001037\U0000103A", "" }, /* */ + { U"\U00001030\U0000101E\U00001039", "" }, /* */ + { U"\U00001030\U0000101E\U0000103A", "" }, /* */ + { U"\U00001030\U0000101F\U00001037\U0000103A", "" }, /* */ + { U"\U00001030\U0000101F\U00001039", "" }, /* */ + { U"\U00001030\U0000101F\U0000103A", "" }, /* */ + { U"\U00001030\U00001020\U00001037\U0000103A", "" }, /* */ + { U"\U00001030\U00001020\U00001039", "" }, /* */ + { U"\U00001030\U00001020\U0000103A", "" }, /* */ + { U"\U00001030\U0000103F", "" }, /* */ + { U"\U00001031", "" }, /* */ + { U"\U00001031\U00001000\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U00001000\U00001039", "" }, /* */ + { U"\U00001031\U00001000\U0000103A", "" }, /* */ + { U"\U00001031\U00001001\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U00001001\U00001039", "" }, /* */ + { U"\U00001031\U00001001\U0000103A", "" }, /* */ + { U"\U00001031\U00001002\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U00001002\U00001039", "" }, /* */ + { U"\U00001031\U00001002\U0000103A", "" }, /* */ + { U"\U00001031\U00001003\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U00001003\U00001039", "" }, /* */ + { U"\U00001031\U00001003\U0000103A", "" }, /* */ + { U"\U00001031\U00001004\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U00001004\U0000103A", "" }, /* */ + { U"\U00001031\U00001004\U0000103A\U00001039", "" }, /* */ + { U"\U00001031\U00001005\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U00001005\U00001039", "" }, /* */ + { U"\U00001031\U00001005\U0000103A", "" }, /* */ + { U"\U00001031\U00001006\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U00001006\U00001039", "" }, /* */ + { U"\U00001031\U00001006\U0000103A", "" }, /* */ + { U"\U00001031\U00001007\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U00001007\U00001039", "" }, /* */ + { U"\U00001031\U00001007\U0000103A", "" }, /* */ + { U"\U00001031\U00001009\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U00001009\U00001039", "" }, /* */ + { U"\U00001031\U00001009\U0000103A", "" }, /* */ + { U"\U00001031\U0000100A\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000100A\U00001039", "" }, /* */ + { U"\U00001031\U0000100A\U0000103A", "" }, /* */ + { U"\U00001031\U0000100B\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000100B\U00001039", "" }, /* */ + { U"\U00001031\U0000100B\U0000103A", "" }, /* */ + { U"\U00001031\U0000100C\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000100C\U00001039", "" }, /* */ + { U"\U00001031\U0000100C\U0000103A", "" }, /* */ + { U"\U00001031\U0000100D\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000100D\U00001039", "" }, /* */ + { U"\U00001031\U0000100D\U0000103A", "" }, /* */ + { U"\U00001031\U0000100E\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000100E\U00001039", "" }, /* */ + { U"\U00001031\U0000100E\U0000103A", "" }, /* */ + { U"\U00001031\U0000100F\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000100F\U00001039", "" }, /* */ + { U"\U00001031\U0000100F\U0000103A", "" }, /* */ + { U"\U00001031\U00001010\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U00001010\U00001039", "" }, /* */ + { U"\U00001031\U00001010\U0000103A", "" }, /* */ + { U"\U00001031\U00001011\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U00001011\U00001039", "" }, /* */ + { U"\U00001031\U00001011\U0000103A", "" }, /* */ + { U"\U00001031\U00001012\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U00001012\U00001039", "" }, /* */ + { U"\U00001031\U00001012\U0000103A", "" }, /* */ + { U"\U00001031\U00001013\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U00001013\U00001039", "" }, /* */ + { U"\U00001031\U00001013\U0000103A", "" }, /* */ + { U"\U00001031\U00001014\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U00001014\U00001039", "" }, /* */ + { U"\U00001031\U00001014\U0000103A", "" }, /* */ + { U"\U00001031\U00001015\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U00001015\U00001039", "" }, /* */ + { U"\U00001031\U00001015\U0000103A", "" }, /* */ + { U"\U00001031\U00001016\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U00001016\U00001039", "" }, /* */ + { U"\U00001031\U00001016\U0000103A", "" }, /* */ + { U"\U00001031\U00001017\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U00001017\U00001039", "" }, /* */ + { U"\U00001031\U00001017\U0000103A", "" }, /* */ + { U"\U00001031\U00001018\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U00001018\U00001039", "" }, /* */ + { U"\U00001031\U00001018\U0000103A", "" }, /* */ + { U"\U00001031\U00001019\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U00001019\U00001039", "" }, /* */ + { U"\U00001031\U00001019\U0000103A", "" }, /* */ + { U"\U00001031\U0000101A\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000101A\U00001039", "" }, /* */ + { U"\U00001031\U0000101A\U0000103A", "" }, /* */ + { U"\U00001031\U0000101B\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000101B\U00001039", "" }, /* */ + { U"\U00001031\U0000101B\U0000103A", "" }, /* */ + { U"\U00001031\U0000101C\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000101C\U00001039", "" }, /* */ + { U"\U00001031\U0000101C\U0000103A", "" }, /* */ + { U"\U00001031\U0000101D\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000101D\U00001039", "" }, /* */ + { U"\U00001031\U0000101D\U0000103A", "" }, /* */ + { U"\U00001031\U0000101E\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000101E\U00001039", "" }, /* */ + { U"\U00001031\U0000101E\U0000103A", "" }, /* */ + { U"\U00001031\U0000101F\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000101F\U00001039", "" }, /* */ + { U"\U00001031\U0000101F\U0000103A", "" }, /* */ + { U"\U00001031\U00001020\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U00001020\U00001039", "" }, /* */ + { U"\U00001031\U00001020\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B", "" }, /* */ + { U"\U00001031\U0000102B\U00001000\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U00001000\U00001039", "" }, /* */ + { U"\U00001031\U0000102B\U00001000\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U00001001\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U00001001\U00001039", "" }, /* */ + { U"\U00001031\U0000102B\U00001001\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U00001002\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U00001002\U00001039", "" }, /* */ + { U"\U00001031\U0000102B\U00001002\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U00001003\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U00001003\U00001039", "" }, /* */ + { U"\U00001031\U0000102B\U00001003\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U00001004\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U00001004\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U00001004\U0000103A\U00001039", "" }, /* */ + { U"\U00001031\U0000102B\U00001005\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U00001005\U00001039", "" }, /* */ + { U"\U00001031\U0000102B\U00001005\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U00001006\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U00001006\U00001039", "" }, /* */ + { U"\U00001031\U0000102B\U00001006\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U00001007\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U00001007\U00001039", "" }, /* */ + { U"\U00001031\U0000102B\U00001007\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U00001009\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U00001009\U00001039", "" }, /* */ + { U"\U00001031\U0000102B\U00001009\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U0000100A\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U0000100A\U00001039", "" }, /* */ + { U"\U00001031\U0000102B\U0000100A\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U0000100B\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U0000100B\U00001039", "" }, /* */ + { U"\U00001031\U0000102B\U0000100B\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U0000100C\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U0000100C\U00001039", "" }, /* */ + { U"\U00001031\U0000102B\U0000100C\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U0000100D\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U0000100D\U00001039", "" }, /* */ + { U"\U00001031\U0000102B\U0000100D\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U0000100E\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U0000100E\U00001039", "" }, /* */ + { U"\U00001031\U0000102B\U0000100E\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U0000100F\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U0000100F\U00001039", "" }, /* */ + { U"\U00001031\U0000102B\U0000100F\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U00001010\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U00001010\U00001039", "" }, /* */ + { U"\U00001031\U0000102B\U00001010\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U00001011\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U00001011\U00001039", "" }, /* */ + { U"\U00001031\U0000102B\U00001011\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U00001012\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U00001012\U00001039", "" }, /* */ + { U"\U00001031\U0000102B\U00001012\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U00001013\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U00001013\U00001039", "" }, /* */ + { U"\U00001031\U0000102B\U00001013\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U00001014\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U00001014\U00001039", "" }, /* */ + { U"\U00001031\U0000102B\U00001014\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U00001015\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U00001015\U00001039", "" }, /* */ + { U"\U00001031\U0000102B\U00001015\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U00001016\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U00001016\U00001039", "" }, /* */ + { U"\U00001031\U0000102B\U00001016\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U00001017\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U00001017\U00001039", "" }, /* */ + { U"\U00001031\U0000102B\U00001017\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U00001018\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U00001018\U00001039", "" }, /* */ + { U"\U00001031\U0000102B\U00001018\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U00001019\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U00001019\U00001039", "" }, /* */ + { U"\U00001031\U0000102B\U00001019\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U0000101A\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U0000101A\U00001039", "" }, /* */ + { U"\U00001031\U0000102B\U0000101A\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U0000101B\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U0000101B\U00001039", "" }, /* */ + { U"\U00001031\U0000102B\U0000101B\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U0000101C\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U0000101C\U00001039", "" }, /* */ + { U"\U00001031\U0000102B\U0000101C\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U0000101D\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U0000101D\U00001039", "" }, /* */ + { U"\U00001031\U0000102B\U0000101D\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U0000101E\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U0000101E\U00001039", "" }, /* */ + { U"\U00001031\U0000102B\U0000101E\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U0000101F\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U0000101F\U00001039", "" }, /* */ + { U"\U00001031\U0000102B\U0000101F\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U00001020\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U00001020\U00001039", "" }, /* */ + { U"\U00001031\U0000102B\U00001020\U0000103A", "" }, /* */ + { U"\U00001031\U0000102B\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C", "" }, /* */ + { U"\U00001031\U0000102C\U00001000\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U00001000\U00001039", "" }, /* */ + { U"\U00001031\U0000102C\U00001000\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U00001001\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U00001001\U00001039", "" }, /* */ + { U"\U00001031\U0000102C\U00001001\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U00001002\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U00001002\U00001039", "" }, /* */ + { U"\U00001031\U0000102C\U00001002\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U00001003\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U00001003\U00001039", "" }, /* */ + { U"\U00001031\U0000102C\U00001003\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U00001004\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U00001004\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U00001004\U0000103A\U00001039", "" }, /* */ + { U"\U00001031\U0000102C\U00001005\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U00001005\U00001039", "" }, /* */ + { U"\U00001031\U0000102C\U00001005\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U00001006\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U00001006\U00001039", "" }, /* */ + { U"\U00001031\U0000102C\U00001006\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U00001007\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U00001007\U00001039", "" }, /* */ + { U"\U00001031\U0000102C\U00001007\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U00001009\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U00001009\U00001039", "" }, /* */ + { U"\U00001031\U0000102C\U00001009\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U0000100A\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U0000100A\U00001039", "" }, /* */ + { U"\U00001031\U0000102C\U0000100A\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U0000100B\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U0000100B\U00001039", "" }, /* */ + { U"\U00001031\U0000102C\U0000100B\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U0000100C\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U0000100C\U00001039", "" }, /* */ + { U"\U00001031\U0000102C\U0000100C\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U0000100D\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U0000100D\U00001039", "" }, /* */ + { U"\U00001031\U0000102C\U0000100D\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U0000100E\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U0000100E\U00001039", "" }, /* */ + { U"\U00001031\U0000102C\U0000100E\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U0000100F\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U0000100F\U00001039", "" }, /* */ + { U"\U00001031\U0000102C\U0000100F\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U00001010\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U00001010\U00001039", "" }, /* */ + { U"\U00001031\U0000102C\U00001010\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U00001011\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U00001011\U00001039", "" }, /* */ + { U"\U00001031\U0000102C\U00001011\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U00001012\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U00001012\U00001039", "" }, /* */ + { U"\U00001031\U0000102C\U00001012\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U00001013\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U00001013\U00001039", "" }, /* */ + { U"\U00001031\U0000102C\U00001013\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U00001014\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U00001014\U00001039", "" }, /* */ + { U"\U00001031\U0000102C\U00001014\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U00001015\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U00001015\U00001039", "" }, /* */ + { U"\U00001031\U0000102C\U00001015\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U00001016\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U00001016\U00001039", "" }, /* */ + { U"\U00001031\U0000102C\U00001016\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U00001017\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U00001017\U00001039", "" }, /* */ + { U"\U00001031\U0000102C\U00001017\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U00001018\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U00001018\U00001039", "" }, /* */ + { U"\U00001031\U0000102C\U00001018\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U00001019\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U00001019\U00001039", "" }, /* */ + { U"\U00001031\U0000102C\U00001019\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U0000101A\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U0000101A\U00001039", "" }, /* */ + { U"\U00001031\U0000102C\U0000101A\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U0000101B\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U0000101B\U00001039", "" }, /* */ + { U"\U00001031\U0000102C\U0000101B\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U0000101C\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U0000101C\U00001039", "" }, /* */ + { U"\U00001031\U0000102C\U0000101C\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U0000101D\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U0000101D\U00001039", "" }, /* */ + { U"\U00001031\U0000102C\U0000101D\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U0000101E\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U0000101E\U00001039", "" }, /* */ + { U"\U00001031\U0000102C\U0000101E\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U0000101F\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U0000101F\U00001039", "" }, /* */ + { U"\U00001031\U0000102C\U0000101F\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U00001020\U00001037\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U00001020\U00001039", "" }, /* */ + { U"\U00001031\U0000102C\U00001020\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U0000103A", "" }, /* */ + { U"\U00001031\U0000102C\U0000103F", "" }, /* */ + { U"\U00001031\U0000103F", "" }, /* */ + { U"\U00001032", "" }, /* */ + { U"\U00001032\U00001000\U00001037\U0000103A", "" }, /* */ + { U"\U00001032\U00001000\U00001039", "" }, /* */ + { U"\U00001032\U00001000\U0000103A", "" }, /* */ + { U"\U00001032\U00001001\U00001037\U0000103A", "" }, /* */ + { U"\U00001032\U00001001\U00001039", "" }, /* */ + { U"\U00001032\U00001001\U0000103A", "" }, /* */ + { U"\U00001032\U00001002\U00001037\U0000103A", "" }, /* */ + { U"\U00001032\U00001002\U00001039", "" }, /* */ + { U"\U00001032\U00001002\U0000103A", "" }, /* */ + { U"\U00001032\U00001003\U00001037\U0000103A", "" }, /* */ + { U"\U00001032\U00001003\U00001039", "" }, /* */ + { U"\U00001032\U00001003\U0000103A", "" }, /* */ + { U"\U00001032\U00001004\U00001037\U0000103A", "" }, /* */ + { U"\U00001032\U00001004\U0000103A", "" }, /* */ + { U"\U00001032\U00001004\U0000103A\U00001039", "" }, /* */ + { U"\U00001032\U00001005\U00001037\U0000103A", "" }, /* */ + { U"\U00001032\U00001005\U00001039", "" }, /* */ + { U"\U00001032\U00001005\U0000103A", "" }, /* */ + { U"\U00001032\U00001006\U00001037\U0000103A", "" }, /* */ + { U"\U00001032\U00001006\U00001039", "" }, /* */ + { U"\U00001032\U00001006\U0000103A", "" }, /* */ + { U"\U00001032\U00001007\U00001037\U0000103A", "" }, /* */ + { U"\U00001032\U00001007\U00001039", "" }, /* */ + { U"\U00001032\U00001007\U0000103A", "" }, /* */ + { U"\U00001032\U00001009\U00001037\U0000103A", "" }, /* */ + { U"\U00001032\U00001009\U00001039", "" }, /* */ + { U"\U00001032\U00001009\U0000103A", "" }, /* */ + { U"\U00001032\U0000100A\U00001037\U0000103A", "" }, /* */ + { U"\U00001032\U0000100A\U00001039", "" }, /* */ + { U"\U00001032\U0000100A\U0000103A", "" }, /* */ + { U"\U00001032\U0000100B\U00001037\U0000103A", "" }, /* */ + { U"\U00001032\U0000100B\U00001039", "" }, /* */ + { U"\U00001032\U0000100B\U0000103A", "" }, /* */ + { U"\U00001032\U0000100C\U00001037\U0000103A", "" }, /* */ + { U"\U00001032\U0000100C\U00001039", "" }, /* */ + { U"\U00001032\U0000100C\U0000103A", "" }, /* */ + { U"\U00001032\U0000100D\U00001037\U0000103A", "" }, /* */ + { U"\U00001032\U0000100D\U00001039", "" }, /* */ + { U"\U00001032\U0000100D\U0000103A", "" }, /* */ + { U"\U00001032\U0000100E\U00001037\U0000103A", "" }, /* */ + { U"\U00001032\U0000100E\U00001039", "" }, /* */ + { U"\U00001032\U0000100E\U0000103A", "" }, /* */ + { U"\U00001032\U0000100F\U00001037\U0000103A", "" }, /* */ + { U"\U00001032\U0000100F\U00001039", "" }, /* */ + { U"\U00001032\U0000100F\U0000103A", "" }, /* */ + { U"\U00001032\U00001010\U00001037\U0000103A", "" }, /* */ + { U"\U00001032\U00001010\U00001039", "" }, /* */ + { U"\U00001032\U00001010\U0000103A", "" }, /* */ + { U"\U00001032\U00001011\U00001037\U0000103A", "" }, /* */ + { U"\U00001032\U00001011\U00001039", "" }, /* */ + { U"\U00001032\U00001011\U0000103A", "" }, /* */ + { U"\U00001032\U00001012\U00001037\U0000103A", "" }, /* */ + { U"\U00001032\U00001012\U00001039", "" }, /* */ + { U"\U00001032\U00001012\U0000103A", "" }, /* */ + { U"\U00001032\U00001013\U00001037\U0000103A", "" }, /* */ + { U"\U00001032\U00001013\U00001039", "" }, /* */ + { U"\U00001032\U00001013\U0000103A", "" }, /* */ + { U"\U00001032\U00001014\U00001037\U0000103A", "" }, /* */ + { U"\U00001032\U00001014\U00001039", "" }, /* */ + { U"\U00001032\U00001014\U0000103A", "" }, /* */ + { U"\U00001032\U00001015\U00001037\U0000103A", "" }, /* */ + { U"\U00001032\U00001015\U00001039", "" }, /* */ + { U"\U00001032\U00001015\U0000103A", "" }, /* */ + { U"\U00001032\U00001016\U00001037\U0000103A", "" }, /* */ + { U"\U00001032\U00001016\U00001039", "" }, /* */ + { U"\U00001032\U00001016\U0000103A", "" }, /* */ + { U"\U00001032\U00001017\U00001037\U0000103A", "" }, /* */ + { U"\U00001032\U00001017\U00001039", "" }, /* */ + { U"\U00001032\U00001017\U0000103A", "" }, /* */ + { U"\U00001032\U00001018\U00001037\U0000103A", "" }, /* */ + { U"\U00001032\U00001018\U00001039", "" }, /* */ + { U"\U00001032\U00001018\U0000103A", "" }, /* */ + { U"\U00001032\U00001019\U00001037\U0000103A", "" }, /* */ + { U"\U00001032\U00001019\U00001039", "" }, /* */ + { U"\U00001032\U00001019\U0000103A", "" }, /* */ + { U"\U00001032\U0000101A\U00001037\U0000103A", "" }, /* */ + { U"\U00001032\U0000101A\U00001039", "" }, /* */ + { U"\U00001032\U0000101A\U0000103A", "" }, /* */ + { U"\U00001032\U0000101B\U00001037\U0000103A", "" }, /* */ + { U"\U00001032\U0000101B\U00001039", "" }, /* */ + { U"\U00001032\U0000101B\U0000103A", "" }, /* */ + { U"\U00001032\U0000101C\U00001037\U0000103A", "" }, /* */ + { U"\U00001032\U0000101C\U00001039", "" }, /* */ + { U"\U00001032\U0000101C\U0000103A", "" }, /* */ + { U"\U00001032\U0000101D\U00001037\U0000103A", "" }, /* */ + { U"\U00001032\U0000101D\U00001039", "" }, /* */ + { U"\U00001032\U0000101D\U0000103A", "" }, /* */ + { U"\U00001032\U0000101E\U00001037\U0000103A", "" }, /* */ + { U"\U00001032\U0000101E\U00001039", "" }, /* */ + { U"\U00001032\U0000101E\U0000103A", "" }, /* */ + { U"\U00001032\U0000101F\U00001037\U0000103A", "" }, /* */ + { U"\U00001032\U0000101F\U00001039", "" }, /* */ + { U"\U00001032\U0000101F\U0000103A", "" }, /* */ + { U"\U00001032\U00001020\U00001037\U0000103A", "" }, /* */ + { U"\U00001032\U00001020\U00001039", "" }, /* */ + { U"\U00001032\U00001020\U0000103A", "" }, /* */ + { U"\U00001032\U0000103F", "" }, /* */ + { U"\U00001033", "" }, /* */ + { U"\U00001034", "" }, /* */ + { U"\U00001035", "" }, /* */ + { U"\U00001036", "" }, /* */ + { U"\U00001036\U00001000\U00001037\U0000103A", "" }, /* */ + { U"\U00001036\U00001000\U00001039", "" }, /* */ + { U"\U00001036\U00001000\U0000103A", "" }, /* */ + { U"\U00001036\U00001001\U00001037\U0000103A", "" }, /* */ + { U"\U00001036\U00001001\U00001039", "" }, /* */ + { U"\U00001036\U00001001\U0000103A", "" }, /* */ + { U"\U00001036\U00001002\U00001037\U0000103A", "" }, /* */ + { U"\U00001036\U00001002\U00001039", "" }, /* */ + { U"\U00001036\U00001002\U0000103A", "" }, /* */ + { U"\U00001036\U00001003\U00001037\U0000103A", "" }, /* */ + { U"\U00001036\U00001003\U00001039", "" }, /* */ + { U"\U00001036\U00001003\U0000103A", "" }, /* */ + { U"\U00001036\U00001004\U00001037\U0000103A", "" }, /* */ + { U"\U00001036\U00001004\U0000103A", "" }, /* */ + { U"\U00001036\U00001004\U0000103A\U00001039", "" }, /* */ + { U"\U00001036\U00001005\U00001037\U0000103A", "" }, /* */ + { U"\U00001036\U00001005\U00001039", "" }, /* */ + { U"\U00001036\U00001005\U0000103A", "" }, /* */ + { U"\U00001036\U00001006\U00001037\U0000103A", "" }, /* */ + { U"\U00001036\U00001006\U00001039", "" }, /* */ + { U"\U00001036\U00001006\U0000103A", "" }, /* */ + { U"\U00001036\U00001007\U00001037\U0000103A", "" }, /* */ + { U"\U00001036\U00001007\U00001039", "" }, /* */ + { U"\U00001036\U00001007\U0000103A", "" }, /* */ + { U"\U00001036\U00001009\U00001037\U0000103A", "" }, /* */ + { U"\U00001036\U00001009\U00001039", "" }, /* */ + { U"\U00001036\U00001009\U0000103A", "" }, /* */ + { U"\U00001036\U0000100A\U00001037\U0000103A", "" }, /* */ + { U"\U00001036\U0000100A\U00001039", "" }, /* */ + { U"\U00001036\U0000100A\U0000103A", "" }, /* */ + { U"\U00001036\U0000100B\U00001037\U0000103A", "" }, /* */ + { U"\U00001036\U0000100B\U00001039", "" }, /* */ + { U"\U00001036\U0000100B\U0000103A", "" }, /* */ + { U"\U00001036\U0000100C\U00001037\U0000103A", "" }, /* */ + { U"\U00001036\U0000100C\U00001039", "" }, /* */ + { U"\U00001036\U0000100C\U0000103A", "" }, /* */ + { U"\U00001036\U0000100D\U00001037\U0000103A", "" }, /* */ + { U"\U00001036\U0000100D\U00001039", "" }, /* */ + { U"\U00001036\U0000100D\U0000103A", "" }, /* */ + { U"\U00001036\U0000100E\U00001037\U0000103A", "" }, /* */ + { U"\U00001036\U0000100E\U00001039", "" }, /* */ + { U"\U00001036\U0000100E\U0000103A", "" }, /* */ + { U"\U00001036\U0000100F\U00001037\U0000103A", "" }, /* */ + { U"\U00001036\U0000100F\U00001039", "" }, /* */ + { U"\U00001036\U0000100F\U0000103A", "" }, /* */ + { U"\U00001036\U00001010\U00001037\U0000103A", "" }, /* */ + { U"\U00001036\U00001010\U00001039", "" }, /* */ + { U"\U00001036\U00001010\U0000103A", "" }, /* */ + { U"\U00001036\U00001011\U00001037\U0000103A", "" }, /* */ + { U"\U00001036\U00001011\U00001039", "" }, /* */ + { U"\U00001036\U00001011\U0000103A", "" }, /* */ + { U"\U00001036\U00001012\U00001037\U0000103A", "" }, /* */ + { U"\U00001036\U00001012\U00001039", "" }, /* */ + { U"\U00001036\U00001012\U0000103A", "" }, /* */ + { U"\U00001036\U00001013\U00001037\U0000103A", "" }, /* */ + { U"\U00001036\U00001013\U00001039", "" }, /* */ + { U"\U00001036\U00001013\U0000103A", "" }, /* */ + { U"\U00001036\U00001014\U00001037\U0000103A", "" }, /* */ + { U"\U00001036\U00001014\U00001039", "" }, /* */ + { U"\U00001036\U00001014\U0000103A", "" }, /* */ + { U"\U00001036\U00001015\U00001037\U0000103A", "" }, /* */ + { U"\U00001036\U00001015\U00001039", "" }, /* */ + { U"\U00001036\U00001015\U0000103A", "" }, /* */ + { U"\U00001036\U00001016\U00001037\U0000103A", "" }, /* */ + { U"\U00001036\U00001016\U00001039", "" }, /* */ + { U"\U00001036\U00001016\U0000103A", "" }, /* */ + { U"\U00001036\U00001017\U00001037\U0000103A", "" }, /* */ + { U"\U00001036\U00001017\U00001039", "" }, /* */ + { U"\U00001036\U00001017\U0000103A", "" }, /* */ + { U"\U00001036\U00001018\U00001037\U0000103A", "" }, /* */ + { U"\U00001036\U00001018\U00001039", "" }, /* */ + { U"\U00001036\U00001018\U0000103A", "" }, /* */ + { U"\U00001036\U00001019\U00001037\U0000103A", "" }, /* */ + { U"\U00001036\U00001019\U00001039", "" }, /* */ + { U"\U00001036\U00001019\U0000103A", "" }, /* */ + { U"\U00001036\U0000101A\U00001037\U0000103A", "" }, /* */ + { U"\U00001036\U0000101A\U00001039", "" }, /* */ + { U"\U00001036\U0000101A\U0000103A", "" }, /* */ + { U"\U00001036\U0000101B\U00001037\U0000103A", "" }, /* */ + { U"\U00001036\U0000101B\U00001039", "" }, /* */ + { U"\U00001036\U0000101B\U0000103A", "" }, /* */ + { U"\U00001036\U0000101C\U00001037\U0000103A", "" }, /* */ + { U"\U00001036\U0000101C\U00001039", "" }, /* */ + { U"\U00001036\U0000101C\U0000103A", "" }, /* */ + { U"\U00001036\U0000101D\U00001037\U0000103A", "" }, /* */ + { U"\U00001036\U0000101D\U00001039", "" }, /* */ + { U"\U00001036\U0000101D\U0000103A", "" }, /* */ + { U"\U00001036\U0000101E\U00001037\U0000103A", "" }, /* */ + { U"\U00001036\U0000101E\U00001039", "" }, /* */ + { U"\U00001036\U0000101E\U0000103A", "" }, /* */ + { U"\U00001036\U0000101F\U00001037\U0000103A", "" }, /* */ + { U"\U00001036\U0000101F\U00001039", "" }, /* */ + { U"\U00001036\U0000101F\U0000103A", "" }, /* */ + { U"\U00001036\U00001020\U00001037\U0000103A", "" }, /* */ + { U"\U00001036\U00001020\U00001039", "" }, /* */ + { U"\U00001036\U00001020\U0000103A", "" }, /* */ + { U"\U00001036\U0000103F", "" }, /* */ + { U"\U00001037", "" }, /* */ + { U"\U00001037\U00001038", "" }, /* */ + { U"\U00001038", "" }, /* */ + { U"\U0000103B", "" }, /* */ + { U"\U0000103B\U0000103D", "" }, /* */ + { U"\U0000103B\U0000103D\U0000103E", "" }, /* */ + { U"\U0000103B\U0000103E", "" }, /* */ + { U"\U0000103C", "" }, /* */ + { U"\U0000103C\U0000103D", "" }, /* */ + { U"\U0000103C\U0000103D\U0000103E", "" }, /* */ + { U"\U0000103C\U0000103E", "" }, /* */ + { U"\U0000103D", "" }, /* */ + { U"\U0000103D\U0000103E", "" }, /* */ + { U"\U0000103E", "" }, /* */ + { U"\U00001056", "" }, /* */ + { U"\U00001057", "" }, /* */ + { U"\U00001058", "" }, /* */ + { U"\U00001059", "" }, /* */ + { U"\U0000105E", "" }, /* */ + { U"\U0000105F", "" }, /* */ + { U"\U00001060", "" }, /* */ + { U"\U00001062", "" }, /* */ + { U"\U00001062\U0000103A", "" }, /* */ + { U"\U00001063", "" }, /* */ + { U"\U00001063\U0000103A", "" }, /* */ + { U"\U00001064", "" }, /* */ + { U"\U00001067", "" }, /* */ + { U"\U00001068", "" }, /* */ + { U"\U00001069", "" }, /* */ + { U"\U00001069\U00001037", "" }, /* */ + { U"\U0000106A", "" }, /* */ + { U"\U0000106A\U00001037", "" }, /* */ + { U"\U0000106B", "" }, /* */ + { U"\U0000106B\U00001037", "" }, /* */ + { U"\U0000106C", "" }, /* */ + { U"\U0000106D", "" }, /* */ + { U"\U00001071", "" }, /* */ + { U"\U00001072", "" }, /* */ + { U"\U00001073", "" }, /* */ + { U"\U00001074", "" }, /* */ + { U"\U00001082", "" }, /* */ + { U"\U00001083", "" }, /* */ + { U"\U00001084", "" }, /* */ + { U"\U00001085", "" }, /* */ + { U"\U00001086", "" }, /* */ + { U"\U00001087", "" }, /* */ + { U"\U00001088", "" }, /* */ + { U"\U00001089", "" }, /* */ + { U"\U0000108A", "" }, /* */ + { U"\U0000108B", "" }, /* */ + { U"\U0000108C", "" }, /* */ + { U"\U0000108D", "" }, /* */ + { U"\U0000108F", "" }, /* */ + { U"\U00001780\U000017CC", "km_KH" }, /* */ + { U"\U00001781\U000017CC", "km_KH" }, /* */ + { U"\U00001782\U000017CC", "km_KH" }, /* */ + { U"\U00001783\U000017CC", "km_KH" }, /* */ + { U"\U00001784\U000017CC", "km_KH" }, /* */ + { U"\U00001785\U000017CC", "km_KH" }, /* */ + { U"\U00001786\U000017CC", "km_KH" }, /* */ + { U"\U00001787\U000017CC", "km_KH" }, /* */ + { U"\U00001788\U000017CC", "km_KH" }, /* */ + { U"\U00001789\U000017CC", "km_KH" }, /* */ + { U"\U0000178A\U000017CC", "km_KH" }, /* */ + { U"\U0000178B\U000017CC", "km_KH" }, /* */ + { U"\U0000178C\U000017CC", "km_KH" }, /* */ + { U"\U0000178D\U000017CC", "km_KH" }, /* */ + { U"\U0000178E\U000017CC", "km_KH" }, /* */ + { U"\U0000178F\U000017CC", "km_KH" }, /* */ + { U"\U00001790\U000017CC", "km_KH" }, /* */ + { U"\U00001791\U000017CC", "km_KH" }, /* */ + { U"\U00001792\U000017CC", "km_KH" }, /* */ + { U"\U00001793\U000017CC", "km_KH" }, /* */ + { U"\U00001794\U000017CC", "km_KH" }, /* */ + { U"\U00001795\U000017CC", "km_KH" }, /* */ + { U"\U00001796\U000017CC", "km_KH" }, /* */ + { U"\U00001797\U000017CC", "km_KH" }, /* */ + { U"\U00001798\U000017CC", "km_KH" }, /* */ + { U"\U00001799\U000017CC", "km_KH" }, /* */ + { U"\U0000179A\U000017CC", "km_KH" }, /* */ + { U"\U0000179B\U000017CC", "km_KH" }, /* */ + { U"\U0000179C\U000017CC", "km_KH" }, /* */ + { U"\U0000179D\U000017CC", "km_KH" }, /* */ + { U"\U0000179E\U000017CC", "km_KH" }, /* */ + { U"\U0000179F\U000017CC", "km_KH" }, /* */ + { U"\U000017A0\U000017CC", "km_KH" }, /* */ + { U"\U000017A1\U000017CC", "km_KH" }, /* */ + { U"\U000017A2\U000017CC", "km_KH" }, /* */ + { U"\U000017A3\U000017CC", "km_KH" }, /* */ + { U"\U000017AB\U000017CC", "km_KH" }, /* */ + { U"\U000017AC\U000017CC", "km_KH" }, /* */ + { U"\U000017AD\U000017CC", "km_KH" }, /* */ + { U"\U000017AE\U000017CC", "km_KH" }, /* */ + { U"\U000017B6\U000017C6", "km_KH" }, /* */ + { U"\U000017BB\U000017C6", "km_KH" }, /* */ + { U"\U00001EB8\U00000300", "yo_NG" }, /* */ + { U"\U00001EB8\U00000301", "yo_NG" }, /* */ + { U"\U00001EB8\U00000302", "yo_NG" }, /* > */ + { U"\U00001EB8\U0000030C", "yo_NG" }, /* */ + { U"\U00001EB9\U00000300", "yo_NG" }, /* */ + { U"\U00001EB9\U00000301", "yo_NG" }, /* */ + { U"\U00001EB9\U00000302", "yo_NG" }, /* > */ + { U"\U00001EB9\U0000030C", "yo_NG" }, /* */ + { U"\U00001ECA\U00000300", "ig_NG" }, /* */ + { U"\U00001ECA\U00000301", "ig_NG" }, /* */ + { U"\U00001ECB\U00000300", "ig_NG" }, /* */ + { U"\U00001ECB\U00000301", "ig_NG" }, /* */ + { U"\U00001ECC\U00000300", "ig_NG" }, /* */ + { U"\U00001ECC\U00000300", "yo_NG" }, /* */ + { U"\U00001ECC\U00000301", "ig_NG" }, /* */ + { U"\U00001ECC\U00000301", "yo_NG" }, /* */ + { U"\U00001ECC\U00000302", "yo_NG" }, /* > */ + { U"\U00001ECC\U0000030C", "yo_NG" }, /* */ + { U"\U00001ECD\U00000300", "ig_NG" }, /* */ + { U"\U00001ECD\U00000300", "yo_NG" }, /* */ + { U"\U00001ECD\U00000301", "ig_NG" }, /* */ + { U"\U00001ECD\U00000301", "yo_NG" }, /* */ + { U"\U00001ECD\U00000302", "yo_NG" }, /* > */ + { U"\U00001ECD\U0000030C", "yo_NG" }, /* */ + { U"\U00001EE4\U00000300", "ig_NG" }, /* */ + { U"\U00001EE4\U00000301", "ig_NG" }, /* */ + { U"\U00001EE5\U00000300", "ig_NG" }, /* */ + { U"\U00001EE5\U00000301", "ig_NG" }, /* */ + { U"\U00002019\U00000059", "ha_NG" }, /* <'2Y> */ + { U"\U00002019\U00000079", "ha_NG" }, /* <'2y> */ + { U"\U0000207F", "nan_TW@latin" }, /* */ + { U"\U00002D33\U00002D6F", "ber_MA" }, /* */ + { U"\U00002D3D\U00002D6F", "ber_MA" }, /* */ +}; diff --git a/winsup/cygwin/local_includes/lc_def_codesets.h b/winsup/cygwin/local_includes/lc_def_codesets.h new file mode 100644 index 0000000000..db7d7f2fb1 --- /dev/null +++ b/winsup/cygwin/local_includes/lc_def_codesets.h @@ -0,0 +1,342 @@ +/* This struct of default codesets has been generated by fetching + locale data from a Linux system using glibc-2.36-9.fc37.x86_64 on 2023-02-26 */ +struct default_codeset_t +{ + const char *locale; + const char *codeset; +} default_codeset[] = +{ + { "aa_DJ", "ISO-8859-1" }, + { "aa_ER", "UTF-8" }, + { "aa_ER@saaho", "UTF-8" }, + { "aa_ET", "UTF-8" }, + { "af_ZA", "ISO-8859-1" }, + { "agr_PE", "UTF-8" }, + { "ak_GH", "UTF-8" }, + { "am_ET", "UTF-8" }, + { "an_ES", "ISO-8859-15" }, + { "anp_IN", "UTF-8" }, + { "ar_AE", "ISO-8859-6" }, + { "ar_BH", "ISO-8859-6" }, + { "ar_DZ", "ISO-8859-6" }, + { "ar_EG", "ISO-8859-6" }, + { "ar_IN", "UTF-8" }, + { "ar_IQ", "ISO-8859-6" }, + { "ar_JO", "ISO-8859-6" }, + { "ar_KW", "ISO-8859-6" }, + { "ar_LB", "ISO-8859-6" }, + { "ar_LY", "ISO-8859-6" }, + { "ar_MA", "ISO-8859-6" }, + { "ar_OM", "ISO-8859-6" }, + { "ar_QA", "ISO-8859-6" }, + { "ar_SA", "ISO-8859-6" }, + { "ar_SD", "ISO-8859-6" }, + { "ar_SS", "UTF-8" }, + { "ar_SY", "ISO-8859-6" }, + { "ar_TN", "ISO-8859-6" }, + { "ar_YE", "ISO-8859-6" }, + { "as_IN", "UTF-8" }, + { "ast_ES", "ISO-8859-15" }, + { "ayc_PE", "UTF-8" }, + { "az_AZ", "UTF-8" }, + { "az_IR", "UTF-8" }, + { "be_BY", "CP1251" }, + { "be_BY@latin", "UTF-8" }, + { "bem_ZM", "UTF-8" }, + { "ber_DZ", "UTF-8" }, + { "ber_MA", "UTF-8" }, + { "bg_BG", "CP1251" }, + { "bho_IN", "UTF-8" }, + { "bho_NP", "UTF-8" }, + { "bi_VU", "UTF-8" }, + { "bn_BD", "UTF-8" }, + { "bn_IN", "UTF-8" }, + { "bo_CN", "UTF-8" }, + { "bo_IN", "UTF-8" }, + { "br_FR", "ISO-8859-1" }, + { "br_FR@euro", "ISO-8859-15" }, + { "brx_IN", "UTF-8" }, + { "bs_BA", "ISO-8859-2" }, + { "byn_ER", "UTF-8" }, + { "ca_AD", "ISO-8859-15" }, + { "ca_ES", "ISO-8859-1" }, + { "ca_ES@euro", "ISO-8859-15" }, + { "ca_ES@valencia", "UTF-8" }, + { "ca_FR", "ISO-8859-15" }, + { "ca_IT", "ISO-8859-15" }, + { "ce_RU", "UTF-8" }, + { "chr_US", "UTF-8" }, + { "ckb_IQ", "UTF-8" }, + { "cmn_TW", "UTF-8" }, + { "crh_UA", "UTF-8" }, + { "cs_CZ", "ISO-8859-2" }, + { "csb_PL", "UTF-8" }, + { "cv_RU", "UTF-8" }, + { "cy_GB", "ISO-8859-14" }, + { "da_DK", "ISO-8859-1" }, + { "de_AT", "ISO-8859-1" }, + { "de_AT@euro", "ISO-8859-15" }, + { "de_BE", "ISO-8859-1" }, + { "de_BE@euro", "ISO-8859-15" }, + { "de_CH", "ISO-8859-1" }, + { "de_DE", "ISO-8859-1" }, + { "de_DE@euro", "ISO-8859-15" }, + { "de_IT", "ISO-8859-1" }, + { "de_LU", "ISO-8859-1" }, + { "de_LU@euro", "ISO-8859-15" }, + { "doi_IN", "UTF-8" }, + { "dsb_DE", "UTF-8" }, + { "dv_MV", "UTF-8" }, + { "dz_BT", "UTF-8" }, + { "el_CY", "ISO-8859-7" }, + { "el_GR", "ISO-8859-7" }, + { "el_GR@euro", "ISO-8859-7" }, + { "en_AG", "UTF-8" }, + { "en_AU", "ISO-8859-1" }, + { "en_BW", "ISO-8859-1" }, + { "en_CA", "ISO-8859-1" }, + { "en_DK", "ISO-8859-1" }, + { "en_GB", "ISO-8859-1" }, + { "en_HK", "ISO-8859-1" }, + { "en_IE", "ISO-8859-1" }, + { "en_IE@euro", "ISO-8859-15" }, + { "en_IL", "UTF-8" }, + { "en_IN", "UTF-8" }, + { "en_NG", "UTF-8" }, + { "en_NZ", "ISO-8859-1" }, + { "en_PH", "ISO-8859-1" }, + { "en_SG", "ISO-8859-1" }, + { "en_US", "ISO-8859-1" }, + { "en_ZA", "ISO-8859-1" }, + { "en_ZM", "UTF-8" }, + { "en_ZW", "ISO-8859-1" }, + { "es_AR", "ISO-8859-1" }, + { "es_BO", "ISO-8859-1" }, + { "es_CL", "ISO-8859-1" }, + { "es_CO", "ISO-8859-1" }, + { "es_CR", "ISO-8859-1" }, + { "es_CU", "UTF-8" }, + { "es_DO", "ISO-8859-1" }, + { "es_EC", "ISO-8859-1" }, + { "es_ES", "ISO-8859-1" }, + { "es_ES@euro", "ISO-8859-15" }, + { "es_GT", "ISO-8859-1" }, + { "es_HN", "ISO-8859-1" }, + { "es_MX", "ISO-8859-1" }, + { "es_NI", "ISO-8859-1" }, + { "es_PA", "ISO-8859-1" }, + { "es_PE", "ISO-8859-1" }, + { "es_PR", "ISO-8859-1" }, + { "es_PY", "ISO-8859-1" }, + { "es_SV", "ISO-8859-1" }, + { "es_US", "ISO-8859-1" }, + { "es_UY", "ISO-8859-1" }, + { "es_VE", "ISO-8859-1" }, + { "et_EE", "ISO-8859-1" }, + { "eu_ES", "ISO-8859-1" }, + { "eu_ES@euro", "ISO-8859-15" }, + { "fa_IR", "UTF-8" }, + { "ff_SN", "UTF-8" }, + { "fi_FI", "ISO-8859-1" }, + { "fi_FI@euro", "ISO-8859-15" }, + { "fil_PH", "UTF-8" }, + { "fo_FO", "ISO-8859-1" }, + { "fr_BE", "ISO-8859-1" }, + { "fr_BE@euro", "ISO-8859-15" }, + { "fr_CA", "ISO-8859-1" }, + { "fr_CH", "ISO-8859-1" }, + { "fr_FR", "ISO-8859-1" }, + { "fr_FR@euro", "ISO-8859-15" }, + { "fr_LU", "ISO-8859-1" }, + { "fr_LU@euro", "ISO-8859-15" }, + { "fur_IT", "UTF-8" }, + { "fy_DE", "UTF-8" }, + { "fy_NL", "UTF-8" }, + { "ga_IE", "ISO-8859-1" }, + { "ga_IE@euro", "ISO-8859-15" }, + { "gd_GB", "ISO-8859-15" }, + { "gez_ER", "UTF-8" }, + { "gez_ER@abegede", "UTF-8" }, + { "gez_ET", "UTF-8" }, + { "gez_ET@abegede", "UTF-8" }, + { "gl_ES", "ISO-8859-1" }, + { "gl_ES@euro", "ISO-8859-15" }, + { "gu_IN", "UTF-8" }, + { "gv_GB", "ISO-8859-1" }, + { "ha_NG", "UTF-8" }, + { "hak_TW", "UTF-8" }, + { "he_IL", "ISO-8859-8" }, + { "hi_IN", "UTF-8" }, + { "hif_FJ", "UTF-8" }, + { "hne_IN", "UTF-8" }, + { "hr_HR", "ISO-8859-2" }, + { "hsb_DE", "ISO-8859-2" }, + { "ht_HT", "UTF-8" }, + { "hu_HU", "ISO-8859-2" }, + { "hy_AM", "UTF-8" }, + { "ia_FR", "UTF-8" }, + { "id_ID", "ISO-8859-1" }, + { "ig_NG", "UTF-8" }, + { "ik_CA", "UTF-8" }, + { "is_IS", "ISO-8859-1" }, + { "it_CH", "ISO-8859-1" }, + { "it_IT", "ISO-8859-1" }, + { "it_IT@euro", "ISO-8859-15" }, + { "iu_CA", "UTF-8" }, + { "ja_JP", "EUC-JP" }, + { "ka_GE", "GEORGIAN-PS" }, + { "kab_DZ", "UTF-8" }, + { "kk_KZ", "PT154" }, + { "kl_GL", "ISO-8859-1" }, + { "km_KH", "UTF-8" }, + { "kn_IN", "UTF-8" }, + { "ko_KR", "EUC-KR" }, + { "kok_IN", "UTF-8" }, + { "ks_IN", "UTF-8" }, + { "ks_IN@devanagari", "UTF-8" }, + { "ku_TR", "ISO-8859-9" }, + { "kw_GB", "ISO-8859-1" }, + { "ky_KG", "UTF-8" }, + { "lb_LU", "UTF-8" }, + { "lg_UG", "ISO-8859-10" }, + { "li_BE", "UTF-8" }, + { "li_NL", "UTF-8" }, + { "lij_IT", "UTF-8" }, + { "ln_CD", "UTF-8" }, + { "lo_LA", "UTF-8" }, + { "lt_LT", "ISO-8859-13" }, + { "lv_LV", "ISO-8859-13" }, + { "lzh_TW", "UTF-8" }, + { "mag_IN", "UTF-8" }, + { "mai_IN", "UTF-8" }, + { "mai_NP", "UTF-8" }, + { "mfe_MU", "UTF-8" }, + { "mg_MG", "ISO-8859-15" }, + { "mhr_RU", "UTF-8" }, + { "mi_NZ", "ISO-8859-13" }, + { "miq_NI", "UTF-8" }, + { "mjw_IN", "UTF-8" }, + { "mk_MK", "ISO-8859-5" }, + { "ml_IN", "UTF-8" }, + { "mn_MN", "UTF-8" }, + { "mni_IN", "UTF-8" }, + { "mnw_MM", "UTF-8" }, + { "mr_IN", "UTF-8" }, + { "ms_MY", "ISO-8859-1" }, + { "mt_MT", "ISO-8859-3" }, + { "my_MM", "UTF-8" }, + { "nan_TW", "UTF-8" }, + { "nan_TW@latin", "UTF-8" }, + { "nb_NO", "ISO-8859-1" }, + { "nds_DE", "UTF-8" }, + { "nds_NL", "UTF-8" }, + { "ne_NP", "UTF-8" }, + { "nhn_MX", "UTF-8" }, + { "niu_NU", "UTF-8" }, + { "niu_NZ", "UTF-8" }, + { "nl_AW", "UTF-8" }, + { "nl_BE", "ISO-8859-1" }, + { "nl_BE@euro", "ISO-8859-15" }, + { "nl_NL", "ISO-8859-1" }, + { "nl_NL@euro", "ISO-8859-15" }, + { "nn_NO", "ISO-8859-1" }, + { "no_NO", "ISO-8859-1" }, + { "nr_ZA", "UTF-8" }, + { "nso_ZA", "UTF-8" }, + { "oc_FR", "ISO-8859-1" }, + { "om_ET", "UTF-8" }, + { "om_KE", "ISO-8859-1" }, + { "or_IN", "UTF-8" }, + { "os_RU", "UTF-8" }, + { "pa_IN", "UTF-8" }, + { "pa_PK", "UTF-8" }, + { "pap_AW", "UTF-8" }, + { "pap_CW", "UTF-8" }, + { "pl_PL", "ISO-8859-2" }, + { "ps_AF", "UTF-8" }, + { "pt_BR", "ISO-8859-1" }, + { "pt_PT", "ISO-8859-1" }, + { "pt_PT@euro", "ISO-8859-15" }, + { "quz_PE", "UTF-8" }, + { "raj_IN", "UTF-8" }, + { "rif_MA", "UTF-8" }, + { "ro_RO", "ISO-8859-2" }, + { "ru_RU", "ISO-8859-5" }, + { "ru_UA", "KOI8-U" }, + { "rw_RW", "UTF-8" }, + { "sa_IN", "UTF-8" }, + { "sah_RU", "UTF-8" }, + { "sat_IN", "UTF-8" }, + { "sc_IT", "UTF-8" }, + { "sd_IN", "UTF-8" }, + { "sd_IN@devanagari", "UTF-8" }, + { "se_NO", "UTF-8" }, + { "sgs_LT", "UTF-8" }, + { "shn_MM", "UTF-8" }, + { "shs_CA", "UTF-8" }, + { "si_LK", "UTF-8" }, + { "sid_ET", "UTF-8" }, + { "sk_SK", "ISO-8859-2" }, + { "sl_SI", "ISO-8859-2" }, + { "sm_WS", "UTF-8" }, + { "so_DJ", "ISO-8859-1" }, + { "so_ET", "UTF-8" }, + { "so_KE", "ISO-8859-1" }, + { "so_SO", "ISO-8859-1" }, + { "sq_AL", "ISO-8859-1" }, + { "sq_MK", "UTF-8" }, + { "sr_ME", "UTF-8" }, + { "sr_RS", "UTF-8" }, + { "sr_RS@latin", "UTF-8" }, + { "ss_ZA", "UTF-8" }, + { "st_ZA", "ISO-8859-1" }, + { "sv_FI", "ISO-8859-1" }, + { "sv_FI@euro", "ISO-8859-15" }, + { "sv_SE", "ISO-8859-1" }, + { "sw_KE", "UTF-8" }, + { "sw_TZ", "UTF-8" }, + { "szl_PL", "UTF-8" }, + { "ta_IN", "UTF-8" }, + { "ta_LK", "UTF-8" }, + { "te_IN", "UTF-8" }, + { "tg_TJ", "KOI8-T" }, + { "th_TH", "TIS-620" }, + { "the_NP", "UTF-8" }, + { "ti_ER", "UTF-8" }, + { "ti_ET", "UTF-8" }, + { "tig_ER", "UTF-8" }, + { "tk_TM", "UTF-8" }, + { "tl_PH", "ISO-8859-1" }, + { "tn_ZA", "UTF-8" }, + { "to_TO", "UTF-8" }, + { "tpi_PG", "UTF-8" }, + { "tr_CY", "ISO-8859-9" }, + { "tr_TR", "ISO-8859-9" }, + { "ts_ZA", "UTF-8" }, + { "tt_RU", "UTF-8" }, + { "tt_RU@iqtelif", "UTF-8" }, + { "ug_CN", "UTF-8" }, + { "uk_UA", "KOI8-U" }, + { "unm_US", "UTF-8" }, + { "ur_IN", "UTF-8" }, + { "ur_PK", "UTF-8" }, + { "uz_UZ", "ISO-8859-1" }, + { "uz_UZ@cyrillic", "UTF-8" }, + { "ve_ZA", "UTF-8" }, + { "vi_VN", "UTF-8" }, + { "wa_BE", "ISO-8859-1" }, + { "wa_BE@euro", "ISO-8859-15" }, + { "wae_CH", "UTF-8" }, + { "wal_ET", "UTF-8" }, + { "wo_SN", "UTF-8" }, + { "xh_ZA", "ISO-8859-1" }, + { "yi_US", "CP1255" }, + { "yo_NG", "UTF-8" }, + { "yue_HK", "UTF-8" }, + { "yuw_PG", "UTF-8" }, + { "zh_CN", "GB2312" }, + { "zh_HK", "BIG5" }, + { "zh_SG", "GB2312" }, + { "zh_TW", "BIG5" }, + { "zu_ZA", "ISO-8859-1" }, +}; diff --git a/winsup/cygwin/local_includes/machine/asm.h b/winsup/cygwin/local_includes/machine/asm.h new file mode 100644 index 0000000000..12b0285396 --- /dev/null +++ b/winsup/cygwin/local_includes/machine/asm.h @@ -0,0 +1,78 @@ +#ifndef _MACHINE_ASM_H +#define _MACHINE_ASM_H + +/* Macros for importing FreeBSD/OpenBSD/NetBSD assembler code. */ + +#ifdef __x86_64__ + +#define _ALIGN_TEXT .p2align 4,0x90 + +/* The NATIVE_ENTRY macro just adds the required gas macros. It can be + used stand-alone if the code is so short that it's better to change the + argument registeres rather than adding the code overhead. */ + +#define NATIVE_ENTRY(__sym) \ + .text ;\ + .p2align 4 ;\ + .globl __sym ;\ + .seh_proc __sym ;\ + __sym: \ + +/* The ENTRY macros cover the difference in argument passing between + MS-ABI and SysV ABI. Note especially that RSI/RDI are always saved + in the stack shadow space defined by the MS_ABI, and restored when + calling ret (see the "ret" macro below). */ + +#define __ENTRY(__sym) \ + NATIVE_ENTRY(__sym) \ + movq %rsi,8(%rsp) ;\ + movq %rdi,16(%rsp) ; + +/* ENTRY1 for functions with 1 arg */ +#define ENTRY1(__sym) \ + __ENTRY(__sym) \ + movq %rcx,%rdi ;\ + .seh_endprologue ; + +/* ENTRY2 for functions with 2 args */ +#define ENTRY2(__sym) \ + __ENTRY(__sym) \ + movq %rcx,%rdi ;\ + movq %rdx,%rsi ;\ + .seh_endprologue ; + +/* ENTRY3 for functions with 3 args */ +#define ENTRY3(__sym) \ + __ENTRY(__sym) \ + movq %rcx,%rdi ;\ + movq %rdx,%rsi ;\ + movq %r8,%rdx ;\ + .seh_endprologue ; + +/* ENTRY4 for functions with 4 args */ +#define ENTRY4(__sym) \ + __ENTRY(__sym) \ + movq %rcx,%rdi ;\ + movq %rdx,%rsi ;\ + movq %r8,%rdx ;\ + movq %r9,%rcx ;\ + .seh_endprologue ; + +#define ret \ + movq 8(%rsp),%rsi ;\ + movq 16(%rsp),%rdi ;\ + retq ;\ + +#define END(__sym) \ + .seh_endproc + +#endif /* __x86_64__ */ + +#define __FBSDID(s) \ + .ident s + +#define STRONG_ALIAS(__a,__s) \ + .globl __a ;\ + __a = __s ; + +#endif /* _MACHINE_ASM_H */ diff --git a/winsup/cygwin/local_includes/memory_layout.h b/winsup/cygwin/local_includes/memory_layout.h index a3a0cae70f..f8ec80bb58 100644 --- a/winsup/cygwin/local_includes/memory_layout.h +++ b/winsup/cygwin/local_includes/memory_layout.h @@ -16,16 +16,8 @@ details. */ dynamicbase is accidentally not set in the PE/COFF header of the DLL. */ #define CYGWIN_DLL_ADDRESS 0x180040000UL -/* Default addresses of required standard shared regions (Cygwin shared, - user shared, myself, shared console). */ -#define CYGWIN_REGION_ADDRESS 0x1a0000000UL -#define USER_REGION_ADDRESS 0x1a1000000UL -#define MYSELF_REGION_ADDRESS 0x1a2000000UL -#define SHARED_CONSOLE_REGION_ADDRESS 0x1a3000000UL - -/* Area for non-fixed-address Cygwin-specific shared memory regions. Fallback - for standard shared regions if the can't load at their default address. */ -#define SHARED_REGIONS_ADDRESS_LOW 0x1a4000000UL +/* Area for Cygwin-specific shared memory regions. */ +#define SHARED_REGIONS_ADDRESS_LOW 0x1a0000000UL #define SHARED_REGIONS_ADDRESS_HIGH 0x200000000UL /* Rebased DLLs are located in this 16 Gigs arena. Will be kept for @@ -55,11 +47,9 @@ details. */ #define USERHEAP_START 0xa00000000UL /* The memory region used for memory maps. Mmaps grow downwards. - Set the lowest address to leave ~32 Gigs for heap. - - Up to Win 8 we only have a 44 bit address space, 48 bit address space - starting with 8.1, so the max value is a system-specific variable. */ + Set the lowest address to leave ~32 Gigs for heap. */ #define MMAP_STORAGE_LOW 0x001000000000UL -#define __MMAP_STORAGE_HIGH_LEGACY 0x070000000000UL -#define __MMAP_STORAGE_HIGH 0x700000000000UL -#define MMAP_STORAGE_HIGH wincap.mmap_storage_high () +#define MMAP_STORAGE_HIGH 0x700000000000UL + +/* Default number of pages used as thread stack guard pages. */ +#define DEFAULT_GUARD_PAGE_COUNT 3 diff --git a/winsup/cygwin/local_includes/mount.h b/winsup/cygwin/local_includes/mount.h index cb48a6840e..1fc5c39b76 100644 --- a/winsup/cygwin/local_includes/mount.h +++ b/winsup/cygwin/local_includes/mount.h @@ -69,6 +69,7 @@ class fs_info ULONG name_len; /* MaximumComponentNameLength */ fs_info_type fs_type; /* Filesystem type */ unsigned is_remote_drive : 1; + unsigned is_ssd : 1; unsigned has_acls : 1; unsigned hasgood_inode : 1; unsigned caseinsensitive : 1; @@ -93,6 +94,7 @@ class fs_info IMPLEMENT_STATUS_FLAG (ULONG, samba_version) IMPLEMENT_STATUS_FLAG (ULONG, name_len) IMPLEMENT_STATUS_FLAG (bool, is_remote_drive) + IMPLEMENT_STATUS_FLAG (bool, is_ssd) IMPLEMENT_STATUS_FLAG (bool, has_acls) IMPLEMENT_STATUS_FLAG (bool, hasgood_inode) IMPLEMENT_STATUS_FLAG (bool, caseinsensitive) diff --git a/winsup/cygwin/local_includes/mtinfo.h b/winsup/cygwin/local_includes/mtinfo.h index 03aabbfd0e..46f8b1be95 100644 --- a/winsup/cygwin/local_includes/mtinfo.h +++ b/winsup/cygwin/local_includes/mtinfo.h @@ -101,7 +101,7 @@ class mtinfo_drive int set_compression (HANDLE mt, int32_t count); int set_blocksize (HANDLE mt, DWORD count); int get_status (HANDLE mt, struct mtget *get); - int set_options (HANDLE mt, int32_t options); + int set_options (HANDLE mt, uint32_t options); int async_wait (HANDLE mt, DWORD *bytes_written); public: diff --git a/winsup/cygwin/local_includes/ntdll.h b/winsup/cygwin/local_includes/ntdll.h index aa1f3b90fd..4497fe53f9 100644 --- a/winsup/cygwin/local_includes/ntdll.h +++ b/winsup/cygwin/local_includes/ntdll.h @@ -23,7 +23,7 @@ extern GUID __cygwin_socket_guid; /* Custom Cygwin-only status codes. */ #define STATUS_THREAD_SIGNALED ((NTSTATUS)0xe0000001) #define STATUS_THREAD_CANCELED ((NTSTATUS)0xe0000002) -#define STATUS_ILLEGAL_DLL_PSEUDO_RELOCATION ((DWORD) 0xe0000269) +#define STATUS_ILLEGAL_DLL_PSEUDO_RELOCATION ((NTSTATUS) 0xe0000269) /* Simplify checking for a transactional error code. */ #define NT_TRANSACTIONAL_ERROR(s) \ @@ -45,6 +45,9 @@ extern GUID __cygwin_socket_guid; #define FILE_WRITE_TO_END_OF_FILE (-1LL) #define FILE_USE_FILE_POINTER_POSITION (-2LL) +/* Sparsification granularity on NTFS. */ +#define FILE_SPARSE_GRANULARITY (64 * 1024) + /* Device Characteristics. */ #define FILE_REMOVABLE_MEDIA 0x00000001 #define FILE_READ_ONLY_DEVICE 0x00000002 @@ -56,6 +59,13 @@ extern GUID __cygwin_socket_guid; #define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080 #define FILE_DEVICE_SECURE_OPEN 0x00000100 +/* Sector Size Information Flags */ +#define SSINFO_FLAGS_ALIGNED_DEVICE 0x00000001 +#define SSINFO_FLAGS_PARTITION_ALIGNED_ON_DEVICE 0x00000002 +#define SSINFO_FLAGS_NO_SEEK_PENALTY 0x00000004 +#define SSINFO_FLAGS_TRIM_ENABLED 0x00000008 +#define SSINFO_FLAGS_BYTE_ADDRESSABLE 0x00000010 + /* Lock type in NtLockVirtualMemory/NtUnlockVirtualMemory call. */ #define MAP_PROCESS 1 #define MAP_SYSTEM 2 @@ -397,6 +407,11 @@ typedef struct _FILE_ALL_INFORMATION { // 18 FILE_NAME_INFORMATION NameInformation; } FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION; +typedef struct _FILE_ALLOCATION_INFORMATION // 19 +{ + LARGE_INTEGER AllocationSize; +} FILE_ALLOCATION_INFORMATION, *PFILE_ALLOCATION_INFORMATION; + typedef struct _FILE_END_OF_FILE_INFORMATION // 20 { LARGE_INTEGER EndOfFile; @@ -970,8 +985,7 @@ typedef struct _LDR_DATA_TABLE_ENTRY ULONG Flags; USHORT LoadCount; /* More follows. Left out since it's just not used. The aforementioned - part of the structure is stable from at least NT4 up to Windows 8, - including WOW64. */ + part of the structure is stable from at least NT4 up to Windows 11. */ } LDR_DATA_TABLE_ENTRY, *PLDR_DATA_TABLE_ENTRY; typedef struct _PEB_LDR_DATA @@ -1205,6 +1219,21 @@ typedef struct _FILE_FS_OBJECTID_INFORMATION UCHAR ExtendedInfo[48]; } FILE_FS_OBJECTID_INFORMATION, *PFILE_FS_OBJECTID_INFORMATION; +typedef struct _FILE_FS_SECTOR_SIZE_INFORMATION +{ + ULONG LogicalBytesPerSector; + ULONG PhysicalBytesPerSectorForAtomicity; + ULONG PhysicalBytesPerSectorForPerformance; + ULONG FileSystemEffectivePhysicalBytesPerSectorForAtomicity; + ULONG Flags; + ULONG ByteOffsetForSectorAlignment; + ULONG ByteOffsetForPartitionAlignment; +} FILE_FS_SECTOR_SIZE_INFORMATION, *PFILE_FS_SECTOR_SIZE_INFORMATION; + +typedef struct _FILE_FS_VOLUME_FLAGS_INFORMATION { + ULONG Flags; +} FILE_FS_VOLUME_FLAGS_INFORMATION, *PFILE_FS_VOLUME_FLAGS_INFORMATION; + typedef enum _FSINFOCLASS { FileFsVolumeInformation = 1, FileFsLabelInformation, @@ -1215,6 +1244,11 @@ typedef enum _FSINFOCLASS { FileFsFullSizeInformation, FileFsObjectIdInformation, FileFsDriverPathInformation, + FileFsVolumeFlagsInformation, + FileFsSectorSizeInformation, + FileFsDataCopyInformation, + FileFsMetadataSizeInformation, + FileFsFullSizeInformationEx, FileFsMaximumInformation } FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS; @@ -1244,7 +1278,7 @@ typedef struct _OBJECT_BASIC_INFORMATION typedef struct _OBJECT_NAME_INFORMATION { UNICODE_STRING Name; -} OBJECT_NAME_INFORMATION; +} OBJECT_NAME_INFORMATION, *POBJECT_NAME_INFORMATION; typedef struct _DIRECTORY_BASIC_INFORMATION { diff --git a/winsup/cygwin/local_includes/path.h b/winsup/cygwin/local_includes/path.h index 8c97c42547..cd0cc8a412 100644 --- a/winsup/cygwin/local_includes/path.h +++ b/winsup/cygwin/local_includes/path.h @@ -133,10 +133,16 @@ class path_conv_handle return nfs ? nfsattr ()->fileid : fai ()->InternalInformation.IndexNumber.QuadPart; } - inline DWORD get_dosattr (bool nfs) const + inline DWORD get_dosattr (HANDLE h, bool nfs) const { if (nfs) - return (nfsattr ()->type & 7) == NF3DIR ? FILE_ATTRIBUTE_DIRECTORY : 0; + { + IO_STATUS_BLOCK io; + FILE_BASIC_INFORMATION fbi; + + NtQueryInformationFile (h, &io, &fbi, sizeof fbi, FileBasicInformation); + return fbi.FileAttributes; + } return fai ()->BasicInformation.FileAttributes; } }; @@ -176,8 +182,8 @@ class path_conv bool isgood_inode (ino_t ino) const; bool support_sparse () const { - return (mount_flags & MOUNT_SPARSE) - && (fs_flags () & FILE_SUPPORTS_SPARSE_FILES); + return (fs_flags () & FILE_SUPPORTS_SPARSE_FILES) + && (fs.is_ssd () || (mount_flags & MOUNT_SPARSE)); } int has_dos_filenames_only () const {return mount_flags & MOUNT_DOS;} int has_buggy_reopen () const {return fs.has_buggy_reopen ();} diff --git a/winsup/cygwin/local_includes/select.h b/winsup/cygwin/local_includes/select.h index b794690b6c..dea023343f 100644 --- a/winsup/cygwin/local_includes/select.h +++ b/winsup/cygwin/local_includes/select.h @@ -87,6 +87,11 @@ struct select_socket_info: public select_info select_socket_info (): select_info (), num_w4 (0), ser_num (0), w4 (NULL) {} }; +struct select_dsp_info: public select_info +{ + select_dsp_info (): select_info () {} +}; + class select_stuff { public: @@ -112,6 +117,7 @@ class select_stuff select_pipe_info *device_specific_ptys; select_fifo_info *device_specific_fifo; select_socket_info *device_specific_socket; + select_dsp_info *device_specific_dsp; bool test_and_set (int, fd_set *, fd_set *, fd_set *); int poll (fd_set *, fd_set *, fd_set *); @@ -125,11 +131,17 @@ class select_stuff device_specific_pipe (NULL), device_specific_ptys (NULL), device_specific_fifo (NULL), - device_specific_socket (NULL) + device_specific_socket (NULL), + device_specific_dsp (NULL) {} }; extern "C" int cygwin_select (int , fd_set *, fd_set *, fd_set *, struct timeval *to); +ssize_t pipe_data_available (int, fhandler_base *, HANDLE, int); + +#define PDA_WRITE 0x01 +#define PDA_SELECT 0x02 + #endif /* _SELECT_H_ */ diff --git a/winsup/cygwin/local_includes/shared_info.h b/winsup/cygwin/local_includes/shared_info.h index cbe55a2788..4316717a98 100644 --- a/winsup/cygwin/local_includes/shared_info.h +++ b/winsup/cygwin/local_includes/shared_info.h @@ -33,7 +33,7 @@ class user_info /* Data accessible to all tasks */ -#define CURR_SHARED_MAGIC 0x9f33cc5dU +#define CURR_SHARED_MAGIC 0x205f4579U #define USER_VERSION 1 @@ -46,6 +46,7 @@ class shared_info DWORD cb; public: tty_list tty; + HWND cons_hwnd[MAX_CONS_DEV]; LONG last_used_bindresvport; DWORD obcaseinsensitive; mtinfo mt; diff --git a/winsup/cygwin/local_includes/thread.h b/winsup/cygwin/local_includes/thread.h index 9939c42245..b3496281ee 100644 --- a/winsup/cygwin/local_includes/thread.h +++ b/winsup/cygwin/local_includes/thread.h @@ -674,7 +674,7 @@ class pthread_once { public: pthread_mutex_t mutex; - int state; + volatile int state; }; /* shouldn't be here */ diff --git a/winsup/cygwin/local_includes/tty.h b/winsup/cygwin/local_includes/tty.h index 3d0ea0c68a..53fa26b449 100644 --- a/winsup/cygwin/local_includes/tty.h +++ b/winsup/cygwin/local_includes/tty.h @@ -13,7 +13,7 @@ details. */ #define INP_BUFFER_SIZE 256 #define OUT_BUFFER_SIZE 256 #define NTTYS 128 -#define real_tty_attached(p) ((p)->ctty > 0 && !iscons_dev ((p)->ctty)) +#define real_tty_attached(p) (CTTY_IS_VALID ((p)->ctty) && !iscons_dev ((p)->ctty)) /* Input/Output/ioctl events */ @@ -119,7 +119,7 @@ class tty: public tty_min bool switch_to_nat_pipe; DWORD nat_pipe_owner_pid; UINT term_code_page; - DWORD fwd_last_time; + ULONGLONG fwd_last_time; bool fwd_not_empty; HANDLE h_pcon_write_pipe; HANDLE h_pcon_condrv_reference; @@ -211,4 +211,9 @@ class lock_ttys }; extern "C" int ttyslot (void); + +/* Console stuff */ +#define MAX_CONS_DEV 128 +#define CONS_SCAN_UNUSED (-1) + #endif /*_TTY_H*/ diff --git a/winsup/cygwin/local_includes/wchar.h b/winsup/cygwin/local_includes/wchar.h index f349daa2aa..c6ec5d8758 100644 --- a/winsup/cygwin/local_includes/wchar.h +++ b/winsup/cygwin/local_includes/wchar.h @@ -13,6 +13,7 @@ details. */ /* Internal headers from newlib */ #include "../locale/setlocale.h" +#include #define ENCODING_LEN 31 @@ -39,6 +40,127 @@ extern wctomb_f __utf8_wctomb; #define __WCTOMB (__get_current_locale ()->wctomb) +/* convert wint_t string to wchar_t string. Make sure dest + has room for at least twice as much characters to account + for surrogate pairs, plus a wchar_t NUL. */ +void wcintowcs (wchar_t *, wint_t *, size_t); + +/* replacement function for wcrtomb, converting a UTF-32 char to a + multibyte string. */ +static inline size_t +wirtomb (char *s, wint_t wc, mbstate_t *ps) +{ + return c32rtomb (s,(char32_t) wc, ps); +} + +/* replacement function for mbrtowc, returning a wint_t representing + a UTF-32 value. */ +static inline size_t +mbrtowi (wint_t *pwc, const char *s, size_t n, mbstate_t *ps) +{ + return mbrtoc32 ((char32_t *) pwc, s, n, ps); +} + +/* replacement function for mbsnrtowcs, returning a wint_t representing + a UTF-32 value. Defined in strfuncs.cc. + Deviation from standard: If the input is broken, the output will be + broken. I. e., we just copy the current byte over into the wint_t + destination and try to pick up on the next byte. This is in line + with the way fnmatch works. */ +extern size_t mbsnrtowci(wint_t *, const char **, size_t, size_t, mbstate_t *); + +/* convert wint_t string to char string, but *only* if the string consists + entirely of ASCII chars */ +static inline void +wcitoascii(char *dst, wint_t *src) +{ + while ((*dst++ = *src++)); +} + +/* like wcslen, just for wint_t */ +static inline size_t +wcilen (const wint_t *wcs) +{ + size_t ret = 0; + + if (wcs) + while (*wcs++) + ++ret; + return ret; +} + +/* like wcschr, just for wint_t */ +static inline wint_t * +wcichr (const wint_t *str, wint_t chr) +{ + do + { + if (*str == chr) + return (wint_t *) str; + } + while (*str++); + return NULL; +} + +/* like wcscmp, just for wint_t */ +static inline int +wcicmp (const wint_t *s1, const wint_t *s2) +{ + while (*s1 == *s2++) + if (*s1++ == 0) + return (0); + return (*s1 - *--s2); +} + +/* like wcsncmp, just for wint_t */ +static inline int +wcincmp (const wint_t *s1, const wint_t *s2, size_t n) +{ + if (n == 0) + return (0); + do + { + if (*s1 != *s2++) + { + return (*s1 - *--s2); + } + if (*s1++ == 0) + break; + } + while (--n != 0); + return (0); +} + +/* like wcpcpy, just for wint_t */ +static inline wint_t * +wcipcpy (wint_t *s1, const wint_t *s2) +{ + while ((*s1++ = *s2++)) + ; + return --s1; +} + +/* like wcpncpy, just for wint_t */ +static inline wint_t * +wcipncpy (wint_t *dst, const wint_t *src, size_t count) +{ + wint_t *ret = NULL; + + while (count > 0) + { + --count; + if ((*dst++ = *src++) == L'\0') + { + ret = dst - 1; + break; + } + } + while (count-- > 0) + *dst++ = L'\0'; + + return ret ? ret : dst; +} + #ifdef __cplusplus } #endif diff --git a/winsup/cygwin/local_includes/wincap.h b/winsup/cygwin/local_includes/wincap.h index 9fff129097..c14872787c 100644 --- a/winsup/cygwin/local_includes/wincap.h +++ b/winsup/cygwin/local_includes/wincap.h @@ -9,19 +9,14 @@ details. */ #ifndef _WINCAP_H #define _WINCAP_H +#include "memory_layout.h" + struct wincaps { - DWORD def_guard_pages; - int64_t mmap_storage_high; /* The bitfields must be 8 byte aligned on x86_64, otherwise the bitfield ops generated by gcc are off by 4 bytes. */ struct __attribute__ ((aligned (8))) { - unsigned is_server : 1; - unsigned needs_query_information : 1; - unsigned has_precise_system_time : 1; - unsigned has_microsoft_accounts : 1; unsigned has_new_pebteb_region : 1; - unsigned has_broken_whoami : 1; unsigned has_unprivileged_createsymlink : 1; unsigned has_precise_interrupt_time : 1; unsigned has_posix_unlink_semantics : 1; @@ -36,10 +31,8 @@ struct wincaps unsigned has_tcp_fastopen : 1; unsigned has_linux_tcp_keepalive_sockopts : 1; unsigned has_tcp_maxrtms : 1; - unsigned has_query_process_handle_info : 1; unsigned has_con_broken_tabs : 1; - unsigned has_broken_attach_console : 1; - unsigned cons_need_small_input_record_buf : 1; + unsigned has_user_shstk : 1; }; }; @@ -48,7 +41,8 @@ class wincapc SYSTEM_INFO system_info; RTL_OSVERSIONINFOEXW version; char osnam[40]; - void *caps; + const void *caps; + bool _is_server; public: void init (); @@ -72,15 +66,10 @@ class wincapc DWORD def_guard_page_size () const { - return ((wincaps *) this->caps)->def_guard_pages * page_size (); + return DEFAULT_GUARD_PAGE_COUNT * page_size (); } - intptr_t IMPLEMENT (mmap_storage_high) - bool IMPLEMENT (is_server) - bool IMPLEMENT (needs_query_information) - bool IMPLEMENT (has_precise_system_time) - bool IMPLEMENT (has_microsoft_accounts) + bool is_server () const { return _is_server; } bool IMPLEMENT (has_new_pebteb_region) - bool IMPLEMENT (has_broken_whoami) bool IMPLEMENT (has_unprivileged_createsymlink) bool IMPLEMENT (has_precise_interrupt_time) bool IMPLEMENT (has_posix_unlink_semantics) @@ -95,10 +84,8 @@ class wincapc bool IMPLEMENT (has_tcp_fastopen) bool IMPLEMENT (has_linux_tcp_keepalive_sockopts) bool IMPLEMENT (has_tcp_maxrtms) - bool IMPLEMENT (has_query_process_handle_info) bool IMPLEMENT (has_con_broken_tabs) - bool IMPLEMENT (has_broken_attach_console) - bool IMPLEMENT (cons_need_small_input_record_buf) + bool IMPLEMENT (has_user_shstk) void disable_case_sensitive_dirs () { diff --git a/winsup/cygwin/local_includes/winlean.h b/winsup/cygwin/local_includes/winlean.h index d4b4038658..62b651be6e 100644 --- a/winsup/cygwin/local_includes/winlean.h +++ b/winsup/cygwin/local_includes/winlean.h @@ -53,7 +53,10 @@ details. */ #define __undef_CRITICAL #endif +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Warray-bounds" #include +#pragma GCC diagnostic pop #include #include #include @@ -75,6 +78,28 @@ details. */ #endif /* Filesystem flags not yet supported by Mingw-w64 headers. */ +#ifndef FILE_RETURNS_CLEANUP_RESULT_INFO +#define FILE_RETURNS_CLEANUP_RESULT_INFO 0x00000200 +#endif +#ifndef FILE_SUPPORTS_POSIX_UNLINK_RENAME +#define FILE_SUPPORTS_POSIX_UNLINK_RENAME 0x00000400 +#endif +#ifndef FILE_SUPPORTS_INTEGRITY_STREAMS +#define FILE_SUPPORTS_INTEGRITY_STREAMS 0x04000000 +#endif +#ifndef FILE_SUPPORTS_BLOCK_REFCOUNTING +#define FILE_SUPPORTS_BLOCK_REFCOUNTING 0x08000000 +#endif +#ifndef FILE_SUPPORTS_SPARSE_VDL +#define FILE_SUPPORTS_SPARSE_VDL 0x10000000 +#endif +#ifndef FILE_DAX_VOLUME +#define FILE_DAX_VOLUME 0x20000000 +#endif +#ifndef FILE_SUPPORTS_GHOSTING +#define FILE_SUPPORTS_GHOSTING 0x40000000 +#endif + #ifndef FILE_ATTRIBUTE_RECALL_ON_OPEN #define FILE_ATTRIBUTE_RECALL_ON_OPEN 0x00040000 #endif @@ -82,6 +107,10 @@ details. */ #define FILE_ATTRIBUTE_RECALL_ON_DATA_ACCESS 0x00400000 #endif +#ifndef DOMAIN_ALIAS_RID_DEVICE_OWNERS +#define DOMAIN_ALIAS_RID_DEVICE_OWNERS (__MSABI_LONG(0x00000247)) +#endif + /* So-called "Microsoft Account" SIDs (S-1-11-...) have a netbios domain name "MicrosoftAccounts". The new "Application Container SIDs" (S-1-15-...) have a netbios domain name "APPLICATION PACKAGE AUTHORITY" diff --git a/winsup/cygwin/local_includes/winsup.h b/winsup/cygwin/local_includes/winsup.h index 43dfbf46f4..38313962d9 100644 --- a/winsup/cygwin/local_includes/winsup.h +++ b/winsup/cygwin/local_includes/winsup.h @@ -10,6 +10,12 @@ details. */ #define __INSIDE_CYGWIN__ +/* Use "static NO_COPY_RO" instead of "static const", if the datastructure + should be R/O, but without the "const" qualifier. Typically this is only + required if the static datastructure is "const" in reality, but the Windows + function is defined with a R/W type as argument. Unfortunately this is + often the case. However, make sure to try "const" first, and use + "NO_COPY_RO" as seldom as possible. */ #define NO_COPY_RO __attribute__((nocommon)) __attribute__((section(".rdata_cygwin_nocopy"))) #define NO_COPY __attribute__((nocommon)) __attribute__((section(".data_cygwin_nocopy"))) #define NO_COPY_INIT __attribute__((section(".data_cygwin_nocopy"))) @@ -41,7 +47,6 @@ details. */ #ifdef __cplusplus extern "C" { #endif -struct __sFILE64 *fopen64 (const char *, const char *); struct hostent *cygwin_gethostbyname (const char *name); /* Don't enforce definition of in_addr_t. */ uint32_t cygwin_inet_addr (const char *cp); @@ -174,7 +179,9 @@ void close_all_files (bool = false); /* debug_on_trap support. see exceptions.cc:try_to_debug() */ extern "C" void error_start_init (const char*); +extern "C" void dumper_init (void); extern "C" int try_to_debug (); +extern "C" void api_fatal_debug (); void ld_preload (); void fixup_hooks_after_fork (); @@ -203,7 +210,6 @@ void timespec_to_filetime (const struct timespec *, PLARGE_INTEGER); bool timeval_to_ms (const struct timeval *, DWORD &); /* Console related */ -void set_console_title (char *); void init_console_handler (bool); extern bool wsock_started; @@ -221,6 +227,8 @@ class path_conv; int stat_worker (path_conv &pc, struct stat *buf); +NTSTATUS unlink_nt (path_conv &pc, bool sharable); + ino_t readdir_get_ino (const char *path, bool dot_dot); /* mmap functions. */ diff --git a/winsup/cygwin/mm/cygheap.cc b/winsup/cygwin/mm/cygheap.cc index b1d5acb0fd..bf4d82f07c 100644 --- a/winsup/cygwin/mm/cygheap.cc +++ b/winsup/cygwin/mm/cygheap.cc @@ -130,6 +130,8 @@ void init_cygheap::close_ctty () { debug_printf ("closing cygheap->ctty %p", cygheap->ctty); + if (cygheap->ctty->tc ()->getsid () == pid) + cygheap->ctty->tc ()->setsid (0); /* Release CTTY ownership */ cygheap->ctty->close_with_arch (); cygheap->ctty = NULL; } @@ -302,7 +304,7 @@ cygheap_init () cygheap->locale.mbtowc = __utf8_mbtowc; /* Set umask to a sane default. */ cygheap->umask = 022; - cygheap->rlim_core = RLIM_INFINITY; + cygheap->rlim_core = 0; } if (!cygheap->fdtab) cygheap->fdtab.init (); diff --git a/winsup/cygwin/mm/heap.cc b/winsup/cygwin/mm/heap.cc index 5b24a197f3..267f4ffa7d 100644 --- a/winsup/cygwin/mm/heap.cc +++ b/winsup/cygwin/mm/heap.cc @@ -77,11 +77,11 @@ user_heap_info::init () if (base) break; - /* Ok, so we are at the 1% which didn't work with 0x20000000 out + /* Ok, so we are at the 1% which didn't work with USERHEAP_START out of the box. What we do now is to search for the next free region which matches our desired heap size. While doing that, we keep track of the largest region we found, including the - region starting at 0x20000000. */ + region starting at USERHEAP_START. */ while ((ret = VirtualQuery ((LPCVOID) start_address, &mbi, sizeof mbi)) != 0) { @@ -154,7 +154,7 @@ user_heap_info::init () if ((reserve_size -= page_const) < allocsize) break; } - if (!p && in_forkee && !fork_info->abort (NULL)) + if (!p && __in_forkee == FORKING && !fork_info->abort (NULL)) api_fatal ("couldn't allocate heap, %E, base %p, top %p, " "reserve_size %ld, allocsize %ld, page_const %d", base, top, diff --git a/winsup/cygwin/mm/shared.cc b/winsup/cygwin/mm/shared.cc index 20b57ff4d3..7977df382a 100644 --- a/winsup/cygwin/mm/shared.cc +++ b/winsup/cygwin/mm/shared.cc @@ -113,15 +113,6 @@ shared_name (WCHAR *ret_buf, const WCHAR *str, int num) #define page_const ((ptrdiff_t) 65535) #define pround(n) ((ptrdiff_t)(((n) + page_const) & ~page_const)) -/* FIXME: With ASLR, maybe we should ASLR the shared regions, too? */ -static uintptr_t region_address[] = -{ - CYGWIN_REGION_ADDRESS, /* SH_CYGWIN_SHARED */ - USER_REGION_ADDRESS, /* SH_USER_SHARED */ - MYSELF_REGION_ADDRESS, /* SH_MYSELF */ - SHARED_CONSOLE_REGION_ADDRESS, /* SH_SHARED_CONSOLE */ - 0 -}; static NO_COPY uintptr_t next_address = SHARED_REGIONS_ADDRESS_LOW; void * @@ -139,7 +130,7 @@ open_shared (const WCHAR *name, int n, HANDLE& shared_h, DWORD size, { WCHAR map_buf[MAX_PATH]; WCHAR *mapname = NULL; - void *shared = NULL; + void *shared; void *addr; created = false; @@ -165,41 +156,25 @@ open_shared (const WCHAR *name, int n, HANDLE& shared_h, DWORD size, return NULL; } - if (m < SH_TOTAL_SIZE && !dynamically_loaded) - { - /* Fixed regions. Don't do that if Cygwin gets dynamically loaded. - The process loading the DLL might be configured with High-Entropy - ASLR. Chances for collisions are pretty high. + /* Locate shared regions in the area between SHARED_REGIONS_ADDRESS_LOW + and SHARED_REGIONS_ADDRESS_HIGH, retrying until we have a slot. + Don't use MapViewOfFile3 (STATUS_DLL_INIT_FAILED during fork). */ + bool loop = false; - Note that we don't actually *need* fixed addresses. The only - advantage is reproducibility to help /proc//maps along. */ - addr = (void *) region_address[m]; - shared = MapViewOfFileEx (shared_h, access, 0, 0, 0, addr); - } - /* Also catch the unlikely case that a fixed region can't be mapped at the - fixed address. */ - if (!shared) + do { - /* Locate shared regions in the area between SHARED_REGIONS_ADDRESS_LOW - and SHARED_REGIONS_ADDRESS_HIGH, retrying until we have a slot. - Don't use MapViewOfFile3 (STATUS_DLL_INIT_FAILED during fork). */ - bool loop = false; - - do + addr = (void *) next_address; + shared = MapViewOfFileEx (shared_h, access, 0, 0, 0, addr); + next_address += wincap.allocation_granularity (); + if (next_address >= SHARED_REGIONS_ADDRESS_HIGH) { - addr = (void *) next_address; - shared = MapViewOfFileEx (shared_h, access, 0, 0, 0, addr); - next_address += wincap.allocation_granularity (); - if (next_address >= SHARED_REGIONS_ADDRESS_HIGH) - { - if (!shared && loop) - break; - next_address = SHARED_REGIONS_ADDRESS_LOW; - loop = true; - } + if (!shared && loop) + break; + next_address = SHARED_REGIONS_ADDRESS_LOW; + loop = true; } - while (!shared); } + while (!shared); if (!shared) api_fatal ("MapViewOfFileEx '%W'(%p, size %u, m %d, created %d), %E. " @@ -267,6 +242,7 @@ user_info::create (bool reinit) debug_printf ("user shared version %x", user_shared->version); if (reinit) user_shared->initialize (); + cygheap->shared_regions.user_shared_addr = user_shared; } void @@ -308,6 +284,7 @@ shared_info::create () SH_CYGWIN_SHARED, &sec_all_nih); cygwin_shared->initialize (); + cygheap->shared_regions.cygwin_shared_addr = cygwin_shared; } void @@ -340,14 +317,13 @@ shared_info::initialize () else if (cb != sizeof (*this)) system_printf ("size of shared memory region changed from %lu to %u", sizeof (*this), cb); - /* FIXME? Shouldn't this be in memory_init? */ - cygheap->user_heap.init (); } void memory_init () { shared_info::create (); /* Initialize global shared memory */ + cygheap->user_heap.init (); /* Initialize user heap */ user_info::create (false); /* Initialize per-user shared memory */ /* Initialize tty list session stuff. Doesn't really belong here but this needs to be initialized before any tty or console manipulation diff --git a/winsup/cygwin/mount.cc b/winsup/cygwin/mount.cc index 998094ead9..8ebfb14034 100644 --- a/winsup/cygwin/mount.cc +++ b/winsup/cygwin/mount.cc @@ -35,6 +35,9 @@ details. */ (path[mount_table->cygdrive_len + 1] == '/' || \ !path[mount_table->cygdrive_len + 1])) +#define isdev_disk(path) \ + (path_prefix_p (dev_disk, (path), dev_disk_len, false)) + #define isproc(path) \ (path_prefix_p (proc, (path), proc_len, false)) @@ -315,15 +318,52 @@ fs_info::update (PUNICODE_STRING upath, HANDLE in_vol) if (is_remote_drive ()) { /* Should be reevaluated for each new OS. Right now this mask is valid up - to Windows 8. The important point here is to test only flags indicating + to Windows 11. The important point here is to test only flags indicating capabilities and to ignore flags indicating a specific state of this volume. At present these flags to ignore are FILE_VOLUME_IS_COMPRESSED, - FILE_READ_ONLY_VOLUME, and FILE_SEQUENTIAL_WRITE_ONCE. The additional - filesystem flags supported since Windows 7 are also ignored for now. - They add information, but only on W7 and later, and only for filesystems - also supporting these flags, right now only NTFS. */ -#define GETVOLINFO_VALID_MASK (0x002701ffUL) + FILE_READ_ONLY_VOLUME, FILE_SEQUENTIAL_WRITE_ONCE and FILE_DAX_VOLUME. */ +#define GETVOLINFO_VALID_MASK (FILE_CASE_SENSITIVE_SEARCH \ + | FILE_CASE_PRESERVED_NAMES \ + | FILE_UNICODE_ON_DISK \ + | FILE_PERSISTENT_ACLS \ + | FILE_FILE_COMPRESSION \ + | FILE_VOLUME_QUOTAS \ + | FILE_SUPPORTS_SPARSE_FILES \ + | FILE_SUPPORTS_REPARSE_POINTS \ + | FILE_SUPPORTS_REMOTE_STORAGE \ + | FILE_RETURNS_CLEANUP_RESULT_INFO \ + | FILE_SUPPORTS_POSIX_UNLINK_RENAME \ + | FILE_SUPPORTS_OBJECT_IDS \ + | FILE_SUPPORTS_ENCRYPTION \ + | FILE_NAMED_STREAMS \ + | FILE_SUPPORTS_TRANSACTIONS \ + | FILE_SUPPORTS_HARD_LINKS \ + | FILE_SUPPORTS_EXTENDED_ATTRIBUTES \ + | FILE_SUPPORTS_OPEN_BY_FILE_ID \ + | FILE_SUPPORTS_USN_JOURNAL \ + | FILE_SUPPORTS_INTEGRITY_STREAMS \ + | FILE_SUPPORTS_BLOCK_REFCOUNTING \ + | FILE_SUPPORTS_SPARSE_VDL \ + | FILE_SUPPORTS_GHOSTING) +/* This is the pre-Win7 mask used to recognize 3rd-party drivers. We'll never + learn in time when those drivers start to support the new (har har) Win7 FS + flags. */ +#define GETVOLINFO_NON_WIN_MASK (FILE_CASE_SENSITIVE_SEARCH \ + | FILE_CASE_PRESERVED_NAMES \ + | FILE_UNICODE_ON_DISK \ + | FILE_PERSISTENT_ACLS \ + | FILE_FILE_COMPRESSION \ + | FILE_VOLUME_QUOTAS \ + | FILE_SUPPORTS_SPARSE_FILES \ + | FILE_SUPPORTS_REPARSE_POINTS \ + | FILE_SUPPORTS_REMOTE_STORAGE \ + | FILE_SUPPORTS_OBJECT_IDS \ + | FILE_SUPPORTS_ENCRYPTION \ + | FILE_NAMED_STREAMS \ + | FILE_SUPPORTS_TRANSACTIONS) + #define TEST_GVI(f,m) (((f) & GETVOLINFO_VALID_MASK) == (m)) +#define TEST_GVI_NON_WIN(f,m) (((f) & GETVOLINFO_NON_WIN_MASK) == (m)) /* FIXME: This flag twist is getting awkward. There should really be some other method. Maybe we need mount flags to allow the user to fix file @@ -334,7 +374,7 @@ fs_info::update (PUNICODE_STRING upath, HANDLE in_vol) #define SAMBA_IGNORE (FILE_VOLUME_QUOTAS \ | FILE_SUPPORTS_OBJECT_IDS \ | FILE_UNICODE_ON_DISK) -#define FS_IS_SAMBA TEST_GVI(flags () & ~SAMBA_IGNORE, \ +#define FS_IS_SAMBA TEST_GVI_NON_WIN(flags () & ~SAMBA_IGNORE, \ FILE_CASE_SENSITIVE_SEARCH \ | FILE_CASE_PRESERVED_NAMES \ | FILE_PERSISTENT_ACLS) @@ -342,14 +382,15 @@ fs_info::update (PUNICODE_STRING upath, HANDLE in_vol) #define NETAPP_IGNORE (FILE_SUPPORTS_SPARSE_FILES \ | FILE_SUPPORTS_REPARSE_POINTS \ | FILE_PERSISTENT_ACLS) -#define FS_IS_NETAPP_DATAONTAP TEST_GVI(flags () & ~NETAPP_IGNORE, \ +#define FS_IS_NETAPP_DATAONTAP TEST_GVI_NON_WIN(flags () & ~NETAPP_IGNORE, \ FILE_CASE_SENSITIVE_SEARCH \ | FILE_CASE_PRESERVED_NAMES \ | FILE_UNICODE_ON_DISK \ | FILE_NAMED_STREAMS) -/* These are the minimal flags supported by NTFS since Windows 2000. Every - filesystem not supporting these flags is not a native NTFS. We subsume - them under the filesystem type "cifs". */ +/* These are the minimal flags supported by NTFS since Windows 7, when + checking a remote NTFS filesystem. Every filesystem not supporting these + flags is not a native NTFS. + We subsume them under the filesystem type "cifs". */ #define MINIMAL_WIN_NTFS_FLAGS (FILE_CASE_SENSITIVE_SEARCH \ | FILE_CASE_PRESERVED_NAMES \ | FILE_UNICODE_ON_DISK \ @@ -359,7 +400,9 @@ fs_info::update (PUNICODE_STRING upath, HANDLE in_vol) | FILE_SUPPORTS_REPARSE_POINTS \ | FILE_SUPPORTS_OBJECT_IDS \ | FILE_SUPPORTS_ENCRYPTION \ - | FILE_NAMED_STREAMS) + | FILE_NAMED_STREAMS \ + | FILE_SUPPORTS_HARD_LINKS \ + | FILE_SUPPORTS_EXTENDED_ATTRIBUTES) #define FS_IS_WINDOWS_NTFS TEST_GVI(flags () & MINIMAL_WIN_NTFS_FLAGS, \ MINIMAL_WIN_NTFS_FLAGS) /* These are the exact flags of a real Windows FAT/FAT32 filesystem. @@ -478,8 +521,22 @@ fs_info::update (PUNICODE_STRING upath, HANDLE in_vol) caseinsensitive ((!(flags () & FILE_CASE_SENSITIVE_SEARCH) || is_samba ()) && !is_nfs ()); + /* Check for being an SSD */ + if (!is_cdrom ()) + { + /* Theoretically FileFsVolumeFlagsInformation would be sufficient, + but apparently it's not exposed into userspace. */ + FILE_FS_SECTOR_SIZE_INFORMATION ffssi; + + status = NtQueryVolumeInformationFile (vol, &io, &ffssi, sizeof ffssi, + FileFsSectorSizeInformation); + if (NT_SUCCESS (status)) + is_ssd (!!(ffssi.Flags & SSINFO_FLAGS_NO_SEEK_PENALTY)); + } + if (!in_vol) NtClose (vol); + fsi_cache.add (hash, this); return true; } @@ -636,6 +693,13 @@ mount_info::conv_to_win32_path (const char *src_path, char *dst, device& dev, /* Go through chroot check */ goto out; } + if (isdev_disk (src_path)) + { + dev = *dev_disk_dev; + *flags = 0; + strcpy (dst, src_path); + goto out; + } if (isproc (src_path)) { debug_printf ("isproc (%s)", src_path); diff --git a/winsup/cygwin/msys2_path_conv.cc b/winsup/cygwin/msys2_path_conv.cc index 1c60bf375c..0dc086aae9 100644 --- a/winsup/cygwin/msys2_path_conv.cc +++ b/winsup/cygwin/msys2_path_conv.cc @@ -341,6 +341,16 @@ path_type find_path_start_and_type(const char** src, int recurse, const char* en if (*it == '\0' || it == end) return NONE; + /* + * Skip path mangling when environment indicates it. + */ + const char *no_pathconv = getenv ("MSYS_NO_PATHCONV"); + + if (no_pathconv) { + *src = end; + return NONE; + } + /* Let's not convert ~/.file to ~C:\msys64\.file */ if (*it == '~') { skip_p2w: @@ -348,14 +358,6 @@ path_type find_path_start_and_type(const char** src, int recurse, const char* en return NONE; } - /* - * Skip path mangling when environment indicates it. - */ - const char *no_pathconv = getenv ("MSYS_NO_PATHCONV"); - - if (no_pathconv) - goto skip_p2w; - /* * Prevent Git's :file.txt and :/message syntax from beeing modified. */ diff --git a/winsup/cygwin/net.cc b/winsup/cygwin/net.cc index 8840d5ead3..737e494f8f 100644 --- a/winsup/cygwin/net.cc +++ b/winsup/cygwin/net.cc @@ -1912,7 +1912,7 @@ freeifaddrs (struct ifaddrs *ifp) } int -get_ifconf (struct ifconf *ifc, int what) +get_ifconf (struct ifconf *ifc, unsigned int what) { __try { @@ -2001,13 +2001,40 @@ get_ifconf (struct ifconf *ifc, int what) extern "C" unsigned cygwin_if_nametoindex (const char *name) { - return (unsigned) ::if_nametoindex (name); + PIP_ADAPTER_ADDRESSES pa0 = NULL, pap; + if (get_adapters_addresses (&pa0, AF_UNSPEC)) + for (pap = pa0; pap; pap = pap->Next) + if (strcmp (name, pap->AdapterName) == 0) + { + free (pa0); + return pap->IfIndex; + } + if (pa0) + free (pa0); + return 0; } extern "C" char * cygwin_if_indextoname (unsigned ifindex, char *ifname) { - return ::if_indextoname (ifindex, ifname); + if (ifindex == 0 || ifname == NULL) + { + set_errno (ENXIO); + return NULL; + } + PIP_ADAPTER_ADDRESSES pa0 = NULL, pap; + if (get_adapters_addresses (&pa0, AF_UNSPEC)) + for (pap = pa0; pap; pap = pap->Next) + if (ifindex == pap->IfIndex) + { + strcpy (ifname, pap->AdapterName); + free (pa0); + return ifname; + } + if (pa0) + free (pa0); + set_errno (ENXIO); + return NULL; } extern "C" struct if_nameindex * diff --git a/winsup/cygwin/nlsfuncs.cc b/winsup/cygwin/nlsfuncs.cc index f34e0b229c..57af967c1a 100644 --- a/winsup/cygwin/nlsfuncs.cc +++ b/winsup/cygwin/nlsfuncs.cc @@ -11,139 +11,220 @@ details. */ #include #include #include +#include #include "path.h" #include "fhandler.h" #include "dtable.h" #include "cygheap.h" #include "tls_pbuf.h" +#include "collate.h" #include "lc_msg.h" #include "lc_era.h" +#include "lc_collelem.h" +#include "lc_def_codesets.h" #define _LC(x) &lc_##x##_ptr,lc_##x##_end-lc_##x##_ptr #define getlocaleinfo(category,type) \ - __getlocaleinfo(lcid,(type),_LC(category)) + __getlocaleinfo(win_locale,(type),_LC(category)) +#define getlocaleint(type) \ + __getlocaleint(win_locale,(type)) #define setlocaleinfo(category,val) \ __setlocaleinfo(_LC(category),(val)) #define eval_datetimefmt(type,flags) \ - __eval_datetimefmt(lcid,(type),(flags),&lc_time_ptr,\ + __eval_datetimefmt(win_locale,(type),(flags),&lc_time_ptr,\ lc_time_end-lc_time_ptr) #define charfromwchar(category,in) \ __charfromwchar (_##category##_locale->in,_LC(category),f_wctomb) -#define has_modifier(x) ((x)[0] && !strcmp (modifier, (x))) +/* Check for @cjk* modifier. Try to be as fast as possible */ +#define __is_cjk_modifier(_in, _cmp, _L) ({ \ + _in[1] == 'c' \ + && _in[2] == 'j' \ + && _in[3] == 'k'\ + && (_cmp (_in + 4, _L##"narrow") == 0 \ + || _cmp (_in + 4, _L##"wide") == 0 \ + || _cmp (_in + 4, _L##"single") == 0); \ +}) +#define is_cjk_modifier(_in) __is_cjk_modifier(_in, strcmp, ) +#define w_is_cjk_modifier(_in) __is_cjk_modifier(_in, wcscmp, L) + +/* ResolveLocaleName does not what we want. It converts anything which + vaguely resembles a locale into some other locale it supports. Bad + examples are: "en-XY" gets converted to "en-US", and worse, "ff-BF" gets + converted to "ff-Latn-SN", even though "ff-Adlm-BF" exists! Useless. + To check if a locale is supported, we have to enumerate all valid + Windows locales, and return the match, even if the locale in Windows + requires a script. */ +struct res_loc_t { + const wchar_t *search_iso639; + const wchar_t *search_iso3166; + wchar_t *resolved_locale; + int res_len; +}; -static char last_locale[ENCODING_LEN + 1]; -static LCID last_lcid; +static BOOL +resolve_locale_proc (LPWSTR win_locale, DWORD info, LPARAM param) +{ + res_loc_t *loc = (res_loc_t *) param; + wchar_t *iso639, *iso639_end; + wchar_t *iso3166; + + iso639 = win_locale; + iso639_end = wcschr (iso639, L'-'); + if (!iso639_end) + return TRUE; + if (wcsncmp (loc->search_iso639, iso639, iso639_end - iso639) != 0) + return TRUE; + iso3166 = ++iso639_end; + /* Territory is all upper case */ + while (!iswupper (iso3166[0]) || !iswupper (iso3166[1])) + { + iso3166 = wcschr (iso3166, L'-'); + if (!iso3166) + return TRUE; + ++iso3166; + } + if (wcsncmp (loc->search_iso3166, iso3166, wcslen (loc->search_iso3166))) + return TRUE; + wcsncat (loc->resolved_locale, win_locale, loc->res_len - 1); + return FALSE; +} + +static int +resolve_locale_name (const wchar_t *search, wchar_t *result, int rlen) +{ + res_loc_t loc; + + loc.search_iso639 = search; + loc.search_iso3166 = wcschr (search, L'-') + 1; + loc.resolved_locale = result; + loc.res_len = rlen; + result[0] = L'\0'; + EnumSystemLocalesEx (resolve_locale_proc, + LOCALE_WINDOWS | LOCALE_SUPPLEMENTAL, + (LPARAM) &loc, NULL); + return wcslen (result); +} -/* Fetch LCID from POSIX locale specifier. +/* Fetch Windows RFC 5646 locale from POSIX locale specifier. Return values: -1: Invalid locale 0: C or POSIX - >0: LCID + 1: valid locale */ -static LCID -__get_lcid_from_locale (const char *name) +static int +__get_rfc5646_from_locale (const char *name, wchar_t *win_locale) { - char locale[ENCODING_LEN + 1]; - char *c; - LCID lcid; - - /* Speed up reusing the same locale as before, for instance in LC_ALL case. */ - if (!strcmp (name, last_locale)) - { - debug_printf ("LCID=%04y", last_lcid); - return last_lcid; - } - stpcpy (last_locale, name); - stpcpy (locale, name); - /* Store modifier for later use. */ - const char *modifier = strchr (last_locale, '@') ? : ""; + wchar_t wlocale[ENCODING_LEN + 1] = { 0 }; + wchar_t locale[ENCODING_LEN + 1]; + wchar_t *c; + + win_locale[0] = L'\0'; + mbstowcs (locale, name, ENCODING_LEN + 1); + /* Remember modifier for later use. */ + const char *modifier = strchr (name, '@') ? : ""; /* Drop charset and modifier */ - c = strchr (locale, '.'); + c = wcschr (locale, L'.'); if (!c) - c = strchr (locale, '@'); + c = wcschr (locale, L'@'); if (c) - *c = '\0'; + *c = L'\0'; /* "POSIX" already converted to "C" in loadlocale. */ - if (!strcmp (locale, "C")) - return last_lcid = 0; - c = strchr (locale, '_'); + if (!wcscmp (locale, L"C")) + return 0; + c = wcschr (locale, '_'); if (!c) - return last_lcid = (LCID) -1; - - wchar_t wlocale[ENCODING_LEN + 1]; + { + /* try if the locale can be resolved from the language tag + fix up Linux-only locale first */ + if (!wcscmp (locale, L"ber")) + wcscpy (locale, L"tzm"); + if (ResolveLocaleName (locale, wlocale, ENCODING_LEN + 1) <= 1) + { + set_errno (ENOENT); + return -1; + } + wcpcpy (win_locale, wlocale); + return 1; + } - /* Convert to RFC 4646 syntax. */ + /* Convert to RFC 5646 syntax. */ *c = '-'; - mbstowcs (wlocale, locale, ENCODING_LEN + 1); - lcid = LocaleNameToLCID (wlocale, 0); - /* Bug on Windows 10: LocaleNameToLCID returns LOCALE_CUSTOM_UNSPECIFIED - for unknown locales. */ - if (lcid == 0 || lcid == LOCALE_CUSTOM_UNSPECIFIED) + /* Override a few locales with a different default script as used + on Linux. Linux also supports no_NO which is equivalent to nb_NO, + but Windows can resolve that nicely. Also, "tzm" and "zgh" are + subsumed under "ber" on Linux. */ + struct { + const wchar_t *loc; + const wchar_t *wloc; + } override_locale[] = { + { L"ber-DZ" , L"tzm-Latn-DZ" }, + { L"ber-MA" , L"zgh-Tfng-MA" }, + { L"mn-CN" , L"mn-Mong-CN" }, + { L"mn-MN" , L"mn-Mong-MN" }, + { L"pa-PK" , L"pa-Arab-PK" }, + { L"sd-IN" , L"sd-Deva-IN" }, + { L"sr-BA" , L"sr-Cyrl-BA" }, + { L"sr-ME" , L"sr-Cyrl-ME" }, + { L"sr-RS" , L"sr-Cyrl-RS" }, + { L"sr-XK" , L"sr-Cyrl-XK" }, + { L"tzm-MA", L"tzm-Tfng-MA" }, + { NULL , NULL } + }; + + for (int i = 0; override_locale[i].loc + && override_locale[i].loc[0] <= locale[0]; ++i) { - /* Unfortunately there are a couple of locales for which no form - without a Script part per RFC 4646 exists. - Linux also supports no_NO which is equivalent to nb_NO. */ - struct { - const char *loc; - const wchar_t *wloc; - } sc_only_locale[] = { - { "az-AZ" , L"az-Latn-AZ" }, - { "bs-BA" , L"bs-Latn-BA" }, - { "chr-US", L"chr-Cher-US"}, - { "ff-SN" , L"ff-Latn-SN" }, - { "ha-NG" , L"ha-Latn-NG" }, - { "iu-CA" , L"iu-Latn-CA" }, - { "ks-IN" , L"ks-Arab-IN" }, - { "ku-IQ" , L"ku-Arab-IQ" }, - { "mn-CN" , L"mn-Mong-CN" }, - { "mn-MN" , L"mn-Mong-MN" }, - { "no-NO" , L"nb-NO" }, - { "pa-PK" , L"pa-Arab-PK" }, - { "quc-GT", L"quc-Latn-GT" }, - { "sd-PK" , L"sd-Arab-PK" }, - { "sd-IN" , L"sd-Deva-IN" }, - { "sr-BA" , L"sr-Cyrl-BA" }, - { "sr-ME" , L"sr-Cyrl-ME" }, - { "sr-RS" , L"sr-Cyrl-RS" }, - { "tg-TJ" , L"tg-Cyrl-TJ" }, - { "tzm-DZ", L"tzm-Latn-DZ" }, - { "tzm-MA", L"tzm-Tfng-MA" }, - { "uz-UZ" , L"uz-Latn-UZ" }, - { NULL , NULL } - }; - for (int i = 0; sc_only_locale[i].loc - && sc_only_locale[i].loc[0] <= locale[0]; ++i) - if (!strcmp (locale, sc_only_locale[i].loc)) - { - lcid = LocaleNameToLCID (sc_only_locale[i].wloc, 0); - if (!strncmp (locale, "sr-", 3)) - { - /* "@latin" modifier for the sr_XY locales changes - collation behaviour so lcid should accommodate that - by being set to the Latin sublang. */ - if (lcid != 0 && lcid != LOCALE_CUSTOM_UNSPECIFIED - && has_modifier ("@latin")) - lcid = MAKELANGID (lcid & 0x3ff, (lcid >> 10) - 1); - } - else if (!strncmp (locale, "uz-", 3)) - { - /* Equivalent for "@cyrillic" modifier in uz_UZ locale */ - if (lcid != 0 && lcid != LOCALE_CUSTOM_UNSPECIFIED - && has_modifier ("@cyrillic")) - lcid = MAKELANGID (lcid & 0x3ff, (lcid >> 10) + 1); - } - break; - } + if (!wcscmp (locale, override_locale[i].loc)) + { + wcscpy (wlocale, override_locale[i].wloc); + break; + } + } + /* If resolve_locale_name returns with error, or if it returns a + locale other than the input locale, we don't support this locale. */ + if (!wlocale[0] + && !resolve_locale_name (locale, wlocale, ENCODING_LEN + 1)) + { + set_errno (ENOENT); + return -1; + } + + /* Check for modifiers changing the script */ + const wchar_t *iso15924_script[] = { L"Latn-", L"Cyrl-", L"Deva-", L"Adlm-" }; + int idx = -1; + + if (modifier[0]) + { + if (!strcmp (++modifier, "latin")) + idx = 0; + else if (!strcmp (modifier, "cyrillic")) + idx = 1; + else if (!strcmp (modifier, "devanagari")) + idx = 2; + else if (!strcmp (modifier, "adlam")) + idx = 3; + } + if (idx >= 0) + { + wchar_t *iso3166 = wcschr (wlocale, L'-') + 1; + wchar_t *wlp; + + /* Copy iso639 language part including dash */ + wlp = wcpncpy (win_locale, wlocale, iso3166 - wlocale); + /* Concat new iso15924 script */ + wlp = wcpcpy (wlp, iso15924_script[idx]); + /* Concat iso3166 territory. Skip script, if already in the locale */ + wchar_t *skip_script = wcschr (iso3166, L'-'); + if (skip_script) + iso3166 = skip_script + 1; + wcpcpy (wlp, iso3166); } - if (lcid && lcid != LOCALE_CUSTOM_UNSPECIFIED) - last_lcid = lcid; else - last_lcid = (LCID) -1; - debug_printf ("LCID=%04y", last_lcid); - return last_lcid; + wcpcpy (win_locale, wlocale); + return 1; } /* Never returns -1. Just skips invalid chars instead. Only if return_invalid @@ -238,8 +319,7 @@ locale_cmp (const void *a, const void *b) return strcmp (*la, *lb); } -/* Helper function to workaround reallocs which move blocks even if they shrink. - Cygwin's realloc is not doing this, but tcsh's, for instance. All lc_foo +/* Helper function to adjust pointers inside an lc_foo buffer. All lc_foo structures consist entirely of pointers so they are practically pointer arrays. What we do here is just treat the lc_foo pointers as char ** and rebase all char * pointers within, up to the given size of the structure. */ @@ -253,8 +333,30 @@ rebase_locale_buf (const void *ptrv, const void *ptrvend, const char *newbase, *ptrs += newbase - oldbase; } +/* Helper function to shrink an lc_foo buffer, adjusting pointers */ +static int +shrink_locale_buf (const void *ptrv, const void *ptrvend, + char *oldbase, const char *oldend, + char **result) +{ + size_t minsize = oldend - oldbase; + char *tmp = (char *) malloc (minsize); + if (!tmp) + { + free (oldbase); + return -1; + } + + memcpy (tmp, oldbase, minsize); + rebase_locale_buf (ptrv, ptrvend, tmp, oldbase, oldend); + free (oldbase); + + *result = tmp; + return 1; +} + static wchar_t * -__getlocaleinfo (LCID lcid, LCTYPE type, char **ptr, size_t size) +__getlocaleinfo (wchar_t *loc, LCTYPE type, char **ptr, size_t size) { size_t num; wchar_t *ret; @@ -262,7 +364,7 @@ __getlocaleinfo (LCID lcid, LCTYPE type, char **ptr, size_t size) if ((uintptr_t) *ptr % 1) ++*ptr; ret = (wchar_t *) *ptr; - num = GetLocaleInfoW (lcid, type, ret, size / sizeof (wchar_t)); + num = GetLocaleInfoEx (loc, type, ret, size / sizeof (wchar_t)); *ptr = (char *) (ret + num); return ret; } @@ -293,10 +395,10 @@ __charfromwchar (const wchar_t *in, char **ptr, size_t size, wctomb_p f_wctomb) } static UINT -getlocaleint (LCID lcid, LCTYPE type) +__getlocaleint (wchar_t *loc, LCTYPE type) { UINT val; - return GetLocaleInfoW (lcid, type | LOCALE_RETURN_NUMBER, (PWCHAR) &val, + return GetLocaleInfoEx (loc, type | LOCALE_RETURN_NUMBER, (PWCHAR) &val, sizeof val) ? val : 0; } @@ -307,7 +409,7 @@ enum dt_flags { }; static wchar_t * -__eval_datetimefmt (LCID lcid, LCTYPE type, dt_flags flags, char **ptr, +__eval_datetimefmt (wchar_t *loc, LCTYPE type, dt_flags flags, char **ptr, size_t size) { wchar_t buf[80]; @@ -324,7 +426,7 @@ __eval_datetimefmt (LCID lcid, LCTYPE type, dt_flags flags, char **ptr, ++*ptr; wchar_t *ret = (wchar_t *) *ptr; wchar_t *p = (wchar_t *) *ptr; - GetLocaleInfoW (lcid, type, buf, 80); + GetLocaleInfoEx (loc, type, buf, 80); for (wchar_t *fmt = buf; *fmt; ++fmt) switch (fc = *fmt) { @@ -387,20 +489,21 @@ __eval_datetimefmt (LCID lcid, LCTYPE type, dt_flags flags, char **ptr, /* Convert Windows grouping format into POSIX grouping format. */ static char * -conv_grouping (LCID lcid, LCTYPE type, char **lc_ptr) +conv_grouping (wchar_t *loc, LCTYPE type, char **lc_ptr) { - char buf[10]; /* Per MSDN max size of LOCALE_SGROUPING element incl. NUL */ + wchar_t buf[10]; /* Per MSDN max size of LOCALE_SGROUPING element incl. NUL */ bool repeat = false; char *ptr = *lc_ptr; char *ret = ptr; - GetLocaleInfoA (lcid, type, buf, 10); - /* Convert Windows grouping format into POSIX grouping format. */ - for (char *c = buf; *c; ++c) + GetLocaleInfoEx (loc, type, buf, 10); + /* Convert Windows grouping format into POSIX grouping format. Note that + only ASCII chars are used in the grouping format. */ + for (wchar_t *c = buf; *c; ++c) { - if (*c < '0' || *c > '9') + if (*c < L'0' || *c > L'9') continue; - char val = *c - '0'; + char val = *c - L'0'; if (!val) { repeat = true; @@ -426,10 +529,11 @@ __set_lc_time_from_win (const char *name, char **lc_time_buf, wctomb_p f_wctomb, const char *charset) { - LCID lcid = __get_lcid_from_locale (name); - if (lcid == (LCID) -1) - return lcid; - if (!lcid && !strcmp (charset, "ASCII")) + wchar_t win_locale[ENCODING_LEN + 1]; + int ret = __get_rfc5646_from_locale (name, win_locale); + if (ret < 0) + return ret; + if (!ret && !strcmp (charset, "ASCII")) return 0; # define MAX_TIME_BUFFER_SIZE 4096 @@ -442,48 +546,53 @@ __set_lc_time_from_win (const char *name, char *lc_time_ptr = new_lc_time_buf; /* C.foo is just a copy of "C" with fixed charset. */ - if (!lcid) + if (!ret) memcpy (_time_locale, _C_time_locale, sizeof (struct lc_time_T)); /* codeset */ _time_locale->codeset = lc_time_ptr; lc_time_ptr = stpcpy (lc_time_ptr, charset) + 1; - if (lcid) + if (ret) { char locale[ENCODING_LEN + 1]; strcpy (locale, name); - /* Removes the charset from the locale and attach the modifer to the + /* Removes the charset from the locale and attach the modifier to the language_TERRITORY part. */ char *c = strchr (locale, '.'); if (c) { *c = '\0'; char *c2 = strchr (c + 1, '@'); - /* Ignore @cjknarrow modifier since it's a very personal thing between - Cygwin and newlib... */ - if (c2 && strcmp (c2, "@cjknarrow")) + /* Ignore @cjk* modifiers, they are newlib specials. */ + if (c2 && !is_cjk_modifier (c2)) memmove (c, c2, strlen (c2) + 1); } /* Now search in the alphabetically order lc_era array for the locale. */ lc_era_t locale_key = { locale, NULL, NULL, NULL, NULL, NULL , NULL, NULL, NULL, NULL, NULL }; - lc_era_t *era = (lc_era_t *) bsearch ((void *) &locale_key, (void *) lc_era, + lc_era_t *era = (lc_era_t *) bsearch ((void *) &locale_key, + (void *) lc_era, sizeof lc_era / sizeof *lc_era, sizeof *lc_era, locale_cmp); /* mon */ - /* Windows has a bug in Japanese and Korean locales. In these - locales, strings returned for LOCALE_SABBREVMONTHNAME* are missing - the suffix representing a month. Unfortunately this is not - documented in English. A Japanese article describing the problem - is http://msdn.microsoft.com/ja-jp/library/cc422084.aspx + /* Windows has a bug in "ja-JP" and "ko-KR" (but not in "ko-KP"). + In these locales, strings returned for LOCALE_SABBREVMONTHNAME* + are missing the suffix representing a month. + + A Japanese article describing the problem was + https://msdn.microsoft.com/ja-jp/library/cc422084.aspx, which is + only available via + https://web.archive.org/web/20110922195821/https://msdn.microsoft.com/ja-jp/library/cc422084.aspx + these days. Testing indicates that this problem is still present + in Windows 11. + The workaround is to use LOCALE_SMONTHNAME* in these locales, even for the abbreviated month name. */ - const LCTYPE mon_base = - lcid == MAKELANGID (LANG_JAPANESE, SUBLANG_JAPANESE_JAPAN) - || lcid == MAKELANGID (LANG_KOREAN, SUBLANG_KOREAN) - ? LOCALE_SMONTHNAME1 : LOCALE_SABBREVMONTHNAME1; + const LCTYPE mon_base = !wcscmp (win_locale, L"ja-JP") + || !wcscmp (win_locale, L"ko-KR") + ? LOCALE_SMONTHNAME1 : LOCALE_SABBREVMONTHNAME1; for (int i = 0; i < 12; ++i) { _time_locale->wmon[i] = getlocaleinfo (time, mon_base + i); @@ -492,7 +601,8 @@ __set_lc_time_from_win (const char *name, /* month and alt_month */ for (int i = 0; i < 12; ++i) { - _time_locale->wmonth[i] = getlocaleinfo (time, LOCALE_SMONTHNAME1 + i); + _time_locale->wmonth[i] = getlocaleinfo (time, + LOCALE_SMONTHNAME1 + i); _time_locale->month[i] = _time_locale->alt_month[i] = charfromwchar (time, wmonth[i]); } @@ -567,7 +677,7 @@ __set_lc_time_from_win (const char *name, /* md */ { wchar_t buf[80]; - GetLocaleInfoW (lcid, LOCALE_IDATE, buf, 80); + GetLocaleInfoEx (win_locale, LOCALE_IDATE, buf, 80); _time_locale->md_order = (const char *) lc_time_ptr; lc_time_ptr = stpcpy (lc_time_ptr, *buf == L'1' ? "dm" : "md") + 1; } @@ -598,19 +708,20 @@ __set_lc_time_from_win (const char *name, len += (wcslen (era->era_t_fmt) + 1) * sizeof (wchar_t); len += (wcslen (era->alt_digits) + 1) * sizeof (wchar_t); - /* Make sure data fits into the buffer */ + /* If necessary, grow the buffer to ensure data fits into it */ if (lc_time_ptr + len > lc_time_end) { len = lc_time_ptr + len - new_lc_time_buf; - char *tmp = (char *) realloc (new_lc_time_buf, len); + char *tmp = (char *) malloc (len); if (!tmp) era = NULL; else { - if (tmp != new_lc_time_buf) - rebase_locale_buf (_time_locale, _time_locale + 1, tmp, - new_lc_time_buf, lc_time_ptr); + memcpy (tmp, new_lc_time_buf, MAX_TIME_BUFFER_SIZE); + rebase_locale_buf (_time_locale, _time_locale + 1, tmp, + new_lc_time_buf, lc_time_ptr); lc_time_ptr = tmp + (lc_time_ptr - new_lc_time_buf); + free(new_lc_time_buf); new_lc_time_buf = tmp; lc_time_end = new_lc_time_buf + len; } @@ -663,17 +774,9 @@ __set_lc_time_from_win (const char *name, } } - char *tmp = (char *) realloc (new_lc_time_buf, lc_time_ptr - new_lc_time_buf); - if (!tmp) - { - free (new_lc_time_buf); - return -1; - } - if (tmp != new_lc_time_buf) - rebase_locale_buf (_time_locale, _time_locale + 1, tmp, - new_lc_time_buf, lc_time_ptr); - *lc_time_buf = tmp; - return 1; + return shrink_locale_buf(_time_locale, _time_locale + 1, + new_lc_time_buf, lc_time_ptr, + lc_time_buf); } /* Called from newlib's setlocale() via __ctype_load_locale() if category @@ -687,10 +790,11 @@ __set_lc_ctype_from_win (const char *name, char **lc_ctype_buf, wctomb_p f_wctomb, const char *charset, int mb_cur_max) { - LCID lcid = __get_lcid_from_locale (name); - if (lcid == (LCID) -1) - return lcid; - if (!lcid && !strcmp (charset, "ASCII")) + wchar_t win_locale[ENCODING_LEN + 1]; + int ret = __get_rfc5646_from_locale (name, win_locale); + if (ret < 0) + return ret; + if (!ret && !strcmp (charset, "ASCII")) return 0; # define MAX_CTYPE_BUFFER_SIZE 256 @@ -701,7 +805,7 @@ __set_lc_ctype_from_win (const char *name, return -1; char *lc_ctype_ptr = new_lc_ctype_buf; /* C.foo is just a copy of "C" with fixed charset. */ - if (!lcid) + if (!ret) memcpy (_ctype_locale, _C_ctype_locale, sizeof (struct lc_ctype_T)); /* codeset */ _ctype_locale->codeset = lc_ctype_ptr; @@ -710,11 +814,11 @@ __set_lc_ctype_from_win (const char *name, _ctype_locale->mb_cur_max = lc_ctype_ptr; *lc_ctype_ptr++ = mb_cur_max; *lc_ctype_ptr++ = '\0'; - if (lcid) + if (ret) { /* outdigits and woutdigits */ wchar_t digits[11]; - GetLocaleInfoW (lcid, LOCALE_SNATIVEDIGITS, digits, 11); + GetLocaleInfoEx (win_locale, LOCALE_SNATIVEDIGITS, digits, 11); for (int i = 0; i <= 9; ++i) { mbstate_t state; @@ -734,18 +838,9 @@ __set_lc_ctype_from_win (const char *name, } } - char *tmp = (char *) realloc (new_lc_ctype_buf, - lc_ctype_ptr - new_lc_ctype_buf); - if (!tmp) - { - free (new_lc_ctype_buf); - return -1; - } - if (tmp != new_lc_ctype_buf) - rebase_locale_buf (_ctype_locale, _ctype_locale + 1, tmp, - new_lc_ctype_buf, lc_ctype_ptr); - *lc_ctype_buf = tmp; - return 1; + return shrink_locale_buf(_ctype_locale, _ctype_locale + 1, + new_lc_ctype_buf, lc_ctype_ptr, + lc_ctype_buf); } /* Called from newlib's setlocale() via __numeric_load_locale() if category @@ -759,10 +854,11 @@ __set_lc_numeric_from_win (const char *name, char **lc_numeric_buf, wctomb_p f_wctomb, const char *charset) { - LCID lcid = __get_lcid_from_locale (name); - if (lcid == (LCID) -1) - return lcid; - if (!lcid && !strcmp (charset, "ASCII")) + wchar_t win_locale[ENCODING_LEN + 1]; + int ret = __get_rfc5646_from_locale (name, win_locale); + if (ret < 0) + return ret; + if (!ret && !strcmp (charset, "ASCII")) return 0; # define MAX_NUMERIC_BUFFER_SIZE 256 @@ -774,20 +870,20 @@ __set_lc_numeric_from_win (const char *name, return -1; char *lc_numeric_ptr = new_lc_numeric_buf; /* C.foo is just a copy of "C" with fixed charset. */ - if (!lcid) + if (!ret) memcpy (_numeric_locale, _C_numeric_locale, sizeof (struct lc_numeric_T)); else { /* decimal_point and thousands_sep */ - if (lcid == 0x0429) /* fa_IR. Windows decimal_point is slash, - correct is dot */ + /* fa_IR. Windows decimal_point is slash, correct is dot */ + if (!wcscmp (win_locale, L"fa-IR")) { _numeric_locale->wdecimal_point = setlocaleinfo (numeric, L'.'); _numeric_locale->wthousands_sep = setlocaleinfo (numeric, L','); } - else if (lcid == 0x0463) /* ps_AF. Windows decimal_point is dot, - thousands_sep is comma, correct are - arabic separators. */ + /* ps_AF. Windows decimal_point is dot, thousands_sep is comma, + correct are arabic separators. */ + else if (!wcscmp (win_locale, L"ps-AF")) { _numeric_locale->wdecimal_point = setlocaleinfo (numeric, 0x066b); _numeric_locale->wthousands_sep = setlocaleinfo (numeric, 0x066c); @@ -802,25 +898,16 @@ __set_lc_numeric_from_win (const char *name, _numeric_locale->decimal_point = charfromwchar (numeric, wdecimal_point); _numeric_locale->thousands_sep = charfromwchar (numeric, wthousands_sep); /* grouping */ - _numeric_locale->grouping = conv_grouping (lcid, LOCALE_SGROUPING, + _numeric_locale->grouping = conv_grouping (win_locale, LOCALE_SGROUPING, &lc_numeric_ptr); } /* codeset */ _numeric_locale->codeset = lc_numeric_ptr; lc_numeric_ptr = stpcpy (lc_numeric_ptr, charset) + 1; - char *tmp = (char *) realloc (new_lc_numeric_buf, - lc_numeric_ptr - new_lc_numeric_buf); - if (!tmp) - { - free (new_lc_numeric_buf); - return -1; - } - if (tmp != new_lc_numeric_buf) - rebase_locale_buf (_numeric_locale, _numeric_locale + 1, tmp, - new_lc_numeric_buf, lc_numeric_ptr); - *lc_numeric_buf = tmp; - return 1; + return shrink_locale_buf(_numeric_locale, _numeric_locale + 1, + new_lc_numeric_buf, lc_numeric_ptr, + lc_numeric_buf); } /* Called from newlib's setlocale() via __monetary_load_locale() if category @@ -834,10 +921,11 @@ __set_lc_monetary_from_win (const char *name, char **lc_monetary_buf, wctomb_p f_wctomb, const char *charset) { - LCID lcid = __get_lcid_from_locale (name); - if (lcid == (LCID) -1) - return lcid; - if (!lcid && !strcmp (charset, "ASCII")) + wchar_t win_locale[ENCODING_LEN + 1]; + int ret = __get_rfc5646_from_locale (name, win_locale); + if (ret < 0) + return ret; + if (!ret && !strcmp (charset, "ASCII")) return 0; # define MAX_MONETARY_BUFFER_SIZE 512 @@ -849,7 +937,7 @@ __set_lc_monetary_from_win (const char *name, return -1; char *lc_monetary_ptr = new_lc_monetary_buf; /* C.foo is just a copy of "C" with fixed charset. */ - if (!lcid) + if (!ret) memcpy (_monetary_locale, _C_monetary_locale, sizeof (struct lc_monetary_T)); else { @@ -878,11 +966,11 @@ __set_lc_monetary_from_win (const char *name, _monetary_locale->currency_symbol = charfromwchar (monetary, wcurrency_symbol); /* mon_decimal_point and mon_thousands_sep */ - if (lcid == 0x0429 || lcid == 0x0463) /* fa_IR or ps_AF. Windows - mon_decimal_point is slash - and comma, mon_thousands_sep - is comma and dot, correct - are arabic separators. */ + /* fa_IR or ps_AF. Windows mon_decimal_point is slash and comma, + mon_thousands_sep is comma and dot, correct + are arabic separators. */ + if (!wcscmp (win_locale, L"fa-IR") + || !wcscmp (win_locale, L"ps-AF")) { _monetary_locale->wmon_decimal_point = setlocaleinfo (monetary, 0x066b); @@ -901,7 +989,8 @@ __set_lc_monetary_from_win (const char *name, _monetary_locale->mon_thousands_sep = charfromwchar (monetary, wmon_thousands_sep); /* mon_grouping */ - _monetary_locale->mon_grouping = conv_grouping (lcid, LOCALE_SMONGROUPING, + _monetary_locale->mon_grouping = conv_grouping (win_locale, + LOCALE_SMONGROUPING, &lc_monetary_ptr); /* positive_sign */ _monetary_locale->wpositive_sign = getlocaleinfo (monetary, @@ -912,33 +1001,33 @@ __set_lc_monetary_from_win (const char *name, LOCALE_SNEGATIVESIGN); _monetary_locale->negative_sign = charfromwchar (monetary, wnegative_sign); /* int_frac_digits */ - *lc_monetary_ptr = (char) getlocaleint (lcid, LOCALE_IINTLCURRDIGITS); + *lc_monetary_ptr = (char) getlocaleint (LOCALE_IINTLCURRDIGITS); _monetary_locale->int_frac_digits = lc_monetary_ptr++; /* frac_digits */ - *lc_monetary_ptr = (char) getlocaleint (lcid, LOCALE_ICURRDIGITS); + *lc_monetary_ptr = (char) getlocaleint (LOCALE_ICURRDIGITS); _monetary_locale->frac_digits = lc_monetary_ptr++; /* p_cs_precedes and int_p_cs_precedes */ - *lc_monetary_ptr = (char) getlocaleint (lcid, LOCALE_IPOSSYMPRECEDES); + *lc_monetary_ptr = (char) getlocaleint (LOCALE_IPOSSYMPRECEDES); _monetary_locale->p_cs_precedes = _monetary_locale->int_p_cs_precedes = lc_monetary_ptr++; /* p_sep_by_space and int_p_sep_by_space */ - *lc_monetary_ptr = (char) getlocaleint (lcid, LOCALE_IPOSSEPBYSPACE); + *lc_monetary_ptr = (char) getlocaleint (LOCALE_IPOSSEPBYSPACE); _monetary_locale->p_sep_by_space = _monetary_locale->int_p_sep_by_space = lc_monetary_ptr++; /* n_cs_precedes and int_n_cs_precedes */ - *lc_monetary_ptr = (char) getlocaleint (lcid, LOCALE_INEGSYMPRECEDES); + *lc_monetary_ptr = (char) getlocaleint (LOCALE_INEGSYMPRECEDES); _monetary_locale->n_cs_precedes = _monetary_locale->int_n_cs_precedes = lc_monetary_ptr++; /* n_sep_by_space and int_n_sep_by_space */ - *lc_monetary_ptr = (char) getlocaleint (lcid, LOCALE_INEGSEPBYSPACE); + *lc_monetary_ptr = (char) getlocaleint (LOCALE_INEGSEPBYSPACE); _monetary_locale->n_sep_by_space = _monetary_locale->int_n_sep_by_space = lc_monetary_ptr++; /* p_sign_posn and int_p_sign_posn */ - *lc_monetary_ptr = (char) getlocaleint (lcid, LOCALE_IPOSSIGNPOSN); + *lc_monetary_ptr = (char) getlocaleint (LOCALE_IPOSSIGNPOSN); _monetary_locale->p_sign_posn = _monetary_locale->int_p_sign_posn = lc_monetary_ptr++; /* n_sign_posn and int_n_sign_posn */ - *lc_monetary_ptr = (char) getlocaleint (lcid, LOCALE_INEGSIGNPOSN); + *lc_monetary_ptr = (char) getlocaleint (LOCALE_INEGSIGNPOSN); _monetary_locale->n_sign_posn = _monetary_locale->int_n_sign_posn = lc_monetary_ptr++; } @@ -946,18 +1035,9 @@ __set_lc_monetary_from_win (const char *name, _monetary_locale->codeset = lc_monetary_ptr; lc_monetary_ptr = stpcpy (lc_monetary_ptr, charset) + 1; - char *tmp = (char *) realloc (new_lc_monetary_buf, - lc_monetary_ptr - new_lc_monetary_buf); - if (!tmp) - { - free (new_lc_monetary_buf); - return -1; - } - if (tmp != new_lc_monetary_buf) - rebase_locale_buf (_monetary_locale, _monetary_locale + 1, tmp, - new_lc_monetary_buf, lc_monetary_ptr); - *lc_monetary_buf = tmp; - return 1; + return shrink_locale_buf(_monetary_locale, _monetary_locale + 1, + new_lc_monetary_buf, lc_monetary_ptr, + lc_monetary_buf); } extern "C" int @@ -967,10 +1047,11 @@ __set_lc_messages_from_win (const char *name, char **lc_messages_buf, wctomb_p f_wctomb, const char *charset) { - LCID lcid = __get_lcid_from_locale (name); - if (lcid == (LCID) -1) - return lcid; - if (!lcid && !strcmp (charset, "ASCII")) + wchar_t win_locale[ENCODING_LEN + 1]; + int ret = __get_rfc5646_from_locale (name, win_locale); + if (ret < 0) + return ret; + if (!ret && !strcmp (charset, "ASCII")) return 0; char locale[ENCODING_LEN + 1]; @@ -978,7 +1059,7 @@ __set_lc_messages_from_win (const char *name, lc_msg_t *msg = NULL; /* C.foo is just a copy of "C" with fixed charset. */ - if (!lcid) + if (!ret) memcpy (_messages_locale, _C_messages_locale, sizeof (struct lc_messages_T)); else { @@ -990,9 +1071,8 @@ __set_lc_messages_from_win (const char *name, { *c = '\0'; c2 = strchr (c + 1, '@'); - /* Ignore @cjknarrow modifier since it's a very personal thing between - Cygwin and newlib... */ - if (c2 && strcmp (c2, "@cjknarrow")) + /* Ignore @cjk* modifiers, they are newlib specials. */ + if (c2 && !is_cjk_modifier (c2)) memmove (c, c2, strlen (c2) + 1); } /* Now search in the alphabetically order lc_msg array for the @@ -1009,7 +1089,7 @@ __set_lc_messages_from_win (const char *name, target charset are simply ignored, as on Linux. */ size_t len = 0; len += (strlen (charset) + 1); - if (lcid) + if (ret) { len += lc_wcstombs (f_wctomb, NULL, msg->yesexpr, 0) + 1; len += lc_wcstombs (f_wctomb, NULL, msg->noexpr, 0) + 1; @@ -1033,7 +1113,7 @@ __set_lc_messages_from_win (const char *name, /* codeset */ _messages_locale->codeset = c; c = stpcpy (c, charset) + 1; - if (lcid) + if (ret) { _messages_locale->yesexpr = (const char *) c; len = lc_wcstombs (f_wctomb, c, msg->yesexpr, lc_messages_end - c); @@ -1062,7 +1142,7 @@ __set_lc_messages_from_win (const char *name, const struct lc_collate_T _C_collate_locale = { - 0, + L"", __ascii_mbtowc, "ASCII" }; @@ -1077,10 +1157,11 @@ __collate_load_locale (struct __locale_t *locale, const char *name, char *bufp = NULL; struct lc_collate_T *cop = NULL; - LCID lcid = __get_lcid_from_locale (name); - if (lcid == (LCID) -1) - return -1; - if (lcid) + wchar_t win_locale[ENCODING_LEN + 1]; + int ret = __get_rfc5646_from_locale (name, win_locale); + if (ret < 0) + return ret; + if (ret) { bufp = (char *) malloc (1); /* dummy */ if (!bufp) @@ -1091,12 +1172,12 @@ __collate_load_locale (struct __locale_t *locale, const char *name, free (bufp); return -1; } - cop->lcid = lcid; + wcscpy (cop->win_locale, win_locale); cop->mbtowc = (mbtowc_p) f_mbtowc; stpcpy (cop->codeset, charset); } struct __lc_cats tmp = locale->lc_cat[LC_COLLATE]; - locale->lc_cat[LC_COLLATE].ptr = lcid == 0 ? &_C_collate_locale : cop; + locale->lc_cat[LC_COLLATE].ptr = !win_locale[0] ? &_C_collate_locale : cop; locale->lc_cat[LC_COLLATE].buf = bufp; /* If buf is not NULL, both pointers have been alloc'ed */ if (tmp.buf) @@ -1110,16 +1191,17 @@ __collate_load_locale (struct __locale_t *locale, const char *name, /* We use the Windows functions for locale-specific string comparison and transformation. The advantage is that we don't need any files with collation information. */ + extern "C" int wcscoll_l (const wchar_t *__restrict ws1, const wchar_t *__restrict ws2, struct __locale_t *locale) { int ret; - LCID collate_lcid = __get_collate_locale (locale)->lcid; + const wchar_t *collate_locale = __get_collate_locale (locale)->win_locale; - if (!collate_lcid) + if (!collate_locale[0]) return wcscmp (ws1, ws2); - ret = CompareStringW (collate_lcid, 0, ws1, -1, ws2, -1); + ret = CompareStringEx (collate_locale, 0, ws1, -1, ws2, -1, NULL, NULL, 0); if (!ret) set_errno (EINVAL); return ret - CSTR_EQUAL; @@ -1139,12 +1221,10 @@ strcoll_l (const char *__restrict s1, const char *__restrict s2, wchar_t *ws1, *ws2; tmp_pathbuf tp; int ret; - LCID collate_lcid = __get_collate_locale (locale)->lcid; + const wchar_t *collate_locale = __get_collate_locale (locale)->win_locale; - if (!collate_lcid) + if (!collate_locale[0]) return strcmp (s1, s2); - /* The ANSI version of CompareString uses the default charset of the lcid, - so we must use the Unicode version. */ mbtowc_p collate_mbtowc = __get_collate_locale (locale)->mbtowc; n1 = lc_mbstowcs (collate_mbtowc, NULL, s1, 0) + 1; ws1 = (n1 > NT_MAX_PATH ? (wchar_t *) malloc (n1 * sizeof (wchar_t)) @@ -1154,7 +1234,7 @@ strcoll_l (const char *__restrict s1, const char *__restrict s2, ws2 = (n2 > NT_MAX_PATH ? (wchar_t *) malloc (n2 * sizeof (wchar_t)) : tp.w_get ()); lc_mbstowcs (collate_mbtowc, ws2, s2, n2); - ret = CompareStringW (collate_lcid, 0, ws1, -1, ws2, -1); + ret = CompareStringEx (collate_locale, 0, ws1, -1, ws2, -1, NULL, NULL, 0); if (n1 > NT_MAX_PATH) free (ws1); if (n2 > NT_MAX_PATH) @@ -1170,31 +1250,191 @@ strcoll (const char *__restrict s1, const char *__restrict s2) return strcoll_l (s1, s2, __get_current_locale ()); } -/* BSD. Used from glob.cc, fnmatch.c and regcomp.c. Make sure caller is - using wide chars. Unfortunately the definition of this functions hides - the required input type. */ +/* BSD. Used from glob.cc, fnmatch.c and regcomp.c. */ extern "C" int -__collate_range_cmp (int c1, int c2) +__wcollate_range_cmp (wint_t c1, wint_t c2) { - wchar_t s1[2] = { (wchar_t) c1, L'\0' }; - wchar_t s2[2] = { (wchar_t) c2, L'\0' }; + wchar_t s1[3] = { (wchar_t) c1, L'\0', L'\0' }; + wchar_t s2[3] = { (wchar_t) c2, L'\0', L'\0' }; + + /* Handle Unicode values >= 0x10000, convert to surrogate pair */ + if (c1 > 0xffff) + { + s1[0] = ((c1 - 0x10000) >> 10) + 0xd800; + s1[1] = ((c1 - 0x10000) & 0x3ff) + 0xdc00; + } + if (c2 > 0xffff) + { + s2[0] = ((c2 - 0x10000) >> 10) + 0xd800; + s2[1] = ((c2 - 0x10000) & 0x3ff) + 0xdc00; + } return wcscoll (s1, s2); } +/* Not so much BSD. Used from glob.cc, fnmatch.c and regcomp.c. + + The args are pointers to wint_t strings. This allows to compare + against collating symbols. */ +extern "C" int +__wscollate_range_cmp (wint_t *c1, wint_t *c2, + size_t c1len, size_t c2len) +{ + wchar_t s1[c1len * 2 + 1] = { 0 }; /* # of chars if all are surrogates */ + wchar_t s2[c2len * 2 + 1] = { 0 }; + + /* wcscoll() ignores case in many locales. but we don't want that + for filenames... */ + if ((iswupper (*c1) && !iswupper (*c2)) + || (iswlower (*c1) && !iswlower (*c2))) + return *c1 - *c2; + + wcintowcs (s1, c1, c1len); + wcintowcs (s2, c2, c2len); + return wcscoll_l (s1, s2, __get_current_locale ()); +} + +const size_t ce_size = sizeof collating_element / sizeof *collating_element; +const size_t ce_e_size = sizeof *collating_element; + +/* Check if UTF-32 input character `test' is in the same equivalence class + as UTF-32 character 'eqv'. + Note that we only recognize input in Unicode normalization form C, that + is, we expect all letters to be composed. A single character is all we + look at. + To check equivalence, decompose pattern letter and input letter into + normalization form KD and check the base character for equality. Also, + convert all digits to the ASCII digits 0 - 9 and compare. */ +extern "C" int +is_unicode_equiv (wint_t test, wint_t eqv) +{ + wchar_t decomp_testc[24] = { 0 }; + wchar_t decomp_eqvc[24] = { 0 }; + wchar_t testc[3] = { 0 }; + wchar_t eqvc[3] = { 0 }; + + /* For equivalence classes, case doesn't matter. However, be careful. + Only convert chars which have a "upper" to "lower". */ + if (iswupper (eqv)) + eqv = towlower (eqv); + if (iswupper (test)) + test = towlower (test); + /* Convert to UTF-16 string */ + if (eqv > 0x10000) { + eqvc[0] = ((eqv - 0x10000) >> 10) + 0xd800; + eqvc[1] = ((eqv - 0x10000) & 0x3ff) + 0xdc00; + } else + eqvc[0] = eqv; + if (test > 0x10000) { + testc[0] = ((test - 0x10000) >> 10) + 0xd800; + testc[1] = ((test - 0x10000) & 0x3ff) + 0xdc00; + } else + testc[0] = test; + /* Convert to decomposed form */ + FoldStringW (MAP_COMPOSITE | MAP_FOLDCZONE | MAP_FOLDDIGITS, + eqvc, -1, decomp_eqvc, 24); + FoldStringW (MAP_COMPOSITE | MAP_FOLDCZONE | MAP_FOLDDIGITS, + testc, -1, decomp_testc, 24); + /* If they are equivalent, the base char must be the same. */ + if (decomp_eqvc[0] != decomp_testc[0]) + return 0; + /* If it's a surrogate pair, check the second char, too */ + if (decomp_eqvc[0] >= 0xd800 && decomp_eqvc[0] <= 0xdbff && + decomp_eqvc[1] != decomp_testc[1]) + return 0; + return 1; +} + +static int +comp_coll_elem (const void *key, const void *array_member) +{ + collating_element_t *ckey = (collating_element_t *) key; + collating_element_t *carray_member = (collating_element_t *) array_member; + + int ret = wcicmp ((const wint_t *) ckey->element, + (const wint_t *) carray_member->element); + /* The locale in the collating_element array never has a codeset + attached. So the length of the collating_element locale is + always <= length of the key locale, and that's all we need to + check. Also, if the collating_element locale is empty, we're + all set. */ + if (ret == 0 && carray_member->locale[0]) + ret = strncmp (ckey->locale, carray_member->locale, + strlen (carray_member->locale)); + return ret; +} + +extern "C" int +is_unicode_coll_elem (const wint_t *test) +{ + collating_element_t ct = { + (const char32_t *) test, + __get_current_locale ()->categories[LC_COLLATE] + }; + collating_element_t *cmatch; + + if (wcilen (test) == 1) + return 1; + cmatch = (collating_element_t *) + bsearch (&ct, collating_element, ce_size, ce_e_size, comp_coll_elem); + return !!cmatch; +} + +static int +comp_coll_elem_n (const void *key, const void *array_member) +{ + collating_element_t *ckey = (collating_element_t *) key; + collating_element_t *carray_member = (collating_element_t *) array_member; + + int ret = wcincmp ((const wint_t *) ckey->element, + (const wint_t *) carray_member->element, + wcilen ((const wint_t *) carray_member->element)); + /* The locale in the collating_element array never has a codeset + attached. So the length of the collating_element locale is + always <= length of the key locale, and that's all we need to + check. Also, if the collating_element locale is empty, we're + all set. */ + if (ret == 0 && carray_member->locale[0]) + ret = strncmp (ckey->locale, carray_member->locale, + strlen (carray_member->locale)); + return ret; +} + +/* Return the number of UTF-32 chars making up the next full character in + inp, taking valid collation elements in the current locale into account. */ +extern "C" size_t +next_unicode_char (wint_t *inp) +{ + collating_element_t ct = { + (const char32_t *) inp, + __get_current_locale ()->categories[LC_COLLATE] + }; + collating_element_t *cmatch; + + if (wcilen (inp) > 1) + { + cmatch = (collating_element_t *) + bsearch (&ct, collating_element, ce_size, ce_e_size, + comp_coll_elem_n); + if (cmatch) + return wcilen ((const wint_t *) cmatch->element); + } + return 1; +} + extern "C" size_t wcsxfrm_l (wchar_t *__restrict ws1, const wchar_t *__restrict ws2, size_t wsn, struct __locale_t *locale) { size_t ret; - LCID collate_lcid = __get_collate_locale (locale)->lcid; + const wchar_t *collate_locale = __get_collate_locale (locale)->win_locale; - if (!collate_lcid) + if (!collate_locale[0]) return wcslcpy (ws1, ws2, wsn); /* Don't use LCMAP_SORTKEY in conjunction with LCMAP_BYTEREV. The cchDest parameter is used as byte count with LCMAP_SORTKEY but as char count with LCMAP_BYTEREV. */ - ret = LCMapStringW (collate_lcid, LCMAP_SORTKEY, ws2, -1, ws1, - wsn * sizeof (wchar_t)); + ret = LCMapStringEx (collate_locale, LCMAP_SORTKEY, ws2, -1, ws1, + wsn * sizeof (wchar_t), NULL, NULL, 0); if (ret) { ret /= sizeof (wchar_t); @@ -1216,7 +1456,8 @@ wcsxfrm_l (wchar_t *__restrict ws1, const wchar_t *__restrict ws2, size_t wsn, set_errno (EINVAL); else { - ret = LCMapStringW (collate_lcid, LCMAP_SORTKEY, ws2, -1, NULL, 0); + ret = LCMapStringEx (collate_locale, LCMAP_SORTKEY, ws2, -1, + NULL, 0, NULL, NULL, 0); if (ret) wsn = ret / sizeof (wchar_t); } @@ -1237,12 +1478,10 @@ strxfrm_l (char *__restrict s1, const char *__restrict s2, size_t sn, size_t n2; wchar_t *ws2; tmp_pathbuf tp; - LCID collate_lcid = __get_collate_locale (locale)->lcid; + const wchar_t *collate_locale = __get_collate_locale (locale)->win_locale; - if (!collate_lcid) + if (!collate_locale[0]) return strlcpy (s1, s2, sn); - /* The ANSI version of LCMapString uses the default charset of the lcid, - so we must use the Unicode version. */ mbtowc_p collate_mbtowc = __get_collate_locale (locale)->mbtowc; n2 = lc_mbstowcs (collate_mbtowc, NULL, s2, 0) + 1; ws2 = (n2 > NT_MAX_PATH ? (wchar_t *) malloc (n2 * sizeof (wchar_t)) @@ -1251,8 +1490,8 @@ strxfrm_l (char *__restrict s1, const char *__restrict s2, size_t sn, { lc_mbstowcs (collate_mbtowc, ws2, s2, n2); /* The sort key is a NUL-terminated byte string. */ - ret = LCMapStringW (collate_lcid, LCMAP_SORTKEY, ws2, -1, - (PWCHAR) s1, sn); + ret = LCMapStringEx (collate_locale, LCMAP_SORTKEY, ws2, -1, + (PWCHAR) s1, sn, NULL, NULL, 0); } if (ret == 0) { @@ -1260,7 +1499,8 @@ strxfrm_l (char *__restrict s1, const char *__restrict s2, size_t sn, if (!ws2 || GetLastError () != ERROR_INSUFFICIENT_BUFFER) set_errno (EINVAL); else - ret = LCMapStringW (collate_lcid, LCMAP_SORTKEY, ws2, -1, NULL, 0); + ret = LCMapStringEx (collate_locale, LCMAP_SORTKEY, ws2, -1, + NULL, 0, NULL, NULL, 0); } if (ws2 && n2 > NT_MAX_PATH) free (ws2); @@ -1279,23 +1519,45 @@ strxfrm (char *__restrict s1, const char *__restrict s2, size_t sn) compatible character set code. Called from newlib's setlocale(), if the charset isn't given explicitely in the POSIX compatible locale specifier. */ extern "C" void -__set_charset_from_locale (const char *locale, char *charset) +__set_charset_from_locale (const char *loc, char *charset) { + wchar_t win_locale[ENCODING_LEN + 1]; + char locale[ENCODING_LEN + 1]; + char *modifier; + char *c; UINT cp; - LCID lcid = __get_lcid_from_locale (locale); - wchar_t wbuf[9]; + + /* Cut out explicit codeset */ + stpcpy (locale, loc); + modifier = strchr (loc, '@'); + if ((c = strchr (locale, '.'))) + stpcpy (c, modifier ?: ""); + /* Ignore @cjk* modifiers, they are newlib specials. */ + modifier = strchr (locale, '@'); + if (modifier && is_cjk_modifier (modifier)) + *modifier = '\0'; + + default_codeset_t srch_dc = { locale, NULL }; + default_codeset_t *dc = (default_codeset_t *) + bsearch ((void *) &srch_dc, (void *) default_codeset, + sizeof default_codeset / sizeof *default_codeset, + sizeof *default_codeset, locale_cmp); + if (dc) + { + stpcpy (charset, dc->codeset); + return; + } /* "C" locale, or invalid locale? */ - if (lcid == 0 || lcid == (LCID) -1) + if (__get_rfc5646_from_locale (locale, win_locale) <= 0) cp = 20127; - else if (!GetLocaleInfoW (lcid, + else if (GetLocaleInfoEx (win_locale, LOCALE_IDEFAULTANSICODEPAGE | LOCALE_RETURN_NUMBER, (PWCHAR) &cp, sizeof cp)) cp = 0; /* Translate codepage and lcid to a charset closely aligned with the default charsets defined in Glibc. */ const char *cs; - const char *modifier = strchr (locale, '@') ?: ""; switch (cp) { case 20127: @@ -1317,123 +1579,41 @@ __set_charset_from_locale (const char *locale, char *charset) cs = "BIG5"; break; case 1250: - if (lcid == 0x181a /* sr_BA (Serbian Language/Bosnia - and Herzegovina) */ - || lcid == 0x241a /* sr_RS (Serbian Language/Serbia) */ - || lcid == 0x2c1a /* sr_ME (Serbian Language/Montenegro)*/ - || lcid == 0x0442) /* tk_TM (Turkmen/Turkmenistan) */ - cs = "UTF-8"; - else if (lcid == 0x041c) /* sq_AL (Albanian/Albania) */ - cs = "ISO-8859-1"; - else - cs = "ISO-8859-2"; + cs = "ISO-8859-2"; break; case 1251: - if (lcid == 0x1c1a /* sr_BA (Serbian Language/Bosnia - and Herzegovina) */ - || lcid == 0x281a /* sr_RS (Serbian Language/Serbia) */ - || lcid == 0x301a /* sr_ME (Serbian Language/Montenegro)*/ - || lcid == 0x0440 /* ky_KG (Kyrgyz/Kyrgyzstan) */ - || lcid == 0x0843 /* uz_UZ (Uzbek/Uzbekistan) */ - /* tt_RU (Tatar/Russia), - IQTElif alphabet */ - || (lcid == 0x0444 && has_modifier ("@iqtelif")) - || lcid == 0x0450) /* mn_MN (Mongolian/Mongolia) */ - cs = "UTF-8"; - else if (lcid == 0x0423) /* be_BY (Belarusian/Belarus) */ - cs = has_modifier ("@latin") ? "UTF-8" : "CP1251"; - else if (lcid == 0x0402) /* bg_BG (Bulgarian/Bulgaria) */ - cs = "CP1251"; - else if (lcid == 0x0422) /* uk_UA (Ukrainian/Ukraine) */ - cs = "KOI8-U"; - else - cs = "ISO-8859-5"; + cs = "ISO-8859-5"; break; case 1252: - if (lcid == 0x0452) /* cy_GB (Welsh/Great Britain) */ - cs = "ISO-8859-14"; - else if (lcid == 0x4009 /* en_IN (English/India) */ - || lcid == 0x0867 /* ff_SN (Fulah/Senegal) */ - || lcid == 0x0464 /* fil_PH (Filipino/Philippines) */ - || lcid == 0x0462 /* fy_NL (Frisian/Netherlands) */ - || lcid == 0x0468 /* ha_NG (Hausa/Nigeria) */ - || lcid == 0x0475 /* haw_US (Hawaiian/United States) */ - || lcid == 0x0470 /* ig_NG (Igbo/Nigeria) */ - || lcid == 0x085d /* iu_CA (Inuktitut/Canada) */ - || lcid == 0x046c /* nso_ZA (Northern Sotho/South Africa) */ - || lcid == 0x0487 /* rw_RW (Kinyarwanda/Rwanda) */ - || lcid == 0x043b /* se_NO (Northern Saami/Norway) */ - || lcid == 0x0832 /* tn_BW (Tswana/Botswana) */ - || lcid == 0x0432 /* tn_ZA (Tswana/South Africa) */ - || lcid == 0x0488 /* wo_SN (Wolof/Senegal) */ - || lcid == 0x046a) /* yo_NG (Yoruba/Nigeria) */ - cs = "UTF-8"; - else if (lcid == 0x042e) /* hsb_DE (Upper Sorbian/Germany) */ - cs = "ISO-8859-2"; - else if (lcid == 0x0491 /* gd_GB (Scots Gaelic/Great Britain) */ - || (has_modifier ("@euro") - && GetLocaleInfoW (lcid, LOCALE_SINTLSYMBOL, wbuf, 9) - && !wcsncmp (wbuf, L"EUR", 3))) - cs = "ISO-8859-15"; - else - cs = "ISO-8859-1"; + cs = "ISO-8859-1"; break; case 1253: cs = "ISO-8859-7"; break; case 1254: - if (lcid == 0x042c) /* az_AZ (Azeri/Azerbaijan) */ - cs = "UTF-8"; - else if (lcid == 0x0443) /* uz_UZ (Uzbek/Uzbekistan) */ - cs = "ISO-8859-1"; - else - cs = "ISO-8859-9"; + cs = "ISO-8859-9"; break; case 1255: cs = "ISO-8859-8"; break; case 1256: - if (lcid == 0x0429 /* fa_IR (Persian/Iran) */ - || lcid == 0x0846 /* pa_PK (Punjabi/Pakistan) */ - || lcid == 0x0859 /* sd_PK (Sindhi/Pakistan) */ - || lcid == 0x0480 /* ug_CN (Uyghur/China) */ - || lcid == 0x0420) /* ur_PK (Urdu/Pakistan) */ - cs = "UTF-8"; - else - cs = "ISO-8859-6"; + cs = "ISO-8859-6"; break; case 1257: - if (lcid == 0x0425) /* et_EE (Estonian/Estonia) */ - cs = "ISO-8859-15"; - else - cs = "ISO-8859-13"; + cs = "ISO-8859-13"; break; case 1258: + cs = "UTF-8"; + break; default: - if (lcid == 0x3c09 /* en_HK (English/Hong Kong) */ - || lcid == 0x200c /* fr_RE (French/Réunion) */ - || lcid == 0x240c /* fr_CD (French/Congo) */ - || lcid == 0x280c /* fr_SN (French/Senegal) */ - || lcid == 0x2c0c /* fr_CM (French/Cameroon) */ - || lcid == 0x300c /* fr_CI (French/Ivory Coast) */ - || lcid == 0x340c /* fr_ML (French/Mali) */ - || lcid == 0x380c /* fr_MA (French/Morocco) */ - || lcid == 0x3c0c /* fr_HT (French/Haiti) */ - || lcid == 0x0477 /* so_SO (Somali/Somali) */ - || lcid == 0x0430) /* st_ZA (Sotho/South Africa) */ - cs = "ISO-8859-1"; - else if (lcid == 0x818) /* ro_MD (Romanian/Moldovia) */ - cs = "ISO-8859-2"; - else if (lcid == 0x043a) /* mt_MT (Maltese/Malta) */ - cs = "ISO-8859-3"; - else if (lcid == 0x0481) /* mi_NZ (Maori/New Zealand) */ - cs = "ISO-8859-13"; - else if (lcid == 0x0437) /* ka_GE (Georgian/Georgia) */ - cs = "GEORGIAN-PS"; - else if (lcid == 0x043f) /* kk_KZ (Kazakh/Kazakhstan) */ - cs = "PT154"; + /* Some (pretty new) EU locales don't exist in GLibc and haven't been + catched above. Check for @euro modifier again and make these locales + always use ISO-8859-15. */ + if (modifier && !strcmp (modifier + 1, "euro")) + cs = "ISO-8859-15"; else cs = "UTF-8"; + break; } stpcpy (charset, cs); } @@ -1471,8 +1651,8 @@ __eval_codepage_from_internal_charset () break; } break; - case 'G': /* GBK/GB2312 */ - codepage = 936; + case 'G': /* GBK/GB2312/GB18030 */ + codepage = (charset[2] == '1') ? 54936 : 936; break; case 'I': /* ISO-8859-x */ codepage = strtoul (charset + 9, NULL, 10) + 28590; @@ -1515,9 +1695,9 @@ __set_locale_from_locale_alias (const char *locale, char *new_locale) if (mbstowcs (wlocale, locale, ENCODING_LEN + 1) == (size_t) -1) sys_mbstowcs (wlocale, ENCODING_LEN + 1, locale); wlocale[ENCODING_LEN] = L'\0'; - /* Ignore @cjknarrow modifier since it's a very personal thing between - Cygwin and newlib... */ - if ((wc = wcschr (wlocale, L'@')) && !wcscmp (wc + 1, L"cjknarrow")) + /* Ignore @cjk* modifiers, they are newlib specials. */ + wc = wcschr (wlocale, L'@'); + if (wc && w_is_cjk_modifier (wc)) *wc = L'\0'; while (fgets (alias_buf, LOCALE_ALIAS_LINE_LEN + 1, fp)) { diff --git a/winsup/cygwin/ntea.cc b/winsup/cygwin/ntea.cc index a400fcb2b3..70815649c3 100644 --- a/winsup/cygwin/ntea.cc +++ b/winsup/cygwin/ntea.cc @@ -17,9 +17,11 @@ details. */ #include "tls_pbuf.h" #include #include +#include -#define MAX_EA_NAME_LEN 256 -#define MAX_EA_VALUE_LEN 65536 +/* On storage the `user.` prefix is not included but the terminating null byte + is needed.*/ +#define _XATTR_NAME_MAX_ONDISK_ (XATTR_NAME_MAX - strlen("user.") + 1) /* At least one maximum sized entry fits. CV 2014-04-04: NtQueryEaFile function chokes on buffers bigger than 64K @@ -27,13 +29,13 @@ details. */ on a remote share, at least on Windows 7 and later. In theory the buffer should have a size of - sizeof (FILE_FULL_EA_INFORMATION) + MAX_EA_NAME_LEN - + MAX_EA_VALUE_LEN + sizeof (FILE_FULL_EA_INFORMATION) + _XATTR_NAME_MAX_ONDISK_ + + XATTR_SIZE_MAX (65804 bytes), but we're opting for simplicity here, and a 64K buffer has the advantage that we can use a tmp_pathbuf buffer, rather than having to alloca 64K from stack. */ -#define EA_BUFSIZ MAX_EA_VALUE_LEN +#define EA_BUFSIZ XATTR_SIZE_MAX #define NEXT_FEA(p) ((PFILE_FULL_EA_INFORMATION) (p->NextEntryOffset \ ? (char *) p + p->NextEntryOffset : NULL)) @@ -55,7 +57,7 @@ read_ea (HANDLE hdl, path_conv &pc, const char *name, char *value, size_t size) returns the last EA entry of the file infinitely. Even utilizing the optional EaIndex only helps marginally. If you use that, the last EA in the file is returned twice. */ - char lastname[MAX_EA_NAME_LEN]; + char lastname[_XATTR_NAME_MAX_ONDISK_]; __try { @@ -95,7 +97,7 @@ read_ea (HANDLE hdl, path_conv &pc, const char *name, char *value, size_t size) __leave; } - if ((nlen = strlen (name)) >= MAX_EA_NAME_LEN) + if ((nlen = strlen (name)) >= _XATTR_NAME_MAX_ONDISK_) { set_errno (EINVAL); __leave; @@ -197,7 +199,7 @@ read_ea (HANDLE hdl, path_conv &pc, const char *name, char *value, size_t size) /* For compatibility with Linux, we always prepend "user." to the attribute name, so effectively we only support user attributes from a application point of view. */ - char tmpbuf[MAX_EA_NAME_LEN * 2]; + char tmpbuf[_XATTR_NAME_MAX_ONDISK_ * 2]; char *tp = stpcpy (tmpbuf, "user."); stpcpy (tp, fea->EaName); /* NTFS stores all EA names in uppercase unfortunately. To @@ -297,7 +299,7 @@ write_ea (HANDLE hdl, path_conv &pc, const char *name, const char *value, /* Skip "user." prefix. */ name += 5; - if ((nlen = strlen (name)) >= MAX_EA_NAME_LEN) + if ((nlen = strlen (name)) >= _XATTR_NAME_MAX_ONDISK_) { set_errno (EINVAL); __leave; diff --git a/winsup/cygwin/passwd.cc b/winsup/cygwin/passwd.cc index d1708953d3..b8457a46f9 100644 --- a/winsup/cygwin/passwd.cc +++ b/winsup/cygwin/passwd.cc @@ -385,7 +385,10 @@ pg_ent::getent (void) case from_local: if (from_db && nss_db_enum_local () - && (!cygheap->dom.member_machine () + /* Domain controller? If so, sam and ad are one and the same + and "local ad" would list all domain accounts twice without + this test. */ + && (cygheap->dom.account_flat_name ()[0] != L'@' || !nss_db_enum_primary ()) && (entry = enumerate_local ())) return entry; diff --git a/winsup/cygwin/path.cc b/winsup/cygwin/path.cc index a44741f27f..d06f3f0fde 100644 --- a/winsup/cygwin/path.cc +++ b/winsup/cygwin/path.cc @@ -2121,7 +2121,7 @@ symlink_worker (const char *oldpath, path_conv &win32_newpath, bool isdevice) variable. Device files are always shortcuts. */ wsym_type = isdevice ? WSYM_lnk : allow_winsymlinks; /* NFS has its own, dedicated way to create symlinks. */ - if (win32_newpath.fs_is_nfs ()) + if (win32_newpath.fs_is_nfs () && !isdevice) wsym_type = WSYM_nfs; /* MVFS doesn't handle the SYSTEM DOS attribute, but it handles the R/O attribute. Therefore we create symlinks on MVFS always as shortcuts. */ @@ -2752,10 +2752,10 @@ check_reparse_point_target (HANDLE h, bool remote, PREPARSE_DATA_BUFFER rp, } if (rp->ReparseTag == IO_REPARSE_TAG_SYMLINK) { - /* Windows evaluates native symlink literally. If a remote symlink points - to, say, C:\foo, it will be handled as if the target is the local file - C:\foo. That comes in handy since that's how symlinks are treated under - POSIX as well. */ + /* Windows evaluates native symlink literally. If a remote symlink + points to, say, C:\foo, it will be handled as if the target is the + local file C:\foo. That comes in handy since that's how symlinks + are treated under POSIX as well. */ RtlInitCountedUnicodeString (psymbuf, (PWCHAR)((PBYTE) rp->SymbolicLinkReparseBuffer.PathBuffer + rp->SymbolicLinkReparseBuffer.SubstituteNameOffset), @@ -3318,7 +3318,7 @@ symlink_info::check (char *path, const suffix_info *suffixes, fs_info &fs, major = 0; minor = 0; mode = 0; - // mount_flags is an incoming value set in path_conv */ + /* mount_flags is an incoming value set in path_conv */ path_flags = 0; PVOID eabuf = &nfs_aol_ffei; @@ -3447,7 +3447,7 @@ symlink_info::check (char *path, const suffix_info *suffixes, fs_info &fs, { status = conv_hdl.get_finfo (h, fs.is_nfs ()); if (NT_SUCCESS (status)) - fileattr = conv_hdl.get_dosattr (fs.is_nfs ()); + fileattr = conv_hdl.get_dosattr (h, fs.is_nfs ()); } if (!NT_SUCCESS (status)) { @@ -3670,6 +3670,16 @@ symlink_info::check (char *path, const suffix_info *suffixes, fs_info &fs, else if (contents[0] != ':' || contents[1] != '\\' || !parse_device (contents)) break; + if (fs.is_nfs () && major == _major (FH_FIFO)) + { + conv_hdl.nfsattr ()->type = NF3FIFO; + conv_hdl.nfsattr ()->mode = mode; + conv_hdl.nfsattr ()->size = 0; + /* Marker for fhandler_base::fstat_by_nfs_ea not to override + the cached fattr3 data with fresh data from the filesystem, + even if the handle is used for other purposes than stat. */ + conv_hdl.nfsattr ()->filler1 = NF3FIFO; + } } /* If searching for `foo' and then finding a `foo.lnk' which is @@ -3707,11 +3717,26 @@ symlink_info::check (char *path, const suffix_info *suffixes, fs_info &fs, } /* If the file is on an NFS share and could be opened with extended - attributes, check if it's a symlink. Only files can be symlinks - (which can be symlinks to directories). */ - else if (fs.is_nfs () && (conv_hdl.nfsattr ()->type & 7) == NF3LNK) + attributes, check if it's a symlink or FIFO. */ + else if (fs.is_nfs ()) { - res = check_nfs_symlink (h); + /* Make sure filler1 is 0, so we can use it safely as a marker. */ + conv_hdl.nfsattr ()->filler1 = 0; + switch (conv_hdl.nfsattr ()->type & 7) + { + case NF3LNK: + res = check_nfs_symlink (h); + break; + case NF3FIFO: + /* Enable real FIFOs recognized as such. */ + major = _major (FH_FIFO); + minor = _minor (FH_FIFO); + mode = S_IFIFO | (conv_hdl.nfsattr ()->mode & ~S_IFMT); + isdevice = true; + break; + default: + break; + } if (res) break; } @@ -4599,17 +4624,6 @@ cygwin_split_path (const char *path, char *dir, char *file) file[end - last_slash - 1] = 0; } -static inline void -copy_cwd_str (PUNICODE_STRING tgt, PUNICODE_STRING src) -{ - RtlCopyUnicodeString (tgt, src); - if (tgt->Buffer[tgt->Length / sizeof (WCHAR) - 1] != L'\\') - { - tgt->Buffer[tgt->Length / sizeof (WCHAR)] = L'\\'; - tgt->Length += sizeof (WCHAR); - } -} - /*****************************************************************************/ /* The find_fast_cwd_pointer function and parts of the @@ -4644,36 +4658,13 @@ copy_cwd_str (PUNICODE_STRING tgt, PUNICODE_STRING src) USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -void -fcwd_access_t::SetFSCharacteristics (LONG val) -{ - /* Special case FSCharacteristics. Didn't exist originally. */ - switch (fast_cwd_version ()) - { - case FCWD_OLD: - break; - case FCWD_W7: - f7.FSCharacteristics = val; - break; - case FCWD_W8: - f8.FSCharacteristics = val; - break; - } -} - -fcwd_version_t & -fcwd_access_t::fast_cwd_version () -{ - return cygheap->cwd.fast_cwd_version; -} - void fcwd_access_t::CopyPath (UNICODE_STRING &target) { /* Copy the Path contents over into the UNICODE_STRING referenced by target. This is used to set the CurrentDirectoryName in the user parameter block. */ - target = Path (); + target = Path; } void @@ -4681,12 +4672,12 @@ fcwd_access_t::Free (PVOID heap) { /* Decrement the reference count. If it's down to 0, free structure from heap. */ - if (InterlockedDecrement (&ReferenceCount ()) == 0) + if (InterlockedDecrement (&ReferenceCount) == 0) { /* The handle on init is always a fresh one, not the handle inherited from the parent process. We always have to close it here. Note: The handle could be NULL, if we cd'ed into a virtual dir. */ - HANDLE h = DirectoryHandle (); + HANDLE h = DirectoryHandle; if (h) NtClose (h); RtlFreeHeap (heap, 0, this); @@ -4695,34 +4686,35 @@ fcwd_access_t::Free (PVOID heap) void fcwd_access_t::FillIn (HANDLE dir, PUNICODE_STRING name, - ULONG old_dismount_count) + ULONG old_dismount_count) { /* Fill in all values into this FAST_CWD structure. */ - DirectoryHandle () = dir; - ReferenceCount () = 1; - OldDismountCount () = old_dismount_count; - /* The new structure stores the device characteristics of the + DirectoryHandle = dir; + ReferenceCount = 1; + OldDismountCount = old_dismount_count; + /* The fcwd structure stores the device characteristics of the volume holding the dir. RtlGetCurrentDirectory_U checks if the FILE_REMOVABLE_MEDIA flag is set and, if so, checks if the volume is still the same as the one used when opening the directory handle. We don't call NtQueryVolumeInformationFile for the \\?\PIPE, though. It just returns STATUS_INVALID_HANDLE anyway. */ - if (fast_cwd_version () != FCWD_OLD) + FSCharacteristics = 0; + if (name != &ro_u_pipedir) { - SetFSCharacteristics (0); - if (name != &ro_u_pipedir) - { - IO_STATUS_BLOCK io; - FILE_FS_DEVICE_INFORMATION ffdi; - if (NT_SUCCESS (NtQueryVolumeInformationFile (dir, &io, &ffdi, - sizeof ffdi, FileFsDeviceInformation))) - SetFSCharacteristics (ffdi.Characteristics); - } + IO_STATUS_BLOCK io; + FILE_FS_DEVICE_INFORMATION ffdi; + if (NT_SUCCESS (NtQueryVolumeInformationFile (dir, &io, &ffdi, + sizeof ffdi, FileFsDeviceInformation))) + FSCharacteristics = ffdi.Characteristics; + } + RtlInitEmptyUnicodeString (&Path, Buffer, name->MaximumLength); + RtlCopyUnicodeString (&Path, name); + if (Path.Buffer[Path.Length / sizeof (WCHAR) - 1] != L'\\') + { + Path.Buffer[Path.Length / sizeof (WCHAR)] = L'\\'; + Path.Length += sizeof (WCHAR); } - RtlInitEmptyUnicodeString (&Path (), Buffer (), - MAX_PATH * sizeof (WCHAR)); - copy_cwd_str (&Path (), name); } void @@ -4734,43 +4726,9 @@ fcwd_access_t::SetDirHandleFromBufferPointer (PWCHAR buf_p, HANDLE dir) on the version and overwrites the directory handle. It is only used if we couldn't figure out the address of fast_cwd_ptr. */ fcwd_access_t *f_cwd; - switch (fast_cwd_version ()) - { - case FCWD_OLD: - default: - f_cwd = (fcwd_access_t *) - ((PBYTE) buf_p - __builtin_offsetof (FAST_CWD_OLD, Buffer)); - break; - case FCWD_W7: - f_cwd = (fcwd_access_t *) - ((PBYTE) buf_p - __builtin_offsetof (FAST_CWD_7, Buffer)); - break; - case FCWD_W8: - f_cwd = (fcwd_access_t *) - ((PBYTE) buf_p - __builtin_offsetof (FAST_CWD_8, Buffer)); - break; - } - f_cwd->DirectoryHandle () = dir; -} - -void -fcwd_access_t::SetVersionFromPointer (PBYTE buf_p, bool is_buffer) -{ - /* Given a pointer to the FAST_CWD structure (is_buffer == false) or a - pointer to the Buffer within (is_buffer == true), this function - computes the FAST_CWD version by checking that Path.MaximumLength - equals MAX_PATH, and that Path.Buffer == Buffer. */ - if (is_buffer) - buf_p -= __builtin_offsetof (FAST_CWD_8, Buffer); - fcwd_access_t *f_cwd = (fcwd_access_t *) buf_p; - if (f_cwd->f8.Path.MaximumLength == MAX_PATH * sizeof (WCHAR) - && f_cwd->f8.Path.Buffer == f_cwd->f8.Buffer) - fast_cwd_version () = FCWD_W8; - else if (f_cwd->f7.Path.MaximumLength == MAX_PATH * sizeof (WCHAR) - && f_cwd->f7.Path.Buffer == f_cwd->f7.Buffer) - fast_cwd_version () = FCWD_W7; - else - fast_cwd_version () = FCWD_OLD; + f_cwd = (fcwd_access_t *) + ((PBYTE) buf_p - __builtin_offsetof (fcwd_access_t, Buffer)); + f_cwd->DirectoryHandle = dir; } /* This function scans the code in ntdll.dll to find the address of the @@ -4916,36 +4874,6 @@ find_fast_cwd () " available Cygwin version from https://cygwin.com/. If the problem persists,\n" " please see https://cygwin.com/problems.html\n\n"); } - if (f_cwd_ptr && *f_cwd_ptr) - { - /* Just evaluate structure version. */ - fcwd_access_t::SetVersionFromPointer ((PBYTE) *f_cwd_ptr, false); - } - else - { - /* If we couldn't fetch fast_cwd_ptr, or if fast_cwd_ptr is NULL(*) - we have to figure out the version from the Buffer pointer in the - ProcessParameters. - - (*) This is very unlikely to happen when starting the first - Cygwin process, since it only happens when starting the - process in a directory which can't be used as CWD by Win32, or - if the directory doesn't exist. But *if* it happens, we have - no valid FAST_CWD structure, even though upp_cwd_str.Buffer is - not NULL in that case. So we let the OS create a valid - FAST_CWD structure temporarily to have something to work with. - We know the pipe FS works. */ - PEB &peb = *NtCurrentTeb ()->Peb; - - if (f_cwd_ptr /* so *f_cwd_ptr == NULL */ - && !NT_SUCCESS (RtlSetCurrentDirectory_U (&ro_u_pipedir))) - api_fatal ("Couldn't set directory to %S temporarily.\n" - "Cannot continue.", &ro_u_pipedir); - RtlEnterCriticalSection (peb.FastPebLock); - fcwd_access_t::SetVersionFromPointer - ((PBYTE) peb.ProcessParameters->CurrentDirectoryName.Buffer, true); - RtlLeaveCriticalSection (peb.FastPebLock); - } /* Eventually, after we set the version as well, set fast_cwd_ptr. */ return f_cwd_ptr; } @@ -4958,6 +4886,7 @@ cwdstuff::override_win32_cwd (bool init, ULONG old_dismount_count) PEB &peb = *NtCurrentTeb ()->Peb; UNICODE_STRING &upp_cwd_str = peb.ProcessParameters->CurrentDirectoryName; HANDLE &upp_cwd_hdl = peb.ProcessParameters->CurrentDirectoryHandle; + PUNICODE_STRING win32_cwd_ptr = error ? &ro_u_pipedir : &win32; if (fast_cwd_ptr == (fcwd_access_t **) -1) fast_cwd_ptr = find_fast_cwd (); @@ -4966,20 +4895,18 @@ cwdstuff::override_win32_cwd (bool init, ULONG old_dismount_count) /* If we got a valid value for fast_cwd_ptr, we can simply replace the RtlSetCurrentDirectory_U function entirely. */ PVOID heap = peb.ProcessHeap; - /* First allocate a new fcwd_access_t structure on the heap. - The new fcwd_access_t structure is 4 byte bigger than the old one, - but we simply don't care, so we allocate always room for the - new one. */ + /* First allocate a new fcwd_access_t structure on the heap. */ fcwd_access_t *f_cwd = (fcwd_access_t *) - RtlAllocateHeap (heap, 0, sizeof (fcwd_access_t)); + RtlAllocateHeap (heap, 0, + sizeof (fcwd_access_t) + + win32_cwd_ptr->MaximumLength); if (!f_cwd) { debug_printf ("RtlAllocateHeap failed"); return; } /* Fill in the values. */ - f_cwd->FillIn (dir, error ? &ro_u_pipedir : &win32, - old_dismount_count); + f_cwd->FillIn (dir, win32_cwd_ptr, old_dismount_count); /* Use PEB lock when switching fast_cwd_ptr to the new FAST_CWD structure and writing the CWD to the user process parameter block. This is equivalent to calling RtlAcquirePebLock/ @@ -5019,12 +4946,12 @@ cwdstuff::override_win32_cwd (bool init, ULONG old_dismount_count) if (!init) { NTSTATUS status = - RtlSetCurrentDirectory_U (error ? &ro_u_pipedir : &win32); + RtlSetCurrentDirectory_U (win32_cwd_ptr); if (!NT_SUCCESS (status)) { RtlLeaveCriticalSection (peb.FastPebLock); debug_printf ("RtlSetCurrentDirectory_U(%S) failed, %y", - error ? &ro_u_pipedir : &win32, status); + win32_cwd_ptr); return; } } @@ -5051,7 +4978,6 @@ cwdstuff::init () { /* Initialize fast_cwd stuff. */ fast_cwd_ptr = (fcwd_access_t **) -1; - fast_cwd_version = FCWD_W7; /* Initially re-open the cwd to allow POSIX semantics. */ set (NULL, NULL); } diff --git a/winsup/cygwin/pinfo.cc b/winsup/cygwin/pinfo.cc index 753d415d78..a5f5d6eb22 100644 --- a/winsup/cygwin/pinfo.cc +++ b/winsup/cygwin/pinfo.cc @@ -97,7 +97,7 @@ pinfo_init (char **envp, int envc) myself.thisproc (NULL); myself->pgid = myself->sid = myself->pid; - myself->ctty = -1; + myself->ctty = CTTY_UNINITIALIZED; myself->uid = ILLEGAL_UID; myself->gid = ILLEGAL_GID; environ_init (NULL, 0); /* call after myself has been set up */ @@ -118,7 +118,7 @@ pinfo_init (char **envp, int envc) DWORD pinfo::status_exit (DWORD x) { - switch (x) + switch ((NTSTATUS) x) { case STATUS_DLL_NOT_FOUND: { @@ -194,7 +194,7 @@ pinfo::maybe_set_exit_code_from_windows () GetExitCodeProcess (hProcess, &x); set_exit_code (x); } - sigproc_printf ("pid %d, exit value - old %y, windows %y, MSYS %y", + sigproc_printf ("pid %d, exit value - old %y, windows %y, cygwin %y", self->pid, oexitcode, x, self->exitcode); } @@ -212,7 +212,7 @@ pinfo::exit (DWORD n) maybe_set_exit_code_from_windows (); /* may block */ exit_state = ES_FINAL; - if (myself->ctty > 0 && !iscons_dev (myself->ctty)) + if (CTTY_IS_VALID (myself->ctty) && !iscons_dev (myself->ctty)) { lock_ttys here; tty *t = cygwin_shared->tty[device::minor(myself->ctty)]; @@ -466,6 +466,8 @@ pinfo::init (pid_t n, DWORD flag, HANDLE h0) h = h0; _pinfo_release (); } + if (shloc == SH_MYSELF) + cygheap->shared_regions.myself_shared_addr = procinfo; } void @@ -512,7 +514,7 @@ pinfo::pinfo (HANDLE parent, pinfo_minimal& from, pid_t pid): const char * _pinfo::_ctty (char *buf) { - if (ctty <= 0) + if (!CTTY_IS_VALID (ctty)) strcpy (buf, "no ctty"); else { @@ -528,26 +530,32 @@ _pinfo::set_ctty (fhandler_termios *fh, int flags) { tty_min& tc = *fh->tc (); debug_printf ("old %s, ctty device number %y, tc.ntty device number %y flags & O_NOCTTY %y", __ctty (), ctty, tc.ntty, flags & O_NOCTTY); - if (fh && (ctty <= 0 || ctty == tc.ntty) && !(flags & O_NOCTTY)) + if (fh && (!CTTY_IS_VALID (ctty) || ctty == tc.ntty) && !(flags & O_NOCTTY)) { - ctty = tc.ntty; - if (cygheap->ctty != fh->archetype) + if (tc.getsid () && tc.getsid () != sid && ctty == CTTY_RELEASED) + ; /* Do nothing if another session is associated with the TTY. */ + else { - debug_printf ("cygheap->ctty %p, archetype %p", cygheap->ctty, fh->archetype); - if (!cygheap->ctty) - syscall_printf ("ctty was NULL"); - else + ctty = tc.ntty; + if (cygheap->ctty != fh->archetype) { - syscall_printf ("ctty %p, usecount %d", cygheap->ctty, - cygheap->ctty->archetype_usecount (0)); - cygheap->ctty->close (); - } - cygheap->ctty = (fhandler_termios *) fh->archetype; - if (cygheap->ctty) - { - fh->archetype_usecount (1); - /* guard ctty fh */ - report_tty_counts (cygheap->ctty, "ctty", ""); + debug_printf ("cygheap->ctty %p, archetype %p", + cygheap->ctty, fh->archetype); + if (!cygheap->ctty) + syscall_printf ("ctty was NULL"); + else + { + syscall_printf ("ctty %p, usecount %d", cygheap->ctty, + cygheap->ctty->archetype_usecount (0)); + cygheap->ctty->close (); + } + cygheap->ctty = (fhandler_termios *) fh->archetype; + if (cygheap->ctty) + { + fh->archetype_usecount (1); + /* guard ctty fh */ + report_tty_counts (cygheap->ctty, "ctty", ""); + } } } @@ -570,13 +578,14 @@ _pinfo::set_ctty (fhandler_termios *fh, int flags) an obvious bug surfaces. */ if (sid == pid && !tc.getsid ()) tc.setsid (sid); - sid = tc.getsid (); + if (CTTY_IS_VALID (ctty)) + sid = tc.getsid (); /* See above */ if ((!tc.getpgid () || being_debugged ()) && pgid == pid) tc.setpgid (pgid); } debug_printf ("cygheap->ctty now %p, archetype %p", cygheap->ctty, fh ? fh->archetype : NULL); - return ctty > 0; + return CTTY_IS_VALID (ctty); } /* Test to determine if a process really exists and is processing signals. @@ -597,6 +606,19 @@ _pinfo::alive () return !!h; } +static commune_result +commune_process_siginfo () +{ + commune_result res = { 0 }; + + res.pnd = sig_send (myself, __SIGPENDINGALL, NULL); + res.blk = cygheap->compute_sigblkmask (); + for (int sig = 1; sig < NSIG; ++sig) + if (global_sigs[sig].sa_handler == SIG_IGN) + res.ign |= SIGTOMASK (sig); + return res; +} + DWORD commune_process (void *arg) { @@ -673,13 +695,7 @@ commune_process (void *arg) case PICOM_SIGINFO: { sigproc_printf ("processing PICOM_SIGINFO"); - commune_result cr; - sigpending (&cr.pnd); - cr.pnd = sig_send (myself, __SIGPENDINGALL, NULL); - cr.blk = cygheap->compute_sigblkmask (); - for (int sig = 1; sig < NSIG; ++sig) - if (global_sigs[sig].sa_handler == SIG_IGN) - cr.ign |= SIGTOMASK (sig); + commune_result cr = commune_process_siginfo (); if (!WritePipeOverlapped (tothem, &cr, sizeof cr, &nr, 1000L)) sigproc_printf ("WritePipeOverlapped siginfo failed, %E"); break; @@ -1020,24 +1036,17 @@ _pinfo::root (size_t& n) int _pinfo::siginfo (sigset_t &pnd, sigset_t &blk, sigset_t &ign) { + commune_result cr; + if (!pid) return -1; if (pid != myself->pid && !ISSTATE (this, PID_NOTCYGWIN)) - { - commune_result cr = commune_request (PICOM_SIGINFO); - pnd = cr.pnd; - blk = cr.blk; - ign = cr.ign; - } + cr = commune_request (PICOM_SIGINFO); else - { - pnd = sig_send (myself, __SIGPENDINGALL, NULL); - blk = cygheap->compute_sigblkmask (); - ign = 0; - for (int sig = 1; sig < NSIG; ++sig) - if (global_sigs[sig].sa_handler == SIG_IGN) - ign |= SIGTOMASK (sig); - } + cr = commune_process_siginfo (); + pnd = cr.pnd; + blk = cr.blk; + ign = cr.ign; return -1; } diff --git a/winsup/cygwin/pseudo-reloc.cc b/winsup/cygwin/pseudo-reloc.cc index 895cacd7b0..5a0eab936b 100644 --- a/winsup/cygwin/pseudo-reloc.cc +++ b/winsup/cygwin/pseudo-reloc.cc @@ -85,7 +85,7 @@ __report_error (const char *msg, ...) char buf[128]; char *posix_module = NULL; static const char UNKNOWN_MODULE[] = ": "; - static const char CYGWIN_FAILURE_MSG[] = "MSYS runtime failure: "; + static const char CYGWIN_FAILURE_MSG[] = "Cygwin runtime failure: "; HANDLE errh = GetStdHandle (STD_ERROR_HANDLE); va_list args; diff --git a/winsup/cygwin/regex/COPYRIGHT b/winsup/cygwin/regex/COPYRIGHT index dc823b1245..574f6bcec6 100644 --- a/winsup/cygwin/regex/COPYRIGHT +++ b/winsup/cygwin/regex/COPYRIGHT @@ -32,6 +32,10 @@ to the following restrictions: * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. * 4. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. diff --git a/winsup/cygwin/regex/cname.h b/winsup/cygwin/regex/cname.h index c5c33f02c1..3419181aac 100644 --- a/winsup/cygwin/regex/cname.h +++ b/winsup/cygwin/regex/cname.h @@ -1,4 +1,6 @@ /*- + * SPDX-License-Identifier: BSD-3-Clause + * * Copyright (c) 1992, 1993, 1994 Henry Spencer. * Copyright (c) 1992, 1993, 1994 * The Regents of the University of California. All rights reserved. @@ -14,7 +16,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -31,7 +33,7 @@ * SUCH DAMAGE. * * @(#)cname.h 8.3 (Berkeley) 3/20/94 - * $FreeBSD: src/lib/libc/regex/cname.h,v 1.4 2007/01/09 00:28:04 imp Exp $ + * $FreeBSD$ */ /* character-name table */ @@ -108,7 +110,7 @@ static struct cname { {"four", '4'}, {"five", '5'}, {"six", '6'}, - {"seven", '7'}, + {"seven", '7'}, {"eight", '8'}, {"nine", '9'}, {"colon", ':'}, diff --git a/winsup/cygwin/regex/engine.c b/winsup/cygwin/regex/engine.c index 94e418505f..5e12ab7f37 100644 --- a/winsup/cygwin/regex/engine.c +++ b/winsup/cygwin/regex/engine.c @@ -1,4 +1,6 @@ /*- + * SPDX-License-Identifier: BSD-3-Clause + * * Copyright (c) 1992, 1993, 1994 Henry Spencer. * Copyright (c) 1992, 1993, 1994 * The Regents of the University of California. All rights reserved. @@ -14,7 +16,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -34,7 +36,9 @@ */ #include -__FBSDID("$FreeBSD: src/lib/libc/regex/engine.c,v 1.23 2009/09/16 06:32:23 dds Exp $"); +__FBSDID("$FreeBSD$"); + +#include /* * The matching engine and friends. This file is #included by regexec.c @@ -44,9 +48,9 @@ __FBSDID("$FreeBSD: src/lib/libc/regex/engine.c,v 1.23 2009/09/16 06:32:23 dds E */ #ifdef SNAMES +#define stepback sstepback #define matcher smatcher -#define fast sfast -#define slow sslow +#define walk swalk #define dissect sdissect #define backref sbackref #define step sstep @@ -55,9 +59,9 @@ __FBSDID("$FreeBSD: src/lib/libc/regex/engine.c,v 1.23 2009/09/16 06:32:23 dds E #define match smat #endif #ifdef LNAMES +#define stepback lstepback #define matcher lmatcher -#define fast lfast -#define slow lslow +#define walk lwalk #define dissect ldissect #define backref lbackref #define step lstep @@ -66,9 +70,9 @@ __FBSDID("$FreeBSD: src/lib/libc/regex/engine.c,v 1.23 2009/09/16 06:32:23 dds E #define match lmat #endif #ifdef MNAMES +#define stepback mstepback #define matcher mmatcher -#define fast mfast -#define slow mslow +#define walk mwalk #define dissect mdissect #define backref mbackref #define step mstep @@ -104,9 +108,8 @@ extern "C" { static int matcher(struct re_guts *g, const char *string, size_t nmatch, regmatch_t pmatch[], int eflags); static const char *dissect(struct match *m, const char *start, const char *stop, sopno startst, sopno stopst); static const char *backref(struct match *m, const char *start, const char *stop, sopno startst, sopno stopst, sopno lev, int); -static const char *fast(struct match *m, const char *start, const char *stop, sopno startst, sopno stopst); -static const char *slow(struct match *m, const char *start, const char *stop, sopno startst, sopno stopst); -static states step(struct re_guts *g, sopno start, sopno stop, states bef, wint_t ch, states aft); +static const char *walk(struct match *m, const char *start, const char *stop, sopno startst, sopno stopst, bool fast); +static states step(struct re_guts *g, sopno start, sopno stop, states bef, wint_t ch, states aft, int sflags); #define MAX_RECURSION 100 #define BOL (OUT-1) #define EOL (BOL-1) @@ -115,10 +118,12 @@ static states step(struct re_guts *g, sopno start, sopno stop, states bef, wint_ #define BOW (BOL-4) #define EOW (BOL-5) #define BADCHAR (BOL-6) -/* When using wint_t, which is defined as unsigned int on BSD, - as well as on Cygwin or Linux, the NONCHAR test is broken without - the below cast. I'm wondering how this is supposed to work at all... */ +#define NWBND (BOL-7) #define NONCHAR(c) ((int)(c) <= OUT) +/* sflags */ +#define SBOS 0x0001 +#define SEOS 0x0002 + #ifdef REDEBUG static void print(struct match *m, const char *caption, states st, int ch, FILE *d); #endif @@ -144,6 +149,39 @@ static const char *pchar(int ch); #define NOTE(s) /* nothing */ #endif +/* + * Given a multibyte string pointed to by start, step back nchar characters + * from current position pointed to by cur. + */ +static const char * +stepback(const char *start, const char *cur, int nchar) +{ + const char *ret; + int wc, mbc; + mbstate_t mbs; + size_t clen; + + if (MB_CUR_MAX == 1) + return ((cur - nchar) > start ? cur - nchar : NULL); + + ret = cur; + for (wc = nchar; wc > 0; wc--) { + for (mbc = 1; mbc <= MB_CUR_MAX; mbc++) { + if ((ret - mbc) < start) + return (NULL); + memset(&mbs, 0, sizeof(mbs)); + clen = mbrtowi(NULL, ret - mbc, mbc, &mbs); + if (clen != (size_t)-1 && clen != (size_t)-2) + break; + } + if (mbc > MB_CUR_MAX) + return (NULL); + ret -= mbc; + } + + return (ret); +} + /* - matcher - the actual matching engine == static int matcher(struct re_guts *g, const char *string, \ @@ -157,7 +195,7 @@ matcher(struct re_guts *g, int eflags) { const char *endp; - int i; + size_t i; struct match mv; struct match *m = &mv; const char *dp = NULL; @@ -247,17 +285,19 @@ matcher(struct re_guts *g, ZAPSTATE(&m->mbs); /* Adjust start according to moffset, to speed things up */ -#ifndef MNAMES - /* The code evaluating moffset doesn't seem to work right - in the multibyte case. */ - if (g->moffset > -1) - start = ((dp - g->moffset) < start) ? start : dp - g->moffset; -#endif + if (dp != NULL && g->moffset > -1) { + const char *nstart; + + nstart = stepback(start, dp, g->moffset); + if (nstart != NULL) + start = nstart; + } + SP("mloop", m->st, *start); /* this loop does only one repetition except for backrefs */ for (;;) { - endp = fast(m, start, stop, gf, gl); + endp = walk(m, start, stop, gf, gl, true); if (endp == NULL) { /* a miss */ if (m->pmatch != NULL) free((char *)m->pmatch); @@ -273,7 +313,7 @@ matcher(struct re_guts *g, assert(m->coldp != NULL); for (;;) { NOTE("finding start"); - endp = slow(m, m->coldp, stop, gf, gl); + endp = walk(m, m->coldp, stop, gf, gl, false); if (endp != NULL) break; assert(m->coldp < m->endp); @@ -318,7 +358,7 @@ matcher(struct re_guts *g, if (dp != NULL || endp <= m->coldp) break; /* defeat */ NOTE("backoff"); - endp = slow(m, m->coldp, endp-1, gf, gl); + endp = walk(m, m->coldp, endp-1, gf, gl, false); if (endp == NULL) break; /* defeat */ /* try it on a shorter possibility */ @@ -391,7 +431,7 @@ dissect(struct match *m, const char *ssp; /* start of string matched by subsubRE */ const char *sep; /* end of string matched by subsubRE */ const char *oldssp; /* previous ssp */ - const char *dp __attribute__ ((unused)); + const char *dp __unused; AT("diss", start, stop, startst, stopst); sp = start; @@ -404,7 +444,7 @@ dissect(struct match *m, es += OPND(m->g->strip[es]); break; case OCH_: - while (OP(m->g->strip[es]) != O_CH) + while (OP(m->g->strip[es]) != (sop)O_CH) es += OPND(m->g->strip[es]); break; } @@ -422,6 +462,10 @@ dissect(struct match *m, case OEOL: case OBOW: case OEOW: + case OBOS: + case OEOS: + case OWBND: + case ONWBND: break; case OANY: case OANYOF: @@ -436,10 +480,10 @@ dissect(struct match *m, stp = stop; for (;;) { /* how long could this one be? */ - rest = slow(m, sp, stp, ss, es); + rest = walk(m, sp, stp, ss, es, false); assert(rest != NULL); /* it did match */ /* could the rest match the rest? */ - tail = slow(m, rest, stop, es, stopst); + tail = walk(m, rest, stop, es, stopst, false); if (tail == stop) break; /* yes! */ /* no -- try a shorter match for this one */ @@ -449,7 +493,7 @@ dissect(struct match *m, ssub = ss + 1; esub = es - 1; /* did innards match? */ - if (slow(m, sp, rest, ssub, esub) != NULL) { + if (walk(m, sp, rest, ssub, esub, false) != NULL) { dp = dissect(m, sp, rest, ssub, esub); assert(dp == rest); } else /* no */ @@ -460,10 +504,10 @@ dissect(struct match *m, stp = stop; for (;;) { /* how long could this one be? */ - rest = slow(m, sp, stp, ss, es); + rest = walk(m, sp, stp, ss, es, false); assert(rest != NULL); /* it did match */ /* could the rest match the rest? */ - tail = slow(m, rest, stop, es, stopst); + tail = walk(m, rest, stop, es, stopst, false); if (tail == stop) break; /* yes! */ /* no -- try a shorter match for this one */ @@ -475,7 +519,7 @@ dissect(struct match *m, ssp = sp; oldssp = ssp; for (;;) { /* find last match of innards */ - sep = slow(m, ssp, rest, ssub, esub); + sep = walk(m, ssp, rest, ssub, esub, false); if (sep == NULL || sep == ssp) break; /* failed or matched null */ oldssp = ssp; /* on to next try */ @@ -487,7 +531,7 @@ dissect(struct match *m, ssp = oldssp; } assert(sep == rest); /* must exhaust substring */ - assert(slow(m, ssp, sep, ssub, esub) == rest); + assert(walk(m, ssp, sep, ssub, esub, false) == rest); dp = dissect(m, ssp, sep, ssub, esub); assert(dp == sep); sp = rest; @@ -496,10 +540,10 @@ dissect(struct match *m, stp = stop; for (;;) { /* how long could this one be? */ - rest = slow(m, sp, stp, ss, es); + rest = walk(m, sp, stp, ss, es, false); assert(rest != NULL); /* it did match */ /* could the rest match the rest? */ - tail = slow(m, rest, stop, es, stopst); + tail = walk(m, rest, stop, es, stopst, false); if (tail == stop) break; /* yes! */ /* no -- try a shorter match for this one */ @@ -510,7 +554,7 @@ dissect(struct match *m, esub = ss + OPND(m->g->strip[ss]) - 1; assert(OP(m->g->strip[esub]) == OOR1); for (;;) { /* find first matching branch */ - if (slow(m, sp, rest, ssub, esub) == rest) + if (walk(m, sp, rest, ssub, esub, false) == rest) break; /* it matched all of it */ /* that one missed, try next one */ assert(OP(m->g->strip[esub]) == OOR1); @@ -518,7 +562,7 @@ dissect(struct match *m, assert(OP(m->g->strip[esub]) == OOR2); ssub = esub + 1; esub += OPND(m->g->strip[esub]); - if (OP(m->g->strip[esub]) == OOR2) + if (OP(m->g->strip[esub]) == (sop)OOR2) esub--; else assert(OP(m->g->strip[esub]) == O_CH); @@ -554,6 +598,17 @@ dissect(struct match *m, return(sp); } +#define ISBOW(m, sp) \ + (sp < m->endp && ISWORD(*sp) && \ + ((sp == m->beginp && !(m->eflags®_NOTBOL)) || \ + (sp > m->offp && !ISWORD(*(sp-1))))) +#define ISEOW(m, sp) \ + (((sp == m->endp && !(m->eflags®_NOTEOL)) || \ + (sp < m->endp && *sp == '\n' && \ + (m->g->cflags®_NEWLINE)) || \ + (sp < m->endp && !ISWORD(*sp)) ) && \ + (sp > m->beginp && ISWORD(*(sp-1)))) \ + /* - backref - figure out what matched what, figuring in back references == static const char *backref(struct match *m, const char *start, \ @@ -611,10 +666,22 @@ backref(struct match *m, if (wc == BADCHAR || !CHIN(cs, wc)) return(NULL); break; + case OBOS: + if (sp == m->beginp && (m->eflags & REG_NOTBOL) == 0) + { /* yes */ } + else + return(NULL); + break; + case OEOS: + if (sp == m->endp && (m->eflags & REG_NOTEOL) == 0) + { /* yes */ } + else + return(NULL); + break; case OBOL: - if ( (sp == m->beginp && !(m->eflags®_NOTBOL)) || - (sp < m->endp && *(sp-1) == '\n' && - (m->g->cflags®_NEWLINE)) ) + if ((sp == m->beginp && !(m->eflags®_NOTBOL)) || + (sp > m->offp && sp < m->endp && + *(sp-1) == '\n' && (m->g->cflags®_NEWLINE))) { /* yes */ } else return(NULL); @@ -627,23 +694,29 @@ backref(struct match *m, else return(NULL); break; + case OWBND: + if (ISBOW(m, sp) || ISEOW(m, sp)) + { /* yes */ } + else + return(NULL); + break; + case ONWBND: + if (((sp == m->beginp) && !ISWORD(*sp)) || + (sp == m->endp && !ISWORD(*(sp - 1)))) + { /* yes, beginning/end of subject */ } + else if (ISWORD(*(sp - 1)) == ISWORD(*sp)) + { /* yes, beginning/end of subject */ } + else + return(NULL); + break; case OBOW: - if (( (sp == m->beginp && !(m->eflags®_NOTBOL)) || - (sp < m->endp && *(sp-1) == '\n' && - (m->g->cflags®_NEWLINE)) || - (sp > m->beginp && - !ISWORD(*(sp-1))) ) && - (sp < m->endp && ISWORD(*sp)) ) + if (ISBOW(m, sp)) { /* yes */ } else return(NULL); break; case OEOW: - if (( (sp == m->endp && !(m->eflags®_NOTEOL)) || - (sp < m->endp && *sp == '\n' && - (m->g->cflags®_NEWLINE)) || - (sp < m->endp && !ISWORD(*sp)) ) && - (sp > m->beginp && ISWORD(*(sp-1))) ) + if (ISEOW(m, sp)) { /* yes */ } else return(NULL); @@ -656,7 +729,7 @@ backref(struct match *m, do { assert(OP(s) == OOR2); ss += OPND(s); - } while (OP(s = m->g->strip[ss]) != O_CH); + } while (OP(s = m->g->strip[ss]) != (sop)O_CH); /* note that the ss++ gets us past the O_CH */ break; default: /* have to make a choice */ @@ -689,22 +762,19 @@ backref(struct match *m, ssp = m->offp + m->pmatch[i].rm_so; if (memcmp(sp, ssp, len) != 0) return(NULL); - while (m->g->strip[ss] != SOP(O_BACK, i)) + while (m->g->strip[ss] != (sop)SOP(O_BACK, i)) ss++; return(backref(m, sp+len, stop, ss+1, stopst, lev, rec)); - break; case OQUEST_: /* to null or not */ dp = backref(m, sp, stop, ss+1, stopst, lev, rec); if (dp != NULL) return(dp); /* not */ return(backref(m, sp, stop, ss+OPND(s)+1, stopst, lev, rec)); - break; case OPLUS_: assert(m->lastpos != NULL); assert(lev+1 <= m->g->nplus); m->lastpos[lev+1] = sp; return(backref(m, sp, stop, ss+1, stopst, lev+1, rec)); - break; case O_PLUS: if (sp == m->lastpos[lev]) /* last pass matched null */ return(backref(m, sp, stop, ss+1, stopst, lev-1, rec)); @@ -715,7 +785,6 @@ backref(struct match *m, return(backref(m, sp, stop, ss+1, stopst, lev-1, rec)); else return(dp); - break; case OCH_: /* find the right one, if any */ ssub = ss + 1; esub = ss + OPND(s) - 1; @@ -725,17 +794,18 @@ backref(struct match *m, if (dp != NULL) return(dp); /* that one missed, try next one */ - if (OP(m->g->strip[esub]) == O_CH) + if (OP(m->g->strip[esub]) == (sop)O_CH) return(NULL); /* there is none */ esub++; - assert(OP(m->g->strip[esub]) == OOR2); + assert(OP(m->g->strip[esub]) == (sop)OOR2); ssub = esub + 1; esub += OPND(m->g->strip[esub]); - if (OP(m->g->strip[esub]) == OOR2) + if (OP(m->g->strip[esub]) == (sop)OOR2) esub--; else assert(OP(m->g->strip[esub]) == O_CH); } + /* NOTREACHED */ break; case OLPAREN: /* must undo assignment if rest fails */ i = OPND(s); @@ -747,7 +817,6 @@ backref(struct match *m, return(dp); m->pmatch[i].rm_so = offsave; return(NULL); - break; case ORPAREN: /* must undo assignment if rest fails */ i = OPND(s); assert(0 < i && i <= m->g->nsub); @@ -758,7 +827,6 @@ backref(struct match *m, return(dp); m->pmatch[i].rm_eo = offsave; return(NULL); - break; default: /* uh oh */ assert(nope); break; @@ -771,141 +839,36 @@ backref(struct match *m, } /* - - fast - step through the string at top speed - == static const char *fast(struct match *m, const char *start, \ - == const char *stop, sopno startst, sopno stopst); + - walk - step through the string either quickly or slowly + == static const char *walk(struct match *m, const char *start, \ + == const char *stop, sopno startst, sopno stopst, bool fast); */ -static const char * /* where tentative match ended, or NULL */ -fast( struct match *m, - const char *start, - const char *stop, - sopno startst, - sopno stopst) +static const char * /* where it ended, or NULL */ +walk(struct match *m, const char *start, const char *stop, sopno startst, + sopno stopst, bool fast) { states st = m->st; states fresh = m->fresh; - states tmp = m->tmp; - const char *p = start; - wint_t c; - wint_t lastc; /* previous c */ - wint_t flagch; - int i; - const char *coldp; /* last p after which no match was underway */ - size_t clen; - - CLEAR(st); - SET1(st, startst); - SP("fast", st, *p); - st = step(m->g, startst, stopst, st, NOTHING, st); - ASSIGN(fresh, st); - SP("start", st, *p); - coldp = NULL; - if (start == m->beginp) - c = OUT; - else { - /* - * XXX Wrong if the previous character was multi-byte. - * Newline never is (in encodings supported by FreeBSD), - * so this only breaks the ISWORD tests below. - */ - c = (uch)*(start - 1); - } - for (;;) { - /* next character */ - lastc = c; - if (p == m->endp) { - clen = 0; - c = OUT; - } else - clen = XMBRTOWC(&c, p, m->endp - p, &m->mbs, BADCHAR); - if (EQ(st, fresh)) - coldp = p; - - /* is there an EOL and/or BOL between lastc and c? */ - flagch = '\0'; - i = 0; - if ( (lastc == '\n' && m->g->cflags®_NEWLINE) || - (lastc == OUT && !(m->eflags®_NOTBOL)) ) { - flagch = BOL; - i = m->g->nbol; - } - if ( (c == '\n' && m->g->cflags®_NEWLINE) || - (c == OUT && !(m->eflags®_NOTEOL)) ) { - flagch = (flagch == BOL) ? BOLEOL : EOL; - i += m->g->neol; - } - if (i != 0) { - for (; i > 0; i--) - st = step(m->g, startst, stopst, st, flagch, st); - SP("boleol", st, c); - } - - /* how about a word boundary? */ - if ( (flagch == BOL || (lastc != OUT && !ISWORD(lastc))) && - (c != OUT && ISWORD(c)) ) { - flagch = BOW; - } - if ( (lastc != OUT && ISWORD(lastc)) && - (flagch == EOL || (c != OUT && !ISWORD(c))) ) { - flagch = EOW; - } - if (flagch == BOW || flagch == EOW) { - st = step(m->g, startst, stopst, st, flagch, st); - SP("boweow", st, c); - } - - /* are we done? */ - if (ISSET(st, stopst) || p == stop || clen > stop - p) - break; /* NOTE BREAK OUT */ - - /* no, we must deal with this character */ - ASSIGN(tmp, st); - ASSIGN(st, fresh); - assert(c != OUT); - st = step(m->g, startst, stopst, tmp, c, st); - SP("aft", st, c); - assert(EQ(step(m->g, startst, stopst, st, NOTHING, st), st)); - p += clen; - } - - assert(coldp != NULL); - m->coldp = coldp; - if (ISSET(st, stopst)) - return(p+XMBRTOWC(NULL, p, stop - p, &m->mbs, 0)); - else - return(NULL); -} - -/* - - slow - step through the string more deliberately - == static const char *slow(struct match *m, const char *start, \ - == const char *stop, sopno startst, sopno stopst); - */ -static const char * /* where it ended */ -slow( struct match *m, - const char *start, - const char *stop, - sopno startst, - sopno stopst) -{ - states st = m->st; states empty = m->empty; states tmp = m->tmp; const char *p = start; wint_t c; wint_t lastc; /* previous c */ wint_t flagch; - int i; + int i, sflags; const char *matchp; /* last p at which a match ended */ size_t clen; + sflags = 0; AT("slow", start, stop, startst, stopst); CLEAR(st); SET1(st, startst); SP("sstart", st, *p); - st = step(m->g, startst, stopst, st, NOTHING, st); + st = step(m->g, startst, stopst, st, NOTHING, st, sflags); + if (fast) + ASSIGN(fresh, st); matchp = NULL; - if (start == m->beginp) + if (start == m->offp || (start == m->beginp && !(m->eflags®_NOTBOL))) c = OUT; else { /* @@ -918,12 +881,16 @@ slow( struct match *m, for (;;) { /* next character */ lastc = c; + sflags = 0; if (p == m->endp) { c = OUT; clen = 0; } else clen = XMBRTOWC(&c, p, m->endp - p, &m->mbs, BADCHAR); + if (fast && EQ(st, fresh)) + matchp = p; + /* is there an EOL and/or BOL between lastc and c? */ flagch = '\0'; i = 0; @@ -937,9 +904,20 @@ slow( struct match *m, flagch = (flagch == BOL) ? BOLEOL : EOL; i += m->g->neol; } + if (lastc == OUT && (m->eflags & REG_NOTBOL) == 0) { + sflags |= SBOS; + /* Step one more for BOS. */ + i++; + } + if (c == OUT && (m->eflags & REG_NOTEOL) == 0) { + sflags |= SEOS; + /* Step one more for EOS. */ + i++; + } if (i != 0) { for (; i > 0; i--) - st = step(m->g, startst, stopst, st, flagch, st); + st = step(m->g, startst, stopst, st, flagch, st, + sflags); SP("sboleol", st, c); } @@ -953,30 +931,56 @@ slow( struct match *m, flagch = EOW; } if (flagch == BOW || flagch == EOW) { - st = step(m->g, startst, stopst, st, flagch, st); + st = step(m->g, startst, stopst, st, flagch, st, sflags); SP("sboweow", st, c); } + if (lastc != OUT && c != OUT && + ISWORD(lastc) == ISWORD(c)) { + flagch = NWBND; + } else if ((lastc == OUT && !ISWORD(c)) || + (c == OUT && !ISWORD(lastc))) { + flagch = NWBND; + } + if (flagch == NWBND) { + st = step(m->g, startst, stopst, st, flagch, st, sflags); + SP("snwbnd", st, c); + } /* are we done? */ - if (ISSET(st, stopst)) - matchp = p; - if (EQ(st, empty) || p == stop || clen > stop - p) + if (ISSET(st, stopst)) { + if (fast) + break; + else + matchp = p; + } + if (EQ(st, empty) || p == stop || clen > (size_t)(stop - p)) break; /* NOTE BREAK OUT */ /* no, we must deal with this character */ ASSIGN(tmp, st); - ASSIGN(st, empty); + if (fast) + ASSIGN(st, fresh); + else + ASSIGN(st, empty); assert(c != OUT); - st = step(m->g, startst, stopst, tmp, c, st); + st = step(m->g, startst, stopst, tmp, c, st, sflags); SP("saft", st, c); - assert(EQ(step(m->g, startst, stopst, st, NOTHING, st), st)); + assert(EQ(step(m->g, startst, stopst, st, NOTHING, st, sflags), + st)); p += clen; } - return(matchp); + if (fast) { + assert(matchp != NULL); + m->coldp = matchp; + if (ISSET(st, stopst)) + return (p + XMBRTOWC(NULL, p, stop - p, &m->mbs, 0)); + else + return (NULL); + } else + return (matchp); } - /* - step - map set of states reachable before char to set reachable after == static states step(struct re_guts *g, sopno start, sopno stop, \ @@ -996,7 +1000,8 @@ step(struct re_guts *g, sopno stop, /* state after stop state within strip */ states bef, /* states reachable before */ wint_t ch, /* character or NONCHAR code */ - states aft) /* states already known reachable after */ + states aft, /* states already known reachable after */ + int sflags) /* state flags */ { cset *cs; sop s; @@ -1017,6 +1022,14 @@ step(struct re_guts *g, if (ch == OPND(s)) FWD(aft, bef, 1); break; + case OBOS: + if ((ch == BOL || ch == BOLEOL) && (sflags & SBOS) != 0) + FWD(aft, bef, 1); + break; + case OEOS: + if ((ch == EOL || ch == BOLEOL) && (sflags & SEOS) != 0) + FWD(aft, bef, 1); + break; case OBOL: if (ch == BOL || ch == BOLEOL) FWD(aft, bef, 1); @@ -1033,6 +1046,14 @@ step(struct re_guts *g, if (ch == EOW) FWD(aft, bef, 1); break; + case OWBND: + if (ch == BOW || ch == EOW) + FWD(aft, bef, 1); + break; + case ONWBND: + if (ch == NWBND) + FWD(aft, aft, 1); + break; case OANY: if (!NONCHAR(ch)) FWD(aft, bef, 1); @@ -1072,22 +1093,22 @@ step(struct re_guts *g, break; case OCH_: /* mark the first two branches */ FWD(aft, aft, 1); - assert(OP(g->strip[pc+OPND(s)]) == OOR2); + assert(OP(g->strip[pc+OPND(s)]) == (sop)OOR2); FWD(aft, aft, OPND(s)); break; case OOR1: /* done a branch, find the O_CH */ if (ISSTATEIN(aft, here)) { for (look = 1; - OP(s = g->strip[pc+look]) != O_CH; - look += OPND(s)) - assert(OP(s) == OOR2); + OP(s = g->strip[pc+look]) != (sop)O_CH; + look += OPND(s)) + assert(OP(s) == (sop)OOR2); FWD(aft, aft, look + 1); } break; case OOR2: /* propagate OCH_'s marking */ FWD(aft, aft, 1); - if (OP(g->strip[pc+OPND(s)]) != O_CH) { - assert(OP(g->strip[pc+OPND(s)]) == OOR2); + if (OP(g->strip[pc+OPND(s)]) != (sop)O_CH) { + assert(OP(g->strip[pc+OPND(s)]) == (sop)OOR2); FWD(aft, aft, OPND(s)); } break; @@ -1119,7 +1140,7 @@ print(struct match *m, FILE *d) { struct re_guts *g = m->g; - int i; + sopno i; int first = 1; if (!(m->eflags®_TRACE)) @@ -1130,7 +1151,7 @@ print(struct match *m, fprintf(d, " %s", pchar(ch)); for (i = 0; i < g->nstates; i++) if (ISSET(st, i)) { - fprintf(d, "%s%d", (first) ? "\t" : ", ", i); + fprintf(d, "%s%lu", (first) ? "\t" : ", ", i); first = 0; } fprintf(d, "\n"); @@ -1186,9 +1207,9 @@ pchar(int ch) #endif #endif +#undef stepback #undef matcher -#undef fast -#undef slow +#undef walk #undef dissect #undef backref #undef step diff --git a/winsup/cygwin/regex/regcomp.c b/winsup/cygwin/regex/regcomp.c index a377e56fac..7899ae7fce 100644 --- a/winsup/cygwin/regex/regcomp.c +++ b/winsup/cygwin/regex/regcomp.c @@ -1,8 +1,15 @@ /*- + * SPDX-License-Identifier: BSD-3-Clause + * * Copyright (c) 1992, 1993, 1994 Henry Spencer. * Copyright (c) 1992, 1993, 1994 * The Regents of the University of California. All rights reserved. * + * Copyright (c) 2011 The FreeBSD Foundation + * + * Portions of this software were developed by David Chisnall + * under sponsorship from the FreeBSD Foundation. + * * This code is derived from software contributed to Berkeley by * Henry Spencer. * @@ -14,7 +21,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -37,12 +44,8 @@ static char sccsid[] = "@(#)regcomp.c 8.5 (Berkeley) 3/20/94"; #endif /* LIBC_SCCS and not lint */ #include -__FBSDID("$FreeBSD: src/lib/libc/regex/regcomp.c,v 1.36 2007/06/11 03:05:54 delphij Exp $"); +__FBSDID("$FreeBSD$"); -#ifdef __CYGWIN__ -#include "winsup.h" -#include "../locale/setlocale.h" -#endif #include #include #include @@ -50,27 +53,53 @@ __FBSDID("$FreeBSD: src/lib/libc/regex/regcomp.c,v 1.36 2007/06/11 03:05:54 delp #include #include #include -#ifndef __CYGWIN__ -#include -#endif +#include #include #include +/* We want the extensions implemented with LIBREGEX... */ +#ifdef __CYGWIN__ +#define LIBREGEX +#endif + +/* ...but we also want to use the collation functions from nlsfuncs.cc. */ +#if 1//ndef LIBREGEX #include "collate.h" +#endif +#include "winsup.h" #include "utils.h" #include "regex2.h" #include "cname.h" +/* + * Branching context, used to keep track of branch state for all of the branch- + * aware functions. In addition to keeping track of branch positions for the + * p_branch_* functions, we use this to simplify some clumsiness in BREs for + * detection of whether ^ is acting as an anchor or being used erroneously and + * also for whether we're in a sub-expression or not. + */ +struct branchc { + sopno start; + sopno back; + sopno fwd; + + int nbranch; + int nchain; + bool outer; + bool terminate; +}; + /* * parse structure, passed up and down to avoid global variables and * other clumsinesses */ struct parse { - char *next; /* next character in RE */ - char *end; /* end of string (-> NUL normally) */ + const char *next; /* next character in RE */ + const char *end; /* end of string (-> NUL normally) */ int error; /* has an error been seen? */ + int gnuext; sop *strip; /* malloced strip */ sopno ssize; /* malloced strip size (allocated) */ sopno slen; /* malloced strip length (used) */ @@ -79,34 +108,44 @@ struct parse { # define NPAREN 10 /* we need to remember () 1-9 for back refs */ sopno pbegin[NPAREN]; /* -> ( ([0] unused) */ sopno pend[NPAREN]; /* -> ) ([0] unused) */ + bool allowbranch; /* can this expression branch? */ + bool bre; /* convenience; is this a BRE? */ + int pflags; /* other parsing flags -- legacy escapes? */ + bool (*parse_expr)(struct parse *, struct branchc *); + void (*pre_parse)(struct parse *, struct branchc *); + void (*post_parse)(struct parse *, struct branchc *); }; +#define PFLAG_LEGACY_ESC 0x00000001 + /* ========= begin header generated by ./mkh ========= */ #ifdef __cplusplus extern "C" { #endif /* === regcomp.c === */ -#ifdef __CYGWIN__ /* Defined below `int stop'. Our gcc chokes on that. */ -static void p_ere(struct parse *p, int stop); -#else -static void p_ere(struct parse *p, wint_t stop); -#endif -static void p_ere_exp(struct parse *p); +static bool p_ere_exp(struct parse *p, struct branchc *bc); static void p_str(struct parse *p); -#ifdef __CYGWIN__ /* Defined below `int end1/end2'. Our gcc chokes on that. */ -static void p_bre(struct parse *p, int end1, int end2); -#else -static void p_bre(struct parse *p, wint_t end1, wint_t end2); -#endif -static int p_simp_re(struct parse *p, int starordinary); +static int p_branch_eat_delim(struct parse *p, struct branchc *bc); +static void p_branch_ins_offset(struct parse *p, struct branchc *bc); +static void p_branch_fix_tail(struct parse *p, struct branchc *bc); +static bool p_branch_empty(struct parse *p, struct branchc *bc); +static bool p_branch_do(struct parse *p, struct branchc *bc); +static void p_bre_pre_parse(struct parse *p, struct branchc *bc); +static void p_bre_post_parse(struct parse *p, struct branchc *bc); +static void p_re(struct parse *p, int end1, int end2); +static bool p_simp_re(struct parse *p, struct branchc *bc); static int p_count(struct parse *p); static void p_bracket(struct parse *p); +static int p_range_cmp(wint_t c1, wint_t c2); static void p_b_term(struct parse *p, cset *cs); +static int p_b_pseudoclass(struct parse *p, char c); static void p_b_cclass(struct parse *p, cset *cs); +static void p_b_cclass_named(struct parse *p, cset *cs, const char[]); static void p_b_eclass(struct parse *p, cset *cs); static wint_t p_b_symbol(struct parse *p); static wint_t p_b_coll_elem(struct parse *p, wint_t endc); +static bool may_escape(struct parse *p, const wint_t ch); static wint_t othercase(wint_t ch); static void bothcases(struct parse *p, wint_t ch); static void ordinary(struct parse *p, wint_t ch); @@ -123,7 +162,7 @@ static sopno dupl(struct parse *p, sopno start, sopno finish); static void doemit(struct parse *p, sop op, size_t opnd); static void doinsert(struct parse *p, sop op, size_t opnd, sopno pos); static void dofwd(struct parse *p, sopno pos, sop value); -static void enlarge(struct parse *p, sopno size); +static int enlarge(struct parse *p, sopno size); static void stripsnug(struct parse *p, struct re_guts *g); static void findmust(struct parse *p, struct re_guts *g); static int altoffset(sop *scan, int offset); @@ -131,7 +170,6 @@ static void computejumps(struct parse *p, struct re_guts *g); static void computematchjumps(struct parse *p, struct re_guts *g); static sopno pluscount(struct parse *p, struct re_guts *g); static wint_t wgetnext(struct parse *p); -static size_t xwcrtomb (char *s, wint_t wc, mbstate_t *ps); #ifdef __cplusplus } @@ -146,12 +184,14 @@ static char nuls[10]; /* place to point scanner in event of error */ */ #define PEEK() (*p->next) #define PEEK2() (*(p->next+1)) -#define MORE() (p->next < p->end) -#define MORE2() (p->next+1 < p->end) +#define MORE() (p->end - p->next > 0) +#define MORE2() (p->end - p->next > 1) #define SEE(c) (MORE() && PEEK() == (c)) -#define SEETWO(a, b) (MORE() && MORE2() && PEEK() == (a) && PEEK2() == (b)) +#define SEETWO(a, b) (MORE2() && PEEK() == (a) && PEEK2() == (b)) +#define SEESPEC(a) (p->bre ? SEETWO('\\', a) : SEE(a)) #define EAT(c) ((SEE(c)) ? (NEXT(), 1) : 0) #define EATTWO(a, b) ((SEETWO(a, b)) ? (NEXT2(), 1) : 0) +#define EATSPEC(a) (p->bre ? EATTWO('\\', a) : EAT(a)) #define NEXT() (p->next++) #define NEXT2() (p->next += 2) #define NEXTn(n) (p->next += (n)) @@ -171,37 +211,20 @@ static char nuls[10]; /* place to point scanner in event of error */ #define THERETHERE() (p->slen - 2) #define DROP(n) (p->slen -= (n)) -#ifndef NDEBUG -static int never = 0; /* for use in asserts; shuts lint up */ -#else -#define never 0 /* some s have bugs too */ -#endif - /* Macro used by computejump()/computematchjump() */ #define MIN(a,b) ((a)<(b)?(a):(b)) -/* - - regcomp - interface for parser and compilation - = extern int regcomp(regex_t *, const char *, int); - = #define REG_BASIC 0000 - = #define REG_EXTENDED 0001 - = #define REG_ICASE 0002 - = #define REG_NOSUB 0004 - = #define REG_NEWLINE 0010 - = #define REG_NOSPEC 0020 - = #define REG_PEND 0040 - = #define REG_DUMP 0200 - */ -int /* 0 success, otherwise REG_something */ -regcomp(regex_t * __restrict preg, +static int /* 0 success, otherwise REG_something */ +regcomp_internal(regex_t * __restrict preg, const char * __restrict pattern, - int cflags) + int cflags, int pflags) { struct parse pa; struct re_guts *g; struct parse *p = &pa; int i; size_t len; + size_t maxlen; #ifdef REDEBUG # define GOODFLAGS(f) (f) #else @@ -217,13 +240,29 @@ regcomp(regex_t * __restrict preg, return(REG_INVARG); len = preg->re_endp - pattern; } else - len = strlen((char *)pattern); + len = strlen(pattern); /* do the mallocs early so failure handling is easy */ g = (struct re_guts *)malloc(sizeof(struct re_guts)); if (g == NULL) return(REG_ESPACE); + /* + * Limit the pattern space to avoid a 32-bit overflow on buffer + * extension. Also avoid any signed overflow in case of conversion + * so make the real limit based on a 31-bit overflow. + * + * Likely not applicable on 64-bit systems but handle the case + * generically (who are we to stop people from using ~715MB+ + * patterns?). + */ + maxlen = ((size_t)-1 >> 1) / sizeof(sop) * 2 / 3; + if (len >= maxlen) { + free((char *)g); + return(REG_ESPACE); + } p->ssize = len/(size_t)2*(size_t)3 + (size_t)1; /* ugh */ + assert(p->ssize >= len); + p->strip = (sop *)malloc(p->ssize * sizeof(sop)); p->slen = 0; if (p->strip == NULL) { @@ -233,14 +272,36 @@ regcomp(regex_t * __restrict preg, /* set things up */ p->g = g; - p->next = (char *)pattern; /* convenience; we do not modify it */ + p->next = pattern; /* convenience; we do not modify it */ p->end = p->next + len; p->error = 0; p->ncsalloc = 0; + p->pflags = pflags; for (i = 0; i < NPAREN; i++) { p->pbegin[i] = 0; p->pend[i] = 0; } +#ifdef LIBREGEX + if (cflags®_POSIX) { + p->gnuext = false; + p->allowbranch = (cflags & REG_EXTENDED) != 0; + } else + p->gnuext = p->allowbranch = true; +#else + p->gnuext = false; + p->allowbranch = (cflags & REG_EXTENDED) != 0; +#endif + if (cflags & REG_EXTENDED) { + p->bre = false; + p->parse_expr = p_ere_exp; + p->pre_parse = NULL; + p->post_parse = NULL; + } else { + p->bre = true; + p->parse_expr = p_simp_re; + p->pre_parse = p_bre_pre_parse; + p->post_parse = p_bre_post_parse; + } g->sets = NULL; g->ncsets = 0; g->cflags = cflags; @@ -258,12 +319,10 @@ regcomp(regex_t * __restrict preg, /* do it */ EMIT(OEND, 0); g->firststate = THERE(); - if (cflags®_EXTENDED) - p_ere(p, OUT); - else if (cflags®_NOSPEC) + if (cflags & REG_NOSPEC) p_str(p); else - p_bre(p, OUT, OUT); + p_re(p, OUT, OUT); EMIT(OEND, 0); g->laststate = THERE(); @@ -277,7 +336,7 @@ regcomp(regex_t * __restrict preg, computejumps(p, g); computematchjumps(p, g); if(g->matchjump == NULL && g->charjump != NULL) { - free(g->charjump); + free(&g->charjump[CHAR_MIN]); g->charjump = NULL; } } @@ -299,71 +358,69 @@ regcomp(regex_t * __restrict preg, } /* - - p_ere - ERE parser top level, concatenation and alternation - == static void p_ere(struct parse *p, int stop); + - regcomp - interface for parser and compilation + = extern int regcomp(regex_t *, const char *, int); + = #define REG_BASIC 0000 + = #define REG_EXTENDED 0001 + = #define REG_ICASE 0002 + = #define REG_NOSUB 0004 + = #define REG_NEWLINE 0010 + = #define REG_NOSPEC 0020 + = #define REG_PEND 0040 + = #define REG_DUMP 0200 */ -static void -p_ere(struct parse *p, - int stop) /* character this ERE should end at */ +int /* 0 success, otherwise REG_something */ +regcomp(regex_t * __restrict preg, + const char * __restrict pattern, + int cflags) { - char c; - sopno prevback = 0; - sopno prevfwd = 0; - sopno conc; - int first = 1; /* is this the first alternative? */ - - for (;;) { - /* do a bunch of concatenated expressions */ - conc = HERE(); - while (MORE() && (c = PEEK()) != '|' && c != stop) - p_ere_exp(p); -#ifndef __CYGWIN__ - /* undefined behaviour according to POSIX; allowed by glibc */ - (void)REQUIRE(HERE() != conc, REG_EMPTY); /* require nonempty */ -#endif - - if (!EAT('|')) - break; /* NOTE BREAK OUT */ - if (first) { - INSERT(OCH_, conc); /* offset is wrong */ - prevfwd = conc; - prevback = conc; - first = 0; - } - ASTERN(OOR1, prevback); - prevback = THERE(); - AHEAD(prevfwd); /* fix previous offset */ - prevfwd = HERE(); - EMIT(OOR2, 0); /* offset is very wrong */ - } + return (regcomp_internal(preg, pattern, cflags, 0)); +} - if (!first) { /* tail-end fixups */ - AHEAD(prevfwd); - ASTERN(O_CH, prevback); - } +#ifndef LIBREGEX +/* + * Legacy interface that requires more lax escaping behavior. + */ +int +freebsd12_regcomp(regex_t * __restrict preg, + const char * __restrict pattern, + int cflags, int pflags) +{ - assert(!MORE() || SEE(stop)); + return (regcomp_internal(preg, pattern, cflags, PFLAG_LEGACY_ESC)); } +__sym_compat(regcomp, freebsd12_regcomp, FBSD_1.0); +#endif /* !LIBREGEX */ + /* - - p_ere_exp - parse one subERE, an atom possibly followed by a repetition op - == static void p_ere_exp(struct parse *p); + - p_ere_exp - parse one subERE, an atom possibly followed by a repetition op, + - return whether we should terminate or not + == static bool p_ere_exp(struct parse *p); */ -static void -p_ere_exp(struct parse *p) +static bool +p_ere_exp(struct parse *p, struct branchc *bc) { char c; wint_t wc; sopno pos; int count; int count2; +#ifdef LIBREGEX + int i; + int handled; +#endif sopno subno; int wascaret = 0; + (void)bc; assert(MORE()); /* caller should have ensured this */ c = GETNEXT(); +#ifdef LIBREGEX + handled = 0; +#endif pos = HERE(); switch (c) { case '(': @@ -374,7 +431,7 @@ p_ere_exp(struct parse *p) p->pbegin[subno] = HERE(); EMIT(OLPAREN, subno); if (!SEE(')')) - p_ere(p, ')'); + p_re(p, ')', IGN); if (subno < NPAREN) { p->pend[subno] = HERE(); assert(p->pend[subno] != 0); @@ -411,6 +468,7 @@ p_ere_exp(struct parse *p) case '*': case '+': case '?': + case '{': SETERROR(REG_BADRPT); break; case '.': @@ -425,28 +483,77 @@ p_ere_exp(struct parse *p) case '\\': (void)REQUIRE(MORE(), REG_EESCAPE); wc = WGETNEXT(); -#ifdef __CYGWIN__ - /* \< and \> are the GNU equivalents to [[:<:]] and [[:>:]] */ - switch (wc) - { - case L'<': - EMIT(OBOW, 0); - break; - case L'>': - EMIT(OEOW, 0); - break; - default: - ordinary(p, wc); - break; - } -#else - ordinary(p, wc); +#ifdef LIBREGEX + if (p->gnuext) { + handled = 1; + switch (wc) { + case '`': + EMIT(OBOS, 0); + break; + case '\'': + EMIT(OEOS, 0); + break; + case 'B': + EMIT(ONWBND, 0); + break; + case 'b': + EMIT(OWBND, 0); + break; + case 'W': + case 'w': + case 'S': + case 's': + p_b_pseudoclass(p, wc); + break; + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + i = wc - '0'; + assert(i < NPAREN); + if (p->pend[i] != 0) { + assert(i <= p->g->nsub); + EMIT(OBACK_, i); + assert(p->pbegin[i] != 0); + assert(OP(p->strip[p->pbegin[i]]) == OLPAREN); + assert(OP(p->strip[p->pend[i]]) == ORPAREN); + (void) dupl(p, p->pbegin[i]+1, p->pend[i]); + EMIT(O_BACK, i); + } else + SETERROR(REG_ESUBREG); + p->g->backrefs = 1; + break; + default: + handled = 0; + } + /* Don't proceed to the POSIX bits if we've already handled it */ + if (handled) + break; + } #endif + switch (wc) { + case '<': + EMIT(OBOW, 0); + break; + case '>': + EMIT(OEOW, 0); + break; + default: + if (may_escape(p, wc)) + ordinary(p, wc); + else + SETERROR(REG_EESCAPE); + break; + } break; - case '{': /* okay as ordinary except if digit follows */ - (void)REQUIRE(!MORE() || !isdigit((uch)PEEK()), REG_BADRPT); - fallthrough; default: + if (p->error != 0) + return (false); p->next--; wc = WGETNEXT(); ordinary(p, wc); @@ -454,12 +561,14 @@ p_ere_exp(struct parse *p) } if (!MORE()) - return; + return (false); c = PEEK(); /* we call { a repetition if followed by a digit */ - if (!( c == '*' || c == '+' || c == '?' || - (c == '{' && MORE2() && isdigit((uch)PEEK2())) )) - return; /* no repetition, we're done */ + if (!( c == '*' || c == '+' || c == '?' || c == '{')) + return (false); /* no repetition, we're done */ + else if (c == '{') + (void)REQUIRE(MORE2() && \ + (isdigit((uch)PEEK2()) || PEEK2() == ','), REG_BADRPT); NEXT(); (void)REQUIRE(!wascaret, REG_BADRPT); @@ -505,12 +614,13 @@ p_ere_exp(struct parse *p) } if (!MORE()) - return; + return (false); c = PEEK(); if (!( c == '*' || c == '+' || c == '?' || (c == '{' && MORE2() && isdigit((uch)PEEK2())) ) ) - return; + return (false); SETERROR(REG_BADRPT); + return (false); } /* @@ -526,142 +636,321 @@ p_str(struct parse *p) } /* - - p_bre - BRE parser top level, anchoring and concatenation - == static void p_bre(struct parse *p, int end1, \ - == int end2); - * Giving end1 as OUT essentially eliminates the end1/end2 check. - * - * This implementation is a bit of a kludge, in that a trailing $ is first - * taken as an ordinary character and then revised to be an anchor. - * The amount of lookahead needed to avoid this kludge is excessive. + * Eat consecutive branch delimiters for the kind of expression that we are + * parsing, return the number of delimiters that we ate. + */ +static int +p_branch_eat_delim(struct parse *p, struct branchc *bc) +{ + int nskip; + + (void)bc; + nskip = 0; + while (EATSPEC('|')) + ++nskip; + return (nskip); +} + +/* + * Insert necessary branch book-keeping operations. This emits a + * bogus 'next' offset, since we still have more to parse + */ +static void +p_branch_ins_offset(struct parse *p, struct branchc *bc) +{ + + if (bc->nbranch == 0) { + INSERT(OCH_, bc->start); /* offset is wrong */ + bc->fwd = bc->start; + bc->back = bc->start; + } + + ASTERN(OOR1, bc->back); + bc->back = THERE(); + AHEAD(bc->fwd); /* fix previous offset */ + bc->fwd = HERE(); + EMIT(OOR2, 0); /* offset is very wrong */ + ++bc->nbranch; +} + +/* + * Fix the offset of the tail branch, if we actually had any branches. + * This is to correct the bogus placeholder offset that we use. */ static void -p_bre(struct parse *p, - int end1, /* first terminating character */ - int end2) /* second terminating character */ +p_branch_fix_tail(struct parse *p, struct branchc *bc) { - sopno start = HERE(); - int first = 1; /* first subexpression? */ - int wasdollar = 0; + /* Fix bogus offset at the tail if we actually have branches */ + if (bc->nbranch > 0) { + AHEAD(bc->fwd); + ASTERN(O_CH, bc->back); + } +} + +/* + * Signal to the parser that an empty branch has been encountered; this will, + * in the future, be used to allow for more permissive behavior with empty + * branches. The return value should indicate whether parsing may continue + * or not. + */ +static bool +p_branch_empty(struct parse *p, struct branchc *bc) +{ + + (void)bc; + SETERROR(REG_EMPTY); + return (false); +} + +/* + * Take care of any branching requirements. This includes inserting the + * appropriate branching instructions as well as eating all of the branch + * delimiters until we either run out of pattern or need to parse more pattern. + */ +static bool +p_branch_do(struct parse *p, struct branchc *bc) +{ + int ate = 0; + + ate = p_branch_eat_delim(p, bc); + if (ate == 0) + return (false); + else if ((ate > 1 || (bc->outer && !MORE())) && !p_branch_empty(p, bc)) + /* + * Halt parsing only if we have an empty branch and p_branch_empty + * indicates that we must not continue. In the future, this will not + * necessarily be an error. + */ + return (false); + p_branch_ins_offset(p, bc); + + return (true); +} + +static void +p_bre_pre_parse(struct parse *p, struct branchc *bc) +{ + + (void) bc; + /* + * Does not move cleanly into expression parser because of + * ordinary interpration of * at the beginning position of + * an expression. + */ if (EAT('^')) { EMIT(OBOL, 0); p->g->iflags |= USEBOL; p->g->nbol++; } - while (MORE() && !SEETWO(end1, end2)) { - wasdollar = p_simp_re(p, first); - first = 0; - } - if (wasdollar) { /* oops, that was a trailing anchor */ +} + +static void +p_bre_post_parse(struct parse *p, struct branchc *bc) +{ + + /* Expression is terminating due to EOL token */ + if (bc->terminate) { DROP(1); EMIT(OEOL, 0); p->g->iflags |= USEEOL; p->g->neol++; } +} + +/* + - p_re - Top level parser, concatenation and BRE anchoring + == static void p_re(struct parse *p, int end1, int end2); + * Giving end1 as OUT essentially eliminates the end1/end2 check. + * + * This implementation is a bit of a kludge, in that a trailing $ is first + * taken as an ordinary character and then revised to be an anchor. + * The amount of lookahead needed to avoid this kludge is excessive. + */ +static void +p_re(struct parse *p, + int end1, /* first terminating character */ + int end2) /* second terminating character; ignored for EREs */ +{ + struct branchc bc; - (void)REQUIRE(HERE() != start, REG_EMPTY); /* require nonempty */ + bc.nbranch = 0; + if (end1 == OUT && end2 == OUT) + bc.outer = true; + else + bc.outer = false; +#define SEEEND() (!p->bre ? SEE(end1) : SEETWO(end1, end2)) + for (;;) { + bc.start = HERE(); + bc.nchain = 0; + bc.terminate = false; + if (p->pre_parse != NULL) + p->pre_parse(p, &bc); + while (MORE() && (!p->allowbranch || !SEESPEC('|')) && !SEEEND()) { + bc.terminate = p->parse_expr(p, &bc); + ++bc.nchain; + } + if (p->post_parse != NULL) + p->post_parse(p, &bc); + (void) REQUIRE(p->gnuext || HERE() != bc.start, REG_EMPTY); +#ifdef LIBREGEX + if (HERE() == bc.start && !p_branch_empty(p, &bc)) + break; +#endif + if (!p->allowbranch) + break; + /* + * p_branch_do's return value indicates whether we should + * continue parsing or not. This is both for correctness and + * a slight optimization, because it will check if we've + * encountered an empty branch or the end of the string + * immediately following a branch delimiter. + */ + if (!p_branch_do(p, &bc)) + break; + } +#undef SEE_END + if (p->allowbranch) + p_branch_fix_tail(p, &bc); + assert(!MORE() || SEE(end1)); } /* - p_simp_re - parse a simple RE, an atom possibly followed by a repetition - == static int p_simp_re(struct parse *p, int starordinary); + == static bool p_simp_re(struct parse *p, struct branchc *bc); */ -static int /* was the simple RE an unbackslashed $? */ -p_simp_re(struct parse *p, - int starordinary) /* is a leading * an ordinary character? */ +static bool /* was the simple RE an unbackslashed $? */ +p_simp_re(struct parse *p, struct branchc *bc) { int c; + int cc; /* convenient/control character */ int count; int count2; sopno pos; + bool handled; int i; wint_t wc; sopno subno; # define BACKSL (1<g->cflags®_NEWLINE) - nonnewline(p); - else - EMIT(OANY, 0); - break; - case '[': - p_bracket(p); - break; -#ifdef __CYGWIN__ - case BACKSL|'<': - /* \< is the GNU equivalents to [[:<:]] */ - EMIT(OBOW, 0); - break; - case BACKSL|'>': - /* \> is the GNU equivalents to [[:>:]] */ - EMIT(OEOW, 0); - break; + cc = GETNEXT(); + c = BACKSL | cc; +#ifdef LIBREGEX + if (p->gnuext) { + handled = true; + switch (c) { + case BACKSL|'`': + EMIT(OBOS, 0); + break; + case BACKSL|'\'': + EMIT(OEOS, 0); + break; + case BACKSL|'B': + EMIT(ONWBND, 0); + break; + case BACKSL|'b': + EMIT(OWBND, 0); + break; + case BACKSL|'W': + case BACKSL|'w': + case BACKSL|'S': + case BACKSL|'s': + p_b_pseudoclass(p, cc); + break; + default: + handled = false; + } + } #endif - case BACKSL|'{': - SETERROR(REG_BADRPT); - break; - case BACKSL|'(': - p->g->nsub++; - subno = p->g->nsub; - if (subno < NPAREN) - p->pbegin[subno] = HERE(); - EMIT(OLPAREN, subno); - /* the MORE here is an error heuristic */ - if (MORE() && !SEETWO('\\', ')')) - p_bre(p, '\\', ')'); - if (subno < NPAREN) { - p->pend[subno] = HERE(); - assert(p->pend[subno] != 0); + } + if (!handled) { + switch (c) { + case '.': + if (p->g->cflags®_NEWLINE) + nonnewline(p); + else + EMIT(OANY, 0); + break; + case '[': + p_bracket(p); + break; + case BACKSL|'<': + EMIT(OBOW, 0); + break; + case BACKSL|'>': + EMIT(OEOW, 0); + break; + case BACKSL|'{': + SETERROR(REG_BADRPT); + break; + case BACKSL|'(': + p->g->nsub++; + subno = p->g->nsub; + if (subno < NPAREN) + p->pbegin[subno] = HERE(); + EMIT(OLPAREN, subno); + /* the MORE here is an error heuristic */ + if (MORE() && !SEETWO('\\', ')')) + p_re(p, '\\', ')'); + if (subno < NPAREN) { + p->pend[subno] = HERE(); + assert(p->pend[subno] != 0); + } + EMIT(ORPAREN, subno); + (void)REQUIRE(EATTWO('\\', ')'), REG_EPAREN); + break; + case BACKSL|')': /* should not get here -- must be user */ + SETERROR(REG_EPAREN); + break; + case BACKSL|'1': + case BACKSL|'2': + case BACKSL|'3': + case BACKSL|'4': + case BACKSL|'5': + case BACKSL|'6': + case BACKSL|'7': + case BACKSL|'8': + case BACKSL|'9': + i = (c&~BACKSL) - '0'; + assert(i < NPAREN); + if (p->pend[i] != 0) { + assert(i <= p->g->nsub); + EMIT(OBACK_, i); + assert(p->pbegin[i] != 0); + assert(OP(p->strip[p->pbegin[i]]) == OLPAREN); + assert(OP(p->strip[p->pend[i]]) == ORPAREN); + (void) dupl(p, p->pbegin[i]+1, p->pend[i]); + EMIT(O_BACK, i); + } else + SETERROR(REG_ESUBREG); + p->g->backrefs = 1; + break; + case '*': + /* + * Ordinary if used as the first character beyond BOL anchor of + * a (sub-)expression, counts as a bad repetition operator if it + * appears otherwise. + */ + (void)REQUIRE(bc->nchain == 0, REG_BADRPT); + fallthrough; + default: + if (p->error != 0) + return (false); /* Definitely not $... */ + p->next--; + wc = WGETNEXT(); + if ((c & BACKSL) == 0 || may_escape(p, wc)) + ordinary(p, wc); + else + SETERROR(REG_EESCAPE); + break; } - EMIT(ORPAREN, subno); - (void)REQUIRE(EATTWO('\\', ')'), REG_EPAREN); - break; - case BACKSL|')': /* should not get here -- must be user */ - case BACKSL|'}': - SETERROR(REG_EPAREN); - break; - case BACKSL|'1': - case BACKSL|'2': - case BACKSL|'3': - case BACKSL|'4': - case BACKSL|'5': - case BACKSL|'6': - case BACKSL|'7': - case BACKSL|'8': - case BACKSL|'9': - i = (c&~BACKSL) - '0'; - assert(i < NPAREN); - if (p->pend[i] != 0) { - assert(i <= p->g->nsub); - EMIT(OBACK_, i); - assert(p->pbegin[i] != 0); - assert(OP(p->strip[p->pbegin[i]]) == OLPAREN); - assert(OP(p->strip[p->pend[i]]) == ORPAREN); - (void) dupl(p, p->pbegin[i]+1, p->pend[i]); - EMIT(O_BACK, i); - } else - SETERROR(REG_ESUBREG); - p->g->backrefs = 1; - break; - case '*': - (void)REQUIRE(starordinary, REG_BADRPT); - fallthrough; - default: - p->next--; - wc = WGETNEXT(); - ordinary(p, wc); - break; } if (EAT('*')) { /* implemented as +? */ @@ -670,6 +959,14 @@ p_simp_re(struct parse *p, ASTERN(O_PLUS, pos); INSERT(OQUEST_, pos); ASTERN(O_QUEST, pos); +#ifdef LIBREGEX + } else if (p->gnuext && EATTWO('\\', '?')) { + INSERT(OQUEST_, pos); + ASTERN(O_QUEST, pos); + } else if (p->gnuext && EATTWO('\\', '+')) { + INSERT(OPLUS_, pos); + ASTERN(O_PLUS, pos); +#endif } else if (EATTWO('\\', '{')) { count = p_count(p); if (EAT(',')) { @@ -688,9 +985,9 @@ p_simp_re(struct parse *p, SETERROR(REG_BADBR); } } else if (c == '$') /* $ (but not \$) ends it */ - return(1); + return (true); - return(0); + return (false); } /* @@ -723,15 +1020,17 @@ p_bracket(struct parse *p) wint_t ch; /* Dept of Truly Sickening Special-Case Kludges */ - if (p->next + 5 < p->end && strncmp(p->next, "[:<:]]", 6) == 0) { - EMIT(OBOW, 0); - NEXTn(6); - return; - } - if (p->next + 5 < p->end && strncmp(p->next, "[:>:]]", 6) == 0) { - EMIT(OEOW, 0); - NEXTn(6); - return; + if (p->end - p->next > 5) { + if (strncmp(p->next, "[:<:]]", 6) == 0) { + EMIT(OBOW, 0); + NEXTn(6); + return; + } + if (strncmp(p->next, "[:>:]]", 6) == 0) { + EMIT(OEOW, 0); + NEXTn(6); + return; + } } if ((cs = allocset(p)) == NULL) @@ -757,14 +1056,30 @@ p_bracket(struct parse *p) if (cs->invert && p->g->cflags®_NEWLINE) cs->bmp['\n' >> 3] |= 1 << ('\n' & 7); - if ((ch = singleton(cs)) != OUT /* optimize singleton sets */ - && cs->invert == 0) { /* But not in invert case. */ + if ((ch = singleton(cs)) != OUT) { /* optimize singleton sets */ ordinary(p, ch); freeset(p, cs); } else EMIT(OANYOF, (int)(cs - p->g->sets)); } +static int +p_range_cmp(wint_t c1, wint_t c2) +{ +#if 1//ndef LIBREGEX + return __wcollate_range_cmp(c1, c2); +#else + /* Copied from libc/collate __wcollate_range_cmp */ + wint_t s1[2], s2[2]; + + s1[0] = c1; + s1[1] = L'\0'; + s2[0] = c2; + s2[1] = L'\0'; + return (wcscoll(s1, s2)); +#endif +} + /* - p_b_term - parse one term of a bracketed character list == static void p_b_term(struct parse *p, cset *cs); @@ -775,7 +1090,10 @@ p_b_term(struct parse *p, cset *cs) char c; wint_t start, finish; wint_t i; - +#ifndef LIBREGEX + struct xlocale_collate *table = + (struct xlocale_collate*)__get_locale()->components[XLC_COLLATE]; +#endif /* classify what we've got */ switch ((MORE()) ? PEEK() : '\0') { case '[': @@ -784,7 +1102,6 @@ p_b_term(struct parse *p, cset *cs) case '-': SETERROR(REG_ERANGE); return; /* NOTE RETURN */ - break; default: c = '\0'; break; @@ -818,27 +1135,23 @@ p_b_term(struct parse *p, cset *cs) finish = '-'; else finish = p_b_symbol(p); - } else if (SEE('-') && !MORE2()) { - SETERROR(REG_EBRACK); - return; } else finish = start; if (start == finish) CHadd(p, cs, start); else { -#ifdef __CYGWIN__ - if (!__get_current_collate_locale ()->lcid) { +#ifndef LIBREGEX + if (table->__collate_load_error || MB_CUR_MAX > 1) { #else - if (__collate_load_error) { + if (MB_CUR_MAX > 1) { #endif - (void)REQUIRE((uch)start <= (uch)finish, REG_ERANGE); + (void)REQUIRE(p_range_cmp(start, finish) <= 0, REG_ERANGE); CHaddrange(p, cs, start, finish); } else { - (void)REQUIRE(__collate_range_cmp(start, finish) <= 0, REG_ERANGE); + (void)REQUIRE(p_range_cmp(start, finish) <= 0, REG_ERANGE); for (i = 0; i <= UCHAR_MAX; i++) { - if ( __collate_range_cmp(start, i) <= 0 - && __collate_range_cmp(i, finish) <= 0 - ) + if (p_range_cmp(start, i) <= 0 && + p_range_cmp(i, finish) <= 0 ) CHadd(p, cs, i); } } @@ -847,6 +1160,41 @@ p_b_term(struct parse *p, cset *cs) } } +/* + - p_b_pseudoclass - parse a pseudo-class (\w, \W, \s, \S) + == static int p_b_pseudoclass(struct parse *p, char c) + */ +static int +p_b_pseudoclass(struct parse *p, char c) { + cset *cs; + + if ((cs = allocset(p)) == NULL) + return(0); + + if (p->g->cflags®_ICASE) + cs->icase = 1; + + switch (c) { + case 'W': + cs->invert = 1; + fallthrough; + case 'w': + p_b_cclass_named(p, cs, "alnum"); + break; + case 'S': + cs->invert = 1; + fallthrough; + case 's': + p_b_cclass_named(p, cs, "space"); + break; + default: + return(0); + } + + EMIT(OANYOF, (int)(cs - p->g->sets)); + return(1); +} + /* - p_b_cclass - parse a character-class name and deal with it == static void p_b_cclass(struct parse *p, cset *cs); @@ -854,9 +1202,8 @@ p_b_term(struct parse *p, cset *cs) static void p_b_cclass(struct parse *p, cset *cs) { - char *sp = p->next; + const char *sp = p->next; size_t len; - wctype_t wct; char clname[16]; while (MORE() && isalpha((uch)PEEK())) @@ -868,6 +1215,17 @@ p_b_cclass(struct parse *p, cset *cs) } memcpy(clname, sp, len); clname[len] = '\0'; + + p_b_cclass_named(p, cs, clname); +} +/* + - p_b_cclass_named - deal with a named character class + == static void p_b_cclass_named(struct parse *p, cset *cs, const char []); + */ +static void +p_b_cclass_named(struct parse *p, cset *cs, const char clname[]) { + wctype_t wct; + if ((wct = wctype(clname)) == 0) { SETERROR(REG_ECTYPE); return; @@ -892,7 +1250,7 @@ p_b_eclass(struct parse *p, cset *cs) /* - p_b_symbol - parse a character or [..]ed multicharacter collating symbol - == static char p_b_symbol(struct parse *p); + == static wint_t p_b_symbol(struct parse *p); */ static wint_t /* value of symbol */ p_b_symbol(struct parse *p) @@ -911,18 +1269,17 @@ p_b_symbol(struct parse *p) /* - p_b_coll_elem - parse a collating-element name and look it up - == static char p_b_coll_elem(struct parse *p, int endc); + == static wint_t p_b_coll_elem(struct parse *p, wint_t endc); */ static wint_t /* value of collating element */ p_b_coll_elem(struct parse *p, wint_t endc) /* name ended by endc,']' */ { - char *sp = p->next; + const char *sp = p->next; struct cname *cp; - int len; mbstate_t mbs; - wchar_t wc; - size_t clen; + wint_t wc; + size_t clen, len; while (MORE() && !SEETWO(endc, ']')) NEXT(); @@ -932,10 +1289,10 @@ p_b_coll_elem(struct parse *p, } len = p->next - sp; for (cp = cnames; cp->name != NULL; cp++) - if (strncmp(cp->name, sp, len) == 0 && cp->name[len] == '\0') + if (strncmp(cp->name, sp, len) == 0 && strlen(cp->name) == len) return(cp->code); /* known name */ memset(&mbs, 0, sizeof(mbs)); - if ((clen = mbrtowc(&wc, sp, len, &mbs)) == len) + if ((clen = mbrtowi(&wc, sp, len, &mbs)) == len) return (wc); /* single character */ else if (clen == (size_t)-1 || clen == (size_t)-2) SETERROR(REG_ILLSEQ); @@ -944,9 +1301,58 @@ p_b_coll_elem(struct parse *p, return(0); } +/* + - may_escape - determine whether 'ch' is escape-able in the current context + == static int may_escape(struct parse *p, const wint_t ch) + */ +static bool +may_escape(struct parse *p, const wint_t ch) +{ + + if ((p->pflags & PFLAG_LEGACY_ESC) != 0) + return (true); + if (isalpha(ch) || ch == '\'' || ch == '`') + return (false); + return (true); +#ifdef NOTYET + /* + * Build a whitelist of characters that may be escaped to produce an + * ordinary in the current context. This assumes that these have not + * been otherwise interpreted as a special character. Escaping an + * ordinary character yields undefined results according to + * IEEE 1003.1-2008. Some extensions (notably, some GNU extensions) take + * advantage of this and use escaped ordinary characters to provide + * special meaning, e.g. \b, \B, \w, \W, \s, \S. + */ + switch(ch) { + case '|': + case '+': + case '?': + /* The above characters may not be escaped in BREs */ + if (!(p->g->cflags®_EXTENDED)) + return (false); + /* Fallthrough */ + case '(': + case ')': + case '{': + case '}': + case '.': + case '[': + case ']': + case '\\': + case '*': + case '^': + case '$': + return (true); + default: + return (false); + } +#endif +} + /* - othercase - return the case counterpart of an alphabetic - == static char othercase(int ch); + == static wint_t othercase(wint_t ch); */ static wint_t /* if no counterpart, return ch */ othercase(wint_t ch) @@ -962,15 +1368,15 @@ othercase(wint_t ch) /* - bothcases - emit a dualcase version of a two-case character - == static void bothcases(struct parse *p, int ch); + == static void bothcases(struct parse *p, wint_t ch); * * Boy, is this implementation ever a kludge... */ static void bothcases(struct parse *p, wint_t ch) { - char *oldnext = p->next; - char *oldend = p->end; + const char *oldnext = p->next; + const char *oldend = p->end; char bracket[3 + MB_LEN_MAX]; size_t n; mbstate_t mbs; @@ -978,7 +1384,7 @@ bothcases(struct parse *p, wint_t ch) assert(othercase(ch) != ch); /* p_bracket() would recurse */ p->next = bracket; memset(&mbs, 0, sizeof(mbs)); - n = xwcrtomb(bracket, ch, &mbs); + n = wirtomb(bracket, ch, &mbs); assert(n != (size_t)-1); bracket[n] = ']'; bracket[n + 1] = '\0'; @@ -991,7 +1397,7 @@ bothcases(struct parse *p, wint_t ch) /* - ordinary - emit an ordinary character - == static void ordinary(struct parse *p, int ch); + == static void ordinary(struct parse *p, wint_t ch); */ static void ordinary(struct parse *p, wint_t ch) @@ -1023,8 +1429,8 @@ ordinary(struct parse *p, wint_t ch) static void nonnewline(struct parse *p) { - char *oldnext = p->next; - char *oldend = p->end; + const char *oldnext = p->next; + const char *oldend = p->end; char bracket[4]; p->next = bracket; @@ -1119,69 +1525,33 @@ static wint_t wgetnext(struct parse *p) { mbstate_t mbs; - wchar_t wc; - wint_t ret; + wint_t wc; size_t n; #ifdef __CYGWIN__ - /* Kludge for more glibc compatibility. On Cygwin as well as on - Linux, mbrtowc returns -1 if the current local's codeset is ASCII - and the character is >= 0x80. Nevertheless, glibc's regcomp allows - any char value, even stuff like [\xc0-\xff], if the locale's codeset - is ASCII, so in regcomp it ignores the fact that chars >= 0x80 are - invalid ASCII chars. To be more Linux-compatible, we align the - behaviour to glibc here. Allow any character value if the current - local's codeset is ASCII. */ + /* Kludge for more glibc compatibility. On Cygwin as well as on + Linux, mbrtowc returns -1 if the current local's codeset is ASCII + and the character is >= 0x80. Nevertheless, glibc's regcomp allows + any char value, even stuff like [\xc0-\xff], if the locale's codeset + is ASCII, so in regcomp it ignores the fact that chars >= 0x80 are + invalid ASCII chars. To be more Linux-compatible, we align the + behaviour to glibc here. Allow any character value if the current + local's codeset is ASCII. */ if (*__current_locale_charset () == 'A') /* SCII */ return (wint_t) (unsigned char) *p->next++; #endif memset(&mbs, 0, sizeof(mbs)); - n = mbrtowc(&wc, p->next, p->end - p->next, &mbs); + n = mbrtowi(&wc, p->next, p->end - p->next, &mbs); if (n == (size_t)-1 || n == (size_t)-2) { SETERROR(REG_ILLSEQ); return (0); } - ret = wc; if (n == 0) n = 1; - else if (sizeof (wchar_t) == 2 && wc >= 0xd800 && wc <= 0xdbff) { - /* UTF-16 surrogate pair. Fetch second half and - compute UTF-32 value */ - size_t n2 = mbrtowc(&wc, p->next + n, - p->end - p->next - n, &mbs); - if (n2 == 0 || n2 == (size_t)-1 || n2 == (size_t)-2) { - SETERROR(REG_ILLSEQ); - return (0); - } - ret = (((ret & 0x3ff) << 10) | (wc & 0x3ff)) - + 0x10000; - n += n2; - } p->next += n; - return (ret); + return (wc); } -static size_t -xwcrtomb (char *s, wint_t wc, mbstate_t *ps) -{ - if (sizeof (wchar_t) == 2 && wc >= 0x10000) - { - /* UTF-16 wcrtomb can't handle these values directly. The rest of the - code isn't surrogate pair aware, so we handle this here. Convert - value to UTF-16 surrogate and call wcsrtombs to convert the "string" - to the correct multibyte representation, if any. */ - wchar_t ws[2]; - const wchar_t *wsp = ws; - - wc -= 0x10000; - ws[0] = 0xd800 | (wc >> 10); - ws[1] = 0xdc00 | (wc & 0x3ff); - return wcsnrtombs (s, &wsp, 2, MB_CUR_MAX, ps); - } - return wcrtomb (s, wc, ps); -} - - /* - seterr - set an error condition == static int seterr(struct parse *p, int e); @@ -1205,7 +1575,7 @@ allocset(struct parse *p) { cset *cs, *ncs; - ncs = realloc(p->g->sets, (p->g->ncsets + 1) * sizeof(*ncs)); + ncs = reallocarray(p->g->sets, p->g->ncsets + 1, sizeof(*ncs)); if (ncs == NULL) { SETERROR(REG_ESPACE); return (NULL); @@ -1241,16 +1611,16 @@ freeset(struct parse *p, cset *cs) static wint_t singleton(cset *cs) { - wint_t i, s = OUT, n; + wint_t i, s, n; for (i = n = 0; i < NC; i++) if (CHIN(cs, i)) { n++; s = i; } - if (n == 1 && cs->nwides == 0) + if (n == 1) return (s); - if (n == 0 && cs->nwides == 1 && cs->nranges == 0 && cs->ntypes == 0 && + if (cs->nwides == 1 && cs->nranges == 0 && cs->ntypes == 0 && cs->icase == 0) return (cs->wides[0]); /* Don't bother handling the other cases. */ @@ -1268,7 +1638,7 @@ CHadd(struct parse *p, cset *cs, wint_t ch) if (ch < NC) cs->bmp[ch >> 3] |= 1 << (ch & 7); else { - newwides = realloc(cs->wides, (cs->nwides + 1) * + newwides = reallocarray(cs->wides, cs->nwides + 1, sizeof(*cs->wides)); if (newwides == NULL) { SETERROR(REG_ESPACE); @@ -1295,9 +1665,7 @@ CHaddrange(struct parse *p, cset *cs, wint_t min, wint_t max) for (; min < NC && min <= max; min++) CHadd(p, cs, min); - if (min >= max) - return; - newranges = realloc(cs->ranges, (cs->nranges + 1) * + newranges = reallocarray(cs->ranges, cs->nranges + 1, sizeof(*cs->ranges)); if (newranges == NULL) { SETERROR(REG_ESPACE); @@ -1321,7 +1689,7 @@ CHaddtype(struct parse *p, cset *cs, wctype_t wct) for (i = 0; i < NC; i++) if (iswctype(i, wct)) CHadd(p, cs, i); - newtypes = realloc(cs->types, (cs->ntypes + 1) * + newtypes = reallocarray(cs->types, cs->ntypes + 1, sizeof(*cs->types)); if (newtypes == NULL) { SETERROR(REG_ESPACE); @@ -1346,8 +1714,8 @@ dupl(struct parse *p, assert(finish >= start); if (len == 0) return(ret); - enlarge(p, p->ssize + len); /* this many unexpected additions */ - assert(p->ssize >= p->slen + len); + if (!enlarge(p, p->ssize + len)) /* this many unexpected additions */ + return(ret); (void) memcpy((char *)(p->strip + p->slen), (char *)(p->strip + start), (size_t)len*sizeof(sop)); p->slen += len; @@ -1374,8 +1742,8 @@ doemit(struct parse *p, sop op, size_t opnd) /* deal with undersized strip */ if (p->slen >= p->ssize) - enlarge(p, (p->ssize+1) / 2 * 3); /* +50% */ - assert(p->slen < p->ssize); + if (!enlarge(p, (p->ssize+1) / 2 * 3)) /* +50% */ + return; /* finally, it's all reduced to the easy case */ p->strip[p->slen++] = SOP(op, opnd); @@ -1434,23 +1802,24 @@ dofwd(struct parse *p, sopno pos, sop value) /* - enlarge - enlarge the strip - == static void enlarge(struct parse *p, sopno size); + == static int enlarge(struct parse *p, sopno size); */ -static void +static int enlarge(struct parse *p, sopno size) { sop *sp; if (p->ssize >= size) - return; + return 1; - sp = (sop *)realloc(p->strip, size*sizeof(sop)); + sp = reallocarray(p->strip, size, sizeof(sop)); if (sp == NULL) { SETERROR(REG_ESPACE); - return; + return 0; } p->strip = sp; p->ssize = size; + return 1; } /* @@ -1461,7 +1830,7 @@ static void stripsnug(struct parse *p, struct re_guts *g) { g->nstates = p->slen; - g->strip = (sop *)realloc((char *)p->strip, p->slen * sizeof(sop)); + g->strip = reallocarray((char *)p->strip, p->slen, sizeof(sop)); if (g->strip == NULL) { SETERROR(REG_ESPACE); g->strip = p->strip; @@ -1502,11 +1871,7 @@ findmust(struct parse *p, struct re_guts *g) * UTF-8 (see RFC 3629). */ if (MB_CUR_MAX > 1 && -#ifdef __CYGWIN__ strcmp(__current_locale_charset (), "UTF-8") != 0) -#else - strcmp(_CurrentRuneLocale->__encoding, "UTF-8") != 0) -#endif return; /* find the longest OCHAR sequence in strip */ @@ -1522,7 +1887,7 @@ findmust(struct parse *p, struct re_guts *g) memset(&mbs, 0, sizeof(mbs)); newstart = scan - 1; } - clen = xwcrtomb(buf, OPND(s), &mbs); + clen = wirtomb(buf, OPND(s), &mbs); if (clen == (size_t)-1) goto toohard; newlen += clen; @@ -1539,21 +1904,25 @@ findmust(struct parse *p, struct re_guts *g) scan += OPND(s); s = *scan; /* assert() interferes w debug printouts */ - if (OP(s) != O_QUEST && OP(s) != O_CH && - OP(s) != OOR2) { + if (OP(s) != (sop)O_QUEST && + OP(s) != (sop)O_CH && OP(s) != (sop)OOR2) { g->iflags |= BAD; return; } - } while (OP(s) != O_QUEST && OP(s) != O_CH); + } while (OP(s) != (sop)O_QUEST && OP(s) != (sop)O_CH); fallthrough; case OBOW: /* things that break a sequence */ case OEOW: case OBOL: case OEOL: + case OBOS: + case OEOS: + case OWBND: + case ONWBND: case O_QUEST: case O_CH: case OEND: - if (newlen > g->mlen) { /* ends one */ + if (newlen > (sopno)g->mlen) { /* ends one */ start = newstart; g->mlen = newlen; if (offset > -1) { @@ -1568,7 +1937,7 @@ findmust(struct parse *p, struct re_guts *g) newlen = 0; break; case OANY: - if (newlen > g->mlen) { /* ends one */ + if (newlen > (sopno)g->mlen) { /* ends one */ start = newstart; g->mlen = newlen; if (offset > -1) { @@ -1586,7 +1955,7 @@ findmust(struct parse *p, struct re_guts *g) break; case OANYOF: /* may or may not invalidate offset */ /* First, everything as OANY */ - if (newlen > g->mlen) { /* ends one */ + if (newlen > (sopno)g->mlen) { /* ends one */ start = newstart; g->mlen = newlen; if (offset > -1) { @@ -1609,7 +1978,7 @@ findmust(struct parse *p, struct re_guts *g) * save the last known good offset, in case the * must sequence doesn't occur later. */ - if (newlen > g->mlen) { /* ends one */ + if (newlen > (sopno)g->mlen) { /* ends one */ start = newstart; g->mlen = newlen; if (offset > -1) @@ -1641,7 +2010,7 @@ findmust(struct parse *p, struct re_guts *g) while (cp < g->must + g->mlen) { while (OP(s = *scan++) != OCHAR) continue; - clen = xwcrtomb(cp, OPND(s), &mbs); + clen = wirtomb(cp, OPND(s), &mbs); assert(clen != (size_t)-1); cp += clen; } @@ -1670,7 +2039,7 @@ altoffset(sop *scan, int offset) largest = 0; try = 0; s = *scan++; - while (OP(s) != O_QUEST && OP(s) != O_CH) { + while (OP(s) != (sop)O_QUEST && OP(s) != (sop)O_CH) { switch (OP(s)) { case OOR1: if (try > largest) @@ -1686,10 +2055,10 @@ altoffset(sop *scan, int offset) do { scan += OPND(s); s = *scan; - if (OP(s) != O_QUEST && OP(s) != O_CH && - OP(s) != OOR2) + if (OP(s) != (sop)O_QUEST && + OP(s) != (sop)O_CH && OP(s) != (sop)OOR2) return -1; - } while (OP(s) != O_QUEST && OP(s) != O_CH); + } while (OP(s) != (sop)O_QUEST && OP(s) != (sop)O_CH); /* We must skip to the next position, or we'll * leave altoffset() too early. */ @@ -1701,6 +2070,8 @@ altoffset(sop *scan, int offset) try++; case OBOW: case OEOW: + case OWBND: + case ONWBND: case OLPAREN: case ORPAREN: case OOR2: @@ -1741,7 +2112,7 @@ computejumps(struct parse *p, struct re_guts *g) if (p->error != 0) return; - g->charjump = (int*) malloc((NC + 1) * sizeof(int)); + g->charjump = (int *)malloc((NC_MAX + 1) * sizeof(int)); if (g->charjump == NULL) /* Not a fatal error */ return; /* Adjust for signed chars, if necessary */ @@ -1790,16 +2161,15 @@ computematchjumps(struct parse *p, struct re_guts *g) if (p->error != 0) return; - pmatches = (int*) malloc(g->mlen * sizeof(unsigned int)); + pmatches = (int*) malloc(g->mlen * sizeof(int)); if (pmatches == NULL) { g->matchjump = NULL; return; } - g->matchjump = (int*) malloc(g->mlen * sizeof(unsigned int)); - if (g->matchjump == NULL) /* Not a fatal error */ - { - free (pmatches); + g->matchjump = (int*) malloc(g->mlen * sizeof(int)); + if (g->matchjump == NULL) { /* Not a fatal error */ + free(pmatches); return; } @@ -1842,7 +2212,7 @@ computematchjumps(struct parse *p, struct re_guts *g) suffix++; } if (suffix < g->mlen) - ssuffix = pmatches[ssuffix]; + ssuffix = pmatches[ssuffix]; } free(pmatches); diff --git a/winsup/cygwin/regex/regerror.c b/winsup/cygwin/regex/regerror.c index 1bba3e4a6f..0e555784f0 100644 --- a/winsup/cygwin/regex/regerror.c +++ b/winsup/cygwin/regex/regerror.c @@ -1,4 +1,6 @@ /*- + * SPDX-License-Identifier: BSD-3-Clause + * * Copyright (c) 1992, 1993, 1994 Henry Spencer. * Copyright (c) 1992, 1993, 1994 * The Regents of the University of California. All rights reserved. @@ -14,7 +16,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -37,7 +39,7 @@ static char sccsid[] = "@(#)regerror.c 8.4 (Berkeley) 3/20/94"; #endif /* LIBC_SCCS and not lint */ #include -__FBSDID("$FreeBSD: src/lib/libc/regex/regerror.c,v 1.11 2007/06/11 03:05:54 delphij Exp $"); +__FBSDID("$FreeBSD$"); #include #include @@ -54,7 +56,7 @@ extern "C" { #endif /* === regerror.c === */ -static char *regatoi(const regex_t *preg, char *localbuf); +static const char *regatoi(const regex_t *preg, char *localbuf); #ifdef __cplusplus } @@ -83,13 +85,8 @@ static char *regatoi(const regex_t *preg, char *localbuf); */ static struct rerr { int code; -#ifdef __CYGWIN__ /* Avoid whining compiler */ const char *name; const char *explain; -#else - char *name; - char *explain; -#endif } rerrs[] = { {REG_NOMATCH, "REG_NOMATCH", "regexec() failed to match"}, {REG_BADPAT, "REG_BADPAT", "invalid regular expression"}, @@ -125,11 +122,7 @@ regerror(int errcode, struct rerr *r; size_t len; int target = errcode &~ REG_ITOA; -#ifdef __CYGWIN__ /* Avoid whining compiler */ const char *s; -#else - char *s; -#endif char convbuf[50]; if (errcode == REG_ATOI) @@ -167,7 +160,7 @@ regerror(int errcode, - regatoi - internal routine to implement REG_ATOI == static char *regatoi(const regex_t *preg, char *localbuf); */ -static char * +static const char * regatoi(const regex_t *preg, char *localbuf) { struct rerr *r; @@ -176,14 +169,7 @@ regatoi(const regex_t *preg, char *localbuf) if (strcmp(r->name, preg->re_endp) == 0) break; if (r->code == 0) -#ifdef __CYGWIN__ /* Avoid whining compiler */ - { - static char null[] = "0"; - return null; - } -#else return("0"); -#endif sprintf(localbuf, "%d", r->code); return(localbuf); diff --git a/winsup/cygwin/regex/regex.3 b/winsup/cygwin/regex/regex.3 index f848d66c3a..d22dec1e87 100644 --- a/winsup/cygwin/regex/regex.3 +++ b/winsup/cygwin/regex/regex.3 @@ -13,7 +13,7 @@ .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. -.\" 4. Neither the name of the University nor the names of its contributors +.\" 3. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. .\" @@ -30,9 +30,9 @@ .\" SUCH DAMAGE. .\" .\" @(#)regex.3 8.4 (Berkeley) 3/20/94 -.\" $FreeBSD: src/lib/libc/regex/regex.3,v 1.21 2007/01/09 00:28:04 imp Exp $ +.\" $FreeBSD$ .\" -.Dd August 17, 2005 +.Dd April 15, 2017 .Dt REGEX 3 .Os .Sh NAME @@ -183,6 +183,17 @@ compatible with but not specified by .St -p1003.2 , and should be used with caution in software intended to be portable to other systems. +.It Dv REG_POSIX +Compile only +.St -p1003.2 +compliant expressions. +This flag has no effect unless linking against +.Nm libregex . +This is an extension, +compatible with but not specified by +.St -p1003.2 , +and should be used with +caution in software intended to be portable to other systems. .El .Pp When successful, @@ -235,11 +246,16 @@ The argument is the bitwise OR of zero or more of the following flags: .Bl -tag -width REG_STARTEND .It Dv REG_NOTBOL -The first character of -the string -is not the beginning of a line, so the -.Ql ^\& -anchor should not match before it. +The first character of the string is treated as the continuation +of a line. +This means that the anchors +.Ql ^\& , +.Ql [[:<:]] , +and +.Ql \e< +do not match before it; but see +.Dv REG_STARTEND +below. This does not affect the behavior of newlines under .Dv REG_NEWLINE . .It Dv REG_NOTEOL @@ -247,19 +263,16 @@ The NUL terminating the string does not end a line, so the .Ql $\& -anchor should not match before it. +anchor does not match before it. This does not affect the behavior of newlines under .Dv REG_NEWLINE . .It Dv REG_STARTEND The string is considered to start at -.Fa string -+ -.Fa pmatch Ns [0]. Ns Va rm_so -and to have a terminating NUL located at -.Fa string -+ -.Fa pmatch Ns [0]. Ns Va rm_eo -(there need not actually be a NUL at that location), +.Fa string No + +.Fa pmatch Ns [0]. Ns Fa rm_so +and to end before the byte located at +.Fa string No + +.Fa pmatch Ns [0]. Ns Fa rm_eo , regardless of the value of .Fa nmatch . See below for the definition of @@ -271,13 +284,37 @@ compatible with but not specified by .St -p1003.2 , and should be used with caution in software intended to be portable to other systems. -Note that a non-zero -.Va rm_so -does not imply -.Dv REG_NOTBOL ; -.Dv REG_STARTEND -affects only the location of the string, -not how it is matched. +.Pp +Without +.Dv REG_NOTBOL , +the position +.Fa rm_so +is considered the beginning of a line, such that +.Ql ^ +matches before it, and the beginning of a word if there is a word +character at this position, such that +.Ql [[:<:]] +and +.Ql \e< +match before it. +.Pp +With +.Dv REG_NOTBOL , +the character at position +.Fa rm_so +is treated as the continuation of a line, and if +.Fa rm_so +is greater than 0, the preceding character is taken into consideration. +If the preceding character is a newline and the regular expression was compiled +with +.Dv REG_NEWLINE , +.Ql ^ +matches before the string; if the preceding character is not a word character +but the string starts with a word character, +.Ql [[:<:]] +and +.Ql \e< +match before the string. .El .Pp See @@ -420,10 +457,12 @@ it should have been the result from the most recent using that .Ft regex_t . The -.Fn ( regerror +.Po +.Fn regerror may be able to supply a more detailed message using information from the -.Ft regex_t . ) +.Ft regex_t . +.Pc The .Fn regerror function diff --git a/winsup/cygwin/regex/regex.7 b/winsup/cygwin/regex/regex.7 index 79fecc1975..8380fd89e2 100644 --- a/winsup/cygwin/regex/regex.7 +++ b/winsup/cygwin/regex/regex.7 @@ -13,6 +13,10 @@ .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. +.\" 3. All advertising materials mentioning features or use of this software +.\" must display the following acknowledgement: +.\" This product includes software developed by the University of +.\" California, Berkeley and its contributors. .\" 4. Neither the name of the University nor the names of its contributors .\" may be used to endorse or promote products derived from this software .\" without specific prior written permission. @@ -30,9 +34,9 @@ .\" SUCH DAMAGE. .\" .\" @(#)re_format.7 8.3 (Berkeley) 3/20/94 -.\" $FreeBSD: src/lib/libc/regex/re_format.7,v 1.12 2008/09/05 17:41:20 keramida Exp $ +.\" $FreeBSD$ .\" -.Dd March 20, 1994 +.Dd June 30, 2014 .Dt RE_FORMAT 7 .Os .Sh NAME @@ -271,7 +275,6 @@ and stands for the list of all characters belonging to that class. Standard character class names are: -.Pp .Bl -column "alnum" "digit" "xdigit" -offset indent .It Em "alnum digit punct" .It Em "alpha graph space" @@ -311,6 +314,13 @@ compatible with but not specified by .St -p1003.2 , and should be used with caution in software intended to be portable to other systems. +The additional word delimiters +.Ql \e< +and +.Ql \e> +are provided to ease compatibility with traditional +SVR4 +systems but are not portable and should be avoided. .Pp In the event that an RE could match more than one substring of a given string, @@ -382,10 +392,12 @@ and .Ql ?\& are ordinary characters, and their functionality can be expressed using bounds -.No ( Ql {1,} +.Po +.Ql {1,} or .Ql {0,1} -respectively). +respectively +.Pc . Also note that .Ql x+ in modern REs is equivalent to diff --git a/winsup/cygwin/regex/regex2.h b/winsup/cygwin/regex/regex2.h index b9a35a45fd..38bbed90fd 100644 --- a/winsup/cygwin/regex/regex2.h +++ b/winsup/cygwin/regex/regex2.h @@ -1,4 +1,6 @@ /*- + * SPDX-License-Identifier: BSD-3-Clause + * * Copyright (c) 1992, 1993, 1994 Henry Spencer. * Copyright (c) 1992, 1993, 1994 * The Regents of the University of California. All rights reserved. @@ -14,7 +16,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -31,21 +33,21 @@ * SUCH DAMAGE. * * @(#)regex2.h 8.4 (Berkeley) 3/20/94 - * $FreeBSD: src/lib/libc/regex/regex2.h,v 1.11 2007/01/09 00:28:04 imp Exp $ + * $FreeBSD$ */ /* * First, the stuff that ends up in the outside-world include file = typedef off_t regoff_t; = typedef struct { - = int re_magic; - = size_t re_nsub; // number of parenthesized subexpressions - = const char *re_endp; // end pointer for REG_PEND - = struct re_guts *re_g; // none of your business :-) + = int re_magic; + = size_t re_nsub; // number of parenthesized subexpressions + = const char *re_endp; // end pointer for REG_PEND + = struct re_guts *re_g; // none of your business :-) = } regex_t; = typedef struct { - = regoff_t rm_so; // start of match - = regoff_t rm_eo; // end of match + = regoff_t rm_so; // start of match + = regoff_t rm_eo; // end of match = } regmatch_t; */ /* @@ -73,7 +75,7 @@ * immediately *preceding* "execution" of that operator. */ typedef unsigned long sop; /* strip operator */ -typedef long sopno; +typedef unsigned long sopno; #define OPRMASK 0xf8000000L #define OPDMASK 0x07ffffffL #define OPSHIFT ((unsigned)27) @@ -102,6 +104,10 @@ typedef long sopno; #define O_CH (18L<= 0); if (ch < NC) return (((cs->bmp[ch >> 3] & (1 << (ch & 7))) != 0) ^ cs->invert); - for (i = 0; i < cs->nwides; i++) - if (ch == cs->wides[i]) + for (i = 0; i < cs->nwides; i++) { + if (cs->icase) { + if (ch == towlower(cs->wides[i]) || + ch == towupper(cs->wides[i])) + return (!cs->invert); + } else if (ch == cs->wides[i]) return (!cs->invert); + } for (i = 0; i < cs->nranges; i++) if (cs->ranges[i].min <= ch && ch <= cs->ranges[i].max) return (!cs->invert); @@ -151,14 +162,10 @@ CHIN(cset *cs, wint_t ch) if (ch < NC) return (((cs->bmp[ch >> 3] & (1 << (ch & 7))) != 0) ^ cs->invert); - else if (cs->icase) { - if (cs->invert) - return (CHIN1(cs, ch) && CHIN1(cs, towlower(ch)) && - CHIN1(cs, towupper(ch))); - else - return (CHIN1(cs, ch) || CHIN1(cs, towlower(ch)) || - CHIN1(cs, towupper(ch))); - } else + else if (cs->icase) + return (CHIN1(cs, ch) || CHIN1(cs, towlower(ch)) || + CHIN1(cs, towupper(ch))); + else return (CHIN1(cs, ch)); } @@ -169,7 +176,7 @@ struct re_guts { int magic; # define MAGIC2 ((('R'^0200)<<8)|'E') sop *strip; /* malloced area for strip */ - int ncsets; /* number of csets in use */ + unsigned int ncsets; /* number of csets in use */ cset *sets; /* -> cset [ncsets] */ int cflags; /* copy of regcomp() cflags argument */ sopno nstates; /* = number of sops */ @@ -193,4 +200,5 @@ struct re_guts { /* misc utilities */ #define OUT (CHAR_MIN - 1) /* a non-character value */ -#define ISWORD(c) (iswalnum((wint_t)(c)) || (c) == '_') +#define IGN (CHAR_MIN - 2) +#define ISWORD(c) (iswalnum((uch)(c)) || (c) == '_') diff --git a/winsup/cygwin/regex/regexec.c b/winsup/cygwin/regex/regexec.c index c400578b89..52d365a481 100644 --- a/winsup/cygwin/regex/regexec.c +++ b/winsup/cygwin/regex/regexec.c @@ -1,4 +1,6 @@ /*- + * SPDX-License-Identifier: BSD-3-Clause + * * Copyright (c) 1992, 1993, 1994 Henry Spencer. * Copyright (c) 1992, 1993, 1994 * The Regents of the University of California. All rights reserved. @@ -14,7 +16,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -37,7 +39,7 @@ static char sccsid[] = "@(#)regexec.c 8.3 (Berkeley) 3/20/94"; #endif /* LIBC_SCCS and not lint */ #include -__FBSDID("$FreeBSD: src/lib/libc/regex/regexec.c,v 1.8 2007/06/11 03:05:54 delphij Exp $"); +__FBSDID("$FreeBSD$"); /* * the outer shell of regexec() @@ -46,9 +48,6 @@ __FBSDID("$FreeBSD: src/lib/libc/regex/regexec.c,v 1.8 2007/06/11 03:05:54 delph * macros that code uses. This lets the same code operate on two different * representations for state sets and characters. */ -#ifdef __CYGWIN__ -#include "winsup.h" -#endif #include #include #include @@ -68,9 +67,9 @@ static __inline size_t xmbrtowc(wint_t *wi, const char *s, size_t n, mbstate_t *mbs, wint_t dummy) { size_t nr; - wchar_t wc; + wint_t wc; - nr = mbrtowc(&wc, s, n, mbs); + nr = mbrtowi(&wc, s, n, mbs); if (wi != NULL) *wi = wc; if (nr == 0) @@ -80,24 +79,8 @@ xmbrtowc(wint_t *wi, const char *s, size_t n, mbstate_t *mbs, wint_t dummy) if (wi != NULL) *wi = dummy; return (1); - } else { - if (sizeof (wchar_t) == 2 && wc >= 0xd800 && wc <= 0xdbff) { - /* UTF-16 surrogate pair. Fetch second half and - compute UTF-32 value */ - size_t n2 = mbrtowc(&wc, s + nr, n - nr, mbs); - if (n2 == 0 || n2 == (size_t)-1 || n2 == (size_t)-2) { - memset(mbs, 0, sizeof(*mbs)); - if (wi != NULL) - *wi = dummy; - return (1); - } - if (wi != NULL) - *wi = (((*wi & 0x3ff) << 10) | (wc & 0x3ff)) - + 0x10000; - nr += n2; - } + } else return (nr); - } } static __inline size_t @@ -114,8 +97,8 @@ xmbrtowc_dummy(wint_t *wi, } /* macros for manipulating states, small version */ -#define states long -#define states1 states /* for later use in regexec() decision */ +#define states1 long /* for later use in regexec() decision */ +#define states states1 #define CLEAR(v) ((v) = 0) #define SET0(v, n) ((v) &= ~((unsigned long)1 << (n))) #define SET1(v, n) ((v) |= (unsigned long)1 << (n)) @@ -244,9 +227,9 @@ regexec(const regex_t * __restrict preg, eflags = GOODFLAGS(eflags); if (MB_CUR_MAX > 1) - return(mmatcher(g, (char *)string, nmatch, pmatch, eflags)); + return(mmatcher(g, string, nmatch, pmatch, eflags)); else if (g->nstates <= CHAR_BIT*sizeof(states1) && !(eflags®_LARGE)) - return(smatcher(g, (char *)string, nmatch, pmatch, eflags)); + return(smatcher(g, string, nmatch, pmatch, eflags)); else - return(lmatcher(g, (char *)string, nmatch, pmatch, eflags)); + return(lmatcher(g, string, nmatch, pmatch, eflags)); } diff --git a/winsup/cygwin/regex/regfree.c b/winsup/cygwin/regex/regfree.c index aa795fa783..859c2a4b37 100644 --- a/winsup/cygwin/regex/regfree.c +++ b/winsup/cygwin/regex/regfree.c @@ -1,4 +1,6 @@ /*- + * SPDX-License-Identifier: BSD-3-Clause + * * Copyright (c) 1992, 1993, 1994 Henry Spencer. * Copyright (c) 1992, 1993, 1994 * The Regents of the University of California. All rights reserved. @@ -14,7 +16,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -37,7 +39,7 @@ static char sccsid[] = "@(#)regfree.c 8.3 (Berkeley) 3/20/94"; #endif /* LIBC_SCCS and not lint */ #include -__FBSDID("$FreeBSD: src/lib/libc/regex/regfree.c,v 1.8 2007/06/11 03:05:54 delphij Exp $"); +__FBSDID("$FreeBSD$"); #include #include @@ -58,7 +60,7 @@ void regfree(regex_t *preg) { struct re_guts *g; - int i; + unsigned int i; if (preg->re_magic != MAGIC1) /* oops */ return; /* nice to complain, but hard */ diff --git a/winsup/cygwin/regex/utils.h b/winsup/cygwin/regex/utils.h index 2a2ed9694d..72f2286a02 100644 --- a/winsup/cygwin/regex/utils.h +++ b/winsup/cygwin/regex/utils.h @@ -1,4 +1,6 @@ /*- + * SPDX-License-Identifier: BSD-3-Clause + * * Copyright (c) 1992, 1993, 1994 Henry Spencer. * Copyright (c) 1992, 1993, 1994 * The Regents of the University of California. All rights reserved. @@ -14,7 +16,7 @@ * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. - * 4. Neither the name of the University nor the names of its contributors + * 3. Neither the name of the University nor the names of its contributors * may be used to endorse or promote products derived from this software * without specific prior written permission. * @@ -31,13 +33,15 @@ * SUCH DAMAGE. * * @(#)utils.h 8.3 (Berkeley) 3/20/94 - * $FreeBSD: src/lib/libc/regex/utils.h,v 1.3 2007/01/09 00:28:04 imp Exp $ + * $FreeBSD$ */ /* utility definitions */ #define DUPMAX _POSIX2_RE_DUP_MAX /* xxx is this right? */ #define INFINITY (DUPMAX + 1) -#define NC (CHAR_MAX - CHAR_MIN + 1) + +#define NC_MAX (CHAR_MAX - CHAR_MIN + 1) +#define NC ((MB_CUR_MAX) == 1 ? (NC_MAX) : (128)) typedef unsigned char uch; /* switch off assertions (if not already off) if no REDEBUG */ diff --git a/winsup/cygwin/release/3.5.0 b/winsup/cygwin/release/3.5.0 new file mode 100644 index 0000000000..d756c07853 --- /dev/null +++ b/winsup/cygwin/release/3.5.0 @@ -0,0 +1,75 @@ +What's new: +----------- + +- Drop support for Windows 7, Windows 8, Server 2008 R2 and Server 2012. + +- Console devices (/dev/consN) are now accessible by processes attached + to other consoles or ptys. Thanks to this new feature, GNU screen and + tmux now work in the console. + +- newgrp(1) tool. + +- cygcheck has new options searching for available packages in the + cygwin distro, as well as getting extended info on available and + installed packages. + +- fnmatch(3) and glob(3) now support named character classes, equivalence + class expressions, and collating symbols in the search pattern, i.e., + [:alnum:], [=a=], [.aa.]. + +- Introduce /dev/disk directory with various by-* subdirectories which + provide symlinks to disk and partition raw devices: + by-drive/DRIVE_LETTER -> ../../sdXN + by-label/VOLUME_LABEL -> ../../sdXN + by-id/BUSTYPE-[VENDOR_]PRODUCT_[SERIAL|0xHASH][-partN] -> ../../sdX[N] + by-partuuid/MBR_SERIAL-OFFSET -> ../../sdXN + by-partuuid/GPT_GUID -> ../../sdXN + by-uuid/VOLUME_SERIAL -> ../../sdXN + by-voluuid/MBR_SERIAL-OFFSET -> ../../sdXN + by-voluuid/VOLUME_GUID -> ../../sdXN + The subdirectories by-drive and by-voluuid are Cygwin specific. + +- Introduce /proc/codesets and /proc/locales with information on + supported codesets and locales for all interested parties. Locale(1) + opens these files and uses the info for printing locale info like any + other process could do. + +- Add support for GB18030 codeset. + +- Add support for lseek flags SEEK_DATA and SEEK_HOLE, a GNU extension. + +- New API calls: posix_spawn_file_actions_addchdir_np, + posix_spawn_file_actions_addfchdir_np. + +- New API calls: c8rtomb, c16rtomb, c32rtomb, mbrtoc8, mbrtoc16, mbrtoc32. + +- New API call: close_range (available on FreeBSD and Linux). + +- New API call: fallocate (Linux-specific). + +- Implement OSS-based sound mixer device (/dev/mixer). + +What changed: +------------- + +- posix_spawnp no longer falls back to starting the shell for unrecognized + files as execvp. For the reasoning, see + https://www.austingroupbugs.net/view.php?id=1674 + +- FIFOs now also work on NFS filesystems. + +- Enable automatic sparsifying of files on SSDs, independent of the + "sparse" mount mode. + +- When RLIMIT_CORE is more than 1MB, a core dump file which can be loaded by gdb + is now written on a fatal error. Otherwise, if it's greater than zero, a text + format .stackdump file is written, as previously. + +- The default RLIMIT_CORE is now 0, disabling the generation of core dump or + stackdump files. + +Fixes: +------ + +- Fix arc4random reseeding after fork(2). + Addresses: https://cygwin.com/pipermail/cygwin/2024-January/255245.html diff --git a/winsup/cygwin/release/3.5.1 b/winsup/cygwin/release/3.5.1 new file mode 100644 index 0000000000..7ef55d17da --- /dev/null +++ b/winsup/cygwin/release/3.5.1 @@ -0,0 +1,33 @@ +Fixes: +------ + +- Fix exit code for non-cygwin process running in console. The bug + was introduced in 3.5.0. + +- Make the interface names handled by if_nametoindex() and if_indextoname() + consistent with that of if_nameindex(). + +- Revert error handling for non-Cygwin child processes to use Cygwin's + error mode by default. Resetting the error mode to the OS default + error mode is now possible by using the new CYGWIN environment variable + option "winjitdebug". + Addresses: https://cygwin.com/pipermail/cygwin/2024-February/255305.html + +- Fix handle leak in pty master which occurs when non-cygwin process + is started in pty. + Addresses: https://github.com/msys2/msys2-runtime/issues/198 + +- Fix the problem that VMIN and VTIME does not work at all in console. + +- Fix a bug that cannot handle consoles more than 32, rather than 64. + +- Fix gettimeofday not checking for a NULL pointer + Addresses: https://cygwin.com/pipermail/cygwin/2024-February/255473.html + +- Fix two bugs in strptime, error checking of invalid numerical input and + %p handling. + +- Fix newgrp(1) group handling. Only allow groups already in the user + token, as Windows doesn't allow otherwise. + +- Fix getgrent enumeration of local SAM accounts on domain member machines. diff --git a/winsup/cygwin/release/3.5.2 b/winsup/cygwin/release/3.5.2 new file mode 100644 index 0000000000..32137c2e68 --- /dev/null +++ b/winsup/cygwin/release/3.5.2 @@ -0,0 +1,26 @@ +Fixes: +------ + +- Fix the problem that console setup accesses shared memory which + is already unmapped due to race condition. To avoid this issue, + shared console memory will be kept mapped if it belongs to CTTY. + Addresses: https://cygwin.com/pipermail/cygwin/2024-February/255561.html + +- Fix a race issue between console open() and close() which is caused + by state mismatch between con.owner and console attaching state. + Addresses: https://cygwin.com/pipermail/cygwin/2024-March/255575.html + +- Fix a problem that select() call for write-side of a pipe possibly + hangs with non-cygwin reader. + Addresses: https://github.com/msys2/msys2-runtime/issues/202 + +- Avoid recalling offline files if the file is not explicitely opened + for reading or writing data. + Addresses: https://cygwin.com/pipermail/cygwin/2024-March/255613.html + +- Don't skip inadvertently some local SAM accounts on domain member + machines. + +- Revert ill-advised optimization of glob(3) in case of caseinsensitive + globbing. + Addresses: https://cygwin.com/pipermail/cygwin/2024-March/255675.html diff --git a/winsup/cygwin/release/3.5.3 b/winsup/cygwin/release/3.5.3 new file mode 100644 index 0000000000..c860a86414 --- /dev/null +++ b/winsup/cygwin/release/3.5.3 @@ -0,0 +1,2 @@ +Fixing a build problem. +Refer to the 3.5.2 release file. diff --git a/winsup/cygwin/release/3.5.4 b/winsup/cygwin/release/3.5.4 new file mode 100644 index 0000000000..90c324b23d --- /dev/null +++ b/winsup/cygwin/release/3.5.4 @@ -0,0 +1,30 @@ +Fixes: +------ + +- Fix regression in 3.5.3 which fails to open files for stat(2) if the + file is opened exclusively by another process. + Addresses: https://cygwin.com/pipermail/cygwin/2024-April/255811.html + +- Fix regression introduced in 3.5.0 when reading surrogate pairs (i.e., + unicode chars >= 0x10000) from the DOS command line. Addresses: + https://cygwin.com/pipermail/cygwin/2024-April/255807.html + +- Fix regression of pthread::once() introduced in 3.5.0 (i.e., the race + issue regarding destroying mutex). + Addresses: https://cygwin.com/pipermail/cygwin/2024-May/255987.html + +- Fix a problem that ldd command against cygwin DLLs sometimes hangs. + Addresses: https://cygwin.com/pipermail/cygwin/2024-May/255991.html + +- Fix a problem that pty slave hangs on writing when pty master stops + to read. + Addresses: https://cygwin.com/pipermail/cygwin/2024-June/256178.html + +- Fix conflict on shared name in console between sessions. + Addresses: https://cygwin.com/pipermail/cygwin/2024-April/255893.html + +- Fix an off-by-one in LC_MESSAGE wide character data. + Addresses: https://sourceware.org/pipermail/newlib/2024/021271.html + +- Improve write pipe behaviour in case the pipe buffer is about to be + filled up. diff --git a/winsup/cygwin/release/3.5.5 b/winsup/cygwin/release/3.5.5 new file mode 100644 index 0000000000..904119a387 --- /dev/null +++ b/winsup/cygwin/release/3.5.5 @@ -0,0 +1,9 @@ +Fixes: +------ + +- Fix undesired behaviour of console master thread in win32-input-mode + which is supported by Windows Termainal. + Addresses: https://cygwin.com/pipermail/cygwin/2024-August/256380.html + +- Fix a regression in 3.5.4 that writing to pipe extremely slows down. + Addresses: https://cygwin.com/pipermail/cygwin/2024-August/256398.html diff --git a/winsup/cygwin/resource.cc b/winsup/cygwin/resource.cc index aafc2b0b12..5ec436c2cf 100644 --- a/winsup/cygwin/resource.cc +++ b/winsup/cygwin/resource.cc @@ -218,8 +218,7 @@ __set_rlimit_as (unsigned long new_as_limit) /* If we already have a limit, we must not change it because that would potentially influence already running child processes. - Just try to create another, nested job. On systems prior to - Windows 8 / Server 2012 this will fail, but that's ok. */ + Just try to create another, nested job. */ while (new_as_id == 0) new_as_id = InterlockedIncrement (&job_serial_number); RtlInitUnicodeString (&uname, diff --git a/winsup/cygwin/scripts/analyze_sigfe b/winsup/cygwin/scripts/analyze_sigfe index 8704eea48b..f6bda2355a 100755 --- a/winsup/cygwin/scripts/analyze_sigfe +++ b/winsup/cygwin/scripts/analyze_sigfe @@ -9,7 +9,7 @@ # This will do a crude test to see if the (NO)?SIGFE stuff is used properly # in cygwin.din. It is not perfect so do not use it to do a wholesale replacement. # -# Input is the output of 'objdump --disassemble --demangle cygwin0.dll'. +# Input is the output of 'objdump --disassemble --demangle new-cygwin1.dll'. # use strict; use vars qw'$v'; diff --git a/winsup/cygwin/scripts/mkimport b/winsup/cygwin/scripts/mkimport index 7684a8f0e6..9517c4e9e1 100755 --- a/winsup/cygwin/scripts/mkimport +++ b/winsup/cygwin/scripts/mkimport @@ -92,8 +92,12 @@ for my $f (keys %text) { } } +# Enable deterministic archives for reproducible builds. +my $opts = 'crs'; +$opts .= 'D' if ($ENV{'SOURCE_DATE_EPOCH'} != ''); + unlink $libdll; -system $ar, 'crus', $libdll, glob('*.o'), @ARGV; +system $ar, $opts, $libdll, glob('*.o'), @ARGV; unlink glob('*.o'); exit 1 if $?; diff --git a/winsup/cygwin/scripts/mkvers.sh b/winsup/cygwin/scripts/mkvers.sh index 60586adf94..34d8d6dce1 100755 --- a/winsup/cygwin/scripts/mkvers.sh +++ b/winsup/cygwin/scripts/mkvers.sh @@ -60,9 +60,9 @@ parse_preproc_flags $CC # -# Load the current date so we can work on individual fields +# Load the current date (or SOURCE_DATE_EPOCH) so we can work on individual fields # -set -$- $(date -u +"%m %d %Y %H:%M") +set -$- $(date ${SOURCE_DATE_EPOCH:+-d @}${SOURCE_DATE_EPOCH} -u +"%m %d %Y %H:%M") m=$1 d=$2 y=$3 hhmm=$4 # # Set date into YYYY-MM-DD HH:MM:SS format diff --git a/winsup/cygwin/scripts/speclib b/winsup/cygwin/scripts/speclib index 4dcadcbfac..42a02c511b 100755 --- a/winsup/cygwin/scripts/speclib +++ b/winsup/cygwin/scripts/speclib @@ -75,7 +75,11 @@ EOF close $as_fd or exit 1; system $objcopy, '-j', '.idata$7', $iname_o; -$res = system $ar, 'crus', $lib, sort keys %extract; +# Enable deterministic archives for reproducible builds. +my $opts = 'crs'; +$opts .= 'D' if ($ENV{'SOURCE_DATE_EPOCH'} != ''); + +$res = system $ar, $opts, $lib, sort keys %extract; unlink keys %extract; die "$0: ar creation of $lib exited with non-zero status\n" if $res; exit 0; diff --git a/winsup/cygwin/sec/acl.cc b/winsup/cygwin/sec/acl.cc index 2fd08ad625..db86f9e9e0 100644 --- a/winsup/cygwin/sec/acl.cc +++ b/winsup/cygwin/sec/acl.cc @@ -1103,7 +1103,7 @@ get_posix_access (PSECURITY_DESCRIPTOR psd, pos = MAX_ACL_ENTRIES; /* For old-style or non-Cygwin ACLs, check for merging permissions. */ - if (!new_style) + if (!just_created && !new_style) for (idx = 0; idx < pos; ++idx) { if (lacl[idx].a_type & (USER_OBJ | USER) diff --git a/winsup/cygwin/select.cc b/winsup/cygwin/select.cc index 2fd7b72b6c..bc02c3f9d4 100644 --- a/winsup/cygwin/select.cc +++ b/winsup/cygwin/select.cc @@ -584,14 +584,15 @@ no_verify (select_record *, fd_set *, fd_set *, fd_set *) return 0; } -static int -pipe_data_available (int fd, fhandler_base *fh, HANDLE h, bool writing) +ssize_t +pipe_data_available (int fd, fhandler_base *fh, HANDLE h, int flags) { if (fh->get_device () == FH_PIPER) { DWORD nbytes_in_pipe; - if (!writing && PeekNamedPipe (h, NULL, 0, NULL, &nbytes_in_pipe, NULL)) - return nbytes_in_pipe > 0; + if (!(flags & PDA_WRITE) + && PeekNamedPipe (h, NULL, 0, NULL, &nbytes_in_pipe, NULL)) + return nbytes_in_pipe; return -1; } @@ -609,9 +610,17 @@ pipe_data_available (int fd, fhandler_base *fh, HANDLE h, bool writing) access on the write end. */ select_printf ("fd %d, %s, NtQueryInformationFile failed, status %y", fd, fh->get_name (), status); - return writing ? 1 : -1; + switch (flags) + { + case PDA_WRITE: + return 1; + case PDA_SELECT | PDA_WRITE: + return PIPE_BUF; + default: + return -1; + } } - if (writing) + if (flags & PDA_WRITE) { /* If there is anything available in the pipe buffer then signal that. This means that a pipe could still block since you could @@ -638,20 +647,26 @@ pipe_data_available (int fd, fhandler_base *fh, HANDLE h, bool writing) /* Note: Do not use NtQueryInformationFile() for query_hdl because NtQueryInformationFile() seems to interfere with reading pipes in non-cygwin apps. Instead, use PeekNamedPipe() here. */ + /* Note 2: we return the number of available bytes. Select for writing + returns writable *only* if at least PIPE_BUF bytes are left in the + buffer. If we can't fetch the real number of available bytes, the + number of bytes returned depends on the caller. For select we return + PIPE_BUF to fake writability, for writing we return 1 to allow + handling this fact. */ if (fh->get_device () == FH_PIPEW && fpli.WriteQuotaAvailable == 0) { HANDLE query_hdl = ((fhandler_pipe *) fh)->get_query_handle (); if (!query_hdl) query_hdl = ((fhandler_pipe *) fh)->temporary_query_hdl (); - if (!query_hdl) - return 1; /* We cannot know actual write pipe space. */ + if (!query_hdl) /* We cannot know actual write pipe space. */ + return (flags & PDA_SELECT) ? PIPE_BUF : 1; DWORD nbytes_in_pipe; BOOL res = PeekNamedPipe (query_hdl, NULL, 0, NULL, &nbytes_in_pipe, NULL); if (!((fhandler_pipe *) fh)->get_query_handle ()) CloseHandle (query_hdl); /* Close temporary query_hdl */ - if (!res) - return 1; + if (!res) /* We cannot know actual write pipe space. */ + return (flags & PDA_SELECT) ? PIPE_BUF : 1; fpli.WriteQuotaAvailable = fpli.InboundQuota - nbytes_in_pipe; } if (fpli.WriteQuotaAvailable > 0) @@ -659,7 +674,7 @@ pipe_data_available (int fd, fhandler_base *fh, HANDLE h, bool writing) paranoid_printf ("fd %d, %s, write: size %u, avail %u", fd, fh->get_name (), fpli.InboundQuota, fpli.WriteQuotaAvailable); - return 1; + return fpli.WriteQuotaAvailable; } /* TODO: Buffer really full or non-Cygwin reader? */ } @@ -667,7 +682,7 @@ pipe_data_available (int fd, fhandler_base *fh, HANDLE h, bool writing) { paranoid_printf ("fd %d, %s, read avail %u", fd, fh->get_name (), fpli.ReadDataAvailable); - return 1; + return fpli.ReadDataAvailable; } if (fpli.NamedPipeState & FILE_PIPE_CLOSING_STATE) return -1; @@ -715,10 +730,10 @@ peek_pipe (select_record *s, bool from_select) gotone = s->read_ready = true; goto out; } - int n = pipe_data_available (s->fd, fh, h, false); + ssize_t n = pipe_data_available (s->fd, fh, h, PDA_SELECT); /* On PTY masters, check if input from the echo pipe is available. */ if (n == 0 && fh->get_echo_handle ()) - n = pipe_data_available (s->fd, fh, fh->get_echo_handle (), false); + n = pipe_data_available (s->fd, fh, fh->get_echo_handle (), PDA_SELECT); if (n < 0) { @@ -759,9 +774,9 @@ peek_pipe (select_record *s, bool from_select) gotone += s->except_ready = true; return gotone; } - int n = pipe_data_available (s->fd, fh, h, true); + ssize_t n = pipe_data_available (s->fd, fh, h, PDA_SELECT | PDA_WRITE); select_printf ("write: %s, n %d", fh->get_name (), n); - gotone += s->write_ready = n; + gotone += s->write_ready = (n >= PIPE_BUF); if (n < 0 && s->except_selected) gotone += s->except_ready = true; } @@ -972,9 +987,10 @@ peek_fifo (select_record *s, bool from_select) out: if (s->write_selected) { - int n = pipe_data_available (s->fd, fh, fh->get_handle (), true); + ssize_t n = pipe_data_available (s->fd, fh, fh->get_handle (), + PDA_SELECT | PDA_WRITE); select_printf ("write: %s, n %d", fh->get_name (), n); - gotone += s->write_ready = n; + gotone += s->write_ready = (n >= PIPE_BUF); if (n < 0 && s->except_selected) gotone += s->except_ready = true; } @@ -1141,7 +1157,9 @@ peek_console (select_record *me, bool) else { acquire_attach_mutex (mutex_timeout); + DWORD resume_pid = fh->attach_console (fh->get_owner ()); BOOL r = PeekConsoleInputW (h, &irec, 1, &events_read); + fh->detach_console (resume_pid, fh->get_owner ()); release_attach_mutex (); if (!r || !events_read) break; @@ -1396,9 +1414,9 @@ peek_pty_slave (select_record *s, bool from_select) HANDLE h = ptys->get_output_handle (); if (s->write_selected) { - int n = pipe_data_available (s->fd, fh, h, true); + ssize_t n = pipe_data_available (s->fd, fh, h, PDA_SELECT | PDA_WRITE); select_printf ("write: %s, n %d", fh->get_name (), n); - gotone += s->write_ready = n; + gotone += s->write_ready = (n >= PIPE_BUF); if (n < 0 && s->except_selected) gotone += s->except_ready = true; } @@ -2253,3 +2271,145 @@ fhandler_timerfd::select_except (select_stuff *stuff) s->except_ready = false; return s; } + +static int +peek_dsp (select_record *s, bool from_select) +{ + int gotone = 0; + fhandler_dev_dsp *fh = (fhandler_dev_dsp *)(fhandler_base *) s->fh; + + if (s->read_selected) + if (s->read_ready || fh->read_ready ()) + gotone += s->read_ready = true; + if (s->write_selected) + if (s->write_ready || fh->write_ready ()) + gotone += s->write_ready = true; + if (s->except_selected) + if (s->except_ready || fh->is_closed ()) + gotone += s->except_ready = true; + return gotone; +} + +static int start_thread_dsp (select_record *me, select_stuff *stuff); + +static DWORD +thread_dsp (void *arg) +{ + select_dsp_info *di = (select_dsp_info *) arg; + DWORD sleep_time = 0; + bool looping = true; + + while (looping) + { + for (select_record *s = di->start; (s = s->next); ) + if (s->startup == start_thread_dsp) + { + if (peek_dsp (s, true)) + looping = false; + if (di->stop_thread) + { + select_printf ("stopping"); + looping = false; + break; + } + } + if (!looping) + break; + cygwait (di->bye, sleep_time >> 3); + if (sleep_time < 80) + ++sleep_time; + if (di->stop_thread) + break; + } + return 0; +} + +static int +start_thread_dsp (select_record *me, select_stuff *stuff) +{ + select_dsp_info *di = stuff->device_specific_dsp; + if (di->start) + me->h = *((select_dsp_info *) stuff->device_specific_dsp)->thread; + else + { + di->bye = me->fh->get_select_sem (); + if (di->bye) + DuplicateHandle (GetCurrentProcess (), di->bye, + GetCurrentProcess (), &di->bye, + 0, 0, DUPLICATE_SAME_ACCESS); + else + di->bye = CreateSemaphore (&sec_none_nih, 0, INT32_MAX, NULL); + di->start = &stuff->start; + di->stop_thread = false; + di->thread = new cygthread (thread_dsp, di, "dspsel"); + me->h = *di->thread; + if (!me->h) + return 0; + } + return 1; +} + +static void +dsp_cleanup (select_record *, select_stuff *stuff) +{ + select_dsp_info *di = (select_dsp_info *) stuff->device_specific_dsp; + if (!di) + return; + if (di->thread) + { + di->stop_thread = true; + ReleaseSemaphore (di->bye, get_obj_handle_count (di->bye), NULL); + di->thread->detach (); + CloseHandle (di->bye); + } + delete di; + stuff->device_specific_dsp = NULL; +} + +select_record * +fhandler_dev_dsp::select_read (select_stuff *stuff) +{ + if (!stuff->device_specific_dsp + && (stuff->device_specific_dsp = new select_dsp_info) == NULL) + return NULL; + select_record *s = stuff->start.next; + s->startup = start_thread_dsp; + s->peek = peek_dsp; + s->verify = verify_ok; + s->cleanup = dsp_cleanup; + s->read_selected = true; + s->read_ready = false; + return s; +} + +select_record * +fhandler_dev_dsp::select_write (select_stuff *stuff) +{ + if (!stuff->device_specific_dsp + && (stuff->device_specific_dsp = new select_dsp_info) == NULL) + return NULL; + select_record *s = stuff->start.next; + s->startup = start_thread_dsp; + s->peek = peek_dsp; + s->verify = verify_ok; + s->cleanup = dsp_cleanup; + s->write_selected = true; + s->write_ready = false; + return s; +} + +select_record * +fhandler_dev_dsp::select_except (select_stuff *stuff) +{ + if (!stuff->device_specific_dsp + && (stuff->device_specific_dsp = new select_dsp_info) == NULL) + return NULL; + select_record *s = stuff->start.next; + s->startup = start_thread_dsp; + s->peek = peek_dsp; + s->verify = verify_ok; + s->cleanup = dsp_cleanup; + s->except_selected = true; + s->except_ready = false; + return s; +} diff --git a/winsup/cygwin/sigproc.cc b/winsup/cygwin/sigproc.cc index 3d3f38fef9..5c5ff73f0a 100644 --- a/winsup/cygwin/sigproc.cc +++ b/winsup/cygwin/sigproc.cc @@ -846,14 +846,7 @@ child_info::child_info (unsigned in_cb, child_info_types chtype, DWORD perms = PROCESS_QUERY_LIMITED_INFORMATION | PROCESS_VM_READ | PROCESS_VM_OPERATION | SYNCHRONIZE; if (type == _CH_FORK) - { - perms |= PROCESS_DUP_HANDLE; - /* VirtualQueryEx is documented to require PROCESS_QUERY_INFORMATION. - That's true for Windows 7, but PROCESS_QUERY_LIMITED_INFORMATION - appears to be sufficient on Windows 8 and later. */ - if (wincap.needs_query_information ()) - perms |= PROCESS_QUERY_INFORMATION; - } + perms |= PROCESS_DUP_HANDLE; if (!DuplicateHandle (GetCurrentProcess (), GetCurrentProcess (), GetCurrentProcess (), &parent, perms, TRUE, 0)) @@ -1089,7 +1082,7 @@ child_info::proc_retry (HANDLE h) if (!exit_code) return EXITCODE_OK; sigproc_printf ("exit_code %y", exit_code); - switch (exit_code) + switch ((NTSTATUS) exit_code) { case STILL_ACTIVE: /* shouldn't happen */ sigproc_printf ("STILL_ACTIVE? How'd we get here?"); @@ -1482,14 +1475,7 @@ wait_sig (VOID *) } break; case __SIGNONCYGCHLD: - cygheap_fdenum cfd (false); - while (cfd.next () >= 0) - if (cfd->get_dev () == FH_PIPEW) - { - fhandler_pipe *pipe = (fhandler_pipe *)(fhandler_base *) cfd; - if (pipe->need_close_query_hdl ()) - pipe->close_query_handle (); - } + fhandler_pipe::sigproc_worker (); break; } if (clearwait && !have_execed) diff --git a/winsup/cygwin/spawn.cc b/winsup/cygwin/spawn.cc index acdef49375..9d2a0164e4 100644 --- a/winsup/cygwin/spawn.cc +++ b/winsup/cygwin/spawn.cc @@ -228,6 +228,8 @@ struct system_call_handle _sig_func_ptr oldint; _sig_func_ptr oldquit; sigset_t oldmask; + __pthread_cleanup_handler cleanup_handler; + bool is_system_call () { return oldint != ILLEGAL_SIG_FUNC_PTR; @@ -253,18 +255,27 @@ struct system_call_handle sigaddset (&child_block, SIGCHLD); sigprocmask (SIG_BLOCK, &child_block, &oldmask); sig_send (NULL, __SIGNOHOLD); + + cleanup_handler = { system_call_handle::cleanup, this, NULL }; + _pthread_cleanup_push (&cleanup_handler); } } ~system_call_handle () { if (is_system_call ()) + _pthread_cleanup_pop (1); + } + static void cleanup (void *arg) + { +# define this_ ((system_call_handle *) arg) + if (this_->is_system_call ()) { - signal (SIGINT, oldint); - signal (SIGQUIT, oldquit); - sigprocmask (SIG_SETMASK, &oldmask, NULL); + signal (SIGINT, this_->oldint); + signal (SIGQUIT, this_->oldquit); + sigprocmask (SIG_SETMASK, &(this_->oldmask), NULL); } } -# undef cleanup +# undef this_ }; child_info_spawn NO_COPY ch_spawn; @@ -623,7 +634,7 @@ child_info_spawn::worker (const char *prog_arg, const char *const *argv, si.cb = sizeof (si); if (!iscygwin ()) - init_console_handler (myself->ctty > 0); + init_console_handler (CTTY_IS_VALID (myself->ctty)); loop: /* When ruid != euid we create the new process under the current original @@ -1397,8 +1408,7 @@ __posix_spawn_execvpe (const char *path, char * const *argv, char *const *envp, ch_spawn.set_sem (sem); ch_spawn.worker (use_env_path ? (find_exec (path, buf, "PATH", FE_NNF) ?: "") : path, - argv, envp, - _P_OVERLAY | (use_env_path ? _P_PATH_TYPE_EXEC : 0)); + argv, envp, _P_OVERLAY); __posix_spawn_sem_release (sem, errno); return -1; } diff --git a/winsup/cygwin/strfuncs.cc b/winsup/cygwin/strfuncs.cc index ebd559b66f..54b9ba7aea 100644 --- a/winsup/cygwin/strfuncs.cc +++ b/winsup/cygwin/strfuncs.cc @@ -10,6 +10,7 @@ details. */ #include #include #include +#include #include #include "path.h" #include "fhandler.h" @@ -112,6 +113,375 @@ transform_chars_af_unix (PWCHAR out, const char *path, __socklen_t len) return out; } +/* convert wint_t string to wchar_t string. Make sure dest + has room for at least twice as much characters to account + for surrogate pairs, plus a wchar_t NUL. */ +extern "C" void +wcintowcs (wchar_t *dest, wint_t *src, size_t len) +{ + while (*src && len-- > 0) + if (*src > 0xffff) + { + *dest++ = ((*src - 0x10000) >> 10) + 0xd800; + *dest++ = ((*src++ - 0x10000) & 0x3ff) + 0xdc00; + } + else + *dest++ = *src++; + *dest = '\0'; +} + +/* replacement function for wcrtomb, converting a UTF-32 char to a + multibyte string. */ +extern "C" size_t +c32rtomb (char *s, char32_t wc, mbstate_t *ps) +{ + if (ps == NULL) + { + _REENT_CHECK_MISC(_REENT); + ps = &(_REENT_C32RTOMB_STATE(_REENT)); + } + + /* If s is NULL, behave as if s pointed to an internal buffer and wc + was a null wide character (L''). wcrtomb will do that for us*/ + if (wc <= 0xffff || !s) + return wcrtomb (s, (wchar_t) wc, ps); + + wchar_t wc_arr[2]; + const wchar_t *wcp = wc_arr; + + wc -= 0x10000; + wc_arr[0] = (wc >> 10) + 0xd800; + wc_arr[1] = (wc & 0x3ff) + 0xdc00; + return wcsnrtombs (s, &wcp, 2, SIZE_MAX, ps); +} + +extern "C" size_t +c16rtomb (char *s, char16_t wc, mbstate_t *ps) +{ + if (ps == NULL) + { + _REENT_CHECK_MISC(_REENT); + ps = &(_REENT_C16RTOMB_STATE(_REENT)); + } + + return wcrtomb (s, (wchar_t) wc, ps); +} + +extern "C" size_t +c8rtomb (char *s, char8_t c8, mbstate_t *ps) +{ + struct _reent *reent = _REENT; + char32_t wc; + + if (ps == NULL) + { + _REENT_CHECK_MISC(reent); + ps = &(_REENT_C8RTOMB_STATE(reent)); + } + + if (s == NULL) + { + ps->__count = 0; + return 1; + } + if ((ps->__count & 0xff00) != 0xc800) + { + switch (c8) + { + case 0 ... 0x7f: /* single octet */ + ps->__count = 0; + wc = c8; + break; + case 0xc2 ... 0xf4: /* valid lead byte */ + ps->__count = 0xc801; + ps->__value.__wchb[0] = c8; + return 0; + default: + goto ilseq; + } + } + else + { + /* We already collected something... */ + int idx = ps->__count & 0x3; + char8_t &c1 = ps->__value.__wchb[0]; + char8_t &c2 = ps->__value.__wchb[1]; + char8_t &c3 = ps->__value.__wchb[2]; + + switch (idx) + { + case 1: + /* Annoyingly complex check for validity for 2nd octet. */ + if (c8 <= 0x7f || c8 >= 0xc0) + goto ilseq; + if (c1 == 0xe0 && c8 <= 0x9f) + goto ilseq; + if (c1 == 0xed && c8 >= 0xa0) + goto ilseq; + if (c1 == 0xf0 && c8 <= 0x8f) + goto ilseq; + if (c1 == 0xf4 && c8 >= 0x90) + goto ilseq; + if (c1 >= 0xe0) + { + ps->__count = 0xc802; + c2 = c8; + return 0; + } + wc = ((c1 & 0x1f) << 6) + | (c8 & 0x3f); + break; + case 2: + if (c8 <= 0x7f || c8 >= 0xc0) + goto ilseq; + if (c1 >= 0xf0) + { + ps->__count = 0xc803; + c3 = c8; + return 0; + } + wc = ((c1 & 0x0f) << 12) + | ((c2 & 0x3f) << 6) + | (c8 & 0x3f); + break; + case 3: + if (c8 <= 0x7f || c8 >= 0xc0) + goto ilseq; + wc = ((c1 & 0x07) << 18) + | ((c2 & 0x3f) << 12) + | ((c3 & 0x3f) << 6) + | (c8 & 0x3f); + break; + default: /* Shouldn't happen */ + goto ilseq; + } + } + ps->__count = 0; + return c32rtomb (s, wc, ps); +ilseq: + ps->__count = 0; + _REENT_ERRNO(reent) = EILSEQ; + return (size_t)(-1); +} + +extern "C" size_t +mbrtoc32 (char32_t *pwc, const char *s, size_t n, mbstate_t *ps) +{ + size_t len, len2; + wchar_t w1, w2; + + if (ps == NULL) + { + _REENT_CHECK_MISC(_REENT); + ps = &(_REENT_MBRTOC32_STATE(_REENT)); + } + + len = mbrtowc (&w1, s, n, ps); + if (len == (size_t) -1 || len == (size_t) -2) + return len; + if (pwc && s) + *pwc = w1; + /* Convert surrogate pair to wint_t value */ + if (len > 0 && w1 >= 0xd800 && w1 <= 0xdbff) + { + s += len; + n -= len; + len2 = mbrtowc (&w2, s, n, ps); + if (len2 > 0 && w2 >= 0xdc00 && w2 <= 0xdfff) + { + len += len2; + if (pwc && s) + *pwc = (((w1 & 0x3ff) << 10) | (w2 & 0x3ff)) + 0x10000; + } + else + { + len = (size_t) -1; + errno = EILSEQ; + } + } + return len; +} + +/* Like mbrtowc, but we already defined how to return a surrogate, and + the definition of mbrtoc16 differes from that. + Return the high surrogate with a return value representing the length + of the entire multibyte sequence, and in the next call return the low + surrogate with a return value of -3. */ +extern "C" size_t +mbrtoc16 (char16_t *pwc, const char *s, size_t n, mbstate_t *ps) +{ + int retval = 0; + struct _reent *reent = _REENT; + wchar_t wc; + + if (ps == NULL) + { + _REENT_CHECK_MISC(reent); + ps = &(_REENT_MBRTOC16_STATE(reent)); + } + + if (s == NULL) + retval = __MBTOWC (reent, NULL, "", 1, ps); + else if (ps->__count == 0xdc00) + { + /* Return stored second half of the surrogate. */ + if (pwc) + *pwc = ps->__value.__wch; + ps->__count = 0; + return -3; + } + else + retval = __MBTOWC (reent, &wc, s, n, ps); + + if (retval == -1) + goto ilseq; + + if (pwc) + *pwc = wc; + /* Did we catch the first half of a surrogate? */ + if (wc >= 0xd800 && wc <= 0xdbff) + { + if (n <= (size_t) retval) + goto ilseq; + int r2 = __MBTOWC (reent, &wc, s + retval, n, ps); + if (r2 == -1) + goto ilseq; + /* Store second half of the surrogate in state, and return the + length of the entire multibyte sequence. */ + ps->__count = 0xdc00; + ps->__value.__wch = wc; + retval += r2; + } + return (size_t)retval; + +ilseq: + ps->__count = 0; + _REENT_ERRNO(reent) = EILSEQ; + return (size_t)(-1); +} + +extern "C" size_t +mbrtoc8 (char8_t *pc8, const char *s, size_t n, mbstate_t *ps) +{ + struct _reent *reent = _REENT; + size_t len; + char32_t wc; + + if (ps == NULL) + { + _REENT_CHECK_MISC(reent); + ps = &(_REENT_MBRTOC8_STATE(reent)); + } + + if (s == NULL) + { + if (ps) + ps->__count = 0; + return 1; + } + else if ((ps->__count & 0xff00) == 0xc800) + { + /* Return next utf-8 octet in line. */ + int idx = ps->__count & 0x3; + + if (pc8) + *pc8 = ps->__value.__wchb[--idx]; + if (idx == 0) + ps->__count = 0; + return -3; + } + len = mbrtoc32 (&wc, s, n, ps); + if (len > 0) + { + /* octets stored back to front for easier indexing */ + switch (wc) + { + case 0 ... 0x7f: + ps->__value.__wchb[0] = wc; + ps->__count = 0; + break; + case 0x80 ... 0x7ff: + ps->__value.__wchb[1] = 0xc0 | ((wc & 0x7c0) >> 6); + ps->__value.__wchb[0] = 0x80 | (wc & 0x3f); + ps->__count = 0xc800 | 1; + break; + case 0x800 ... 0xffff: + ps->__value.__wchb[2] = 0xe0 | ((wc & 0xf000) >> 12); + ps->__value.__wchb[1] = 0x80 | ((wc & 0xfc0) >> 6); + ps->__value.__wchb[0] = 0x80 | (wc & 0x3f); + ps->__count = 0xc800 | 2; + break; + case 0x10000 ... 0x10ffff: + ps->__value.__wchb[3] = 0xf0 | ((wc & 0x1c0000) >> 18); + ps->__value.__wchb[2] = 0x80 | ((wc & 0x3f000) >> 12); + ps->__value.__wchb[1] = 0x80 | ((wc & 0xfc0) >> 6); + ps->__value.__wchb[0] = 0x80 | (wc & 0x3f); + ps->__count = 0xc800 | 3; + break; + default: + ps->__count = 0; + _REENT_ERRNO(reent) = EILSEQ; + return (size_t)(-1); + } + if (pc8) + *pc8 = ps->__value.__wchb[ps->__count & 0x3]; + } + return len; +} + +extern "C" size_t +mbsnrtowci(wint_t *dst, const char **src, size_t nms, size_t len, mbstate_t *ps) +{ + wint_t *ptr = dst; + const char *tmp_src; + size_t max; + size_t count = 0; + size_t bytes; + + if (dst == NULL) + { + /* Ignore original len value and do not alter src pointer if the + dst pointer is NULL. */ + len = (size_t)-1; + tmp_src = *src; + src = &tmp_src; + } + max = len; + while (len > 0) + { + bytes = mbrtowi (ptr, *src, MB_CUR_MAX, ps); + if (bytes > 0) + { + *src += bytes; + nms -= bytes; + ++count; + ptr = (dst == NULL) ? NULL : ptr + 1; + --len; + } + else if (bytes == 0) + { + *src = NULL; + return count; + } + else + { + /* Deviation from standard: If the input is broken, the output + will be broken. I. e., we just copy the current byte over + into the wint_t destination and try to pick up on the next + byte. This is in line with the way fnmatch works. */ + ps->__count = 0; + if (dst) + { + *ptr++ = (const wint_t) *(*src)++; + ++count; + --nms; + --len; + } + } + } + return (size_t) max; +} + /* The SJIS, JIS and eucJP conversion in newlib does not use UTF as wchar_t character representation. That's unfortunate for us since we require UTF for the OS. What we do here is to have our own @@ -124,7 +494,8 @@ transform_chars_af_unix (PWCHAR out, const char *path, __socklen_t len) eucJP, the both most used Japanese charset encodings, this shouldn't be such a big problem. */ -/* GBK, eucKR, and Big5 conversions are not available so far in newlib. */ +/* GBK, GB18030, eucKR, and Big5 conversions are not available so far + in newlib. */ static int __db_wctomb (struct _reent *r, char *s, wchar_t wchar, UINT cp) @@ -204,6 +575,60 @@ __gbk_wctomb (struct _reent *r, char *s, wchar_t wchar, mbstate_t *state) return __db_wctomb (r,s, wchar, 936); } +extern "C" int +__gb18030_wctomb (struct _reent *r, char *s, wchar_t wchar, mbstate_t *state) +{ + int ret; + wchar_t wres[2]; + + if (s == NULL) + return 0; + + if (state->__count == 0) + { + if (wchar <= 0x7f) + { + *s = (char) wchar; + return 1; + } + + if (wchar >= 0xd800 && wchar <= 0xdbff) + { + /* First half of a surrogate pair */ + state->__count = 18030; + state->__value.__wch = wchar; + return 0; + } + ret = WideCharToMultiByte (54936, WC_ERR_INVALID_CHARS, &wchar, 1, s, + 4, NULL, NULL); + if (ret > 0) + return ret; + goto ilseq; + } + else if (state->__count == 18030 && state->__value.__wch >= 0xd800 + && state->__value.__wch <= 0xdbff) + { + if (wchar >= 0xdc00 && wchar <= 0xdfff) + { + /* Create multibyte sequence from full surrogate pair. */ + wres[0] = state->__value.__wch; + wres[1] = wchar; + ret = WideCharToMultiByte (54936, WC_ERR_INVALID_CHARS, wres, 2, s, 4, + NULL, NULL); + if (ret > 0) + { + state->__count = 0; + return ret; + } + } +ilseq: + _REENT_ERRNO(r) = EILSEQ; + return -1; + } + _REENT_ERRNO(r) = EINVAL; + return -1; +} + extern "C" int __kr_wctomb (struct _reent *r, char *s, wchar_t wchar, mbstate_t *state) { @@ -361,6 +786,111 @@ __gbk_mbtowc (struct _reent *r, wchar_t *pwc, const char *s, size_t n, return __db_mbtowc (r, pwc, s, n, 936, state); } +extern "C" int +__gb18030_mbtowc (struct _reent *r, wchar_t *pwc, const char *s, size_t n, + mbstate_t *state) +{ + wchar_t wres[2], dummy; + unsigned char ch; + int ret, len, ocount; + size_t ncopy; + + if (state->__count < 0 || (state->__count > (int) sizeof state->__value.__wchb + && state->__count != 18030)) + { + errno = EINVAL; + return -1; + } + + if (s == NULL) + { + s = ""; + n = 1; + pwc = NULL; + } + + if (state->__count == 18030) + { + /* Return second half of the surrogate pair */ + *pwc = state->__value.__wch; + state->__count = 0; + return 1; + } + + ncopy = MIN (MIN (n, MB_CUR_MAX), + sizeof state->__value.__wchb - state->__count); + memcpy (state->__value.__wchb + state->__count, s, ncopy); + ocount = state->__count; + state->__count += ncopy; + s = (char *) state->__value.__wchb; + n = state->__count; + + if (n == 0) /* Incomplete multibyte sequence */ + return -2; + + if (!pwc) + pwc = &dummy; + + /* Check if input is a valid GB18030 char (per FreeBSD): + * Single byte: [00-7f] + * Two byte: [81-fe][40-7e,80-fe] + * Four byte: [81-fe][30-39][81-fe][30-39] + */ + ch = *(unsigned char *) s; + if (ch <= 0x7f) + { + *pwc = ch; + state->__count = 0; + return ch ? 1 : 0; + } + if (ch >= 0x81 && ch <= 0xfe) + { + if (n < 2) + return -2; + ch = (unsigned char) s[1]; + if ((ch >= 0x40 && ch <= 0x7e) || (ch >= 0x80 && ch <= 0xfe)) + len = 2; + else if (ch >= 0x30 && ch <= 0x39) + { + if (n < 3) + return -2; + ch = (unsigned char) s[2]; + if (ch < 0x81 || ch > 0xfe) + goto ilseq; + if (n < 4) + return -2; + ch = (unsigned char) s[3]; + if (ch < 0x30 || ch > 0x39) + goto ilseq; + len = 4; + } + else + goto ilseq; + } + else + goto ilseq; + ret = MultiByteToWideChar (54936, MB_ERR_INVALID_CHARS, s, len, wres, 2); + if (ret) + { + *pwc = wres[0]; + if (ret == 2) + { + /* Surrogate pair. Store second half for later and return + first half. Return real count - 1, return 1 when the second + half of the pair is returned in the next run. */ + state->__count = 18030; + state->__value.__wch = wres[1]; + --len; + } + else + state->__count = 0; + return len - ocount; + } +ilseq: + _REENT_ERRNO(r) = EILSEQ; + return -1; +} + extern "C" int __kr_mbtowc (struct _reent *r, wchar_t *pwc, const char *s, size_t n, mbstate_t *state) diff --git a/winsup/cygwin/syscalls.cc b/winsup/cygwin/syscalls.cc index 725def4d27..fe4b9cb73d 100644 --- a/winsup/cygwin/syscalls.cc +++ b/winsup/cygwin/syscalls.cc @@ -85,6 +85,48 @@ close_all_files (bool norelease) cygheap->fdtab.unlock (); } +/* Close or set the close-on-exec flag for all open file descriptors + from firstfd to lastfd. CLOSE_RANGE_UNSHARE is not supported. + Available on FreeBSD since 13 and Linux since 5.9 */ +extern "C" int +close_range (unsigned int firstfd, unsigned int lastfd, int flags) +{ + pthread_testcancel (); + + if (!(firstfd <= lastfd && !(flags & ~CLOSE_RANGE_CLOEXEC))) + { + set_errno (EINVAL); + return -1; + } + + cygheap->fdtab.lock (); + + unsigned int size = (lastfd < cygheap->fdtab.size ? lastfd + 1 : + cygheap->fdtab.size); + + for (unsigned int i = firstfd; i < size; i++) + { + cygheap_fdget cfd ((int) i, false, false); + if (cfd < 0) + continue; + + if (flags & CLOSE_RANGE_CLOEXEC) + { + syscall_printf ("set FD_CLOEXEC on fd %u", i); + cfd->fcntl (F_SETFD, FD_CLOEXEC); + } + else + { + syscall_printf ("closing fd %u", i); + cfd->close_with_arch (); + cfd.release (); + } + } + + cygheap->fdtab.unlock (); + return 0; +} + extern "C" int dup (int fd) { @@ -665,8 +707,8 @@ _unlink_nt_post_dir_check (NTSTATUS status, POBJECT_ATTRIBUTES attr, const path_ return status; } -static NTSTATUS -_unlink_nt (path_conv &pc, bool shareable) +NTSTATUS +unlink_nt (path_conv &pc, bool shareable) { NTSTATUS status; HANDLE fh, fh_ro = NULL; @@ -691,10 +733,12 @@ _unlink_nt (path_conv &pc, bool shareable) pc.get_object_attr (attr, sec_none_nih); /* First check if we can use POSIX unlink semantics: W10 1709+, local NTFS. - With POSIX unlink semantics the entire job gets MUCH easier and faster. - Just try to do it and if it fails, it fails. */ + For the OPEN_BY_FILE_ID flag, see MINIMAL_WIN_NTFS_FLAGS comment in + fs_info::update. With POSIX unlink semantics the entire job gets MUCH + easier and faster. Just try to do it and if it fails, it fails. */ if (wincap.has_posix_unlink_semantics () - && !pc.isremote () && pc.fs_is_ntfs ()) + && !pc.isremote () && pc.fs_is_ntfs () + && pc.has_attribute (FILE_SUPPORTS_OPEN_BY_FILE_ID)) { FILE_DISPOSITION_INFORMATION_EX fdie; @@ -731,8 +775,15 @@ _unlink_nt (path_conv &pc, bool shareable) /* Trying to delete in-use executables and DLLs using FILE_DISPOSITION_POSIX_SEMANTICS returns STATUS_CANNOT_DELETE. Fall back to the default method. */ - if (status != STATUS_CANNOT_DELETE) - goto out; + /* Additionaly that returns STATUS_INVALID_PARAMETER + on a bind mounted fs in hyper-v container. Falling back too. */ + if (status != STATUS_CANNOT_DELETE + && status != STATUS_INVALID_PARAMETER) + { + debug_printf ("NtSetInformationFile returns %y " + "with posix semantics. Disable it and retry.", status); + goto out; + } } /* If the R/O attribute is set, we have to open the file with @@ -1062,18 +1113,6 @@ _unlink_nt (path_conv &pc, bool shareable) return status; } -NTSTATUS -unlink_nt (path_conv &pc) -{ - return _unlink_nt (pc, false); -} - -NTSTATUS -unlink_nt_shareable (path_conv &pc) -{ - return _unlink_nt (pc, true); -} - extern "C" int unlink (const char *ourname) { @@ -1113,7 +1152,7 @@ unlink (const char *ourname) goto done; } - status = unlink_nt (win32_name); + status = unlink_nt (win32_name, false); if (NT_SUCCESS (status)) res = 0; else @@ -1176,7 +1215,7 @@ setsid (void) syscall_printf ("hmm. pgid %d pid %d", myself->pgid, myself->pid); else { - myself->ctty = -2; + myself->ctty = CTTY_RELEASED; myself->sid = myself->pid; myself->pgid = myself->pid; if (cygheap->ctty) @@ -1450,17 +1489,6 @@ open (const char *unix_path, int flags, ...) int opt = PC_OPEN | PC_SYM_NOFOLLOW_PROCFD; opt |= (flags & (O_NOFOLLOW | O_EXCL)) ? PC_SYM_NOFOLLOW : PC_SYM_FOLLOW; - /* This is a temporary kludge until all utilities can catch up - with a change in behavior that implements linux functionality: - opening a tty should not automatically cause it to become the - controlling tty for the process. */ - if (!(flags & O_NOCTTY) && fd > 2 && myself->ctty != -2) - { - flags |= O_NOCTTY; - /* flag that, if opened, this fhandler could later be capable - of being a controlling terminal if /dev/tty is opened. */ - opt |= PC_CTTY; - } /* If we're opening a FIFO, we will call device_access_denied below. This leads to a call to fstat, which can use the @@ -1573,7 +1601,7 @@ lseek (int fd, off_t pos, int dir) { off_t res; - if (dir != SEEK_SET && dir != SEEK_CUR && dir != SEEK_END) + if (dir < SEEK_SET || dir > SEEK_HOLE) { set_errno (EINVAL); res = -1; @@ -1981,12 +2009,14 @@ stat_worker (path_conv &pc, struct stat *buf) { fhandler_base *fh; + memset (buf, 0, sizeof (*buf)); + if (!(fh = build_fh_pc (pc))) __leave; debug_printf ("(%S, %p, %p), file_attributes %d", pc.get_nt_native_path (), buf, fh, (DWORD) *fh); - memset (buf, 0, sizeof (*buf)); + res = fh->fstat (buf); if (!res) fh->stat_fixup (buf); @@ -2438,11 +2468,14 @@ rename2 (const char *oldpath, const char *newpath, unsigned int at2flags) __leave; } - /* POSIX semantics only on local NTFS drives. */ + /* POSIX semantics only on local NTFS drives. For the OPEN_BY_FILE_ID + flag, see MINIMAL_WIN_NTFS_FLAGS comment in fs_info::update. */ use_posix_semantics = wincap.has_posix_rename_semantics () && !oldpc.isremote () - && oldpc.fs_is_ntfs (); + && oldpc.fs_is_ntfs () + && oldpc.has_attribute (FILE_SUPPORTS_OPEN_BY_FILE_ID); +ignore_posix_semantics_retry: /* Opening the file must be part of the transaction. It's not sufficient to call only NtSetInformationFile under the transaction. Therefore we have to start the transaction here, if necessary. Don't start @@ -2523,7 +2556,7 @@ rename2 (const char *oldpath, const char *newpath, unsigned int at2flags) unlink_nt returns with STATUS_DIRECTORY_NOT_EMPTY. */ if (dstpc->isdir ()) { - status = unlink_nt (*dstpc); + status = unlink_nt (*dstpc, false); if (!NT_SUCCESS (status)) { __seterrno_from_nt_status (status); @@ -2664,7 +2697,7 @@ rename2 (const char *oldpath, const char *newpath, unsigned int at2flags) ? FILE_OPEN_REPARSE_POINT : 0)); if (NT_SUCCESS (status)) { - status = unlink_nt (*dstpc); + status = unlink_nt (*dstpc, false); if (NT_SUCCESS (status)) break; } @@ -2684,9 +2717,20 @@ rename2 (const char *oldpath, const char *newpath, unsigned int at2flags) if (NT_SUCCESS (status)) { if (removepc) - unlink_nt (*removepc); + unlink_nt (*removepc, false); res = 0; } + else if (use_posix_semantics && status == STATUS_INVALID_PARAMETER) + { + /* NtSetInformationFile returns STATUS_INVALID_PARAMETER + on a bind mounted file system in hyper-v container + with FILE_RENAME_POSIX_SEMANTICS. + Disable the use_posix semntics flag and retry. */ + debug_printf ("NtSetInformationFile failed with posix semantics. " + "Disable it and retry."); + use_posix_semantics = 0; + goto ignore_posix_semantics_retry; + } else __seterrno_from_nt_status (status); } @@ -2849,7 +2893,7 @@ ctermid (char *str) { if (str == NULL) str = _my_tls.locals.ttybuf; - if (myself->ctty < 0) + if (!CTTY_IS_VALID (myself->ctty)) strcpy (str, "no tty"); else { @@ -2985,17 +3029,60 @@ posix_fadvise (int fd, off_t offset, off_t len, int advice) return res; } +extern "C" int +fallocate (int fd, int mode, off_t offset, off_t len) +{ + int res = 0; + + /* First check mask of allowed flags */ + if (mode & ~(FALLOC_FL_PUNCH_HOLE | FALLOC_FL_ZERO_RANGE + | FALLOC_FL_UNSHARE_RANGE | FALLOC_FL_COLLAPSE_RANGE + | FALLOC_FL_INSERT_RANGE | FALLOC_FL_KEEP_SIZE)) + res = EOPNOTSUPP; + /* Either FALLOC_FL_PUNCH_HOLE or FALLOC_FL_ZERO_RANGE, never both */ + else if ((mode & (FALLOC_FL_PUNCH_HOLE | FALLOC_FL_ZERO_RANGE)) + == (FALLOC_FL_PUNCH_HOLE | FALLOC_FL_ZERO_RANGE)) + res = EOPNOTSUPP; + /* FALLOC_FL_PUNCH_HOLE must be ORed with FALLOC_FL_KEEP_SIZE */ + else if ((mode & (FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE)) + == FALLOC_FL_PUNCH_HOLE) + res = EOPNOTSUPP; + else if (offset < 0 || len <= 0) + res = EINVAL; + else if (INT64_MAX - len < offset) + res = EFBIG; + else + { + cygheap_fdget cfd (fd); + if (cfd >= 0) + res = cfd->fallocate (mode, offset, len); + else + res = EBADF; + if (res == EISDIR) + res = ENODEV; + } + if (res) + { + set_errno (res); + res = -1; + } + syscall_printf ("%R = fallocate(%d, %y, %D, %D)", res, fd, mode, offset, len); + return res; +} + extern "C" int posix_fallocate (int fd, off_t offset, off_t len) { int res = 0; - if (offset < 0 || len == 0) + if (offset < 0 || len <= 0) res = EINVAL; + else if (INT64_MAX - len < offset) + res = EFBIG; else { cygheap_fdget cfd (fd); if (cfd >= 0) - res = cfd->ftruncate (offset + len, false); + res = cfd->fallocate (0, offset, len); else res = EBADF; if (res == EISDIR) @@ -3012,7 +3099,7 @@ ftruncate (int fd, off_t length) cygheap_fdget cfd (fd); if (cfd >= 0) { - res = cfd->ftruncate (length, true); + res = cfd->fallocate (__FALLOC_FL_TRUNCATE, 0, length); if (res) { if (res == ENODEV) @@ -3296,12 +3383,6 @@ mknod (const char *path, mode_t mode, dev_t dev) __leave; } - if (w32path.fs_is_nfs ()) - { - set_errno (EPERM); - __leave; - } - return mknod_worker (w32path, mode, major, minor); } __except (EFAULT) diff --git a/winsup/cygwin/thread.cc b/winsup/cygwin/thread.cc index f614e01c42..0c6f570322 100644 --- a/winsup/cygwin/thread.cc +++ b/winsup/cygwin/thread.cc @@ -457,6 +457,7 @@ pthread::precreate (pthread_attr *newattr) attr.joinable = newattr->joinable; attr.contentionscope = newattr->contentionscope; attr.inheritsched = newattr->inheritsched; + attr.schedparam = newattr->schedparam; attr.stackaddr = newattr->stackaddr; attr.stacksize = newattr->stacksize; attr.guardsize = newattr->guardsize; @@ -961,12 +962,9 @@ pthread::testcancel () pthread_testcancel function a lot without adding the overhead of an OS call. Only if the thread is marked as canceled, we wait for cancel_event being really set, on the off-chance that pthread_cancel - gets interrupted before calling SetEvent. */ - if (canceled) - { - WaitForSingleObject (cancel_event, INFINITE); - cancel_self (); - } + gets interrupted or terminated before calling SetEvent. */ + if (canceled && IsEventSignalled (cancel_event)) + cancel_self (); } /* Return cancel event handle if it exists *and* cancel is not disabled. @@ -2047,24 +2045,31 @@ pthread::create (pthread_t *thread, const pthread_attr_t *attr, int pthread::once (pthread_once_t *once_control, void (*init_routine) (void)) { - // already done ? - if (once_control->state) + /* Sign bit of once_control->state is used as done flag. + Similarly, the next significant bit is used as destroyed flag. */ + const int32_t DONE = 0x80000000; + const int32_t DESTROYED = 0x40000000; + static_assert (sizeof (once_control->state) >= sizeof (int32_t)); + static_assert (sizeof (once_control->state) == sizeof (LONG)); + if (once_control->state & DONE) return 0; - pthread_mutex_lock (&once_control->mutex); - /* Here we must set a cancellation handler to unlock the mutex if needed */ - /* but a cancellation handler is not the right thing. We need this in the thread - *cleanup routine. Assumption: a thread can only be in one pthread_once routine - *at a time. Stote a mutex_t *in the pthread_structure. if that's non null unlock - *on pthread_exit (); - */ - if (!once_control->state) + /* The type of &once_control->state is int *, which is compatible with + LONG * (that is the type of the pointer argument of InterlockedXxx()). */ + if ((InterlockedIncrement (&once_control->state) & DONE) == 0) { - init_routine (); - once_control->state = 1; + pthread_mutex_lock (&once_control->mutex); + if (!(once_control->state & DONE)) + { + init_routine (); + InterlockedOr (&once_control->state, DONE); + } + pthread_mutex_unlock (&once_control->mutex); } - /* Here we must remove our cancellation handler */ - pthread_mutex_unlock (&once_control->mutex); + InterlockedDecrement (&once_control->state); + if (InterlockedCompareExchange (&once_control->state, + DONE | DESTROYED, DONE) == DONE) + pthread_mutex_destroy (&once_control->mutex); return 0; } diff --git a/winsup/cygwin/times.cc b/winsup/cygwin/times.cc index 4ab432925e..68f7a4502c 100644 --- a/winsup/cygwin/times.cc +++ b/winsup/cygwin/times.cc @@ -29,9 +29,7 @@ details. */ static inline void __attribute__ ((always_inline)) get_system_time (PLARGE_INTEGER systime) { - wincap.has_precise_system_time () - ? GetSystemTimePreciseAsFileTime ((LPFILETIME) systime) - : GetSystemTimeAsFileTime ((LPFILETIME) systime); + GetSystemTimePreciseAsFileTime ((LPFILETIME) systime); } /* Cygwin internal */ @@ -174,10 +172,13 @@ gettimeofday (struct timeval *__restrict tv, void *__restrict tzvp) static bool tzflag; LONGLONG now = get_clock (CLOCK_REALTIME)->usecs (); - tv->tv_sec = now / USPERSEC; - tv->tv_usec = now % USPERSEC; + if (tv) + { + tv->tv_sec = now / USPERSEC; + tv->tv_usec = now % USPERSEC; + } - if (tz != NULL) + if (tz) { if (!tzflag) { diff --git a/winsup/cygwin/tty.cc b/winsup/cygwin/tty.cc index a862a444ec..bf7c6010fd 100644 --- a/winsup/cygwin/tty.cc +++ b/winsup/cygwin/tty.cc @@ -58,7 +58,7 @@ revoke (char *ttyname) extern "C" int ttyslot (void) { - if (myself->ctty <= 0 || iscons_dev (myself->ctty)) + if (!CTTY_IS_VALID (myself->ctty) || iscons_dev (myself->ctty)) return -1; return device::minor (myself->ctty); } @@ -319,13 +319,13 @@ tty::wait_fwd () 16-32 msec even if it already has data to transfer. If the time without transfer exceeds 32 msec, the forwarding is supposed to be finished. fwd_last_time - is reset to GetTickCount() in pty master forwarding + is reset to GetTickCount64() in pty master forwarding thread when the last data is transfered. */ - const int sleep_in_nat_pipe = 16; - const int time_to_wait = sleep_in_nat_pipe * 2 + 1/* margine */; - int elapsed; + const ULONGLONG sleep_in_nat_pipe = 16; + const ULONGLONG time_to_wait = sleep_in_nat_pipe * 2 + 1/* margine */; + ULONGLONG elapsed; while (fwd_not_empty - || (elapsed = GetTickCount () - fwd_last_time) < time_to_wait) + || (elapsed = GetTickCount64 () - fwd_last_time) < time_to_wait) { int tw = fwd_not_empty ? 10 : (time_to_wait - elapsed); cygwait (tw); diff --git a/winsup/cygwin/uinfo.cc b/winsup/cygwin/uinfo.cc index f963841789..71234c18ae 100644 --- a/winsup/cygwin/uinfo.cc +++ b/winsup/cygwin/uinfo.cc @@ -2327,7 +2327,7 @@ pwdgrp::fetch_account_from_windows (fetch_user_arg_t &arg, cyg_ldap *pldap) (sid_id_auth (sid) == 5 && sid_sub_auth (sid, 0) == SECURITY_APPPOOL_ID_BASE_RID)) its_ok = true; - else if (wincap.has_microsoft_accounts ()) + else /* Microsoft Account */ { USER_INFO_24 *ui24; if (NetUserGetInfo (NULL, name, 24, (PBYTE *) &ui24) @@ -2642,9 +2642,15 @@ pwdgrp::fetch_account_from_windows (fetch_user_arg_t &arg, cyg_ldap *pldap) + (sid_sub_auth_rid (sid) & 0xff); #else if (sid_id_auth (sid) == 15 /* SECURITY_APP_PACKAGE_AUTHORITY */) - uid = 0x10000 + 0x100 * sid_id_auth (sid) - + 0x10 * sid_sub_auth (sid, 0) - + (sid_sub_auth_rid (sid) & 0xf); + { + /* Filter out all SIDs not referring to an App Package, for + instance, Capability SIDs (S-1-15-3-...) */ + if (sid_sub_auth (sid, 0) != SECURITY_APP_PACKAGE_BASE_RID) + return NULL; + uid = 0x10000 + 0x100 * sid_id_auth (sid) + + 0x10 * SECURITY_APP_PACKAGE_BASE_RID + + (sid_sub_auth_rid (sid) & 0xf); + } else if (sid_id_auth (sid) != 5 /* SECURITY_NT_AUTHORITY */) uid = 0x10000 + 0x100 * sid_id_auth (sid) + (sid_sub_auth_rid (sid) & 0xff); @@ -2700,21 +2706,8 @@ pwdgrp::fetch_account_from_windows (fetch_user_arg_t &arg, cyg_ldap *pldap) fully_qualified_name = true; acc_type = SidTypeUnknown; } - else if (sid_id_auth (sid) == 12 && sid_sub_auth (sid, 0) == 1) - { - /* Special AzureAD group SID which can't be resolved by - LookupAccountSid (ERROR_NONE_MAPPED). This is only allowed - as group entry, not as passwd entry. */ - if (is_passwd ()) - return NULL; - uid = gid = 0x1001; - wcpcpy (dom, L"AzureAD"); - wcpcpy (name = namebuf, L"Group"); - fully_qualified_name = true; - acc_type = SidTypeUnknown; - } - else if (sid_id_auth (sid) == 5 && - sid_sub_auth (sid, 0) == SECURITY_APPPOOL_ID_BASE_RID) + else if (sid_id_auth (sid) == 5 /* SECURITY_NT_AUTHORITY */ + && sid_sub_auth (sid, 0) == SECURITY_APPPOOL_ID_BASE_RID) { /* Special IIS APPPOOL group SID which can't be resolved by LookupAccountSid (ERROR_NONE_MAPPED). This is only allowed @@ -2746,18 +2739,24 @@ pwdgrp::fetch_account_from_windows (fetch_user_arg_t &arg, cyg_ldap *pldap) } acc_type = SidTypeUnknown; } - else if (sid_id_auth (sid) == 18) + else if (sid_id_auth (sid) == 12 /* AzureAD ID */ + && sid_sub_auth (sid, 0) == 1 /* Azure ID base RID */) { - /* Authentication assertion SIDs. - - Available when using a 2012R2 DC, but not supported by - LookupAccountXXX on pre Windows 8/2012 machines */ - uid = 0x11200 + sid_sub_auth_rid (sid); - wcpcpy (name = namebuf, sid_sub_auth_rid (sid) == 1 - ? (PWCHAR) L"Authentication authority asserted identity" - : (PWCHAR) L"Service asserted identity"); + /* Special AzureAD group SID which can't be resolved by + LookupAccountSid (ERROR_NONE_MAPPED). This is only allowed + as group entry, not as passwd entry. */ + if (is_passwd ()) + return NULL; + uid = gid = 0x1001; + wcpcpy (dom, L"AzureAD"); + wcpcpy (name = namebuf, L"Group"); + fully_qualified_name = true; acc_type = SidTypeUnknown; } + else if (sid_id_auth (sid) == 15 /* SECURITY_APP_PACKAGE_AUTHORITY */ + && sid_sub_auth (sid, 0) == SECURITY_CAPABILITY_BASE_RID) + /* Filter out Capability SIDs */ + return NULL; else if (sid_id_auth (sid) == 22) { /* Samba UNIX Users/Groups diff --git a/winsup/cygwin/wincap.cc b/winsup/cygwin/wincap.cc index 7309516bf3..30d9c14e8d 100644 --- a/winsup/cygwin/wincap.cc +++ b/winsup/cygwin/wincap.cc @@ -13,84 +13,9 @@ details. */ #include "ntdll.h" #include "memory_layout.h" -/* CV, 2008-10-23: All wincapc's have to be in the .cygwin_dll_common section, - same as wincap itself. Otherwise the capability changes made in - wincapc::init() are not propagated to any subsequently started process - in the same session. I'm only writing this longish comment because I'm - puzzled that this has never been noticed before... */ - -wincaps wincap_7 __attribute__((section (".cygwin_dll_common"), shared)) = { - def_guard_pages:2, - mmap_storage_high:__MMAP_STORAGE_HIGH_LEGACY, - { - is_server:false, - needs_query_information:true, - has_precise_system_time:false, - has_microsoft_accounts:false, - has_new_pebteb_region:false, - has_broken_whoami:true, - has_unprivileged_createsymlink:false, - has_precise_interrupt_time:false, - has_posix_unlink_semantics:false, - has_posix_unlink_semantics_with_ignore_readonly:false, - has_case_sensitive_dirs:false, - has_posix_rename_semantics:false, - has_con_24bit_colors:false, - has_con_broken_csi3j:false, - has_con_broken_il_dl:false, - has_con_esc_rep:false, - has_extended_mem_api:false, - has_tcp_fastopen:false, - has_linux_tcp_keepalive_sockopts:false, - has_tcp_maxrtms:false, - has_query_process_handle_info:false, - has_con_broken_tabs:false, - has_broken_attach_console:true, - cons_need_small_input_record_buf:true, - }, -}; - -wincaps wincap_8 __attribute__((section (".cygwin_dll_common"), shared)) = { - def_guard_pages:3, - mmap_storage_high:__MMAP_STORAGE_HIGH_LEGACY, - { - is_server:false, - needs_query_information:true, - has_precise_system_time:true, - has_microsoft_accounts:true, - has_new_pebteb_region:false, - has_broken_whoami:false, - has_unprivileged_createsymlink:false, - has_precise_interrupt_time:false, - has_posix_unlink_semantics:false, - has_posix_unlink_semantics_with_ignore_readonly:false, - has_case_sensitive_dirs:false, - has_posix_rename_semantics:false, - has_con_24bit_colors:false, - has_con_broken_csi3j:false, - has_con_broken_il_dl:false, - has_con_esc_rep:false, - has_extended_mem_api:false, - has_tcp_fastopen:false, - has_linux_tcp_keepalive_sockopts:false, - has_tcp_maxrtms:false, - has_query_process_handle_info:true, - has_con_broken_tabs:false, - has_broken_attach_console:false, - cons_need_small_input_record_buf:false, - }, -}; - -wincaps wincap_8_1 __attribute__((section (".cygwin_dll_common"), shared)) = { - def_guard_pages:3, - mmap_storage_high:__MMAP_STORAGE_HIGH, +static const wincaps wincap_8_1 = { { - is_server:false, - needs_query_information:false, - has_precise_system_time:true, - has_microsoft_accounts:true, has_new_pebteb_region:false, - has_broken_whoami:false, has_unprivileged_createsymlink:false, has_precise_interrupt_time:false, has_posix_unlink_semantics:false, @@ -105,23 +30,14 @@ wincaps wincap_8_1 __attribute__((section (".cygwin_dll_common"), shared)) = { has_tcp_fastopen:false, has_linux_tcp_keepalive_sockopts:false, has_tcp_maxrtms:false, - has_query_process_handle_info:true, has_con_broken_tabs:false, - has_broken_attach_console:false, - cons_need_small_input_record_buf:false, + has_user_shstk:false, }, }; -wincaps wincap_10_1507 __attribute__((section (".cygwin_dll_common"), shared)) = { - def_guard_pages:3, - mmap_storage_high:__MMAP_STORAGE_HIGH, +static const wincaps wincap_10_1507 = { { - is_server:false, - needs_query_information:false, - has_precise_system_time:true, - has_microsoft_accounts:true, has_new_pebteb_region:false, - has_broken_whoami:false, has_unprivileged_createsymlink:false, has_precise_interrupt_time:true, has_posix_unlink_semantics:false, @@ -136,23 +52,14 @@ wincaps wincap_10_1507 __attribute__((section (".cygwin_dll_common"), shared)) has_tcp_fastopen:false, has_linux_tcp_keepalive_sockopts:false, has_tcp_maxrtms:false, - has_query_process_handle_info:true, has_con_broken_tabs:false, - has_broken_attach_console:false, - cons_need_small_input_record_buf:false, + has_user_shstk:false, }, }; -wincaps wincap_10_1607 __attribute__((section (".cygwin_dll_common"), shared)) = { - def_guard_pages:3, - mmap_storage_high:__MMAP_STORAGE_HIGH, +static const wincaps wincap_10_1607 = { { - is_server:false, - needs_query_information:false, - has_precise_system_time:true, - has_microsoft_accounts:true, has_new_pebteb_region:false, - has_broken_whoami:false, has_unprivileged_createsymlink:false, has_precise_interrupt_time:true, has_posix_unlink_semantics:false, @@ -167,23 +74,14 @@ wincaps wincap_10_1607 __attribute__((section (".cygwin_dll_common"), shared)) has_tcp_fastopen:true, has_linux_tcp_keepalive_sockopts:false, has_tcp_maxrtms:true, - has_query_process_handle_info:true, has_con_broken_tabs:false, - has_broken_attach_console:false, - cons_need_small_input_record_buf:false, + has_user_shstk:false, }, }; -wincaps wincap_10_1703 __attribute__((section (".cygwin_dll_common"), shared)) = { - def_guard_pages:3, - mmap_storage_high:__MMAP_STORAGE_HIGH, +static const wincaps wincap_10_1703 = { { - is_server:false, - needs_query_information:false, - has_precise_system_time:true, - has_microsoft_accounts:true, has_new_pebteb_region:true, - has_broken_whoami:false, has_unprivileged_createsymlink:true, has_precise_interrupt_time:true, has_posix_unlink_semantics:false, @@ -198,23 +96,14 @@ wincaps wincap_10_1703 __attribute__((section (".cygwin_dll_common"), shared)) = has_tcp_fastopen:true, has_linux_tcp_keepalive_sockopts:false, has_tcp_maxrtms:true, - has_query_process_handle_info:true, has_con_broken_tabs:true, - has_broken_attach_console:false, - cons_need_small_input_record_buf:false, + has_user_shstk:false, }, }; -wincaps wincap_10_1709 __attribute__((section (".cygwin_dll_common"), shared)) = { - def_guard_pages:3, - mmap_storage_high:__MMAP_STORAGE_HIGH, +static const wincaps wincap_10_1709 = { { - is_server:false, - needs_query_information:false, - has_precise_system_time:true, - has_microsoft_accounts:true, has_new_pebteb_region:true, - has_broken_whoami:false, has_unprivileged_createsymlink:true, has_precise_interrupt_time:true, has_posix_unlink_semantics:true, @@ -229,23 +118,14 @@ wincaps wincap_10_1709 __attribute__((section (".cygwin_dll_common"), shared)) = has_tcp_fastopen:true, has_linux_tcp_keepalive_sockopts:true, has_tcp_maxrtms:true, - has_query_process_handle_info:true, has_con_broken_tabs:true, - has_broken_attach_console:false, - cons_need_small_input_record_buf:false, + has_user_shstk:false, }, }; -wincaps wincap_10_1803 __attribute__((section (".cygwin_dll_common"), shared)) = { - def_guard_pages:3, - mmap_storage_high:__MMAP_STORAGE_HIGH, +static const wincaps wincap_10_1803 = { { - is_server:false, - needs_query_information:false, - has_precise_system_time:true, - has_microsoft_accounts:true, has_new_pebteb_region:true, - has_broken_whoami:false, has_unprivileged_createsymlink:true, has_precise_interrupt_time:true, has_posix_unlink_semantics:true, @@ -260,23 +140,14 @@ wincaps wincap_10_1803 __attribute__((section (".cygwin_dll_common"), shared)) = has_tcp_fastopen:true, has_linux_tcp_keepalive_sockopts:true, has_tcp_maxrtms:true, - has_query_process_handle_info:true, has_con_broken_tabs:true, - has_broken_attach_console:false, - cons_need_small_input_record_buf:false, + has_user_shstk:false, }, }; -wincaps wincap_10_1809 __attribute__((section (".cygwin_dll_common"), shared)) = { - def_guard_pages:3, - mmap_storage_high:__MMAP_STORAGE_HIGH, +static const wincaps wincap_10_1809 = { { - is_server:false, - needs_query_information:false, - has_precise_system_time:true, - has_microsoft_accounts:true, has_new_pebteb_region:true, - has_broken_whoami:false, has_unprivileged_createsymlink:true, has_precise_interrupt_time:true, has_posix_unlink_semantics:true, @@ -291,23 +162,14 @@ wincaps wincap_10_1809 __attribute__((section (".cygwin_dll_common"), shared)) = has_tcp_fastopen:true, has_linux_tcp_keepalive_sockopts:true, has_tcp_maxrtms:true, - has_query_process_handle_info:true, has_con_broken_tabs:true, - has_broken_attach_console:false, - cons_need_small_input_record_buf:false, + has_user_shstk:false, }, }; -wincaps wincap_10_1903 __attribute__((section (".cygwin_dll_common"), shared)) = { - def_guard_pages:3, - mmap_storage_high:__MMAP_STORAGE_HIGH, +static const wincaps wincap_10_1903 = { { - is_server:false, - needs_query_information:false, - has_precise_system_time:true, - has_microsoft_accounts:true, has_new_pebteb_region:true, - has_broken_whoami:false, has_unprivileged_createsymlink:true, has_precise_interrupt_time:true, has_posix_unlink_semantics:true, @@ -322,23 +184,14 @@ wincaps wincap_10_1903 __attribute__((section (".cygwin_dll_common"), shared)) = has_tcp_fastopen:true, has_linux_tcp_keepalive_sockopts:true, has_tcp_maxrtms:true, - has_query_process_handle_info:true, has_con_broken_tabs:true, - has_broken_attach_console:false, - cons_need_small_input_record_buf:false, + has_user_shstk:false, }, }; -wincaps wincap_10_2004 __attribute__((section (".cygwin_dll_common"), shared)) = { - def_guard_pages:3, - mmap_storage_high:__MMAP_STORAGE_HIGH, +static const wincaps wincap_10_2004 = { { - is_server:false, - needs_query_information:false, - has_precise_system_time:true, - has_microsoft_accounts:true, has_new_pebteb_region:true, - has_broken_whoami:false, has_unprivileged_createsymlink:true, has_precise_interrupt_time:true, has_posix_unlink_semantics:true, @@ -353,23 +206,14 @@ wincaps wincap_10_2004 __attribute__((section (".cygwin_dll_common"), shared)) = has_tcp_fastopen:true, has_linux_tcp_keepalive_sockopts:true, has_tcp_maxrtms:true, - has_query_process_handle_info:true, has_con_broken_tabs:true, - has_broken_attach_console:false, - cons_need_small_input_record_buf:false, + has_user_shstk:true, }, }; -wincaps wincap_11 __attribute__((section (".cygwin_dll_common"), shared)) = { - def_guard_pages:3, - mmap_storage_high:__MMAP_STORAGE_HIGH, +static const wincaps wincap_11 = { { - is_server:false, - needs_query_information:false, - has_precise_system_time:true, - has_microsoft_accounts:true, has_new_pebteb_region:true, - has_broken_whoami:false, has_unprivileged_createsymlink:true, has_precise_interrupt_time:true, has_posix_unlink_semantics:true, @@ -384,10 +228,8 @@ wincaps wincap_11 __attribute__((section (".cygwin_dll_common"), shared)) = { has_tcp_fastopen:true, has_linux_tcp_keepalive_sockopts:true, has_tcp_maxrtms:true, - has_query_process_handle_info:true, has_con_broken_tabs:false, - has_broken_attach_console:false, - cons_need_small_input_record_buf:false, + has_user_shstk:true, }, }; @@ -412,19 +254,7 @@ wincapc::init () switch (version.dwMajorVersion) { case 6: - switch (version.dwMinorVersion) - { - case 1: - caps = &wincap_7; - break; - case 2: - caps = &wincap_8; - break; - case 3: - default: - caps = &wincap_8_1; - break; - } + caps = &wincap_8_1; break; case 10: default: @@ -448,7 +278,7 @@ wincapc::init () caps = & wincap_10_1507; } - ((wincaps *)caps)->is_server = (version.wProductType != VER_NT_WORKSTATION); + _is_server = (version.wProductType != VER_NT_WORKSTATION); __small_sprintf (osnam, "NT-%d.%d", version.dwMajorVersion, version.dwMinorVersion); diff --git a/winsup/cygwin/x86_64/bcopy.S b/winsup/cygwin/x86_64/bcopy.S new file mode 100644 index 0000000000..84dba1223e --- /dev/null +++ b/winsup/cygwin/x86_64/bcopy.S @@ -0,0 +1,192 @@ +/*- + * Copyright (c) 1990 The Regents of the University of California. + * All rights reserved. + * + * This code is derived from locore.s. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + */ + +#include + +#if defined(LIBC_SCCS) + RCSID("$NetBSD: bcopy.S,v 1.5 2014/03/22 19:16:34 jakllsch Exp $") +#endif + + /* + * (ov)bcopy (src,dst,cnt) + * ws@tools.de (Wolfgang Solfrank, TooLs GmbH) +49-228-985800 + * + * Hacked about by dsl@netbsd.org + */ + +#ifdef MEMCOPY +#ifdef WIDE +#ifdef POST +ENTRY3(wmempcpy) +#else +ENTRY3(wmemcpy) +#endif +#else +#ifdef POST +ENTRY3(mempcpy) +#else +ENTRY3(memcpy) +#endif +#endif +#define NO_OVERLAP +#else +#ifdef MEMMOVE +#ifdef WIDE +ENTRY3(wmemmove) +#else +ENTRY3(memmove) +#endif +#else +ENTRY3(bcopy) +#endif +#endif +#ifdef WIDE + shlq $1,%rdx /* cnt * sizeof (wchar_t) */ +#endif + movq %rdx,%rcx +#if defined(MEMCOPY) || defined(MEMMOVE) + movq %rdi,%rax /* must return destination address */ +#ifdef POST + addq %rdx,%rax /* + n */ +#endif + mov %rdi,%r11 /* for misaligned check */ +#else + mov %rsi,%r11 /* for misaligned check */ + xchgq %rdi,%rsi /* bcopy() has arg order reversed */ +#endif + +#if !defined(NO_OVERLAP) + movq %rdi,%r8 + subq %rsi,%r8 +#endif + + shrq $3,%rcx /* count for copy by words */ + jz 8f /* j if less than 8 bytes */ + + lea -8(%rdi,%rdx),%r9 /* target address of last 8 */ + mov -8(%rsi,%rdx),%r10 /* get last word */ +#if !defined(NO_OVERLAP) + cmpq %rdx,%r8 /* overlapping? */ + jb 10f +#endif + +/* + * Non-overlaping, copy forwards. + * Newer Intel cpus (Nehalem) will do 16byte read/write transfers + * if %ecx is more than 76. + * AMD might do something similar some day. + */ + and $7,%r11 /* destination misaligned ? */ + jnz 2f + rep + movsq + mov %r10,(%r9) /* write last word */ + ret + +/* + * Destination misaligned + * AMD say it is better to align the destination (not the source). + * This will also re-align copies if the source and dest are both + * misaligned by the same amount) + * (I think Nehalem will use its accelerated copy if the source + * and destination have the same alignment.) + */ +2: + lea -9(%r11,%rdx),%rcx /* post re-alignment count */ + neg %r11 /* now -1 .. -7 */ + mov (%rsi),%rdx /* get first word */ + mov %rdi,%r8 /* target for first word */ + lea 8(%rsi,%r11),%rsi + lea 8(%rdi,%r11),%rdi + shr $3,%rcx + rep + movsq + mov %rdx,(%r8) /* write first word */ + mov %r10,(%r9) /* write last word */ + ret + +#if !defined(NO_OVERLAP) +/* Must copy backwards. + * Reverse copy is probably easy to code faster than 'rep movds' + * since that requires (IIRC) an extra clock every 3 iterations (AMD). + * However I don't suppose anything cares that much! + * The big cost is the std/cld pair - reputedly 50+ cycles on Netburst P4. + * The copy is aligned with the buffer start (more likely to + * be a multiple of 8 than the end). + */ +10: + lea -8(%rsi,%rcx,8),%rsi + lea -8(%rdi,%rcx,8),%rdi + std + rep + movsq + cld + mov %r10,(%r9) /* write last bytes */ + ret +#endif + +/* Less than 8 bytes to copy, copy by bytes */ +/* Intel Nehalem optimise 'rep movsb' for <= 7 bytes (9-15 clocks). + * For longer transfers it is 50+ ! + */ +8: mov %rdx,%rcx + +#if !defined(NO_OVERLAP) + cmpq %rdx,%r8 /* overlapping? */ + jb 81f +#endif + + /* nope, copy forwards. */ + rep + movsb + ret + +#if !defined(NO_OVERLAP) +/* Must copy backwards */ +81: + lea -1(%rsi,%rcx),%rsi + lea -1(%rdi,%rcx),%rdi + std + rep + movsb + cld + ret +#endif + +#ifdef MEMCOPY +END(memcpy) +#else +#ifdef MEMMOVE +END(memmove) +#else +END(bcopy) +#endif +#endif diff --git a/winsup/cygwin/x86_64/memchr.S b/winsup/cygwin/x86_64/memchr.S new file mode 100644 index 0000000000..34fd5fe8db --- /dev/null +++ b/winsup/cygwin/x86_64/memchr.S @@ -0,0 +1,109 @@ +/* $NetBSD: memchr.S,v 1.6 2014/03/22 19:16:34 jakllsch Exp $ */ + +/*- + * Copyright (c) 2009 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by David Laight. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include + +#if defined(LIBC_SCCS) + RCSID("$NetBSD: memchr.S,v 1.6 2014/03/22 19:16:34 jakllsch Exp $") +#endif + +/* + * The instruction sequences used try to avoid data dependencies + * between adjacent instructions (to allow parallel execution). + * The 'imul' for %r9 could be put into the delay following the + * memory read (ie inside the loop) at no obvious cost - except + * that the loop is currently exactly 32 bytes - 2 fetch blocks!. + * + * I don't think aligning any of the other branch targets is useful. + */ + +ENTRY3(memchr) + movabsq $0x0101010101010101,%r8 + lea (%rdi,%rdx),%r10 /* limit of buffer to scan */ + movzbq %sil,%rsi /* mask high bits! */ + + /* 'directpath' imuls can execute 3 at a time ... (amd) */ + imul %r8,%rsi /* search byte replicated in word */ + imul $0x80,%r8,%r9 /* 0x8080808080808080 */ + test $7,%dil + jnz 20f /* jump if misaligned */ + jmp 1f /* jump to avoid 4 nops (13 bytes) in gap */ + + _ALIGN_TEXT /* entire loop now in 32 aligned bytes */ +1: + cmpq %r10,%rdi /* end of buffer ? */ + jae 30f /* jump if so */ + + movq (%rdi),%rax /* value to check */ + addq $8,%rdi + xorq %rsi,%rax /* now looking for zeros */ +2: + mov %rax,%rcx + subq %r8,%rax /* x - 0x01 */ + not %rcx + andq %r9,%rax /* (x - 0x01) & 0x80 */ + andq %rcx,%rax /* ((x - 0x01) & 0x80) & ~x */ + je 1b /* jump if not found */ + +/* Found byte in word, get its address */ + bsf %rax,%rax + shr $3,%eax + lea -8(%rax,%rdi),%rax + cmpq %r10,%rax /* need to check not beyond buffer */ + jae 30f + rep + ret /* amd - no ret after jmp */ + +/* Input misaligned, read aligned and make low bytes invalid */ +20: + mov %dil,%cl /* misalignment amount 1..7 (+high bits )*/ + and $~7,%dil /* %rdi now start of word */ + test %rdx,%rdx /* zero length, don't read */ + jz 30f + + neg %cl /* 7..1 (+high bits) */ + mov (%rdi),%rax /* word containing first byte */ + addq $8,%rdi + and $7,%cl /* 7..1 */ + + mov %r8,%r11 /* any value with bits in each byte */ + shl $3,%cl /* 56..8 */ + xorq %rsi,%rax /* now looking for zeros */ + + /* Set low bytes non-zero */ + shr %cl,%r11 /* non-zero in unwanted bytes */ + or %r11,%rax /* low bytes now set */ + jmp 2b + +/* Not found */ +30: xorq %rax,%rax + ret +END(memchr) diff --git a/winsup/cygwin/x86_64/memcpy.S b/winsup/cygwin/x86_64/memcpy.S new file mode 100644 index 0000000000..a53243b5ff --- /dev/null +++ b/winsup/cygwin/x86_64/memcpy.S @@ -0,0 +1,4 @@ +/* $NetBSD: memcpy.S,v 1.1 2005/12/20 19:28:51 christos Exp $ */ + +#define MEMCOPY +#include "bcopy.S" diff --git a/winsup/cygwin/x86_64/memcpy.s b/winsup/cygwin/x86_64/memcpy.s deleted file mode 100644 index 4be7a01459..0000000000 --- a/winsup/cygwin/x86_64/memcpy.s +++ /dev/null @@ -1,131 +0,0 @@ -/* These functions are almost verbatim FreeBSD code (even if the header of - one file mentiones NetBSD), just wrapped in the minimum required code to - make them work under the MS AMD64 ABI. - See FreeBSD src/lib/libc/amd64/string/bcopy.S */ - -/*- - * Copyright (c) 1990 The Regents of the University of California. - * All rights reserved. - * - * This code is derived from locore.s. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * 3. Neither the name of the University nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, - * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A - * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE - * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH - * DAMAGE. - */ - - .seh_proc _memcpy -_memcpy: - movq %rsi,8(%rsp) - movq %rdi,16(%rsp) - .seh_endprologue - movq %rcx,%rdi - movq %rdx,%rsi - movq %r8,%rdx - - movq %rdx,%rcx - movq %rdi,%r8 - subq %rsi,%r8 - cmpq %rcx,%r8 /* overlapping? */ - jb 1f - cld /* nope, copy forwards. */ - shrq $3,%rcx /* copy by words */ - rep movsq - movq %rdx,%rcx - andq $7,%rcx /* any bytes left? */ - rep movsb - jmp 2f -1: - addq %rcx,%rdi /* copy backwards. */ - addq %rcx,%rsi - std - andq $7,%rcx /* any fractional bytes? */ - decq %rdi - decq %rsi - rep movsb - movq %rdx,%rcx /* copy remainder by words */ - shrq $3,%rcx - subq $7,%rsi - subq $7,%rdi - rep movsq - cld -2: - movq 8(%rsp),%rsi - movq 16(%rsp),%rdi - ret - .seh_endproc - - .globl memmove - .seh_proc memmove -memmove: - .seh_endprologue - movq %rcx,%rax /* return dst */ - jmp _memcpy - .seh_endproc - - .globl memcpy - .seh_proc memcpy -memcpy: - .seh_endprologue - movq %rcx,%rax /* return dst */ - jmp _memcpy - .seh_endproc - - .globl mempcpy - .seh_proc mempcpy -mempcpy: - .seh_endprologue - movq %rcx,%rax /* return dst */ - addq %r8,%rax /* + n */ - jmp _memcpy - .seh_endproc - - .globl wmemmove - .seh_proc wmemmove -wmemmove: - .seh_endprologue - shlq $1,%r8 /* cnt * sizeof (wchar_t) */ - movq %rcx,%rax /* return dst */ - jmp _memcpy - .seh_endproc - - .globl wmemcpy - .seh_proc wmemcpy -wmemcpy: - .seh_endprologue - shlq $1,%r8 /* cnt * sizeof (wchar_t) */ - movq %rcx,%rax /* return dst */ - jmp _memcpy - .seh_endproc - - .globl wmempcpy - .seh_proc wmempcpy -wmempcpy: - .seh_endprologue - shlq $1,%r8 /* cnt * sizeof (wchar_t) */ - movq %rcx,%rax /* return dst */ - addq %r8,%rax /* + n */ - jmp _memcpy - .seh_endproc diff --git a/winsup/cygwin/x86_64/memmove.S b/winsup/cygwin/x86_64/memmove.S new file mode 100644 index 0000000000..f4b7b08257 --- /dev/null +++ b/winsup/cygwin/x86_64/memmove.S @@ -0,0 +1,4 @@ +/* $NetBSD: memmove.S,v 1.1 2005/12/20 19:28:51 christos Exp $ */ + +#define MEMMOVE +#include "bcopy.S" diff --git a/winsup/cygwin/x86_64/mempcpy.S b/winsup/cygwin/x86_64/mempcpy.S new file mode 100644 index 0000000000..7ccb4f1d9c --- /dev/null +++ b/winsup/cygwin/x86_64/mempcpy.S @@ -0,0 +1,5 @@ +/* $NetBSD: memcpy.S,v 1.1 2005/12/20 19:28:51 christos Exp $ */ + +#define MEMCOPY +#define POST +#include "bcopy.S" diff --git a/winsup/cygwin/x86_64/memset.S b/winsup/cygwin/x86_64/memset.S new file mode 100644 index 0000000000..f91d134efd --- /dev/null +++ b/winsup/cygwin/x86_64/memset.S @@ -0,0 +1,93 @@ +/* $NetBSD: memset.S,v 1.5 2014/05/22 16:47:31 pooka Exp $ */ + +/*- + * Copyright (c) 2009 The NetBSD Foundation, Inc. + * All rights reserved. + * + * This code is derived from software contributed to The NetBSD Foundation + * by David Laight. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS + * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED + * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR + * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS + * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + +#include + +#if defined(LIBC_SCCS) + RCSID("$NetBSD: memset.S,v 1.5 2014/05/22 16:47:31 pooka Exp $") +#endif + +#ifndef _KERNEL +/* bzero, %rdi is buffer, %rsi length */ + +ENTRY2(bzero) + mov %rsi,%rdx /* length */ + xor %eax,%eax /* value to write */ + jmp 1f +END(bzero) +#endif + +/* memset, %rdi is buffer, %rsi char to fill, %rdx length */ + +ENTRY3(memset) + movzbq %sil,%rax /* byte value to fill */ + mov %rdx,%rsi /* copy of length */ + mov $0x0101010101010101,%r9 + imul %r9,%rax /* fill value in all bytes */ + +1: + mov %rdi,%r9 /* Need to return buffer address */ + or %edi,%edx /* address | length */ + mov %rsi,%rcx + cmp $7,%rsi + jbe 10f /* jump if short fill */ + test $7,%dl /* check for misaligned fill */ + jnz 20f /* jump if misaligned */ + +/* Target aligned and length multiple of 8 */ +2: + shr $3,%rcx + rep stosq + mov %r9,%rax + ret + +/* + * Short transfer, any faffing here will generate mispredicted branches. + * So we keep it simple. + */ +10: rep stosb + mov %r9,%rax + ret + +/* + * Buffer or length misaligned. + * Write pattern to first and last word of buffer, then fill middle. + * (This writes to some bytes more than once - possibly three times!.) + */ +20: + mov %rax,(%rdi) + movzbq %dil,%rdx /* low address for alignment */ + mov %rax,-8(%rcx,%rdi) + and $7,%dl /* offset in word */ + sub %rdx,%rcx /* adjust length ... */ + add %rdx,%rdi /* ... and target */ + jmp 2b +END(memset) diff --git a/winsup/cygwin/x86_64/memset.s b/winsup/cygwin/x86_64/memset.s deleted file mode 100644 index ac73b6ace8..0000000000 --- a/winsup/cygwin/x86_64/memset.s +++ /dev/null @@ -1,69 +0,0 @@ -/* These functions are almost verbatim FreeBSD code (even if the header of - one file mentiones NetBSD), just wrapped in the minimum required code to - make them work under the MS AMD64 ABI. - See FreeBSD src/lib/libc/amd64/string/memset.S */ - -/* - * Written by J.T. Conklin . - * Public domain. - * Adapted for NetBSD/x86_64 by - * Frank van der Linden - */ - - .globl memset - .seh_proc memset -memset: - movq %rsi,8(%rsp) - movq %rdi,16(%rsp) - .seh_endprologue - movq %rcx,%rdi - movq %rdx,%rsi - movq %r8,%rdx - - movq %rsi,%rax - andq $0xff,%rax - movq %rdx,%rcx - movq %rdi,%r11 - - cld /* set fill direction forward */ - - /* if the string is too short, it's really not worth the - * overhead of aligning to word boundries, etc. So we jump to - * a plain unaligned set. */ - cmpq $0x0f,%rcx - jle L1 - - movb %al,%ah /* copy char to all bytes in word */ - movl %eax,%edx - sall $16,%eax - orl %edx,%eax - - movl %eax,%edx - salq $32,%rax - orq %rdx,%rax - - movq %rdi,%rdx /* compute misalignment */ - negq %rdx - andq $7,%rdx - movq %rcx,%r8 - subq %rdx,%r8 - - movq %rdx,%rcx /* set until word aligned */ - rep - stosb - - movq %r8,%rcx - shrq $3,%rcx /* set by words */ - rep - stosq - - movq %r8,%rcx /* set remainder by bytes */ - andq $7,%rcx -L1: rep - stosb - movq %r11,%rax - - movq 8(%rsp),%rsi - movq 16(%rsp),%rdi - ret - .seh_endproc diff --git a/winsup/cygwin/x86_64/swab.S b/winsup/cygwin/x86_64/swab.S new file mode 100644 index 0000000000..ae73d11247 --- /dev/null +++ b/winsup/cygwin/x86_64/swab.S @@ -0,0 +1,47 @@ +/* + * Written by J.T. Conklin . + * Public domain. + */ + +#include + +#if defined(LIBC_SCCS) + RCSID("$NetBSD: swab.S,v 1.4 2014/05/22 15:01:57 uebayasi Exp $") +#endif + +#define LOAD_SWAP_STORE_WORD \ + lodsw ; \ + xchgb %al,%ah ; \ + stosw + +ENTRY3(swab) + xchgq %rdi,%rsi + cld # set direction forward + + shrq $1,%rdx + testq $7,%rdx # copy first group of 1 to 7 words + jz L2 # while swapping alternate bytes. +L1: lodsw + rorw $8,%ax + stosw + decq %rdx + testq $7,%rdx + jnz L1 + +L2: shrq $3,%rdx # copy remainder 8 words at a time + jz L4 # while swapping alternate bytes. +L3: + LOAD_SWAP_STORE_WORD + LOAD_SWAP_STORE_WORD + LOAD_SWAP_STORE_WORD + LOAD_SWAP_STORE_WORD + LOAD_SWAP_STORE_WORD + LOAD_SWAP_STORE_WORD + LOAD_SWAP_STORE_WORD + LOAD_SWAP_STORE_WORD + + decq %rdx + jnz L3 +L4: + ret +END(swab) diff --git a/winsup/cygwin/x86_64/wmemcpy.S b/winsup/cygwin/x86_64/wmemcpy.S new file mode 100644 index 0000000000..c998ecac58 --- /dev/null +++ b/winsup/cygwin/x86_64/wmemcpy.S @@ -0,0 +1,5 @@ +/* $NetBSD: memcpy.S,v 1.1 2005/12/20 19:28:51 christos Exp $ */ + +#define MEMCOPY +#define WIDE +#include "bcopy.S" diff --git a/winsup/cygwin/x86_64/wmemmove.S b/winsup/cygwin/x86_64/wmemmove.S new file mode 100644 index 0000000000..e7ee8efeb6 --- /dev/null +++ b/winsup/cygwin/x86_64/wmemmove.S @@ -0,0 +1,5 @@ +/* $NetBSD: memmove.S,v 1.1 2005/12/20 19:28:51 christos Exp $ */ + +#define MEMMOVE +#define WIDE +#include "bcopy.S" diff --git a/winsup/cygwin/x86_64/wmempcpy.S b/winsup/cygwin/x86_64/wmempcpy.S new file mode 100644 index 0000000000..53f4ceb2e8 --- /dev/null +++ b/winsup/cygwin/x86_64/wmempcpy.S @@ -0,0 +1,6 @@ +/* $NetBSD: memcpy.S,v 1.1 2005/12/20 19:28:51 christos Exp $ */ + +#define MEMCOPY +#define WIDE +#define POST +#include "bcopy.S" diff --git a/winsup/doc/cygwinenv.xml b/winsup/doc/cygwinenv.xml index 3051416bdd..4ea63b407a 100644 --- a/winsup/doc/cygwinenv.xml +++ b/winsup/doc/cygwinenv.xml @@ -23,18 +23,35 @@ Defaults to off. -error_start:Win32filepath - if set, runs -Win32filepath when cygwin encounters a fatal error, -which is useful for debugging. Win32filepath is -usually set to the path to gdb or -dumper, for example -C:\cygwin\bin\gdb.exe. -There is no default set. +error_start:Win32filepath - if set, runs +Win32filepath when cygwin encounters a fatal error, which +can be useful for debugging. Defaults to not set. + + +Win32filepath is typically set to gdb or +dumper. If giving a path in +Win32filepath, note that it is a Windows-style path and not +a Cygwin path. The filename of the executing program and it's Windows process id are appended to the command as arguments. + + Note: This takes priority over writing core dump or .stackdump files, if + enabled by setrlimit(RLIMIT_CORE) (e.g. via + ulimit -c). + + + Note: This has no effect if a debugger is already attached when the fatal + error occurs. + + + Note: The command invoked must either (i) attach to the errored process with + DebugActiveProcess(), or (ii) forcibly terminate the + errored process (with TerminateProcess() or similar), as + otherwise the errored process will wait forever for a debugger to attach. + @@ -76,6 +93,16 @@ line (truncated to ~32K) will be passed on any processes that it creates in addition to the normal UNIX argv list. Defaults to set. + +(no)winjitdebug - if set, non-Cygwin executables +started from a Cygwin process will have their error mode reset to the +system default. That means, if they don't call SetErrorMode() +explicitly, the OS will display error dialog boxes in the GUI if some +fatal error occurs. Defaults to not set, so fatal errors in a +non-Cygwin child process will just result in an error code be propagated +back to the parent process. + + winsymlinks:{lnk,native,nativestrict,sys} diff --git a/winsup/doc/etc.postinstall.cygwin-doc.sh b/winsup/doc/etc.postinstall.cygwin-doc.sh index 97f88a16dc..b9115ef929 100755 --- a/winsup/doc/etc.postinstall.cygwin-doc.sh +++ b/winsup/doc/etc.postinstall.cygwin-doc.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/bin/bash # /etc/postinstall/cygwin-doc.sh - cygwin-doc postinstall script. # installs Cygwin Start Menu shortcuts for Cygwin User Guide and API PDF and # HTML if in doc dir, and links to Cygwin web site home page and FAQ @@ -36,9 +36,20 @@ do fi done +# setup was run with options not to create startmenu items +case ${CYGWIN_SETUP_OPTIONS} in + *no-startmenu*) + exit 0 + ;; +esac + # Cygwin Start Menu directory -case $(uname -s) in *-WOW*) wow64=" (32-bit)" ;; esac -smpc_dir="$($cygp $CYGWINFORALL -P -U --)/Cygwin${wow64}" +if [ ! -v CYGWIN_START_MENU_SUFFIX ] +then + case $(uname -s) in *-WOW*) CYGWIN_START_MENU_SUFFIX=" (32-bit)" ;; esac +fi + +smpc_dir="$($cygp $CYGWINFORALL -P -U --)/Cygwin${CYGWIN_START_MENU_SUFFIX}" # ensure Cygwin Start Menu directory exists /usr/bin/mkdir -p "$smpc_dir" @@ -53,7 +64,7 @@ fi # create User Guide and API PDF and HTML shortcuts while read target name desc do - [ -r "$target" ] && $mks $CYGWINFORALL -P -n "Cygwin${wow64}/$name" -d "$desc" -- $target + [ -r "$target" ] && $mks $CYGWINFORALL -P -n "Cygwin${CYGWIN_START_MENU_SUFFIX}/$name" -d "$desc" -- $target done < Yes. Starting December 2022, regular, automated test releases -are created whenever a considerable patch is pushed to the Cygwin git -repo at . +are created whenever a significant patch is pushed to the Cygwin git +repo at . You can download the cygwin package test releases just like any other test release for any Cgywin package using the Cygwin Setup program. For more info, see diff --git a/winsup/doc/faq-programming.xml b/winsup/doc/faq-programming.xml index 478cf997f8..a834298599 100644 --- a/winsup/doc/faq-programming.xml +++ b/winsup/doc/faq-programming.xml @@ -380,7 +380,7 @@ cygexec, you can find them with a script like this: #!/bin/sh cd /bin; for f in `find . -type f -name '*.exe'`; do - cygcheck $f | (fgrep -qi cygwin1.dll || echo $f) + cygcheck $f | (grep -Fqi cygwin1.dll || echo $f) done @@ -690,12 +690,15 @@ Additionally, building the dumper utility requires -Building for 64-bit Cygwin also requires -mingw64-x86_64-gcc-g++ and -mingw64-x86_64-zlib. +Building those Cygwin utilities which are not themselves Cygwin programs +(e.g. cygcheck and strace) also requires +mingw64-x86_64-gcc-g++ and mingw64-x86_64-zlib. +Building these programs can be disabled with the --without-cross-bootstrap +option to configure. - + Building the documentation also requires the dblatex, diff --git a/winsup/doc/misc-funcs.xml b/winsup/doc/misc-funcs.xml index 7463942e6a..2503dd3b7d 100644 --- a/winsup/doc/misc-funcs.xml +++ b/winsup/doc/misc-funcs.xml @@ -106,6 +106,10 @@ enum. The second is an optional pointer. Description Outputs a stackdump to stderr from the called location. + + Note: This function only has an effect the first time it is called by a process. + + Note: This function is deprecated. diff --git a/winsup/doc/new-features.xml b/winsup/doc/new-features.xml index 5c9399e147..17c688f895 100644 --- a/winsup/doc/new-features.xml +++ b/winsup/doc/new-features.xml @@ -4,6 +4,115 @@ What's new and what changed in Cygwin +What's new and what changed in 3.5 + + + + +Drop support for Windows 7, Windows 8, Server 2008 R2 and Server 2012. + + + +Console devices (/dev/consN) are now accessible by processes attached to other +consoles or ptys. Thanks to this new feature, GNU screen and tmux now work in +the console. + + + +newgrp(1) tool. + + + +cygcheck has new options searching for available packages in the +cygwin distro, as well as getting extended info on available and +installed packages. + + + +fnmatch(3) and glob(3) now support named character classes, equivalence +class expressions, and collating symbols in the search pattern, i.e., +[:alnum:], [=a=], [.aa.]. + + + +Introduce /dev/disk directory with various by-* subdirectories which +provide symlinks to disk and partition raw devices: + + by-drive/DRIVE_LETTER -> ../../sdXN + by-label/VOLUME_LABEL -> ../../sdXN + by-id/BUSTYPE-[VENDOR_]PRODUCT_[SERIAL|0xHASH][-partN] -> ../../sdX[N] + by-partuuid/MBR_SERIAL-OFFSET -> ../../sdXN + by-partuuid/GPT_GUID -> ../../sdXN + by-uuid/VOLUME_SERIAL -> ../../sdXN + by-voluuid/MBR_SERIAL-OFFSET -> ../../sdXN + by-voluuid/VOLUME_GUID -> ../../sdXN + +The subdirectories by-drive and by-voluuid are Cygwin specific. + + + +Introduce /proc/codesets and /proc/locales with information on supported +codesets and locales for all interested parties. Locale(1) opens these +files and uses the info for printing locale info like any other process +could do. + + + +Add support for GB18030 codeset. + + + +Add support for lseek flags SEEK_DATA and SEEK_HOLE, a GNU extension. + + + +New API calls: posix_spawn_file_actions_addchdir_np, +posix_spawn_file_actions_addfchdir_np. + + + +New API calls: c8rtomb, c16rtomb, c32rtomb, mbrtoc8, mbrtoc16, mbrtoc32. + + + +New API call: close_range (available on FreeBSD and Linux). + + + +New API call: fallocate (Linux-specific). + + + +posix_spawnp no longer falls back to starting the shell for unrecognized +files as execvp. For the reasoning, see +https://www.austingroupbugs.net/view.php?id=1674 + + + +FIFOs now also work on NFS filesystems. + + + +Enable automatic sparsifying of files on SSDs, independent of the +"sparse" mount mode. + + + +When RLIMIT_CORE is more than 1MB, a core dump file which can be loaded by gdb +is now written on a fatal error. Otherwise, if it's greater than zero, a text +format .stackdump file is written, as previously. + + + +The default RLIMIT_CORE is now 0, disabling the generation of core dump or +stackdump files. Use e.g. ulimit -c unlimited or ulimit -c +1024 to enable them again. + + + + + + What's new and what changed in 3.4 diff --git a/winsup/doc/ntsec.xml b/winsup/doc/ntsec.xml index 8f07c2258f..fd5b472b61 100644 --- a/winsup/doc/ntsec.xml +++ b/winsup/doc/ntsec.xml @@ -1185,7 +1185,7 @@ and on non-AD machines. -Four schemata are predefined, two schemata are variable. The predefined +Five schemata are predefined, two schemata are variable. The predefined schemata are the following: @@ -1223,14 +1223,10 @@ schemata are the following: env - Derives the home directory of the current user from the - environment variable HOME (falling back to - HOMEDRIVE\HOMEPATH and - USERPROFILE, in that order). This is faster - than the windows schema at the - expense of determining only the current user's home directory - correctly. This schema is skipped for any other account. - + Utilizes the user's environment. This schema is only supported + for setting the home directory yet. + See for + the description. @@ -1370,7 +1366,7 @@ of each schema when used with db_home: environment variable HOME (falling back to HOMEDRIVE\HOMEPATH and USERPROFILE, in that order). This is faster - than the windows schema at the + than the windows schema at the expense of determining only the current user's home directory correctly. This schema is skipped for any other account. diff --git a/winsup/doc/posix.xml b/winsup/doc/posix.xml index a62557579a..89056915bf 100644 --- a/winsup/doc/posix.xml +++ b/winsup/doc/posix.xml @@ -1143,6 +1143,7 @@ also IEEE Std 1003.1-2017 (POSIX.1-2017). cfmakeraw cfsetspeed clearerr_unlocked + close_range daemon dn_comp dn_expand @@ -1297,6 +1298,7 @@ also IEEE Std 1003.1-2017 (POSIX.1-2017). clog10 clog10f clog10l + close_range (see chapter "Implementation Notes") crypt_r (available in external "crypt" library) dladdr (see chapter "Implementation Notes") dremf @@ -1314,6 +1316,7 @@ also IEEE Std 1003.1-2017 (POSIX.1-2017). exp10 exp10f exp10l + fallocate (see chapter "Implementation Notes") fcloseall fcloseall_r fedisableexcept @@ -1355,6 +1358,8 @@ also IEEE Std 1003.1-2017 (POSIX.1-2017). mkostemp mkostemps pipe2 + posix_spawn_file_actions_addchdir_np + posix_spawn_file_actions_addfchdir_np pow10 pow10f pow10l @@ -1514,6 +1519,9 @@ also IEEE Std 1003.1-2017 (POSIX.1-2017). aligned_alloc (ISO C11) at_quick_exit (ISO C11) + c16rtomb (ISO C11) + c32rtomb (ISO C11) + c8rtomb (ISO C23) call_once (ISO C11) cnd_broadcast (ISO C11) cnd_destroy (ISO C11) @@ -1521,6 +1529,9 @@ also IEEE Std 1003.1-2017 (POSIX.1-2017). cnd_signal (ISO C11) cnd_timedwait (ISO C11) cnd_wait (ISO C11) + mbrtoc16 (ISO C11) + mbrtoc32 (ISO C11) + mbrtoc8 (ISO C23) mtx_destroy (ISO C11) mtx_init (ISO C11) mtx_lock (ISO C11) @@ -1647,6 +1658,9 @@ CLOCK_REALTIME and CLOCK_MONOTONIC. clock_setres, clock_settime, and timer_create currently support only CLOCK_REALTIME. +close_range does not support the Linux-specific +flag CLOSE_RANGE_UNSHARE. + POSIX file locks via fcntl or lockf, as well as BSD flock locks are advisory locks. They don't interact with Windows mandatory locks, nor @@ -1747,6 +1761,14 @@ RLIMIT_CORE and RLIMIT_STACK return the current values and set the requested values. All other resource arguments return -1 and set EINVAL. +fallocate has a few Windows quirks: The +FALLOC_FL_ZERO_RANGE operation is NOT atomic. With flags set to 0 and +FALLOC_FL_KEEP_SIZE, sparse blocks in the given range are re-allocated +as per the POSIX requirements. This re-allocation operation isn't +atomic either. Over-allocation with FALLOC_FL_KEEP_SIZE is only +temporary on Windows until the last handle to the file is closed. +Over-allocation on sparse files is entirely ignored on Windows. + diff --git a/winsup/doc/utils.xml b/winsup/doc/utils.xml index 8959880379..aae1ba6433 100644 --- a/winsup/doc/utils.xml +++ b/winsup/doc/utils.xml @@ -89,10 +89,27 @@ content indexing service 'e', 'Encrypted': file is encrypted 'C', 'Casesensitive': directory is handled case sensitive - (Windows 10 1803 or later, local NTFS only, - WSL must be installed) + + + Case-sensitive directories + Case-sensitive directories are supported starting with + Windows 10 1803. They are only supported on local NTFS filesystems. + + The system-wide availability of case-sensitive directories + depends on the setting of the registry value of type DWORD called + HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem\NtfsEnableDirCaseSensitivity. The value 0 disables case-sensitive directories. + The value 1 enables case-sensitive directories. The value 3 + enables case-sensitive directories, too, with the additional + requirement that a directory can only be set to case-sensitive + if it's empty. No other value is supported. + Removing case-sensitivity on a directory requires that the + directory does not contain files only differing by case. + Trying to access a case-sensitive directory on a remote NTFS leads + to all kinds of weird errors and is therefore + not recommended. + @@ -118,6 +135,7 @@ cygcheck -c -d + -n PACKAGE @@ -131,6 +149,24 @@ cygcheck -k + + cygcheck + -e + --requires + --build-reqs + PATTERN + + + cygcheck + -i + --inst + --curr + --prev + --test + --deps + --build-deps + PATTERN + cygcheck -f @@ -166,11 +202,30 @@ At least one command option or a PROGRAM is required, as shown above. PROGRAM list library (DLL) dependencies of PROGRAM -c, --check-setup show installed version of PACKAGE and verify integrity (or for all installed packages if none specified) - -d, --dump-only just list packages, do not verify (with -c) + -d, --dump-only do not verify packages (with -c) + -n, --names-only just list package names (implies -c -d) -s, --sysinfo produce diagnostic system information (implies -c -d) -r, --registry also scan registry for Cygwin settings (with -s) -k, --keycheck perform a keyboard check session (must be run from a plain console only, not from a pty/rxvt/xterm) + -e, --search-package list all available packages matching PATTERN + PATTERN is a glob pattern with * and ? as wildcard chars + search selection specifiers (multiple allowed): + --requires list packages depending on packages matching PATTERN + --build-reqs list packages depending on packages matching PATTERN + when building these packages + only the most recent available releases are checked + to collect requirements info + -i, --info-package print full info on packages matching PATTERN, installed + and available releases + PATTERN is a glob pattern with * and ? as wildcard chars + info selection specifiers (multiple allowed): + --inst only print info on installed package release + --curr only print info on most recent available release + --prev only print info on older, still available releases + --test only print info on test releases + --deps additionally print package dependencies + --build-deps additionally print package build dependencies -f, --find-package find the package to which FILE belongs -l, --list-package list contents of PACKAGE (or all packages if none given) -p, --package-query search for REGEXP in the entire cygwin.com package @@ -184,9 +239,11 @@ At least one command option or a PROGRAM is required, as shown above. with another command, otherwise print this help -V, --version print the version of cygcheck and exit -Note: -c, -f, and -l only report on packages that are currently installed. To - search all official Cygwin packages use -p instead. The -p REGEXP matches - package names, descriptions, and names of files/paths within all packages. +Notes: + -c, -f, and -l only report on packages that are currently installed. + -i and -e report on available packages, too. To search for files within + uninstalled Cygwin packages, use -p. The -p REGEXP matches package names, + descriptions, and names of files/paths within all packages. @@ -196,7 +253,7 @@ Note: -c, -f, and -l only report on packages that are currently installed. To dealing with Cygwin programs. If you are familiar with dpkg or rpm, cygcheck is similar in many ways. (The major - difference is that setup.exe handles installing and + difference is that setup handles installing and uninstalling packages; see for more information.) The -c option checks the version and status of @@ -205,11 +262,12 @@ Note: -c, -f, and -l only report on packages that are currently installed. To with no arguments it lists all packages. A package will be marked Incomplete if files originally installed are no longer present. The best thing to do in that situation is reinstall the package - with setup.exe. To see which files are missing, use + with setup. To see which files are missing, use the -v option. If you do not need to know the status of each package and want cygcheck to run faster, add the -d option and cygcheck will - only output the name and version for each package. + only output the name and version for each package. Add the + -n option to output only the names of packages. If you list one or more programs on the command line, cygcheck will diagnose the runtime environment of that program or programs, providing the names of DLL files on which the @@ -218,6 +276,63 @@ Note: -c, -f, and -l only report on packages that are currently installed. To list one or more programs on the command line and specify -s, cygcheck will report on both. + The -e option allows to seach for available + packages in the Cygwin distribution. PATTERN is + a glob pattern, using * and ? as wildcard characters, just as in + filename patterns. PATTERN is searched for in + the package name and the summary of a package. + The --requires and --build-reqs + options allow to search for packages which have a certain dependency, + either at runtime or at build time. + The -i option prints a lot of information + available for installed packages, as well as for available packages + in the Cygwin distribution. PATTERN is a glob + pattern, using * and ? as wildcard characters, just as in filename + patterns. PATTERN is compared against the + package name as well as against the combined package name and version. + With additional info selectors, --inst, + --curr, --prev, and + --test, allow to specify that only information + in terms of installed, current latest available, older available, + as well as test packages respectively, is requested. + The --deps and --build-deps + options allow to print additional dependency information. + + Example <command>cygcheck</command> -e/-i + usage + +$ cygcheck -e grep +grep : search for regular expression matches in text files +grep-debuginfo : Debug info for grep +grepmail : search mailboxes for mail matching an expression +pdfgrep : Command-line utility for searching text in PDFs +pdfgrep-debuginfo : Debug info for pdfgrep +sgrep : Search indexed text regions like SGML,XML and HTML files + +$ cygcheck -i --curr --deps grep +Latest available package: +------------------------- + +Name : grep +Version : 3.8 +Release : 2 +Architecture: x86_64 +Size : 401340 (392 K) +Source : grep-3.8-2-src.tar.xz +Dependencies: bash, cygwin, libintl8, libpcre2_8_0 +Summary : search for regular expression matches in text files +Description : +GNU grep searches one or more input files for lines containing a +match to a specified pattern. By default, grep outputs the matching lines. +The GNU implementation includes several useful extensions over POSIX. + + + + + Note that -e and -i + options fetch info from a distribution db file. This file will be + downloading on demand and refreshed if it's older than 24 hours. The -f option helps you to track down which package a file came from, and -l lists all files in a package. For example, to find out about @@ -225,7 +340,7 @@ Note: -c, -f, and -l only report on packages that are currently installed. To Example <command>cygcheck</command> + id="utils-cygcheck-ex"><title>Example <command>cygcheck</command> -f/-l usage $ cygcheck -f /usr/bin/less @@ -606,17 +721,17 @@ explorer $XPATH & Description The dumper utility can be used to create a core - dump of running Windows process. This core dump can be later loaded to - gdb and analyzed. One common way to use - dumper is to plug it into cygwin's Just-In-Time - debugging facility by adding - -error_start=x:\path\to\dumper.exe - to the - CYGWIN environment variable. Please note that - x:\path\to\dumper.exe is Windows-style and not cygwin - path. If error_start is set this way, then dumper will - be started whenever some program encounters a fatal error. + dump of running Windows process. This core dump can be later loaded into + gdb and analyzed. + + + + If the core file size limit is set to unlimited (e.g. ulimit -c + unlimited) and an error_start executable + hasn't been configured in the CYGWIN environment + variable, Cygwin will automatically run dumper when a + fatal error occurs. + dumper can be also be started from the command line to create a core dump of any running process. @@ -627,14 +742,25 @@ error_start=x:\path\to\dumper.exe terminated. To save space in the core dump, dumper doesn't - write those portions of the target process's memory space that are loaded + write those portions of the target process's memory space that were loaded from executable and dll files and are unchanged (e.g. program code). Instead, dumper saves paths to the files which contain that data. When a core dump is loaded into gdb, it uses these paths to load the appropriate files. That means that if you create a core dump on one machine and try to debug it on another, you'll need to place identical copies of the executable and dlls in the same directories as on - the machine where the core dump was created. + the machine where the core dump was created. + + + + + Notes + + A Cygwin "core dump file" is an ELF file containing the mutable parts of + the process memory and special note sections which capture the process, + thread and loaded module context needed to recreate the process image in a + debugger. + @@ -874,8 +1000,10 @@ file gmon.out.21900.zstd.exe, gmon version 0x51879, sample rate 100 kill - -l - signal + + -l signal + -L + kill @@ -892,6 +1020,7 @@ file gmon.out.21900.zstd.exe, gmon version 0x51879, sample rate 100 -f, --force force, using win32 interface if necessary -l, --list print a list of signal names + -L, --table print a formatted table of signal names -s, --signal send signal (use kill --list for a list) -W, --winpid specified pids are windows PIDs, not Cygwin PIDs (use with extreme caution!) @@ -935,6 +1064,9 @@ $ /bin/kill --version The kill -l option prints the name of the given signal, or a list of all signal names if no signal is given. + The kill -L option is similar to -l, + but it will print signal names and their corresponding numbers. + To send a specific signal, use the -signN option, either with a signal number or a signal name (minus the "SIG" part), as shown in these examples: @@ -1376,8 +1508,10 @@ bash$ locale noexpr minidumper can be used with cygwin's Just-In-Time - debugging facility in exactly the same way as dumper - (See ). + debugging facility by adding error_start=minidumper to the + CYGWIN environment variable. If CYGWIN + is set this way, then minidumper will be started whenever + a program encounters a fatal exception. @@ -1812,6 +1946,7 @@ D: on /d type fat (binary,user,noumount) (default). sparse - Switch on support for sparse files. This option only makes sense on NTFS and then only if you really need sparse files. + This flag is always silently enabled on SSD drives. text - Files default to CRLF text mode line endings. @@ -1939,6 +2074,60 @@ D: on /d type fat (binary,user,noumount) + + + newgrp + 1 + Cygwin Utilities + + + + newgrp + change primary group for a command + + + + + newgrp + - + group + command + args + + + + + + Description + newgrp changes the primary group for a + command. + + If the flag is given as first argument, the + user's environment will be reinitialized as though the user had logged + in, otherwise the current environment, including current working + directory, remains unchanged. + + newgrp changes the current primary group to the + named group, or to the default group listed in /etc/passwd if no group + name is given. + + By default, the user's standard shell is started, called as login + shell if the flag has been specified. If a group + has been given as argument, a command and its arguments can be + specified on the command line. + + The new primary group must be either the old primary group, or + it must be part of the supplementary group list. Setting the primary + group to an arbitrary group is not allowed in Windows. + + + + See also + id(1), login(1). + + + + passwd diff --git a/winsup/doc/xidepend b/winsup/doc/xidepend index cc04f4a121..bfbadfef29 100755 --- a/winsup/doc/xidepend +++ b/winsup/doc/xidepend @@ -12,7 +12,7 @@ fi for f in "$@" do f=`basename "$f"` - if fgrep -q 'xi:include' "$f" + if grep -F -q 'xi:include' "$f" then # This file uses XIncludes. Let's chase its deps recursively. base=`basename "$f" .xml` diff --git a/winsup/testsuite/Makefile.am b/winsup/testsuite/Makefile.am index ac68934d02..2289556682 100644 --- a/winsup/testsuite/Makefile.am +++ b/winsup/testsuite/Makefile.am @@ -31,36 +31,355 @@ libltp_a_SOURCES = \ libltp/lib/tst_tmpdir.c \ libltp/lib/write_log.c -DEJATOOL = winsup - -# Add '-v' to RUNTESTFLAGS if V=1 -RUNTESTFLAGS_1 = -v -RUNTESTFLAGS = $(RUNTESTFLAGS_$(V)) - -# a temporary directory, to be used for files created by tests -tmpdir = $(abspath $(objdir)/testsuite/tmp/) -# the same temporary directory, as an absolute, /cygdrive path (so it can be -# understood by the test DLL, which will have a different mount table) -testdll_tmpdir = $(shell cygpath -ma $(tmpdir) | sed -e 's#^\([A-Z]\):#/cygdrive/\L\1#') - -site-extra.exp: ../config.status Makefile - @rm -f ./tmp0 - @echo "set runtime_root \"`pwd`/../cygwin\"" >> ./tmp0 - @echo "set CC \"$(CC)\"" >> ./tmp0 - @echo "set CFLAGS \"\"" >> ./tmp0 - @echo "set MINGW_CXX \"$(MINGW_CXX)\"" >> ./tmp0 - @echo "set tmpdir $(tmpdir)" >> ./tmp0 - @echo "set testdll_tmpdir $(testdll_tmpdir)" >> ./tmp0 - @echo "set ltp_includes \"$(srcdir)/libltp/include\"" >> ./tmp0 - @echo "set ltp_libs \"`pwd`/libltp.a\"" >> ./tmp0 - @echo "set cygrun \"`pwd`/cygrun/cygrun\"" >> ./tmp0 - @mv ./tmp0 site-extra.exp - -EXTRA_DEJAGNU_SITE_CONFIG = site-extra.exp +check_PROGRAMS = \ + winsup.api/checksignal \ + winsup.api/crlf \ + winsup.api/devdsp \ + winsup.api/devzero \ + winsup.api/iospeed \ + winsup.api/mmaptest01 \ + winsup.api/mmaptest02 \ + winsup.api/mmaptest03 \ + winsup.api/mmaptest04 \ + winsup.api/msgtest \ + winsup.api/nullgetcwd \ + winsup.api/resethand \ + winsup.api/semtest \ + winsup.api/shmtest \ + winsup.api/sigchld \ + winsup.api/signal-into-win32-api \ + winsup.api/systemcall \ + winsup.api/user_malloc \ + winsup.api/waitpid \ + winsup.api/ltp/access01 \ + winsup.api/ltp/access03 \ + winsup.api/ltp/access04 \ + winsup.api/ltp/access05 \ + winsup.api/ltp/alarm01 \ + winsup.api/ltp/alarm02 \ + winsup.api/ltp/alarm03 \ + winsup.api/ltp/alarm07 \ + winsup.api/ltp/asyncio02 \ + winsup.api/ltp/chdir02 \ + winsup.api/ltp/chdir04 \ + winsup.api/ltp/chmod01 \ + winsup.api/ltp/chmod02 \ + winsup.api/ltp/chown01 \ + winsup.api/ltp/close01 \ + winsup.api/ltp/close02 \ + winsup.api/ltp/close08 \ + winsup.api/ltp/creat01 \ + winsup.api/ltp/creat03 \ + winsup.api/ltp/creat09 \ + winsup.api/ltp/dup01 \ + winsup.api/ltp/dup02 \ + winsup.api/ltp/dup03 \ + winsup.api/ltp/dup04 \ + winsup.api/ltp/dup05 \ + winsup.api/ltp/execl01 \ + winsup.api/ltp/execle01 \ + winsup.api/ltp/execlp01 \ + winsup.api/ltp/execv01 \ + winsup.api/ltp/execve01 \ + winsup.api/ltp/execvp01 \ + winsup.api/ltp/exit01 \ + winsup.api/ltp/exit02 \ + winsup.api/ltp/fchdir01 \ + winsup.api/ltp/fchdir02 \ + winsup.api/ltp/fchmod01 \ + winsup.api/ltp/fchown01 \ + winsup.api/ltp/fcntl02 \ + winsup.api/ltp/fcntl03 \ + winsup.api/ltp/fcntl04 \ + winsup.api/ltp/fcntl05 \ + winsup.api/ltp/fcntl07 \ + winsup.api/ltp/fcntl07B \ + winsup.api/ltp/fcntl08 \ + winsup.api/ltp/fcntl09 \ + winsup.api/ltp/fcntl10 \ + winsup.api/ltp/fork01 \ + winsup.api/ltp/fork02 \ + winsup.api/ltp/fork03 \ + winsup.api/ltp/fork04 \ + winsup.api/ltp/fork06 \ + winsup.api/ltp/fork07 \ + winsup.api/ltp/fork09 \ + winsup.api/ltp/fork10 \ + winsup.api/ltp/fork11 \ + winsup.api/ltp/fpathconf01 \ + winsup.api/ltp/fstat01 \ + winsup.api/ltp/fstat02 \ + winsup.api/ltp/fstat03 \ + winsup.api/ltp/fstat04 \ + winsup.api/ltp/fsync01 \ + winsup.api/ltp/ftruncate01 \ + winsup.api/ltp/ftruncate02 \ + winsup.api/ltp/ftruncate03 \ + winsup.api/ltp/getegid01 \ + winsup.api/ltp/geteuid01 \ + winsup.api/ltp/getgid01 \ + winsup.api/ltp/getgid02 \ + winsup.api/ltp/getgid03 \ + winsup.api/ltp/getgroups01 \ + winsup.api/ltp/getgroups02 \ + winsup.api/ltp/gethostid01 \ + winsup.api/ltp/gethostname01 \ + winsup.api/ltp/getpgid01 \ + winsup.api/ltp/getpgid02 \ + winsup.api/ltp/getpgrp01 \ + winsup.api/ltp/getpid01 \ + winsup.api/ltp/getpid02 \ + winsup.api/ltp/getppid01 \ + winsup.api/ltp/getppid02 \ + winsup.api/ltp/getuid01 \ + winsup.api/ltp/getuid02 \ + winsup.api/ltp/getuid03 \ + winsup.api/ltp/kill01 \ + winsup.api/ltp/kill02 \ + winsup.api/ltp/kill03 \ + winsup.api/ltp/kill04 \ + winsup.api/ltp/kill09 \ + winsup.api/ltp/link02 \ + winsup.api/ltp/link03 \ + winsup.api/ltp/link04 \ + winsup.api/ltp/link05 \ + winsup.api/ltp/lseek01 \ + winsup.api/ltp/lseek02 \ + winsup.api/ltp/lseek03 \ + winsup.api/ltp/lseek04 \ + winsup.api/ltp/lseek05 \ + winsup.api/ltp/lseek06 \ + winsup.api/ltp/lseek07 \ + winsup.api/ltp/lseek08 \ + winsup.api/ltp/lseek09 \ + winsup.api/ltp/lseek10 \ + winsup.api/ltp/lstat02 \ + winsup.api/ltp/mkdir01 \ + winsup.api/ltp/mkdir08 \ + winsup.api/ltp/mknod01 \ + winsup.api/ltp/mmap001 \ + winsup.api/ltp/mmap02 \ + winsup.api/ltp/mmap03 \ + winsup.api/ltp/mmap04 \ + winsup.api/ltp/mmap05 \ + winsup.api/ltp/mmap06 \ + winsup.api/ltp/mmap07 \ + winsup.api/ltp/mmap08 \ + winsup.api/ltp/munmap01 \ + winsup.api/ltp/munmap02 \ + winsup.api/ltp/nice05 \ + winsup.api/ltp/open02 \ + winsup.api/ltp/open03 \ + winsup.api/ltp/pathconf01 \ + winsup.api/ltp/pause01 \ + winsup.api/ltp/pipe01 \ + winsup.api/ltp/pipe08 \ + winsup.api/ltp/pipe09 \ + winsup.api/ltp/pipe10 \ + winsup.api/ltp/pipe11 \ + winsup.api/ltp/poll01 \ + winsup.api/ltp/read01 \ + winsup.api/ltp/read04 \ + winsup.api/ltp/readdir01 \ + winsup.api/ltp/readlink01 \ + winsup.api/ltp/readlink02 \ + winsup.api/ltp/readlink03 \ + winsup.api/ltp/rename01 \ + winsup.api/ltp/rename02 \ + winsup.api/ltp/rename08 \ + winsup.api/ltp/rename10 \ + winsup.api/ltp/rmdir01 \ + winsup.api/ltp/rmdir04 \ + winsup.api/ltp/rmdir05 \ + winsup.api/ltp/sbrk01 \ + winsup.api/ltp/select01 \ + winsup.api/ltp/select02 \ + winsup.api/ltp/select03 \ + winsup.api/ltp/setgid01 \ + winsup.api/ltp/setgroups01 \ + winsup.api/ltp/setpgid01 \ + winsup.api/ltp/setregid01 \ + winsup.api/ltp/setreuid01 \ + winsup.api/ltp/setuid01 \ + winsup.api/ltp/setuid02 \ + winsup.api/ltp/signal03 \ + winsup.api/ltp/stat01 \ + winsup.api/ltp/stat02 \ + winsup.api/ltp/stat03 \ + winsup.api/ltp/stat05 \ + winsup.api/ltp/stat06 \ + winsup.api/ltp/symlink01 \ + winsup.api/ltp/symlink02 \ + winsup.api/ltp/symlink03 \ + winsup.api/ltp/symlink04 \ + winsup.api/ltp/symlink05 \ + winsup.api/ltp/sync01 \ + winsup.api/ltp/sync02 \ + winsup.api/ltp/time01 \ + winsup.api/ltp/time02 \ + winsup.api/ltp/times01 \ + winsup.api/ltp/times02 \ + winsup.api/ltp/times03 \ + winsup.api/ltp/truncate01 \ + winsup.api/ltp/truncate02 \ + winsup.api/ltp/umask01 \ + winsup.api/ltp/umask02 \ + winsup.api/ltp/umask03 \ + winsup.api/ltp/uname01 \ + winsup.api/ltp/unlink05 \ + winsup.api/ltp/unlink06 \ + winsup.api/ltp/unlink07 \ + winsup.api/ltp/unlink08 \ + winsup.api/ltp/vfork01 \ + winsup.api/ltp/wait02 \ + winsup.api/ltp/wait401 \ + winsup.api/ltp/wait402 \ + winsup.api/ltp/write01 \ + winsup.api/ltp/write02 \ + winsup.api/ltp/write03 \ + winsup.api/pthread/cancel1 \ + winsup.api/pthread/cancel10 \ + winsup.api/pthread/cancel11 \ + winsup.api/pthread/cancel12 \ + winsup.api/pthread/cancel2 \ + winsup.api/pthread/cancel3 \ + winsup.api/pthread/cancel4 \ + winsup.api/pthread/cancel5 \ + winsup.api/pthread/cancel6 \ + winsup.api/pthread/cancel7 \ + winsup.api/pthread/cancel8 \ + winsup.api/pthread/cancel9 \ + winsup.api/pthread/cleanup2 \ + winsup.api/pthread/cleanup3 \ + winsup.api/pthread/condvar1 \ + winsup.api/pthread/condvar2 \ + winsup.api/pthread/condvar2_1 \ + winsup.api/pthread/condvar3 \ + winsup.api/pthread/condvar3_1 \ + winsup.api/pthread/condvar3_2 \ + winsup.api/pthread/condvar3_3 \ + winsup.api/pthread/condvar4 \ + winsup.api/pthread/condvar5 \ + winsup.api/pthread/condvar6 \ + winsup.api/pthread/condvar7 \ + winsup.api/pthread/condvar8 \ + winsup.api/pthread/condvar9 \ + winsup.api/pthread/count1 \ + winsup.api/pthread/create1 \ + winsup.api/pthread/create2 \ + winsup.api/pthread/equal1 \ + winsup.api/pthread/exit1 \ + winsup.api/pthread/exit2 \ + winsup.api/pthread/exit3 \ + winsup.api/pthread/inherit1 \ + winsup.api/pthread/join0 \ + winsup.api/pthread/join1 \ + winsup.api/pthread/join2 \ + winsup.api/pthread/mainthreadexits \ + winsup.api/pthread/mutex1 \ + winsup.api/pthread/mutex1d \ + winsup.api/pthread/mutex1e \ + winsup.api/pthread/mutex1n \ + winsup.api/pthread/mutex1r \ + winsup.api/pthread/mutex2 \ + winsup.api/pthread/mutex3 \ + winsup.api/pthread/mutex4 \ + winsup.api/pthread/mutex5 \ + winsup.api/pthread/mutex6d \ + winsup.api/pthread/mutex6e \ + winsup.api/pthread/mutex6n \ + winsup.api/pthread/mutex6r \ + winsup.api/pthread/mutex7 \ + winsup.api/pthread/mutex7d \ + winsup.api/pthread/mutex7e \ + winsup.api/pthread/mutex7n \ + winsup.api/pthread/mutex7r \ + winsup.api/pthread/mutex8e \ + winsup.api/pthread/mutex8n \ + winsup.api/pthread/mutex8r \ + winsup.api/pthread/once1 \ + winsup.api/pthread/priority1 \ + winsup.api/pthread/priority2 \ + winsup.api/pthread/rwlock1 \ + winsup.api/pthread/rwlock2 \ + winsup.api/pthread/rwlock3 \ + winsup.api/pthread/rwlock4 \ + winsup.api/pthread/rwlock5 \ + winsup.api/pthread/rwlock6 \ + winsup.api/pthread/rwlock7 \ + winsup.api/pthread/self1 \ + winsup.api/pthread/self2 \ + winsup.api/pthread/threadidafterfork \ + winsup.api/pthread/tsd1 \ + winsup.api/samples/sample-fail \ + winsup.api/samples/sample-pass +# winsup.api/ltp/ulimit01 is omitted as we don't have + +# flags for linking against the just built implib +# TODO: use -nostdinc and to-be-installed headers as well? +LDFLAGS_FOR_TESTDLL = -nodefaultlibs +LDADD_FOR_TESTDLL = $(builddir)/../cygwin/libcygwin.a -lgcc -lkernel32 -luser32 + +# flags for test executables +AM_CPPFLAGS = -I$(srcdir)/libltp/include +AM_LDFLAGS = $(LDFLAGS_FOR_TESTDLL) +LDADD = $(builddir)/libltp.a $(builddir)/../cygwin/binmode.o $(LDADD_FOR_TESTDLL) + +# additional flags for specific test executables +winsup_api_devdsp_LDADD = -lwinmm $(LDADD) + +# all tests +TESTS = $(check_PROGRAMS) \ + mingw/cygload + +# expected fail tests +XFAIL_TESTS_CI_true = \ + winsup.api/ltp/umask03$(EXEEXT) + +XFAIL_TESTS = \ + winsup.api/ltp/setgroups01 \ + winsup.api/ltp/setuid02 \ + winsup.api/ltp/ulimit01 \ + winsup.api/ltp/unlink08 \ + winsup.api/samples/sample-fail \ + $(XFAIL_TESTS_CI_$(GITHUB_ACTIONS)) + +# cygrun.sh test-runner script, and variables used by it: +LOG_COMPILER = $(srcdir)/cygrun.sh + +export runtime_root=$(abs_builddir)/testinst/bin +export cygrun=$(builddir)/mingw/cygrun + +# Set up things in the Cygwin 'installation' at testsuite/testinst/ to provide +# things which tests need to work +# +# * Create /tmp +# * Ensure there is a /usr/bin/sh for tests which use system() +# * Ensure there is a /usr/bin/sleep for tests which use system("sleep 10") +# * Ensure there is a /usr/bin/ls for tests which use system("ls") +# +# copy to avoid all the complexities: hardlink will fail if builddir is on a +# separate filesystem, symlink would need to be constructed with regard to the +# mounts of the test installation, and making it into /bin/ will cause +# CreateProcess() to load cygwin1.dll from there. +# +# use busybox executables as they don't have any other shared library +# dependencies other than cygwin1.dll. +# + +check-local: + $(MKDIR_P) ${builddir}/testinst/tmp + cd ${builddir}/testinst/bin && cp /usr/libexec/busybox/bin/busybox.exe sh.exe + cd ${builddir}/testinst/bin && cp /usr/libexec/busybox/bin/busybox.exe sleep.exe + cd ${builddir}/testinst/bin && cp /usr/libexec/busybox/bin/busybox.exe ls.exe + +# target to build all the programs needed by check, without running check +check_programs: $(check_PROGRAMS) clean-local: - rm -f *.log *.exe *.exp *.bak *.stackdump winsup.sum + rm -f *.stackdump + rm -rf ${builddir}/testinst/tmp if CROSS_BOOTSTRAP -SUBDIRS = cygrun +SUBDIRS = mingw endif diff --git a/winsup/testsuite/README b/winsup/testsuite/README index 2f6749bb86..511133e4d5 100644 --- a/winsup/testsuite/README +++ b/winsup/testsuite/README @@ -1,40 +1,69 @@ -1999-12-23 DJ Delorie +Here are some notes about adding to and using this testsuite. -Here are some notes about adding and using this testsuite. +The testsuite adds a directory containing the just-built cygwin1.dll to the PATH +so that it can be found by the Windows loader during testing. -First, all the programs are linked with libcygwin0.a, which is just -like libcygwin.a, except that it wants cygwin0.dll, not -cygwin1.dll. The testsuite adds the winsup build directory to the -PATH so that cygwin0.dll can be found by windows during testing. +Because we'll probably run into complaints about using two DLLs, we use +cygrun.exe to run each test. All this does is run the test with CreateProcess() +so that we don't attempt to do the special code for when a cygwin program calls +another cygwin program, as this might be a "multiple cygwins" problem. -Because we'll probably run into complaints about using two DLLs, we -run cygrun.exe for each test. All this does is run the test with -CreateProcess() so that we don't attempt to do the special code for -when a cygwin program calls another cygwin program, as this might be a -"multiple cygwins" problem. +The testsuite/winsup.api subdirectory is for testing the API to cygwin1.dll +ONLY. Create other subdirs under testsuite/ for other classes of testing. -Any test that needs to test command line args or redirection needs to -run such a child program itself, as the testsuite will not do any -arguments or redirection for it. Same for fork, signals, etc. +Tests in testsuite/winsup.api/pthread/ are derived from the pthread-win32 +testsuite. -The testsuite/winsup.api subdirectory is for testing the API to -cygwin1.dll ONLY. Create other subdirs under testsuite/ for other -classes of testing. +Tests in testsuite/winsup.api/ltp/ are derived from (a very old version of) the +ltp testsuite. -Tests in winsup.api/*.c or winsup.api/*/*.c (only one subdirectory -level is allowed) either compile, run, and exit(0) or they fail. -Either abort or exit with a non-zero code to indicate failure. Don't -print anything to the screen if you can avoid it (except for failure -reasons, of course). One .c file per test, no compile options are -allowed (we're testing the api, not the compiler). +Don't print anything to the screen if you can avoid it (except for failure +reasons, of course). -Tests whose filename is mentioned in known-bugs.tcl will be *expected* -to fail, and will "fail" if they compile, run, and return zero. +"make check" will only work if you run it *on* an NT machine. Cross-checking is +not supported. -"make check" will only work if you run it *on* an NT machine. -Cross-checking is not supported. +Tests whose name is mentioned in XFAIL_TESTS are expected to fail, effectively +reversing the result of those. -To test a subset of the test-suite, use -$ make check CYGWIN_TESTSUITE_TESTS=regexp +Adding a test +============= +Add the source for the test under testsuite/winsup.api/. +Add the additional tests program to check_PROGRAMS in testsuite/Makefile.am. + +(Note that if the test 'foo' has a single source file, foo.c, there's no need to +write a foo_SOURCES as that's the default Automake assumes.) + +Tests can use libltp, but's that not required. + +The Cygwin 'installation' that the tests are run in is minimal, so don't assume +anything is present. + +Any test that needs to test command line args or redirection needs to run such a +child program itself, as the testsuite will not do any arguments or redirection +for it. Same for fork, signals, etc. + +Tests should either run successfully and exit(0), exit(77) to indicate a skipped +test, or any other exit status to indicate a failure. + +Tips +==== + +* To run selected tests, use e.g: + +$ make check TESTS="winsup.api/ltp/umask03 winsup.api/ltp/stat06" + +* To build the tests without running them, use the check_programs target, e.g: + +$ make -C winsup/testsuite/ check_programs + +* To run an individual test program directly (against the installed, rather than + just built DLL), e.g.: + +$ winsup/testsuite/winsup.api/pthread/cancel1 + +* To run an individual test program against the test DLL under gdb, e.g.: + +$ PATH="/winsup/testsuite/testinst/bin/:$PATH" cygrun -notimeout "gdb winsup.api/systemcall" diff --git a/winsup/testsuite/config/default.exp b/winsup/testsuite/config/default.exp deleted file mode 100644 index fd592c3adf..0000000000 --- a/winsup/testsuite/config/default.exp +++ /dev/null @@ -1,13 +0,0 @@ -proc winsup_version {} { - global env - global runtime_root - clone_output "\n[exec grep -a ^%%% $runtime_root/msys0.dll]\n" - if { [info exists env(MSYS)] } { - clone_output "MSYS=$env(MSYS)\n" - } else { - clone_output "MSYS=\n" - } -} - -proc winsup_exit {} { -} diff --git a/winsup/testsuite/cygrun.c b/winsup/testsuite/cygrun.c index 616b0439f7..50c51876ed 100644 --- a/winsup/testsuite/cygrun.c +++ b/winsup/testsuite/cygrun.c @@ -20,47 +20,58 @@ main (int argc, char **argv) { STARTUPINFO sa; PROCESS_INFORMATION pi; + DWORD res; DWORD ec = 1; - char *p; + DWORD timeout = 60 * 1000; if (argc < 2) { - fprintf (stderr, "Usage: cygrun [program] [tmpdir]\n"); - exit (0); + fprintf (stderr, "Usage: cygrun [program]\n"); + exit (1); } - if (argc >= 3) - SetEnvironmentVariable ("TDIRECTORY", argv[2]); - - SetEnvironmentVariable ("MSYS_TESTING", "1"); - if ((p = getenv ("MSYS")) == NULL || (strstr (p, "ntsec") == NULL)) + int i; + for (i = 1; i < argc; ++i) { - char buf[4096]; - if (!p) - { - p = buf; - p[0] = '\0'; - } + if (strcmp (argv[i], "-notimeout") == 0) + timeout = INFINITE; else - { - strcpy (buf, p); - strcat (buf, " "); - } - strcat(buf, "ntsec"); - SetEnvironmentVariable ("MSYS", buf); + break; + } + + char *command = argv[i]; + + if (i < (argc-1)) + { + fprintf (stderr, "cygrun: excess arguments\n"); + exit (1); } + SetEnvironmentVariable ("CYGWIN_TESTING", "1"); + memset (&sa, 0, sizeof (sa)); memset (&pi, 0, sizeof (pi)); - if (!CreateProcess (0, argv[1], 0, 0, 1, 0, 0, 0, &sa, &pi)) + if (!CreateProcess (0, command, 0, 0, 1, 0, 0, 0, &sa, &pi)) { - fprintf (stderr, "CreateProcess %s failed\n", argv[1]); + fprintf (stderr, "CreateProcess %s failed\n", command); exit (1); } - WaitForSingleObject (pi.hProcess, INFINITE); + res = WaitForSingleObject (pi.hProcess, timeout); - GetExitCodeProcess (pi.hProcess, &ec); + if (res == WAIT_TIMEOUT) + { + char cmd[1024]; + // there is no simple API to kill a Windows process tree + sprintf(cmd, "taskkill /f /t /pid %lu", GetProcessId(pi.hProcess)); + system(cmd); + fprintf (stderr, "Timeout\n"); + ec = 124; + } + else + { + GetExitCodeProcess (pi.hProcess, &ec); + } CloseHandle (pi.hProcess); CloseHandle (pi.hThread); diff --git a/winsup/testsuite/cygrun.sh b/winsup/testsuite/cygrun.sh new file mode 100755 index 0000000000..bf1d5cc6b5 --- /dev/null +++ b/winsup/testsuite/cygrun.sh @@ -0,0 +1,17 @@ +#!/bin/dash +# +# test driver to run $1 in the appropriate environment +# + +# $1 = test executable to run +exe=$1 + +export PATH="$runtime_root:${PATH}" + +if [ "$1" = "./mingw/cygload" ] +then + windows_runtime_root=$(cygpath -m $runtime_root) + $cygrun "$exe -v -cygwin $windows_runtime_root/cygwin1.dll" +else + cygdrop $cygrun $exe +fi diff --git a/winsup/testsuite/libltp/include/usctest.h b/winsup/testsuite/libltp/include/usctest.h index fef349d04b..637635a251 100644 --- a/winsup/testsuite/libltp/include/usctest.h +++ b/winsup/testsuite/libltp/include/usctest.h @@ -210,7 +210,7 @@ extern void STD_opts_help(); * SCALL = system call and parameters to execute * ***********************************************************************/ -#define TEST(SCALL) TEST_RETURN = SCALL; TEST_ERRNO=errno; +#define TEST(SCALL) TEST_RETURN = (long) SCALL; TEST_ERRNO=errno; /*********************************************************************** * TEST_VOID: calls a system call diff --git a/winsup/testsuite/cygrun/Makefile.am b/winsup/testsuite/mingw/Makefile.am similarity index 58% rename from winsup/testsuite/cygrun/Makefile.am rename to winsup/testsuite/mingw/Makefile.am index bdbd8f705d..772e73405f 100644 --- a/winsup/testsuite/cygrun/Makefile.am +++ b/winsup/testsuite/mingw/Makefile.am @@ -1,4 +1,4 @@ -# Makefile.am for Cygwin the testsuite wrapper cygrun. +# Makefile.am for Cygwin testsuite MINGW executables # # This file is part of Cygwin. # @@ -8,14 +8,19 @@ # This makefile requires GNU make. -# This is built with the MinGW compiler, so is in a separate Makefile here +# These are built with the MinGW compiler, so are in a separate Makefile here # because it's tricky with Automake to use different compilers for the same # language in the same Makefile. override CC = @MINGW_CC@ +override CXX = @MINGW_CXX@ AM_CPPFLAGS = -noinst_PROGRAMS = cygrun +noinst_PROGRAMS = cygrun cygload cygrun_SOURCES = \ ../cygrun.c + +cygload_SOURCES = \ + ../winsup.api/cygload.cc +cygload_LDFLAGS=-static -Wl,-e,cygloadCRTStartup diff --git a/winsup/testsuite/winsup.api/cygload.cc b/winsup/testsuite/winsup.api/cygload.cc index 510a627c52..1b2f79dc05 100644 --- a/winsup/testsuite/winsup.api/cygload.cc +++ b/winsup/testsuite/winsup.api/cygload.cc @@ -152,7 +152,7 @@ cygwin::connector::connector (const char *dll) if ((_library = LoadLibrary (dll)) == NULL) throw windows_error ("LoadLibrary", dll); - *out << "Initializing msys..." << endl; + *out << "Initializing cygwin..." << endl; // This calls dcrt0.cc:msys_dll_init(), which calls dll_crt0_1(), // which will, among other things: @@ -597,12 +597,9 @@ main (int argc, char *argv[]) } // And signal handling: - std::pointer_to_unary_function < int , void > h1 (&hangup); - std::pointer_to_unary_function < int , void > h2 (&interrupt); - std::pointer_to_unary_function < int , void > h3 (&catch_signal); - cygwin.set_handler (SIGHUP, &h1); - cygwin.set_handler (SIGINT, &h2); - cygwin.set_handler (SIGUSR1, &h3); + cygwin.set_handler (SIGHUP, hangup); + cygwin.set_handler (SIGINT, interrupt); + cygwin.set_handler (SIGUSR1, catch_signal); // Make sure the signal handler thread has had time to start... Sleep (100); diff --git a/winsup/testsuite/winsup.api/cygload.exp b/winsup/testsuite/winsup.api/cygload.exp deleted file mode 100644 index 500683e4ce..0000000000 --- a/winsup/testsuite/winsup.api/cygload.exp +++ /dev/null @@ -1,46 +0,0 @@ -source "site.exp" - -if { ! [isnative] } { - verbose "skipping cygload because it's not native \"$target_triplet\" != \"$build_triplet\"" - return -} - -proc ws_spawn {cmd args} { - global rv - verbose "running $cmd\n" - set rv {} - # First item in rv is the return code, second item is the message - lappend rv [catch "exec $cmd" message] $message - verbose send "catchCode = $rv\n" -} - -if { [string match "i686" $target_alias] } { - set entrypoint "_cygloadCRTStartup@0" -} else { - set entrypoint "cygloadCRTStartup" -} - -ws_spawn "$MINGW_CXX $srcdir/$subdir/cygload.cc -o mingw-cygload.exe -static -Wl,-e,$entrypoint" - -if { $rv != {0 {}} } { - verbose -log "$rv" - fail "cygload (compile)" -} else { - if { $verbose } { - set redirect_output "./mingw-cygwin.log" - } else { - set redirect_output /dev/null - } - set windows_runtime_root [exec cygpath -m $runtime_root] - ws_spawn "./mingw-cygload.exe -cygwin $windows_runtime_root/msys0.dll > $redirect_output" - if { $rv != {0 {}} } { - verbose -log "cygload: $rv" - fail "cygload (execute)" - } else { - pass "cygload" - } - catch { file delete "mingw-cygload.exe" } err - if { $err != "" } { - note "error deleting mingw-cygload.exe: $err" - } -} diff --git a/winsup/testsuite/winsup.api/cygload.h b/winsup/testsuite/winsup.api/cygload.h index ab4003bd56..0f2aacda9a 100644 --- a/winsup/testsuite/winsup.api/cygload.h +++ b/winsup/testsuite/winsup.api/cygload.h @@ -102,7 +102,7 @@ namespace cygwin public: // The constructor will automatically hook you up for receiving // cygwin signals. Just specify a signal and pass in a signal_handler. - typedef std::pointer_to_unary_function signal_handler; + typedef void signal_handler (int); signal_handler *set_handler (int signal, signal_handler *); private: diff --git a/winsup/testsuite/winsup.api/devdsp.c b/winsup/testsuite/winsup.api/devdsp.c index 6c8850a749..de3ccfa197 100644 --- a/winsup/testsuite/winsup.api/devdsp.c +++ b/winsup/testsuite/winsup.api/devdsp.c @@ -27,6 +27,8 @@ details. */ #include #include "test.h" /* use libltp framework */ +#include + /* Controls if a child can open the device after the parent */ #define CHILD_EXPECT 0 /* 0 or 1 */ @@ -59,6 +61,7 @@ void playwavtest (void); void syncwithchild (pid_t pid, int expected_exit_status); void cleanup (void); void dup_test (void); +void devcheck (void); static int expect_child_failure = 0; @@ -77,6 +80,7 @@ int main (int argc, char *argv[]) { /* tst_brkm(TBROK, cleanup, "see if it breaks all right"); */ + devcheck (); ioctltest (); playbacktest (); recordingtest (); @@ -91,6 +95,17 @@ main (int argc, char *argv[]) return 0; } +/* skip test if we don't have any audio devices*/ +void +devcheck (void) +{ + if ((waveInGetNumDevs() == 0) || (waveOutGetNumDevs() == 0)) + { + tst_resm (TINFO, "Skipping, no audio devices present"); + exit(0); + } +} + /* test some extra ioctls */ void ioctltest (void) @@ -155,15 +170,11 @@ playbacktest (void) strerror (errno)); } audio2 = open ("/dev/dsp", O_WRONLY); + tst_resm (TINFO, "Second open /dev/dsp W %s ", + audio2 >= 0 ? "WORKS" : "DOESN'T WORK"); if (audio2 >= 0) { - tst_brkm (TFAIL, cleanup, - "Second open /dev/dsp W succeeded, but is expected to fail"); - } - else if (errno != EBUSY) - { - tst_brkm (TFAIL, cleanup, "Expected EBUSY here, exit: %s", - strerror (errno)); + close (audio2); } for (rate = 0; rate < sizeof (rates) / sizeof (int); rate++) for (k = 0; k < sizeof (sblut) / sizeof (struct sb); k++) @@ -194,15 +205,11 @@ recordingtest (void) strerror (errno)); } audio2 = open ("/dev/dsp", O_RDONLY); + tst_resm (TINFO, "Second open /dev/dsp R %s", + audio2 >= 0 ? "WORKS" : "DOESN'T WORK"); if (audio2 >= 0) { - tst_brkm (TFAIL, cleanup, - "Second open /dev/dsp R succeeded, but is expected to fail"); - } - else if (errno != EBUSY) - { - tst_brkm (TFAIL, cleanup, "Expected EBUSY here, exit: %s", - strerror (errno)); + close (audio2); } for (rate = 0; rate < sizeof (rates) / sizeof (int); rate++) for (k = 0; k < sizeof (sblut) / sizeof (struct sb); k++) diff --git a/winsup/testsuite/winsup.api/known_bugs.tcl b/winsup/testsuite/winsup.api/known_bugs.tcl deleted file mode 100644 index 4f13c90e08..0000000000 --- a/winsup/testsuite/winsup.api/known_bugs.tcl +++ /dev/null @@ -1,4 +0,0 @@ -set xfail_list [list \ - setgroups01 setuid02 \ - ulimit01 unlink08 \ - sample-fail sample-miscompile] diff --git a/winsup/testsuite/winsup.api/ltp/execv01.c b/winsup/testsuite/winsup.api/ltp/execv01.c index f59f29702b..dca62c5232 100644 --- a/winsup/testsuite/winsup.api/ltp/execv01.c +++ b/winsup/testsuite/winsup.api/ltp/execv01.c @@ -130,7 +130,7 @@ int exp_enos[]={0, 0}; /* Zero terminated list of expected errnos */ int pid; /* process id from fork */ int status; /* status returned from waitpid */ -const char * const args[2]={"/usr/bin/test", 0}; /* argument list for execv call */ +char * const args[2]={"/usr/bin/test", 0}; /* argument list for execv call */ int main(int ac, char **av) diff --git a/winsup/testsuite/winsup.api/ltp/execve01.c b/winsup/testsuite/winsup.api/ltp/execve01.c index 2584bdf054..eb5073d310 100644 --- a/winsup/testsuite/winsup.api/ltp/execve01.c +++ b/winsup/testsuite/winsup.api/ltp/execve01.c @@ -133,7 +133,7 @@ int exp_enos[]={0, 0}; /* Zero terminated list of expected errnos */ int pid; /* process id from fork */ int status; /* status returned from waitpid */ -const char *const args[2]={"/usr/bin/test", 0}; /* argument list for execve call */ +char *const args[2]={"/usr/bin/test", 0}; /* argument list for execve call */ extern char **environ; /* pointer to this processes env, to pass along */ int diff --git a/winsup/testsuite/winsup.api/ltp/execvp01.c b/winsup/testsuite/winsup.api/ltp/execvp01.c index 8a1726a214..1473ccf66e 100644 --- a/winsup/testsuite/winsup.api/ltp/execvp01.c +++ b/winsup/testsuite/winsup.api/ltp/execvp01.c @@ -133,7 +133,7 @@ int exp_enos[]={0, 0}; /* Zero terminated list of expected errnos */ int pid; /* process id from fork */ int status; /* status returned from waitpid */ -const char *const args[2]={"/usr/bin/test", 0}; /* argument list for execvp call */ +char *const args[2]={"/usr/bin/test", 0}; /* argument list for execvp call */ int main(int ac, char **av) diff --git a/winsup/testsuite/winsup.api/ltp/fcntl07B.c b/winsup/testsuite/winsup.api/ltp/fcntl07B.c index 4e94ff2673..db866fddd6 100644 --- a/winsup/testsuite/winsup.api/ltp/fcntl07B.c +++ b/winsup/testsuite/winsup.api/ltp/fcntl07B.c @@ -170,7 +170,7 @@ const char *File1 = DEFAULT_FILE; #define DEFAULT_SUBPROG "test_open" const char *openck = DEFAULT_SUBPROG; /* support program name to check for open FD */ -const char subprog_path[_POSIX_PATH_MAX];/* path to exec "openck" with */ +char subprog_path[_POSIX_PATH_MAX];/* path to exec "openck" with */ #define STRSIZE 255 #define FIFONAME "FiFo" diff --git a/winsup/testsuite/winsup.api/ltp/kill01.c b/winsup/testsuite/winsup.api/ltp/kill01.c index 042899173c..5f0a32ba97 100644 --- a/winsup/testsuite/winsup.api/ltp/kill01.c +++ b/winsup/testsuite/winsup.api/ltp/kill01.c @@ -102,6 +102,7 @@ main(int ac, char **av) /*NOTREACHED*/ exit(exno); } else { + usleep(1000); TEST(kill(pid, TEST_SIG)); waitpid(pid, &status, 0); } diff --git a/winsup/testsuite/winsup.api/ltp/kill03.c b/winsup/testsuite/winsup.api/ltp/kill03.c index 1de727fd7b..eb75fdb383 100644 --- a/winsup/testsuite/winsup.api/ltp/kill03.c +++ b/winsup/testsuite/winsup.api/ltp/kill03.c @@ -106,6 +106,7 @@ main(int ac, char **av) /*NOTREACHED*/ exit(exno); } else { + usleep(1000); TEST(kill(pid, TEST_SIG)); kill(pid, SIGKILL); waitpid(pid, &status, 0); diff --git a/winsup/testsuite/winsup.api/ltp/kill04.c b/winsup/testsuite/winsup.api/ltp/kill04.c index a7b3274c32..c3314f35dc 100644 --- a/winsup/testsuite/winsup.api/ltp/kill04.c +++ b/winsup/testsuite/winsup.api/ltp/kill04.c @@ -114,6 +114,7 @@ main(int ac, char **av) /*NOTREACHED*/ exit(exno); } + usleep(1000); kill(fake_pid, TEST_SIG); waitpid(fake_pid, &fake_status, 0); TEST(kill(fake_pid, TEST_SIG)); diff --git a/winsup/testsuite/winsup.api/ltp/lseek03.c b/winsup/testsuite/winsup.api/ltp/lseek03.c index 51c303d85c..06bbcc32b4 100644 --- a/winsup/testsuite/winsup.api/ltp/lseek03.c +++ b/winsup/testsuite/winsup.api/ltp/lseek03.c @@ -129,7 +129,7 @@ char fname[255]; int fd; int Rec_sigsys = 0; -int Whences[] = { 4, -1, 7 }; +int Whences[] = { 5, -1, 7 }; int main(int ac, char **av) diff --git a/winsup/testsuite/winsup.api/ltp/mmap02.c b/winsup/testsuite/winsup.api/ltp/mmap02.c index b96bdb4529..ca9f4d9569 100644 --- a/winsup/testsuite/winsup.api/ltp/mmap02.c +++ b/winsup/testsuite/winsup.api/ltp/mmap02.c @@ -118,11 +118,12 @@ main(int ac, char **av) * Call mmap to map the temporary file 'TEMPFILE' * with read access. */ - TEST(mmap(0, page_sz, PROT_READ, - MAP_FILE|MAP_SHARED, fildes, 0)); + errno = 0; + addr = mmap(0, page_sz, PROT_READ, + MAP_FILE|MAP_SHARED, fildes, 0); /* Check for the return value of mmap() */ - if (TEST_RETURN == (int)MAP_FAILED) { + if (addr == MAP_FAILED) { tst_resm(TFAIL, "mmap() Failed on %s, errno=%d : %s", TEMPFILE, errno, strerror(errno)); continue; @@ -132,9 +133,6 @@ main(int ac, char **av) * executed without (-f) option. */ if (STD_FUNCTIONAL_TEST) { - /* Get the mmap return value */ - addr = (char *)TEST_RETURN; - /* * Read the file contents into the dummy * string. diff --git a/winsup/testsuite/winsup.api/ltp/mmap03.c b/winsup/testsuite/winsup.api/ltp/mmap03.c index fba512c287..5de5435d3d 100644 --- a/winsup/testsuite/winsup.api/ltp/mmap03.c +++ b/winsup/testsuite/winsup.api/ltp/mmap03.c @@ -121,11 +121,12 @@ main(int ac, char **av) * Call mmap to map the temporary file 'TEMPFILE' * with execute access. */ - TEST(mmap(0, page_sz, PROT_EXEC, - MAP_FILE|MAP_SHARED, fildes, 0)); + errno = 0; + addr = mmap(0, page_sz, PROT_EXEC, + MAP_FILE|MAP_SHARED, fildes, 0); /* Check for the return value of mmap() */ - if (TEST_RETURN == (int)MAP_FAILED) { + if (addr == MAP_FAILED) { tst_resm(TFAIL, "mmap() Failed on %s, errno=%d : %s", TEMPFILE, errno, strerror(errno)); continue; @@ -135,9 +136,6 @@ main(int ac, char **av) * executed without (-f) option. */ if (STD_FUNCTIONAL_TEST) { - /* Get the mmap return value */ - addr = (char *)TEST_RETURN; - /* * Read the file contents into the dummy * variable. diff --git a/winsup/testsuite/winsup.api/ltp/mmap04.c b/winsup/testsuite/winsup.api/ltp/mmap04.c index dbe25aefdc..e69d15a97b 100644 --- a/winsup/testsuite/winsup.api/ltp/mmap04.c +++ b/winsup/testsuite/winsup.api/ltp/mmap04.c @@ -121,11 +121,12 @@ main(int ac, char **av) * Call mmap to map the temporary file 'TEMPFILE' * with read and execute access. */ - TEST(mmap(0, page_sz, PROT_READ|PROT_EXEC, - MAP_FILE|MAP_SHARED, fildes, 0)); + errno = 0; + addr = mmap(0, page_sz, PROT_READ|PROT_EXEC, + MAP_FILE|MAP_SHARED, fildes, 0); /* Check for the return value of mmap() */ - if (TEST_RETURN == (int)MAP_FAILED) { + if (addr == MAP_FAILED) { tst_resm(TFAIL, "mmap() Failed on %s, errno=%d : %s", TEMPFILE, errno, strerror(errno)); continue; @@ -136,9 +137,6 @@ main(int ac, char **av) * executed without (-f) option. */ if (STD_FUNCTIONAL_TEST) { - /* Get the mmap return value */ - addr = (char *)TEST_RETURN; - /* * Read the file contents into the dummy * variable. diff --git a/winsup/testsuite/winsup.api/ltp/mmap05.c b/winsup/testsuite/winsup.api/ltp/mmap05.c index 6e75ee222f..600cd761e7 100644 --- a/winsup/testsuite/winsup.api/ltp/mmap05.c +++ b/winsup/testsuite/winsup.api/ltp/mmap05.c @@ -125,12 +125,12 @@ main(int ac, char **av) * Call mmap to map the temporary file 'TEMPFILE' * with no access. */ - - TEST(mmap(0, page_sz, PROT_NONE, - MAP_FILE|MAP_SHARED, fildes, 0)); + errno = 0; + addr = mmap(0, page_sz, PROT_NONE, + MAP_FILE|MAP_SHARED, fildes, 0); /* Check for the return value of mmap() */ - if (TEST_RETURN == (int)MAP_FAILED) { + if (addr == MAP_FAILED) { tst_resm(TFAIL, "mmap() Failed on %s, errno=%d : %s", TEMPFILE, errno, strerror(errno)); continue; @@ -264,7 +264,7 @@ setup() * is not accessible. */ void -sig_handler(sig) +sig_handler(int sig) { if (sig == SIGSEGV) { /* set the global variable and jump back */ diff --git a/winsup/testsuite/winsup.api/ltp/mmap06.c b/winsup/testsuite/winsup.api/ltp/mmap06.c index c099f8c335..d089f900ba 100644 --- a/winsup/testsuite/winsup.api/ltp/mmap06.c +++ b/winsup/testsuite/winsup.api/ltp/mmap06.c @@ -121,11 +121,13 @@ main(int ac, char **av) * Call mmap to map the temporary file 'TEMPFILE' * with read access. */ - TEST(mmap(0, page_sz, PROT_READ, - MAP_FILE|MAP_SHARED, fildes, 0)); + errno = 0; + addr = mmap(0, page_sz, PROT_READ, + MAP_FILE|MAP_SHARED, fildes, 0); + TEST_ERRNO = errno; /* Check for the return value of mmap() */ - if (TEST_RETURN != (int)MAP_FAILED) { + if (addr != MAP_FAILED) { tst_resm(TFAIL, "mmap() returned invalid value, " "expected: -1"); /* Unmap the mapped memory */ diff --git a/winsup/testsuite/winsup.api/ltp/mmap07.c b/winsup/testsuite/winsup.api/ltp/mmap07.c index 6e3bb51128..4be6129e6e 100644 --- a/winsup/testsuite/winsup.api/ltp/mmap07.c +++ b/winsup/testsuite/winsup.api/ltp/mmap07.c @@ -122,11 +122,13 @@ main(int ac, char **av) * Call mmap to map the temporary file 'TEMPFILE' * with write access. */ - TEST(mmap(0, page_sz, PROT_WRITE, - MAP_FILE|MAP_PRIVATE, fildes, 0)); + errno = 0; + addr = mmap(0, page_sz, PROT_WRITE, + MAP_FILE|MAP_PRIVATE, fildes, 0); + TEST_ERRNO = errno; /* Check for the return value of mmap() */ - if (TEST_RETURN != (int)MAP_FAILED) { + if (addr != MAP_FAILED) { tst_resm(TFAIL, "mmap() returned invalid value, " "expected: -1"); /* Unmap the mapped memory */ diff --git a/winsup/testsuite/winsup.api/ltp/mmap08.c b/winsup/testsuite/winsup.api/ltp/mmap08.c index 543c5397be..49b6471e58 100644 --- a/winsup/testsuite/winsup.api/ltp/mmap08.c +++ b/winsup/testsuite/winsup.api/ltp/mmap08.c @@ -117,11 +117,13 @@ main(int ac, char **av) * Call mmap to map the temporary file 'TEMPFILE' * which is already closed. so, fildes is not valid. */ - TEST(mmap(0, page_sz, PROT_WRITE, - MAP_FILE|MAP_SHARED, fildes, 0)); + errno = 0; + addr = mmap(0, page_sz, PROT_WRITE, + MAP_FILE|MAP_SHARED, fildes, 0); + TEST_ERRNO = errno; /* Check for the return value of mmap() */ - if (TEST_RETURN != (int)MAP_FAILED) { + if (addr != MAP_FAILED) { tst_resm(TFAIL, "mmap() returned invalid value, " "expected: -1"); /* Unmap the mapped memory */ diff --git a/winsup/testsuite/winsup.api/ltp/symlink01.c b/winsup/testsuite/winsup.api/ltp/symlink01.c index 54a24b87fa..186a85b4e1 100644 --- a/winsup/testsuite/winsup.api/ltp/symlink01.c +++ b/winsup/testsuite/winsup.api/ltp/symlink01.c @@ -488,7 +488,7 @@ time_t a_time_value = 100; const char *TCID = NULL; char *Selectedtests = NULL; /* Name (tcid) of selected test cases */ char test_msg[BUFMAX]; -char full_path[PATH_MAX+1]; +char full_path[PATH_MAX+1+1]; /* Add one for '\0' and another to exceed the PATH_MAX limit, see creat_path_max() */ extern int Tst_count; extern char *TESTDIR; extern char *strrchr(); diff --git a/winsup/testsuite/winsup.api/ltp/umask03.c b/winsup/testsuite/winsup.api/ltp/umask03.c index 341da75070..5209f051cb 100644 --- a/winsup/testsuite/winsup.api/ltp/umask03.c +++ b/winsup/testsuite/winsup.api/ltp/umask03.c @@ -19,7 +19,7 @@ /* * NAME - * umask01.c + * umask03.c * * DESCRIPTION * Check that umask changes the mask, and that the previous @@ -30,7 +30,7 @@ * corresponds to the previous value set. * * USAGE: - * umask01 [-c n] [-i n] [-I x] [-P x] [-t] + * umask03 [-c n] [-i n] [-I x] [-P x] [-t] * where, -c n : Run n copies concurrently. * -i n : Execute test n times. * -I x : Execute test for x seconds. @@ -51,7 +51,7 @@ #include #include -const char *TCID = "umask01"; +const char *TCID = "umask03"; int TST_TOTAL = 1; extern int Tst_count; @@ -68,6 +68,7 @@ main(int argc, char **argv) struct stat statbuf; unsigned mskval = 0000; + int failcnt = 0; int fildes, i; unsigned low9mode; @@ -99,12 +100,13 @@ main(int argc, char **argv) } else { low9mode = statbuf.st_mode & 0777; if (low9mode != (~mskval & 0777)) { - tst_brkm(TBROK, cleanup, - "got %0 expected %o" - "mask didnot take", + tst_resm(TFAIL, + "got mode %o expected %o " + "mask %o did not take", low9mode, - (~mskval & 0777)); - /*NOTREACHED*/ + (~mskval & 0777), + mskval); + failcnt++; } else { tst_resm(TPASS, "Test " "condition: %d, umask: " @@ -114,6 +116,9 @@ main(int argc, char **argv) } close(fildes); } + if (!failcnt) + tst_resm(TPASS, "umask correctly returns the " + "previous value for all masks"); } cleanup(); /*NOTREACHED*/ diff --git a/winsup/testsuite/winsup.api/mmaptest03.c b/winsup/testsuite/winsup.api/mmaptest03.c index 8046f0bf84..e28e0f251b 100644 --- a/winsup/testsuite/winsup.api/mmaptest03.c +++ b/winsup/testsuite/winsup.api/mmaptest03.c @@ -145,7 +145,7 @@ main(int argc, char **argv) unlink ("y.txt"); if (!WIFEXITED (status) || WEXITSTATUS (status)) { - printf ("forked process exited with status %p\n", (char *) status); + printf ("forked process exited with status %x\n", status); return 1; } } diff --git a/winsup/testsuite/winsup.api/pthread/cancel2.c b/winsup/testsuite/winsup.api/pthread/cancel2.c index 14889313ed..19902dc0f8 100644 --- a/winsup/testsuite/winsup.api/pthread/cancel2.c +++ b/winsup/testsuite/winsup.api/pthread/cancel2.c @@ -96,7 +96,7 @@ mythread(void * arg) pthread_testcancel(); } - return (void *) result; + return (void *) (size_t)result; } int @@ -156,17 +156,17 @@ main() for (i = 1; i <= NUMTHREADS; i++) { int fail = 0; - int result = 0; + void *result = 0; - assert(pthread_join(t[i], (void **) &result) == 0); - fail = (result != (int) PTHREAD_CANCELED); + assert(pthread_join(t[i], &result) == 0); + fail = (result != PTHREAD_CANCELED); if (fail) { fprintf(stderr, "Thread %d: started %d: location %d: cancel type %s\n", i, threadbag[i].started, result, - ((result % 2) == 0) ? "ASYNCHRONOUS" : "DEFERRED"); + (((int)(size_t)result % 2) == 0) ? "ASYNCHRONOUS" : "DEFERRED"); } failed |= fail; } diff --git a/winsup/testsuite/winsup.api/pthread/cancel3.c b/winsup/testsuite/winsup.api/pthread/cancel3.c index 3ac03e4b64..8ed7d529be 100644 --- a/winsup/testsuite/winsup.api/pthread/cancel3.c +++ b/winsup/testsuite/winsup.api/pthread/cancel3.c @@ -61,7 +61,7 @@ static bag_t threadbag[NUMTHREADS + 1]; void * mythread(void * arg) { - int result = ((int)PTHREAD_CANCELED + 1); + void* result = (void*)((int)(size_t)PTHREAD_CANCELED + 1); bag_t * bag = (bag_t *) arg; assert(bag == &threadbag[bag->threadnum]); @@ -75,13 +75,27 @@ mythread(void * arg) assert(pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL) == 0); /* - * We wait up to 10 seconds, waking every 0.1 seconds, - * for a cancelation to be applied to us. + * We wait up to 30 seconds for a cancelation to be applied to us. */ - for (bag->count = 0; bag->count < 100; bag->count++) - Sleep(100); + for (bag->count = 0; bag->count < 30; bag->count++) + { + /* Busy wait to avoid Sleep(), since we can't asynchronous cancel inside a + kernel function. (This is still somewhat fragile as if the async cancel + can fail if it happens to occur while we're inside the kernel function + that time() calls...) */ + time_t start = time(NULL); + while ((time(NULL) - start) < 1) + { + int i; + for (i = 0; i < 1E7; i++) + __asm__ volatile ("pause":::); + } + } + + /* Notice if asynchronous cancel got deferred */ + pthread_testcancel(); - return (void *) result; + return result; } int @@ -90,6 +104,7 @@ main() int failed = 0; int i; pthread_t t[NUMTHREADS + 1]; + int ran_to_completion = 0; assert((t[0] = pthread_self()) != NULL); @@ -136,27 +151,38 @@ main() for (i = 1; i <= NUMTHREADS; i++) { int fail = 0; - int result = 0; + void *result = 0; /* * The thread does not contain any cancelation points, so * a return value of PTHREAD_CANCELED confirms that async * cancelation succeeded. */ - assert(pthread_join(t[i], (void **) &result) == 0); + assert(pthread_join(t[i], &result) == 0); - fail = (result != (int) PTHREAD_CANCELED); + fail = (result != PTHREAD_CANCELED); if (fail) { - fprintf(stderr, "Thread %d: started %d: count %d\n", + fprintf(stderr, "Thread %d: started %d: count %d: result %d \n", i, threadbag[i].started, - threadbag[i].count); + threadbag[i].count, + result); } + + if (threadbag[i].count >= 30) + ran_to_completion++; + failed = (failed || fail); } + if (ran_to_completion >= 10) + { + fprintf(stderr, "All threads ran to completion, async cancellation never happened\n"); + failed = 1; + } + assert(!failed); /* diff --git a/winsup/testsuite/winsup.api/pthread/cancel4.c b/winsup/testsuite/winsup.api/pthread/cancel4.c index d6b2ffadf8..d8151891bf 100644 --- a/winsup/testsuite/winsup.api/pthread/cancel4.c +++ b/winsup/testsuite/winsup.api/pthread/cancel4.c @@ -66,7 +66,7 @@ static bag_t threadbag[NUMTHREADS + 1]; void * mythread(void * arg) { - int result = ((int)PTHREAD_CANCELED + 1); + void* result = (void*)((int)(size_t)PTHREAD_CANCELED + 1); bag_t * bag = (bag_t *) arg; assert(bag == &threadbag[bag->threadnum]); @@ -86,7 +86,7 @@ mythread(void * arg) for (bag->count = 0; bag->count < 100; bag->count++) Sleep(100); - return (void *) result; + return result; } int @@ -141,16 +141,16 @@ main() for (i = 1; i <= NUMTHREADS; i++) { int fail = 0; - int result = 0; + void* result = 0; /* * The thread does not contain any cancelation points, so * a return value of PTHREAD_CANCELED indicates that async * cancelation occurred. */ - assert(pthread_join(t[i], (void **) &result) == 0); + assert(pthread_join(t[i], &result) == 0); - fail = (result == (int) PTHREAD_CANCELED); + fail = (result == PTHREAD_CANCELED); if (fail) { diff --git a/winsup/testsuite/winsup.api/pthread/cancel5.c b/winsup/testsuite/winsup.api/pthread/cancel5.c index 9dd579543a..dd5be7beaa 100644 --- a/winsup/testsuite/winsup.api/pthread/cancel5.c +++ b/winsup/testsuite/winsup.api/pthread/cancel5.c @@ -62,7 +62,7 @@ static bag_t threadbag[NUMTHREADS + 1]; void * mythread(void * arg) { - int result = ((int)PTHREAD_CANCELED + 1); + void* result = (void*)((int)(size_t)PTHREAD_CANCELED + 1); bag_t * bag = (bag_t *) arg; assert(bag == &threadbag[bag->threadnum]); @@ -76,13 +76,27 @@ mythread(void * arg) assert(pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL) == 0); /* - * We wait up to 10 seconds, waking every 0.1 seconds, - * for a cancelation to be applied to us. + * We wait up to 30 seconds for a cancelation to be applied to us. */ - for (bag->count = 0; bag->count < 100; bag->count++) - Sleep(100); + for (bag->count = 0; bag->count < 30; bag->count++) + { + /* Busy wait to avoid Sleep(), since we can't asynchronous cancel inside a + kernel function. (This is still somewhat fragile as if the async cancel + can fail if it happens to occur while we're inside the kernel function + that time() calls...) */ + time_t start = time(NULL); + while ((time(NULL) - start) < 1) + { + int i; + for (i = 0; i < 1E7; i++) + __asm__ volatile ("pause":::); + } + } + + /* Notice if asynchronous cancel got deferred */ + pthread_testcancel(); - return (void *) result; + return result; } int @@ -91,12 +105,13 @@ main() int failed = 0; int i; pthread_t t[NUMTHREADS + 1]; + int ran_to_completion = 0; for (i = 1; i <= NUMTHREADS; i++) { threadbag[i].started = 0; threadbag[i].threadnum = i; - assert(pthread_create(&t[i], NULL, mythread, (void *) &threadbag[i]) == 0); + assert(pthread_create(&t[i], NULL, mythread, &threadbag[i]) == 0); } /* @@ -135,27 +150,38 @@ main() for (i = 1; i <= NUMTHREADS; i++) { int fail = 0; - int result = 0; + void* result = (void*)((int)(size_t)PTHREAD_CANCELED + 1); /* * The thread does not contain any cancelation points, so * a return value of PTHREAD_CANCELED confirms that async * cancelation succeeded. */ - assert(pthread_join(t[i], (void **) &result) == 0); + assert(pthread_join(t[i], &result) == 0); - fail = (result != (int) PTHREAD_CANCELED); + fail = (result != PTHREAD_CANCELED); if (fail) { - fprintf(stderr, "Thread %d: started %d: count %d\n", + fprintf(stderr, "Thread %d: started %d: count %d: result %d\n", i, threadbag[i].started, - threadbag[i].count); + threadbag[i].count, + result); } + + if (threadbag[i].count >= 30) + ran_to_completion++; + failed = (failed || fail); } + if (ran_to_completion >= 10) + { + fprintf(stderr, "All threads ran to completion, async cancellation never happened\n"); + failed = TRUE; + } + assert(!failed); /* diff --git a/winsup/testsuite/winsup.api/pthread/cleanup2.c b/winsup/testsuite/winsup.api/pthread/cleanup2.c index bcbaad3a77..75c239a006 100644 --- a/winsup/testsuite/winsup.api/pthread/cleanup2.c +++ b/winsup/testsuite/winsup.api/pthread/cleanup2.c @@ -84,7 +84,7 @@ mythread(void * arg) pthread_cleanup_pop(1); - return (void *) result; + return (void *) (size_t) result; } int @@ -129,18 +129,18 @@ main() for (i = 1; i <= NUMTHREADS; i++) { int fail = 0; - int result = 0; + void* result = 0; - assert(pthread_join(t[i], (void **) &result) == 0); + assert(pthread_join(t[i], &result) == 0); - fail = (result != 0); + fail = ((int)(size_t)result != 0); if (fail) { fprintf(stderr, "Thread %d: started %d: result: %d\n", i, threadbag[i].started, - result); + (int)(size_t)result); } failed = (failed || fail); } diff --git a/winsup/testsuite/winsup.api/pthread/cleanup3.c b/winsup/testsuite/winsup.api/pthread/cleanup3.c index f8201faa0f..6fea8dc936 100644 --- a/winsup/testsuite/winsup.api/pthread/cleanup3.c +++ b/winsup/testsuite/winsup.api/pthread/cleanup3.c @@ -87,7 +87,7 @@ mythread(void * arg) pthread_cleanup_pop(0); - return (void *) result; + return (void *) (size_t)result; } int @@ -132,9 +132,9 @@ main() for (i = 1; i <= NUMTHREADS; i++) { int fail = 0; - int result = 0; + void* result = 0; - assert(pthread_join(t[i], (void **) &result) == 0); + assert(pthread_join(t[i], &result) == 0); fail = (result != 0); @@ -143,7 +143,7 @@ main() fprintf(stderr, "Thread %d: started %d: result: %d\n", i, threadbag[i].started, - result); + (int)(size_t)result); } failed = (failed || fail); } diff --git a/winsup/testsuite/winsup.api/pthread/condvar2_1.c b/winsup/testsuite/winsup.api/pthread/condvar2_1.c index da34162036..1aa4fed9ac 100644 --- a/winsup/testsuite/winsup.api/pthread/condvar2_1.c +++ b/winsup/testsuite/winsup.api/pthread/condvar2_1.c @@ -69,7 +69,7 @@ main() { int i; pthread_t t[NUMTHREADS + 1]; - int result = 0; + void* result = 0; struct timeb currSysTime; const DWORD NANOSEC_PER_MILLISEC = 1000000; @@ -89,19 +89,19 @@ main() for (i = 1; i <= NUMTHREADS; i++) { - assert(pthread_create(&t[i], NULL, mythread, (void *) i) == 0); + assert(pthread_create(&t[i], NULL, mythread, (void *)(size_t)i) == 0); } assert(pthread_mutex_unlock(&mutex) == 0); for (i = 1; i <= NUMTHREADS; i++) { - assert(pthread_join(t[i], (void **) &result) == 0); - assert(result == i); + assert(pthread_join(t[i], &result) == 0); + assert((int)(size_t)result == i); } - result = pthread_cond_destroy(&cv); - assert(result == 0); + int result2 = pthread_cond_destroy(&cv); + assert(result2 == 0); return 0; } diff --git a/winsup/testsuite/winsup.api/pthread/condvar3_1.c b/winsup/testsuite/winsup.api/pthread/condvar3_1.c index b08b048894..a4653ebc8d 100644 --- a/winsup/testsuite/winsup.api/pthread/condvar3_1.c +++ b/winsup/testsuite/winsup.api/pthread/condvar3_1.c @@ -89,7 +89,7 @@ main() { int i; pthread_t t[NUMTHREADS + 1]; - int result = 0; + void* result = 0; struct timeb currSysTime; const DWORD NANOSEC_PER_MILLISEC = 1000000; @@ -110,7 +110,7 @@ main() for (i = 1; i <= NUMTHREADS; i++) { - assert(pthread_create(&t[i], NULL, mythread, (void *) i) == 0); + assert(pthread_create(&t[i], NULL, mythread, (void *)(size_t)i) == 0); } do { @@ -127,8 +127,8 @@ main() for (i = 1; i <= NUMTHREADS; i++) { - assert(pthread_join(t[i], (void **) &result) == 0); - assert(result == i); + assert(pthread_join(t[i], &result) == 0); + assert((int)(size_t)result == i); } printf("awk = %d\n", awoken); @@ -138,8 +138,8 @@ main() assert(signaled == awoken); assert(timedout == NUMTHREADS - signaled); - result = pthread_cond_destroy(&cv); - assert(result == 0); + int result2 = pthread_cond_destroy(&cv); + assert(result2 == 0); return 0; } diff --git a/winsup/testsuite/winsup.api/pthread/condvar3_2.c b/winsup/testsuite/winsup.api/pthread/condvar3_2.c index 57e7eb4391..b08d8e256d 100644 --- a/winsup/testsuite/winsup.api/pthread/condvar3_2.c +++ b/winsup/testsuite/winsup.api/pthread/condvar3_2.c @@ -66,7 +66,7 @@ mythread(void * arg) abstime2.tv_sec = abstime.tv_sec; - if ((int) arg % 3 == 0) + if ((int) (size_t)arg % 3 == 0) { abstime2.tv_sec += 2; } @@ -91,7 +91,7 @@ main() { int i; pthread_t t[NUMTHREADS + 1]; - int result = 0; + void* result = 0; struct timeb currSysTime; const DWORD NANOSEC_PER_MILLISEC = 1000000; @@ -109,15 +109,15 @@ main() for (i = 1; i <= NUMTHREADS; i++) { - assert(pthread_create(&t[i], NULL, mythread, (void *) i) == 0); + assert(pthread_create(&t[i], NULL, mythread, (void *)(size_t)i) == 0); } assert(pthread_mutex_unlock(&mutex) == 0); for (i = 1; i <= NUMTHREADS; i++) { - assert(pthread_join(t[i], (void **) &result) == 0); - assert(result == i); + assert(pthread_join(t[i], &result) == 0); + assert((int)(size_t)result == i); /* * Approximately 2/3rds of the threads are expected to time out. * Signal the remainder after some threads have woken up and exited @@ -132,8 +132,8 @@ main() assert(awoken == NUMTHREADS - timedout); - result = pthread_cond_destroy(&cv); - assert(result == 0); + int result2 = pthread_cond_destroy(&cv); + assert(result2 == 0); return 0; } diff --git a/winsup/testsuite/winsup.api/pthread/exit3.c b/winsup/testsuite/winsup.api/pthread/exit3.c index 0b6ec31c54..7baf7bb10f 100644 --- a/winsup/testsuite/winsup.api/pthread/exit3.c +++ b/winsup/testsuite/winsup.api/pthread/exit3.c @@ -24,7 +24,7 @@ main(int argc, char * argv[]) /* Create a few threads and then exit. */ for (i = 0; i < 4; i++) { - assert(pthread_create(&id[i], NULL, func, (void *) i) == 0); + assert(pthread_create(&id[i], NULL, func, (void *)(size_t)i) == 0); } Sleep(1000); diff --git a/winsup/testsuite/winsup.api/pthread/inherit1.c b/winsup/testsuite/winsup.api/pthread/inherit1.c index a909eb763a..f036462aa3 100644 --- a/winsup/testsuite/winsup.api/pthread/inherit1.c +++ b/winsup/testsuite/winsup.api/pthread/inherit1.c @@ -47,7 +47,24 @@ void * func(void * arg) struct sched_param param; assert(pthread_getschedparam(pthread_self(), &policy, ¶m) == 0); - return (void *) param.sched_priority; + return (void *) (size_t)param.sched_priority; +} + +// Windows only supports 7 thread priority levels, which we map onto the 32 +// required by POSIX. The exact mapping also depends on the overall process +// priority class. So only a subset of values will be returned exactly by +// pthread_getschedparam() after pthread_setschedparam(). +int doable_pri(int pri) +{ + switch (GetPriorityClass(GetCurrentProcess())) + { + case BELOW_NORMAL_PRIORITY_CLASS: + return (pri == 2) || (pri == 8) || (pri == 10) || (pri == 12) || (pri == 14) || (pri == 16) || (pri == 30); + case NORMAL_PRIORITY_CLASS: + return (pri == 2) || (pri == 12) || (pri == 14) || (pri == 16) || (pri == 18) || (pri == 20) || (pri == 30); + } + + return TRUE; } int @@ -65,8 +82,8 @@ main() int policy; int inheritsched = -1; - assert((maxPrio = sched_get_priority_max(SCHED_OTHER)) != -1); - assert((minPrio = sched_get_priority_min(SCHED_OTHER)) != -1); + assert((maxPrio = sched_get_priority_max(SCHED_FIFO)) != -1); + assert((minPrio = sched_get_priority_min(SCHED_FIFO)) != -1); assert(pthread_attr_init(&attr) == 0); assert(pthread_attr_setinheritsched(&attr, PTHREAD_INHERIT_SCHED) == 0); @@ -78,10 +95,12 @@ main() mainParam.sched_priority = prio; /* Change the main thread priority */ - assert(pthread_setschedparam(mainThread, SCHED_OTHER, &mainParam) == 0); + assert(pthread_setschedparam(mainThread, SCHED_FIFO, &mainParam) == 0); assert(pthread_getschedparam(mainThread, &policy, &mainParam) == 0); - assert(policy == SCHED_OTHER); - assert(mainParam.sched_priority == prio); + assert(policy == SCHED_FIFO); + + if (doable_pri(prio)) + assert(mainParam.sched_priority == prio); for (param.sched_priority = prio; param.sched_priority <= maxPrio; @@ -91,7 +110,7 @@ main() assert(pthread_attr_setschedparam(&attr, ¶m) == 0); assert(pthread_create(&t, &attr, func, NULL) == 0); pthread_join(t, &result); - assert((int) result == mainParam.sched_priority); + assert((int)(size_t) result == mainParam.sched_priority); } } diff --git a/winsup/testsuite/winsup.api/pthread/join1.c b/winsup/testsuite/winsup.api/pthread/join1.c index d74e0c484b..8a9d17669f 100644 --- a/winsup/testsuite/winsup.api/pthread/join1.c +++ b/winsup/testsuite/winsup.api/pthread/join1.c @@ -9,7 +9,7 @@ void * func(void * arg) { - int i = (int) arg; + int i = (int)(size_t)arg; Sleep(i * 500); @@ -24,12 +24,12 @@ main(int argc, char * argv[]) { pthread_t id[4]; int i; - int result; + void* result = (void*)-1; /* Create a few threads and then exit. */ for (i = 0; i < 4; i++) { - assert(pthread_create(&id[i], NULL, func, (void *) i) == 0); + assert(pthread_create(&id[i], NULL, func, (void *)(size_t)i) == 0); } /* Some threads will finish before they are joined, some after. */ @@ -37,9 +37,9 @@ main(int argc, char * argv[]) for (i = 0; i < 4; i++) { - assert(pthread_join(id[i], (void **) &result) == 0); + assert(pthread_join(id[i], &result) == 0); #if ! defined (__MINGW32__) || defined (__MSVCRT__) - assert(result == i); + assert((int)(size_t)result == i); #else # warning pthread_join not fully supported in this configuration. assert(result == 0); diff --git a/winsup/testsuite/winsup.api/pthread/join2.c b/winsup/testsuite/winsup.api/pthread/join2.c index cdc8ca2d9a..9a8de46193 100644 --- a/winsup/testsuite/winsup.api/pthread/join2.c +++ b/winsup/testsuite/winsup.api/pthread/join2.c @@ -18,21 +18,21 @@ main(int argc, char * argv[]) { pthread_t id[4]; int i; - int result; + void* result = (void*)-1; /* Create a few threads and then exit. */ for (i = 0; i < 4; i++) { - assert(pthread_create(&id[i], NULL, func, (void *) i) == 0); + assert(pthread_create(&id[i], NULL, func, (void *)(size_t)i) == 0); } for (i = 0; i < 4; i++) { - assert(pthread_join(id[i], (void **) &result) == 0); + assert(pthread_join(id[i], &result) == 0); #if ! defined (__MINGW32__) || defined (__MSVCRT__) /* CRTDLL _beginthread doesn't support return value, so the assertion is guaranteed to fail. */ - assert(result == i); + assert((int)(size_t)result == i); #endif } diff --git a/winsup/testsuite/winsup.api/pthread/mutex4.c b/winsup/testsuite/winsup.api/pthread/mutex4.c index 8a983fee92..f4d31adb5a 100644 --- a/winsup/testsuite/winsup.api/pthread/mutex4.c +++ b/winsup/testsuite/winsup.api/pthread/mutex4.c @@ -17,7 +17,7 @@ static pthread_mutex_t mutex1; void * unlocker(void * arg) { - int expectedResult = (int) arg; + int expectedResult = (int)(size_t)arg; wasHere++; assert(pthread_mutex_unlock(&mutex1) == expectedResult); diff --git a/winsup/testsuite/winsup.api/pthread/mutex5.c b/winsup/testsuite/winsup.api/pthread/mutex5.c index 7029da12fc..6d24275f17 100644 --- a/winsup/testsuite/winsup.api/pthread/mutex5.c +++ b/winsup/testsuite/winsup.api/pthread/mutex5.c @@ -23,7 +23,7 @@ main() { assert(pthread_mutexattr_init(&mxAttr) == 0); assert(pthread_mutexattr_gettype(&mxAttr, &mxType) == 0); - assert(mxType == PTHREAD_MUTEX_ERRORCHECK); + assert(mxType == PTHREAD_MUTEX_NORMAL); } return 0; diff --git a/winsup/testsuite/winsup.api/pthread/mutex7.c b/winsup/testsuite/winsup.api/pthread/mutex7.c index d2c9f8bee7..6acb12317f 100644 --- a/winsup/testsuite/winsup.api/pthread/mutex7.c +++ b/winsup/testsuite/winsup.api/pthread/mutex7.c @@ -2,7 +2,7 @@ * mutex7.c * * Test the default (type not set) mutex type. - * Should be the same as PTHREAD_MUTEX_ERRORCHECK. + * Should be the same as PTHREAD_MUTEX_NORMAL. * Thread locks then trylocks mutex (attempted recursive lock). * The thread should lock first time and EBUSY second time. * @@ -25,7 +25,6 @@ void * locker(void * arg) assert(pthread_mutex_trylock(&mutex) == EBUSY); lockCount++; assert(pthread_mutex_unlock(&mutex) == 0); - assert(pthread_mutex_unlock(&mutex) == EPERM); return 0; } diff --git a/winsup/testsuite/winsup.api/pthread/mutex7d.c b/winsup/testsuite/winsup.api/pthread/mutex7d.c index 906d0f043a..98b74fc5b2 100644 --- a/winsup/testsuite/winsup.api/pthread/mutex7d.c +++ b/winsup/testsuite/winsup.api/pthread/mutex7d.c @@ -2,7 +2,7 @@ * mutex7d.c * * Test the default (type not set) mutex type. - * Should be the same as PTHREAD_MUTEX_ERRORCHECK. + * Should be the same as PTHREAD_MUTEX_NORMAL. * Thread locks then trylocks mutex (attempted recursive lock). * The thread should lock first time and EBUSY second time. * @@ -25,7 +25,6 @@ void * locker(void * arg) assert(pthread_mutex_trylock(&mutex) == EBUSY); lockCount++; assert(pthread_mutex_unlock(&mutex) == 0); - assert(pthread_mutex_unlock(&mutex) == EPERM); return 0; } diff --git a/winsup/testsuite/winsup.api/pthread/mutex7n.c b/winsup/testsuite/winsup.api/pthread/mutex7n.c index e9a36fec0a..a04792b612 100644 --- a/winsup/testsuite/winsup.api/pthread/mutex7n.c +++ b/winsup/testsuite/winsup.api/pthread/mutex7n.c @@ -29,7 +29,6 @@ void * locker(void * arg) assert(pthread_mutex_trylock(&mutex) == EBUSY); lockCount++; assert(pthread_mutex_unlock(&mutex) == 0); - assert(pthread_mutex_unlock(&mutex) == EPERM); return (void *) 555; } diff --git a/winsup/testsuite/winsup.api/pthread/priority1.c b/winsup/testsuite/winsup.api/pthread/priority1.c index a311028952..135f77d76c 100644 --- a/winsup/testsuite/winsup.api/pthread/priority1.c +++ b/winsup/testsuite/winsup.api/pthread/priority1.c @@ -47,10 +47,27 @@ void * func(void * arg) struct sched_param param; assert(pthread_getschedparam(pthread_self(), &policy, ¶m) == 0); - assert(policy == SCHED_OTHER); - return (void *) param.sched_priority; + assert(policy == SCHED_FIFO); + return (void *)(size_t)param.sched_priority; } - + +// Windows only supports 7 thread priority levels, which we map onto the 32 +// required by POSIX. The exact mapping also depends on the overall process +// priority class. So only a subset of values will be returned exactly by +// pthread_getschedparam() after pthread_setschedparam(). +int doable_pri(int pri) +{ + switch (GetPriorityClass(GetCurrentProcess())) + { + case BELOW_NORMAL_PRIORITY_CLASS: + return (pri == 2) || (pri == 8) || (pri == 10) || (pri == 12) || (pri == 14) || (pri == 16) || (pri == 30); + case NORMAL_PRIORITY_CLASS: + return (pri == 2) || (pri == 12) || (pri == 14) || (pri == 16) || (pri == 18) || (pri == 20) || (pri == 30); + } + + return TRUE; +} + int main() { @@ -58,8 +75,10 @@ main() pthread_attr_t attr; void * result = NULL; struct sched_param param; - int maxPrio = sched_get_priority_max(SCHED_OTHER); - int minPrio = sched_get_priority_min(SCHED_OTHER); + int maxPrio = sched_get_priority_max(SCHED_FIFO); + int minPrio = sched_get_priority_min(SCHED_FIFO); + + assert((maxPrio - minPrio) >= 31); assert(pthread_attr_init(&attr) == 0); assert(pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED) == 0); @@ -71,7 +90,8 @@ main() assert(pthread_attr_setschedparam(&attr, ¶m) == 0); assert(pthread_create(&t, &attr, func, NULL) == 0); pthread_join(t, &result); - assert((int) result == param.sched_priority); + if (doable_pri(param.sched_priority)) + assert((int)(size_t) result == param.sched_priority); } return 0; diff --git a/winsup/testsuite/winsup.api/pthread/priority2.c b/winsup/testsuite/winsup.api/pthread/priority2.c index 4dcf3859fd..f084efadfd 100644 --- a/winsup/testsuite/winsup.api/pthread/priority2.c +++ b/winsup/testsuite/winsup.api/pthread/priority2.c @@ -51,18 +51,35 @@ void * func(void * arg) assert(pthread_mutex_lock(&startMx) == 0); assert(pthread_getschedparam(pthread_self(), &policy, ¶m) == 0); assert(pthread_mutex_unlock(&startMx) == 0); - assert(policy == SCHED_OTHER); - return (void *) param.sched_priority; + assert(policy == SCHED_FIFO); + return (void *) (size_t)param.sched_priority; } - + +// Windows only supports 7 thread priority levels, which we map onto the 32 +// required by POSIX. The exact mapping also depends on the overall process +// priority class. So only a subset of values will be returned exactly by +// pthread_getschedparam() after pthread_setschedparam(). +int doable_pri(int pri) +{ + switch (GetPriorityClass(GetCurrentProcess())) + { + case BELOW_NORMAL_PRIORITY_CLASS: + return (pri == 2) || (pri == 8) || (pri == 10) || (pri == 12) || (pri == 14) || (pri == 16) || (pri == 30); + case NORMAL_PRIORITY_CLASS: + return (pri == 2) || (pri == 12) || (pri == 14) || (pri == 16) || (pri == 18) || (pri == 20) || (pri == 30); + } + + return TRUE; +} + int main() { pthread_t t; void * result = NULL; struct sched_param param; - int maxPrio = sched_get_priority_max(SCHED_OTHER); - int minPrio = sched_get_priority_min(SCHED_OTHER); + int maxPrio = sched_get_priority_max(SCHED_FIFO); + int minPrio = sched_get_priority_min(SCHED_FIFO); for (param.sched_priority = minPrio; param.sched_priority <= maxPrio; @@ -70,10 +87,11 @@ main() { assert(pthread_mutex_lock(&startMx) == 0); assert(pthread_create(&t, NULL, func, NULL) == 0); - assert(pthread_setschedparam(t, SCHED_OTHER, ¶m) == 0); + assert(pthread_setschedparam(t, SCHED_FIFO, ¶m) == 0); assert(pthread_mutex_unlock(&startMx) == 0); pthread_join(t, &result); - assert((int) result == param.sched_priority); + if (doable_pri(param.sched_priority)) + assert((int)(size_t)result == param.sched_priority); } return 0; diff --git a/winsup/testsuite/winsup.api/pthread/rwlock6.c b/winsup/testsuite/winsup.api/pthread/rwlock6.c index d5f2320d04..870b7c264b 100644 --- a/winsup/testsuite/winsup.api/pthread/rwlock6.c +++ b/winsup/testsuite/winsup.api/pthread/rwlock6.c @@ -25,7 +25,7 @@ void * wrfunc(void * arg) ba = bankAccount; assert(pthread_rwlock_unlock(&rwlock1) == 0); - return ((void *) ba); + return ((void *)(size_t)ba); } void * rdfunc(void * arg) @@ -36,7 +36,7 @@ void * rdfunc(void * arg) ba = bankAccount; assert(pthread_rwlock_unlock(&rwlock1) == 0); - return ((void *) ba); + return ((void *)(size_t)ba); } int @@ -45,9 +45,9 @@ main() pthread_t wrt1; pthread_t wrt2; pthread_t rdt; - int wr1Result = 0; - int wr2Result = 0; - int rdResult = 0; + void* wr1Result = 0; + void* wr2Result = 0; + void* rdResult = 0; bankAccount = 0; @@ -57,13 +57,13 @@ main() Sleep(500); assert(pthread_create(&wrt2, NULL, wrfunc, NULL) == 0); - assert(pthread_join(wrt1, (void **) &wr1Result) == 0); - assert(pthread_join(rdt, (void **) &rdResult) == 0); - assert(pthread_join(wrt2, (void **) &wr2Result) == 0); + assert(pthread_join(wrt1, &wr1Result) == 0); + assert(pthread_join(rdt, &rdResult) == 0); + assert(pthread_join(wrt2, &wr2Result) == 0); - assert(wr1Result == 10); - assert(rdResult == 20); - assert(wr2Result == 20); + assert((int)(size_t)wr1Result == 10); + assert((int)(size_t)rdResult == 20); + assert((int)(size_t)wr2Result == 20); return 0; } diff --git a/winsup/testsuite/winsup.api/samples/sample-miscompile.c b/winsup/testsuite/winsup.api/samples/sample-miscompile.c deleted file mode 100644 index bc0d21d2e6..0000000000 --- a/winsup/testsuite/winsup.api/samples/sample-miscompile.c +++ /dev/null @@ -1 +0,0 @@ -foo bar grill diff --git a/winsup/testsuite/winsup.api/systemcall.c b/winsup/testsuite/winsup.api/systemcall.c index 91dd748c01..74bd6f8703 100644 --- a/winsup/testsuite/winsup.api/systemcall.c +++ b/winsup/testsuite/winsup.api/systemcall.c @@ -26,6 +26,14 @@ main (int argc, char **argv) fprintf (stderr, "couldn't redirect stdout to /dev/null, fd %d - %s\n", fd, strerror (errno)); exit (1); } + + n = system ("ls"); + if (n != 0) + { + fprintf (stderr, "system() (in parent) call returned %x\n", n); + exit (1); + } + if (pipe (fds)) { fprintf (stderr, "pipe call failed - %s\n", strerror (errno)); @@ -61,7 +69,7 @@ main (int argc, char **argv) } if (n != 0) { - fprintf (stderr, "system() call returned %p\n", (void *) n); + fprintf (stderr, "system() (in child) call returned %x\n", n); exit (1); } exit (0); diff --git a/winsup/testsuite/winsup.api/user_malloc.c b/winsup/testsuite/winsup.api/user_malloc.c index 8685f86abc..e2b1e0a926 100644 --- a/winsup/testsuite/winsup.api/user_malloc.c +++ b/winsup/testsuite/winsup.api/user_malloc.c @@ -133,11 +133,11 @@ ull * current = buffer; static int is_valid (void * ptr) { - unsigned int iptr = (unsigned int) ptr; + uintptr_t iptr = (uintptr_t) ptr; ull * ullptr = (ull *) ptr; iptr = (iptr / sizeof(ull)) * sizeof(ull); - if (iptr != (int) ptr) + if (iptr != (uintptr_t) ptr) return 0; if (--ullptr < buffer || ullptr[0] > SIZE || ullptr + ullptr[0] > current) return 0; diff --git a/winsup/testsuite/winsup.api/winsup.exp b/winsup/testsuite/winsup.api/winsup.exp deleted file mode 100644 index bc05713bd0..0000000000 --- a/winsup/testsuite/winsup.api/winsup.exp +++ /dev/null @@ -1,95 +0,0 @@ -source "site.exp" -source "$srcdir/winsup.api/known_bugs.tcl" - -if { ! [isnative] } { - verbose "skipping winsup.api because it's not native" - return -} - -set rv "" - -set ltp_includes "-I$ltp_includes" -set ltp_libs "$ltp_libs" - -set add_includes $ltp_includes -set add_libs $ltp_libs - -set test_filter "" - -set env(PATH) "$runtime_root:$env(PATH)" - -if { [info exists env(CYGWIN_TESTSUITE_TESTS)] } { - set test_filter "$env(CYGWIN_TESTSUITE_TESTS)" -} - -proc ws_spawn {cmd} { - global rv - verbose "running $cmd\n" - try { - set msg [exec -ignorestderr {*}$cmd "2>@1"] - set rv 0 - } trap CHILDSTATUS {results options} { - verbose "returned $::errorCode\n" - set msg $results - set rv 1 - } - verbose -log "$msg" - return $rv -} - -verbose "Filter: $test_filter" - -foreach src [lsort [glob -nocomplain $srcdir/$subdir/*.c $srcdir/$subdir/*/*.{cc,c}]] { - if { $test_filter != "" && ! [regexp $test_filter $src] } { - verbose -log "Skipping $src" - continue - } - - regsub "^$srcdir/$subdir/" $src "" testcase - regsub ".c$" $testcase "" base - regsub ".*/" $base "" basename - regsub "/" $base "-" base - - if { [lsearch -exact $xfail_list $basename] >= 0 } { - set xfail_expected 1 - setup_xfail "*-*-*" - } else { - set xfail_expected 0 - clear_xfail - } - - if [ file exists "$srcdir/$subdir/$basename.exp" ] then { - source "$srcdir/$subdir/$basename.exp" - } else { - ws_spawn "$CC -nodefaultlibs -mwin32 $CFLAGS $src $add_includes $add_libs $runtime_root/binmode.o -lgcc $runtime_root/libmsys0.a -lkernel32 -luser32 -o $base.exe" - if { $rv } { - fail "$testcase (compile)" - } else { - if { $verbose } { - set redirect_output "./$base.log" - } else { - set redirect_output /dev/null - } - file mkdir $tmpdir/$base - ws_spawn "$cygrun ./$base.exe $testdll_tmpdir/$base > $redirect_output" - file delete -force $tmpdir/$base - if { $rv } { - fail "$testcase (execute)" - if { $xfail_expected } { - catch { file delete "$base.exe" } err - if { $err != "" } { - note "error deleting $base.exe: $err" - } - } - } else { - pass "$testcase" - if { ! $xfail_expected } { - catch { file delete "$base.exe" } err - if { $err != "" } { - note "error deleting $base.exe: $err" - } - } - } - } - } -} diff --git a/winsup/utils/Makefile.am b/winsup/utils/Makefile.am index f10335eef5..57a4f377c5 100644 --- a/winsup/utils/Makefile.am +++ b/winsup/utils/Makefile.am @@ -31,6 +31,7 @@ bin_PROGRAMS = \ mkgroup \ mkpasswd \ mount \ + newgrp \ passwd \ pldd \ profiler \ @@ -87,10 +88,7 @@ pldd_LDADD = $(LDADD) -lpsapi profiler_CXXFLAGS = -I$(srcdir) -idirafter ${top_srcdir}/cygwin/local_includes -idirafter ${top_srcdir}/cygwin/include $(AM_CXXFLAGS) profiler_LDADD = $(LDADD) -lntdll cygps_LDADD = $(LDADD) -lpsapi -lntdll - -if HAVE_LIBSFRAME -dumper_LDADD += -lsframe -endif +newgrp_LDADD = $(LDADD) -luserenv if CROSS_BOOTSTRAP SUBDIRS = mingw diff --git a/winsup/utils/chattr.c b/winsup/utils/chattr.c index e3ab1fba80..4b074133cf 100644 --- a/winsup/utils/chattr.c +++ b/winsup/utils/chattr.c @@ -264,9 +264,7 @@ usage (FILE *stream) " 'n', 'Notindexed': file or directory is not to be indexed by the\n" " content indexing service\n" " 'e', 'Encrypted': file is encrypted\n" - " 'C', 'Casesensitive': directory is handled case sensitive\n" - " (Windows 10 1803 or later, local NTFS only,\n" - " WSL must be installed)\n"); + " 'C', 'Casesensitive': directory is handled case sensitive\n"); exit (stream == stdout ? 0 : 1); } diff --git a/winsup/utils/dumper.cc b/winsup/utils/dumper.cc index 1bbf394fd7..994f9b683c 100644 --- a/winsup/utils/dumper.cc +++ b/winsup/utils/dumper.cc @@ -142,7 +142,7 @@ dumper::sane () } void -print_section_name (bfd* abfd, asection* sect, PTR obj) +print_section_name (bfd* abfd, asection* sect, void* obj) { deb_printf (" %s", get_section_name (abfd, sect)); } diff --git a/winsup/utils/kill.cc b/winsup/utils/kill.cc index 05ecd13ac8..28473d1ef8 100644 --- a/winsup/utils/kill.cc +++ b/winsup/utils/kill.cc @@ -27,24 +27,26 @@ static struct option longopts[] = {"list", optional_argument, NULL, 'l'}, {"force", no_argument, NULL, 'f'}, {"signal", required_argument, NULL, 's'}, + {"table", no_argument, NULL, 'L'}, {"winpid", no_argument, NULL, 'W'}, {"version", no_argument, NULL, 'V'}, {NULL, 0, NULL, 0} }; -static char opts[] = "hl::fs:WV"; +static char opts[] = "hl::fs:LWV"; static void __attribute__ ((__noreturn__)) usage (FILE *where = stderr) { fprintf (where , "" "Usage: %1$s [-fW] [-signal] [-s signal] pid1 [pid2 ...]\n" - " %1$s -l [signal]\n" + " %1$s -l [signal] | -L\n" "\n" "Send signals to processes\n" "\n" " -f, --force force, using win32 interface if necessary\n" " -l, --list print a list of signal names\n" + " -L, --table print a formatted table of signal names\n" " -s, --signal send signal (use %1$s --list for a list)\n" " -W, --winpid specified pids are windows PIDs, not Cygwin PIDs\n" " (use with extreme caution!)\n" @@ -72,13 +74,51 @@ print_version () static const char * strsigno (int signo) { - if (signo > 0 && signo < NSIG) + static char sigbuf[8]; + + if (signo > 0 && signo < SIGRTMIN) return sys_sigabbrev[signo]; + if (signo <= SIGRTMAX) + { + snprintf (sigbuf, sizeof sigbuf, "SIGRT%d", signo - SIGRTMIN); + return sigbuf; + } static char buf[sizeof ("Unknown signal") + 32]; sprintf (buf, "Unknown signal %d", signo); return buf; } +static int +strtortsig (const char *sig) +{ + bool neg = false; + char *endp = NULL; + int signo; + + sig += 5; + if (!strcmp (sig, "MIN")) + return SIGRTMIN; + if (!strcmp (sig, "MAX")) + return SIGRTMAX; + if (!strncmp (sig, "MIN+", 4)) + sig += 4; + else if (!strncmp (sig, "MAX-", 4)) + { + sig += 4; + neg = true; + } + signo = strtoul (sig, &endp, 10); + if (!endp || *endp) + return 0; + if (neg) + signo = SIGRTMAX - signo; + else + signo = SIGRTMIN + signo; + if (signo < SIGRTMIN || signo > SIGRTMAX) + return 0; + return signo; +} + static int getsig (const char *in_sig) { @@ -93,7 +133,10 @@ getsig (const char *in_sig) sprintf (buf, "SIG%-.20s", in_sig); sig = buf; } - intsig = strtosigno (sig) ?: atoi (in_sig); + if (!strncmp (sig, "SIGRT", 5)) + intsig = strtortsig (sig); + else + intsig = strtosigno (sig) ?: atoi (in_sig); char *p; if (!intsig && (strcmp (sig, "SIG0") != 0 && (strtol (in_sig, &p, 10) != 0 || *p))) intsig = -1; @@ -113,21 +156,90 @@ test_for_unknown_sig (int sig, const char *sigstr) } static void -listsig (const char *in_sig) +checksig (const char *in_sig) { - int sig; - if (!in_sig) - for (sig = 1; sig < NSIG - 1; sig++) - printf ("%s%c", strsigno (sig) + 3, (sig < NSIG - 1) ? ' ' : '\n'); + int sig = getsig (in_sig); + test_for_unknown_sig (sig, in_sig); + if (sig && atoi (in_sig) == sig) + puts (strsigno (sig) + 3); else + printf ("%d\n", sig); + exit (0); +} + +static void +listsig () +{ + int chars = 0; + + for (int sig = 1; sig < SIGRTMIN; sig++) { - sig = getsig (in_sig); - test_for_unknown_sig (sig, in_sig); - if (sig && atoi (in_sig) == sig) - puts (strsigno (sig) + 3); - else - printf ("%d\n", sig); + chars += printf ("%s ", strsigno (sig) + 3); + if (chars > 72) + { + puts (""); + chars = 0; + } + switch (sig) + { + case SIGABRT: + chars += printf ("%s ", "IOT"); + break; + case SIGCHLD: + chars += printf ("%s ", "CLD"); + break; + case SIGIO: + chars += printf ("%s ", "POLL"); + break; + case SIGPWR: + chars += printf ("%s ", "LOST"); + break; + } + if (chars > 70) + { + puts (""); + chars = 0; + } } + fputs ("RT RTMIN+ RTMAX-\n", stdout); + exit (0); +} + +static void +tablesig () +{ + int chars = 0; + + for (int sig = 1; sig < SIGRTMIN; sig++) + { + chars += printf ("%2d %-7s ", sig, strsigno (sig) + 3); + if (chars > 70) + { + puts (""); + chars = 0; + } + switch (sig) + { + case SIGABRT: + chars += printf ("%2d %-7s ", sig, "IOT"); + break; + case SIGCHLD: + chars += printf ("%2d %-7s ", sig, "CLD"); + break; + case SIGIO: + chars += printf ("%2d %-7s ", sig, "POLL"); + break; + case SIGPWR: + chars += printf ("%2d %-7s ", sig, "LOST"); + break; + } + if (chars > 70) + { + puts (""); + chars = 0; + } + } + fputs ("32 RTMIN 64 RTMAX\n", stdout); exit (0); } @@ -248,7 +360,13 @@ main (int argc, char **argv) } if (argv[optind]) usage (); - listsig (optarg); + if (optarg) + checksig (optarg); + else + listsig (); + break; + case 'L': + tablesig (); break; case 'f': force = 1; diff --git a/winsup/utils/locale.cc b/winsup/utils/locale.cc index d3655169dd..5ec7dd888a 100644 --- a/winsup/utils/locale.cc +++ b/winsup/utils/locale.cc @@ -30,6 +30,7 @@ #include #include #include +#include #include #include #include @@ -107,17 +108,42 @@ struct option longopts[] = { const char *opts = "acfhikmnsuUvV"; int -getlocale (LCID lcid, char *name) +getlocale (PWCHAR loc_name, wchar_t *iso639, wchar_t *iso3166, + wchar_t *iso15924 = NULL) { - char iso639[10]; - char iso3166[10]; + wchar_t *cp; - iso3166[0] = '\0'; - if (!GetLocaleInfo (lcid, LOCALE_SISO639LANGNAME, iso639, 10)) + /* Skip language-only locales, e. g. "en" */ + if (!(cp = wcschr (loc_name, L'-'))) return 0; - GetLocaleInfo (lcid, LOCALE_SISO3166CTRYNAME, iso3166, 10); - sprintf (name, "%s%s%s", iso639, lcid > 0x3ff ? "_" : "", - lcid > 0x3ff ? iso3166 : ""); + ++cp; + /* Script inside? Scripts are Upper/Lower, e. g. "Latn" */ + if (iswupper (cp[0]) && iswlower (cp[1])) + { + wchar_t *cp2; + + /* Skip language-Script locales, missing country */ + if (!(cp2 = wcschr (cp + 2, L'-'))) + return 0; + /* Otherwise, store in iso15924 */ + if (iso15924) + wcpcpy (wcpncpy (iso15924, cp, cp2 - cp), L";"); + } + cp = wcsrchr (loc_name, L'-'); + if (cp) + { + /* Skip numeric iso3166 country name. */ + if (iswdigit (cp[1])) + return 0; + /* Special case postfix after iso3166 country name: ca-ES-valencia. + Use the postfix thingy as script so it will become a @modifier */ + if (iswlower (cp[1])) + wcpcpy (iso15924, cp + 1); + } + + if (!GetLocaleInfoEx (loc_name, LOCALE_SISO639LANGNAME, iso639, 10)) + return 0; + GetLocaleInfoEx (loc_name, LOCALE_SISO3166CTRYNAME, iso3166, 10); return 1; } @@ -133,66 +159,46 @@ size_t loc_max; size_t loc_num; void -print_codeset (const char *codeset) -{ - for (; *codeset; ++codeset) - if (*codeset != '-') - putc (tolower ((int)(unsigned char) *codeset), stdout); -} - -void -print_locale_with_codeset (int verbose, loc_t *locale, bool utf8, - const char *modifier) +print_locale (int verbose, loc_t *locale) { - static const char *sysroot; - char locname[32]; + static const char *kernel32; + static const char *cygwin1; if (verbose && (!strcmp (locale->name, "C") || !strcmp (locale->name, "POSIX"))) return; - if (!sysroot) + if (!kernel32) { - WCHAR sysbuf[PATH_MAX]; - HMODULE k32 = GetModuleHandleW (L"kernel32.dll"); - if (GetModuleFileNameW (k32, sysbuf, PATH_MAX)) - sysroot = (const char *) cygwin_create_path (CCP_WIN_W_TO_POSIX, - sysbuf); - if (!sysroot) - sysroot = "kernel32.dll"; + WCHAR dllpathbuf[PATH_MAX]; + HMODULE dll; + + dll = GetModuleHandleW (L"kernel32.dll"); + if (GetModuleFileNameW (dll, dllpathbuf, PATH_MAX)) + kernel32 = (const char *) cygwin_create_path (CCP_WIN_W_TO_POSIX, + dllpathbuf); + if (!kernel32) + kernel32 = "kernel32.dll"; + dll = GetModuleHandleW (L"cygwin1.dll"); + if (GetModuleFileNameW (dll, dllpathbuf, PATH_MAX)) + cygwin1 = (const char *) cygwin_create_path (CCP_WIN_W_TO_POSIX, + dllpathbuf); + if (!cygwin1) + cygwin1 = "cygwin1.dll"; } - snprintf (locname, 32, "%s%s%s%s", locale->name, utf8 ? ".utf8" : "", - modifier ? "@" : "", modifier ?: ""); - if (verbose) - fputs ("locale: ", stdout); if (verbose) { - printf ("%-15s ", locname); + printf ("locale: %-15s ", locale->name); printf ("archive: %s\n", - locale->alias ? LOCALE_ALIAS : sysroot); + locale->alias ? LOCALE_ALIAS + : !strcmp (locale->name, "C.utf8") ? cygwin1 + : kernel32); puts ("-------------------------------------------------------------------------------"); printf (" language | %ls\n", locale->language); printf ("territory | %ls\n", locale->territory); - printf (" codeset | %s\n\n", utf8 ? "UTF-8" : locale->codeset); + printf (" codeset | %s\n\n", locale->codeset); } else - printf ("%s\n", locname); -} - -void -print_locale (int verbose, loc_t *locale) -{ - print_locale_with_codeset (verbose, locale, false, NULL); - char *modifier = strchr (locale->name, '@'); - if (!locale->alias) - { - if (!modifier) - print_locale_with_codeset (verbose, locale, true, NULL); - else if (!strcmp (modifier, "@cjknarrow")) - { - *modifier++ = '\0'; - print_locale_with_codeset (verbose, locale, true, modifier); - } - } + printf ("%s\n", locale->name); } int @@ -203,17 +209,17 @@ compare_locales (const void *a, const void *b) return strcmp (la->name, lb->name); } -void -add_locale (const char *name, const wchar_t *language, const wchar_t *territory, +size_t +add_locale (const char *name, const char *codeset, const wchar_t *language, const wchar_t *territory, bool alias = false) { - char orig_locale[32]; + locale_t loc; if (loc_num >= loc_max) { loc_t *tmp = (loc_t *) realloc (locale, (loc_max + 32) * sizeof (loc_t)); if (!tmp) - { + { fprintf (stderr, "Out of memory!\n"); exit (1); } @@ -223,12 +229,11 @@ add_locale (const char *name, const wchar_t *language, const wchar_t *territory, locale[loc_num].name = strdup (name); locale[loc_num].language = wcsdup (language); locale[loc_num].territory = wcsdup (territory); - strcpy (orig_locale, setlocale (LC_CTYPE, NULL)); - setlocale (LC_CTYPE, name); - locale[loc_num].codeset = strdup (nl_langinfo (CODESET)); - setlocale (LC_CTYPE, orig_locale); + loc = newlocale (LC_CTYPE_MASK, name, (locale_t) 0); + locale[loc_num].codeset = strdup (nl_langinfo_l (CODESET, loc)); + freelocale (loc); locale[loc_num].alias = alias; - ++loc_num; + return loc_num++; } void @@ -239,6 +244,7 @@ add_locale_alias_locales () char orig_locale[32]; loc_t search, *loc; size_t orig_loc_num = loc_num; + locale_t sysloc; FILE *fp = fopen (LOCALE_ALIAS, "rt"); if (!fp) @@ -266,11 +272,18 @@ add_locale_alias_locales () c = strchr (replace, '.'); if (c) *c = '\0'; + /* Ignore "ja_JP" and "ko_KR" locales from here, they are in the Windows + DB anyway. */ + if (!strcmp (alias, "ja_JP") || !strcmp (alias, "ko_KR")) + continue; search.name = replace; loc = (loc_t *) bsearch (&search, locale, orig_loc_num, sizeof (loc_t), compare_locales); - add_locale (alias, loc ? loc->language : L"", loc ? loc->territory : L"", - true); + + sysloc = newlocale (LC_CTYPE_MASK, alias, (locale_t) 0); + add_locale (alias, nl_langinfo_l (CODESET, sysloc), + loc ? loc->language : L"", loc ? loc->territory : L"", true); + freelocale (sysloc); } fclose (fp); } @@ -278,98 +291,55 @@ add_locale_alias_locales () void print_all_locales (int verbose) { - LCID lcid = 0; - char name[32]; - DWORD cp; + FILE *fp = fopen ("/proc/locales", "r"); + char line[80]; - unsigned lang, sublang; - - add_locale ("C", L"C", L"POSIX"); - add_locale ("POSIX", L"C", L"POSIX", true); - for (lang = 1; lang <= 0xff; ++lang) + if (!fp) { - struct { - wchar_t language[256]; - wchar_t country[256]; - char loc[32]; - } loc_list[32]; - int lcnt = 0; - - for (sublang = 1; sublang <= 0x3f; ++sublang) + fprintf (stderr, "%s: can't open /proc/locales, old Cygwin DLL?\n", + program_invocation_short_name); + return; + } + /* Skip header line */ + fgets (line, 80, fp); + while (fgets (line, 80, fp)) + { + char *posix_loc; + char *codeset; + char *win_loc; + char *nl; + wchar_t win_locale[32]; + wchar_t language[64] = { 0 }; + wchar_t country[64] = { 0 }; + + nl = strchr (line, '\n'); + if (nl) + *nl = '\0'; + posix_loc = line; + codeset = strchr (posix_loc, '\t'); + if (!codeset) + continue; + *codeset = '\0'; + while (*++codeset == '\t') + ; + win_loc = strchr (codeset, '\t'); + if (win_loc) { - lcid = (sublang << 10) | lang; - if (getlocale (lcid, name)) + *win_loc = '\0'; + while (*++win_loc == '\t') + ; + if (win_loc[0]) { - wchar_t language[256]; - wchar_t country[256]; - int i; - char *c, loc[32]; - wchar_t wbuf[9]; - - /* Go figure. Even the English name of a language or - locale might contain native characters. */ - GetLocaleInfoW (lcid, LOCALE_SENGLANGUAGE, language, 256); - GetLocaleInfoW (lcid, LOCALE_SENGCOUNTRY, country, 256); - /* Avoid dups */ - for (i = 0; i < lcnt; ++ i) - if (!wcscmp (loc_list[i].language, language) - && !wcscmp (loc_list[i].country, country)) - break; - if (i < lcnt) - continue; - if (lcnt < 32) - { - wcscpy (loc_list[lcnt].language, language); - wcscpy (loc_list[lcnt].country, country); - } - c = stpcpy (loc, name); - /* Now check certain conditions to figure out if that - locale requires a modifier. */ - if (lang == LANG_SERBIAN && !strncmp (loc, "sr_", 3) - && wcsstr (language, L"(Latin)")) - stpcpy (c, "@latin"); - else if (lang == LANG_UZBEK - && sublang == SUBLANG_UZBEK_CYRILLIC) - stpcpy (c, "@cyrillic"); - /* Avoid more dups */ - for (i = 0; i < lcnt; ++ i) - if (!strcmp (loc_list[i].loc, loc)) - { - lcnt++; - break; - } - if (i < lcnt) - continue; - if (lcnt < 32) - strcpy (loc_list[lcnt++].loc, loc); - /* Print */ - add_locale (loc, language, country); - /* Check for locales which sport a modifier for - changing the codeset and other stuff. */ - if (lang == LANG_BELARUSIAN - && sublang == SUBLANG_BELARUSIAN_BELARUS) - stpcpy (c, "@latin"); - else if (lang == LANG_TATAR - && sublang == SUBLANG_TATAR_RUSSIA) - stpcpy (c, "@iqtelif"); - else if (GetLocaleInfoW (lcid, - LOCALE_IDEFAULTANSICODEPAGE - | LOCALE_RETURN_NUMBER, - (PWCHAR) &cp, sizeof cp) - && cp == 1252 /* Latin1*/ - && GetLocaleInfoW (lcid, LOCALE_SINTLSYMBOL, wbuf, 9) - && !wcsncmp (wbuf, L"EUR", 3)) - stpcpy (c, "@euro"); - else if (lang == LANG_JAPANESE - || lang == LANG_KOREAN - || lang == LANG_CHINESE) - stpcpy (c, "@cjknarrow"); - else - continue; - add_locale (loc, language, country); + mbstowcs (win_locale, win_loc, 32); + GetLocaleInfoEx (win_locale, LOCALE_SENGLISHLANGUAGENAME, + language, 64); + GetLocaleInfoEx (win_locale, LOCALE_SENGLISHCOUNTRYNAME, + country, 64); } } + add_locale (posix_loc, codeset, language, country); } + fclose (fp); /* First sort allows add_locale_alias_locales to bsearch in locales. */ qsort (locale, loc_num, sizeof (loc_t), compare_locales); add_locale_alias_locales (); @@ -381,66 +351,18 @@ print_all_locales (int verbose) void print_charmaps () { - /* FIXME: We need a method to fetch the available charsets from Cygwin, */ - const char *charmaps[] = - { - "ASCII", - "BIG5", - "CP1125", - "CP1250", - "CP1251", - "CP1252", - "CP1253", - "CP1254", - "CP1255", - "CP1256", - "CP1257", - "CP1258", - "CP437", - "CP720", - "CP737", - "CP775", - "CP850", - "CP852", - "CP855", - "CP857", - "CP858", - "CP862", - "CP866", - "CP874", - "CP932", - "EUC-CN", - "EUC-JP", - "EUC-KR", - "GB2312", - "GBK", - "GEORGIAN-PS", - "ISO-8859-1", - "ISO-8859-10", - "ISO-8859-11", - "ISO-8859-13", - "ISO-8859-14", - "ISO-8859-15", - "ISO-8859-16", - "ISO-8859-2", - "ISO-8859-3", - "ISO-8859-4", - "ISO-8859-5", - "ISO-8859-6", - "ISO-8859-7", - "ISO-8859-8", - "ISO-8859-9", - "KOI8-R", - "KOI8-U", - "PT154", - "SJIS", - "TIS-620", - "UTF-8", - NULL - }; - const char **charmap = charmaps; - while (*charmap) - printf ("%s\n", *charmap++); + FILE *fp = fopen ("/proc/codesets", "r"); + char line[80]; + + if (!fp) + { + fprintf (stderr, "%s: can't open /proc/codesets, old Cygwin DLL?\n", + program_invocation_short_name); + return; + } + while (fgets (line, 80, fp)) + fputs (line, stdout); + fclose (fp); } void @@ -544,8 +466,8 @@ const char *fake_string[] = { lc_names_t lc_ctype_names[] = { - { "ctype-class-names", is_string_fake, 0, 0 }, - { "ctype-map-names", is_string_fake, 2, 0 }, + { "ctype-class-names", is_string_fake, 0, 0 }, + { "ctype-map-names", is_string_fake, 2, 0 }, { "ctype-outdigit0_mb", is_string, _NL_CTYPE_OUTDIGIT0_MB, 0 }, { "ctype-outdigit1_mb", is_string, _NL_CTYPE_OUTDIGIT1_MB, 0 }, { "ctype-outdigit2_mb", is_string, _NL_CTYPE_OUTDIGIT2_MB, 0 }, @@ -556,30 +478,30 @@ lc_names_t lc_ctype_names[] = { "ctype-outdigit7_mb", is_string, _NL_CTYPE_OUTDIGIT7_MB, 0 }, { "ctype-outdigit8_mb", is_string, _NL_CTYPE_OUTDIGIT8_MB, 0 }, { "ctype-outdigit9_mb", is_string, _NL_CTYPE_OUTDIGIT9_MB, 0 }, - { "ctype-outdigit0_wc", is_wchar, _NL_CTYPE_OUTDIGIT0_WC, 0 }, - { "ctype-outdigit1_wc", is_wchar, _NL_CTYPE_OUTDIGIT1_WC, 0 }, - { "ctype-outdigit2_wc", is_wchar, _NL_CTYPE_OUTDIGIT2_WC, 0 }, - { "ctype-outdigit3_wc", is_wchar, _NL_CTYPE_OUTDIGIT3_WC, 0 }, - { "ctype-outdigit4_wc", is_wchar, _NL_CTYPE_OUTDIGIT4_WC, 0 }, - { "ctype-outdigit5_wc", is_wchar, _NL_CTYPE_OUTDIGIT5_WC, 0 }, - { "ctype-outdigit6_wc", is_wchar, _NL_CTYPE_OUTDIGIT6_WC, 0 }, - { "ctype-outdigit7_wc", is_wchar, _NL_CTYPE_OUTDIGIT7_WC, 0 }, - { "ctype-outdigit8_wc", is_wchar, _NL_CTYPE_OUTDIGIT8_WC, 0 }, - { "ctype-outdigit9_wc", is_wchar, _NL_CTYPE_OUTDIGIT9_WC, 0 }, + { "ctype-outdigit0_wc", is_wchar, _NL_CTYPE_OUTDIGIT0_WC, 0 }, + { "ctype-outdigit1_wc", is_wchar, _NL_CTYPE_OUTDIGIT1_WC, 0 }, + { "ctype-outdigit2_wc", is_wchar, _NL_CTYPE_OUTDIGIT2_WC, 0 }, + { "ctype-outdigit3_wc", is_wchar, _NL_CTYPE_OUTDIGIT3_WC, 0 }, + { "ctype-outdigit4_wc", is_wchar, _NL_CTYPE_OUTDIGIT4_WC, 0 }, + { "ctype-outdigit5_wc", is_wchar, _NL_CTYPE_OUTDIGIT5_WC, 0 }, + { "ctype-outdigit6_wc", is_wchar, _NL_CTYPE_OUTDIGIT6_WC, 0 }, + { "ctype-outdigit7_wc", is_wchar, _NL_CTYPE_OUTDIGIT7_WC, 0 }, + { "ctype-outdigit8_wc", is_wchar, _NL_CTYPE_OUTDIGIT8_WC, 0 }, + { "ctype-outdigit9_wc", is_wchar, _NL_CTYPE_OUTDIGIT9_WC, 0 }, { "charmap", is_string, CODESET, 0 }, { "ctype-mb-cur-max", is_int, _NL_CTYPE_MB_CUR_MAX, 0 }, - { NULL, is_end, 0, 0 } + { NULL, is_end, 0, 0 } }; lc_names_t lc_numeric_names[] = { { "decimal_point", is_string, RADIXCHAR, 0 }, - { "thousands_sep", is_string, THOUSEP, 0 }, + { "thousands_sep", is_string, THOUSEP, 0 }, { "grouping", is_grouping, _NL_NUMERIC_GROUPING, 0 }, { "numeric-decimal-point-wc", is_wchar, _NL_NUMERIC_DECIMAL_POINT_WC, 0 }, { "numeric-thousands-sep-wc", is_wchar, _NL_NUMERIC_THOUSANDS_SEP_WC, 0 }, { "numeric-codeset", is_string, _NL_NUMERIC_CODESET, 0 }, - { NULL, is_end, 0, 0 } + { NULL, is_end, 0, 0 } }; lc_names_t lc_time_names[] = @@ -600,13 +522,13 @@ lc_names_t lc_time_names[] = { "era_t_fmt", is_string, ERA_T_FMT, 0 }, { "date_fmt", is_string, _DATE_FMT, 0 }, { "time-codeset", is_string, _NL_TIME_CODESET, 0 }, - { NULL, is_end, 0, 0 } + { NULL, is_end, 0, 0 } }; lc_names_t lc_collate_names[] = { { "collate-codeset", is_string, _NL_COLLATE_CODESET, 0 }, - { NULL, is_end, 0, 0 } + { NULL, is_end, 0, 0 } }; lc_names_t lc_monetary_names[] = @@ -635,7 +557,7 @@ lc_names_t lc_monetary_names[] = { "monetary-decimal-point-wc", is_wchar, _NL_MONETARY_WMON_DECIMAL_POINT, 0 }, { "monetary-thousands-sep-wc", is_wchar, _NL_MONETARY_WMON_THOUSANDS_SEP, 0 }, { "monetary-codeset", is_string, _NL_MONETARY_CODESET, 0 }, - { NULL, is_end, 0, 0 } + { NULL, is_end, 0, 0 } }; lc_names_t lc_messages_names[] = @@ -645,7 +567,7 @@ lc_names_t lc_messages_names[] = { "yesstr", is_string, YESSTR, 0 }, { "nostr", is_string, NOSTR, 0 }, { "messages-codeset", is_string, _NL_MESSAGES_CODESET, 0 }, - { NULL, is_end, 0, 0 } + { NULL, is_end, 0, 0 } }; void @@ -739,14 +661,13 @@ int main (int argc, char **argv) { int opt; - LCID lcid = 0; + wchar_t loc_name[256] = { 0 }; int all = 0; int cat = 0; int key = 0; int maps = 0; int verbose = 0; const char *utf = ""; - char name[32]; setlocale (LC_ALL, ""); while ((opt = getopt_long (argc, argv, opts, longopts, NULL)) != -1) @@ -765,19 +686,22 @@ main (int argc, char **argv) maps = 1; break; case 'i': - lcid = (UINT_PTR) GetKeyboardLayout (0) & 0xffff; + GetLocaleInfoW ((UINT_PTR) GetKeyboardLayout (0) & 0xffff, LOCALE_SNAME, + loc_name, 256); break; case 's': - lcid = GetSystemDefaultUILanguage (); + GetLocaleInfoW (GetSystemDefaultUILanguage (), LOCALE_SNAME, + loc_name, 256); break; case 'u': - lcid = GetUserDefaultUILanguage (); + GetLocaleInfoW (GetUserDefaultUILanguage (), LOCALE_SNAME, + loc_name, 256); break; case 'f': - lcid = GetUserDefaultLCID (); + GetUserDefaultLocaleName (loc_name, 256); break; case 'n': - lcid = GetSystemDefaultLCID (); + GetSystemDefaultLocaleName (loc_name, 256); break; case 'U': utf = ".UTF-8"; @@ -799,10 +723,13 @@ main (int argc, char **argv) print_all_locales (verbose); else if (maps) print_charmaps (); - else if (lcid) + else if (loc_name[0]) { - if (getlocale (lcid, name)) - printf ("%s%s\n", name, utf); + wchar_t iso639[10]; + wchar_t iso3166[10]; + + if (getlocale (loc_name, iso639, iso3166, NULL)) + printf ("%ls_%ls%s", iso639, iso3166, utf); } else if (optind < argc) while (optind < argc) diff --git a/winsup/utils/mingw/Makefile.am b/winsup/utils/mingw/Makefile.am index d66c226e3a..07b9f928d4 100644 --- a/winsup/utils/mingw/Makefile.am +++ b/winsup/utils/mingw/Makefile.am @@ -48,11 +48,12 @@ cygcheck_SOURCES = \ path.cc cygcheck_CPPFLAGS=-I$(srcdir)/.. -idirafter ${top_srcdir}/cygwin/include cygcheck_LDFLAGS = ${AM_LDFLAGS} -Wl,--disable-high-entropy-va -cygcheck_LDADD = -lz -lwininet -lpsapi -lntdll +cygcheck_LDADD = -lz -lwininet -lshlwapi -lpsapi -lntdll cygwin_console_helper_SOURCES = cygwin-console-helper.cc ldh_SOURCES = ldh.cc +ldh_LDFLAGS = ${AM_LDFLAGS} -Wl,--disable-high-entropy-va strace_SOURCES = \ path.cc \ diff --git a/winsup/utils/mingw/cygcheck.cc b/winsup/utils/mingw/cygcheck.cc index aa87d53739..7718ab9dc9 100644 --- a/winsup/utils/mingw/cygcheck.cc +++ b/winsup/utils/mingw/cygcheck.cc @@ -6,27 +6,35 @@ Cygwin license. Please consult the file "CYGWIN_LICENSE" for details. */ -#define cygwin_internal cygwin_internal_dontuse #include #include #include #include #include +#include #include #include +#include #include #include #include +#include #include "path.h" #include "wide_path.h" +#include "cygcheck.h" #include #include +#define cygwin_internal cygwin_internal_dontuse #include +#undef cygwin_internal #define _NOMNTENT_MACROS #include -#undef cygwin_internal #include "loadlib.h" +#ifndef PRODUCT_IOTENTERPRISES +#define PRODUCT_IOTENTERPRISES 0x000000bf +#endif + #ifndef max #define max __max #endif @@ -35,6 +43,11 @@ #define alloca __builtin_alloca #endif +extern "C" { +uintptr_t (*cygwin_internal) (cygwin_getinfo_types, ...); +WCHAR cygwin_dll_path[32768]; +}; + int verbose = 0; int registry = 0; int sysinfo = 0; @@ -42,11 +55,27 @@ int givehelp = 0; int keycheck = 0; int check_setup = 0; int dump_only = 0; +int names_only = 0; int find_package = 0; int list_package = 0; int grep_packages = 0; +int info_packages = 0; +int info_selector = 0; +int search_packages = 0; +int search_selector = 0; int del_orphaned_reg = 0; +#define INFO_INST 0x01 +#define INFO_CURR 0x02 +#define INFO_PREV 0x04 +#define INFO_TEST 0x08 +#define INFO_ALL 0x0f +#define INFO_DEPS 0x10 +#define INFO_BLDDEPS 0x20 + +#define SRCH_REQS 0x40 +#define SRCH_BLDREQS 0x80 + static char emptystr[] = ""; #ifdef __GNUC__ @@ -56,7 +85,7 @@ typedef __int64 longlong; #endif /* In dump_setup.cc */ -void dump_setup (int, char **, bool); +void dump_setup (int, char **, bool, bool); void package_find (int, char **); void package_list (int, char **); /* In bloda.cc */ @@ -237,6 +266,14 @@ display_internet_error (const char *message, ...) return 1; } +static inline char * +stpcpy (char *d, const char *s) +{ + while ((*d++ = *s++)) + ; + return --d; +} + static void add_path (char *s, int maxlen, bool issys) { @@ -521,7 +558,7 @@ static void cygwin_info (HANDLE h) { char *buf, *bufend, *buf_start = NULL; - const char *hello = " Msys DLL version info:\n"; + const char *hello = " Cygwin DLL version info:\n"; DWORD size = GetFileSize (h, NULL); DWORD n; @@ -1253,7 +1290,7 @@ dump_sysinfo_services () /* inform the user if nothing found */ if (no_services) - puts ("No Msys services found.\n"); + puts ("No Cygwin services found.\n"); } enum handle_reg_t @@ -1268,7 +1305,7 @@ handle_reg_installation (handle_reg_t what) HKEY key; if (what == PRINT_KEY) - printf ("Msys installations found in the registry:\n"); + printf ("Cygwin installations found in the registry:\n"); for (int i = 0; i < 2; ++i) if (RegOpenKeyEx (i ? HKEY_CURRENT_USER : HKEY_LOCAL_MACHINE, "SOFTWARE\\Msys\\Installations", 0, @@ -1367,7 +1404,7 @@ dump_sysinfo () _wputenv (comspec); } - printf ("\nMsys Configuration Diagnostics\n"); + printf ("\nCygwin Configuration Diagnostics\n"); time (&now); printf ("Current System Time: %s\n", ctime (&now)); @@ -1390,24 +1427,24 @@ dump_sysinfo () { case 0: strcpy (osname, osversion.wProductType == VER_NT_WORKSTATION - ? "Vista" : "2008"); + ? "Vista" : "Server 2008"); break; case 1: strcpy (osname, osversion.wProductType == VER_NT_WORKSTATION - ? "7" : "2008 R2"); + ? "7" : "Server 2008 R2"); break; case 2: strcpy (osname, osversion.wProductType == VER_NT_WORKSTATION - ? "8" : "2012"); + ? "8" : "Server 2012"); break; case 3: strcpy (osname, osversion.wProductType == VER_NT_WORKSTATION - ? "8.1" : "2012 R2"); + ? "8.1" : "Server 2012 R2"); break; case 4: default: strcpy (osname, osversion.wProductType == VER_NT_WORKSTATION - ? "10 Preview" : "2016 Preview"); + ? "10 Preview" : "Server 2016 Preview"); break; } else if (osversion.dwMajorVersion == 10) @@ -1417,13 +1454,13 @@ dump_sysinfo () else { if (osversion.dwBuildNumber <= 14393) - strcpy (osname, "2016"); + strcpy (osname, "Server 2016"); else if (osversion.dwBuildNumber <= 17763) - strcpy (osname, "2019"); + strcpy (osname, "Server 2019"); else if (osversion.dwBuildNumber <= 20348) - strcpy (osname, "2022"); + strcpy (osname, "Server 2022"); else - strcpy (osname, "20??"); + strcpy (osname, "Server 20??"); } } DWORD prod; @@ -1554,25 +1591,83 @@ dump_sysinfo () /* 0x00000074 */ "", /* 0x00000075 */ "", /* 0x00000076 */ "", - /* 0x00000077 */ "", + /* 0x00000077 */ " Team", /* 0x00000078 */ "", /* 0x00000079 */ " Education", /* 0x0000007a */ " Education N", /* 0x0000007b */ "", /* 0x0000007c */ "", - /* 0x0000007d */ "", - /* 0x0000007e */ "", + /* 0x0000007d */ " Enterprise 2015 LTSB", + /* 0x0000007e */ " Enterprise 2015 LTSB N", /* 0x0000007f */ "", /* 0x00000080 */ "", - /* 0x00000081 */ "", - /* 0x00000082 */ "", - /* 0x00000083 */ "", + /* 0x00000081 */ " Enterprise 2015 LTSB Evaluation", + /* 0x00000082 */ " Enterprise 2015 LTSB N Evaluation", + /* 0x00000083 */ " IoT Core Commercial", /* 0x00000084 */ "", /* 0x00000085 */ " Mobile Enterprise", + /* 0x00000086 */ "", + /* 0x00000087 */ "", + /* 0x00000088 */ "", + /* 0x00000089 */ "", + /* 0x0000008a */ "", + /* 0x0000008b */ "", + /* 0x0000008c */ "", + /* 0x0000008d */ "", + /* 0x0000008e */ "", + /* 0x0000008f */ "", + /* 0x00000090 */ "", + /* 0x00000091 */ " Server Datacenter, Semi-Annual Channel (core installation)", + /* 0x00000092 */ " Server Standard, Semi-Annual Channel (core installation)", + /* 0x00000093 */ "", + /* 0x00000094 */ "", + /* 0x00000095 */ "", + /* 0x00000096 */ "", + /* 0x00000097 */ "", + /* 0x00000098 */ "", + /* 0x00000099 */ "", + /* 0x0000009a */ "", + /* 0x0000009b */ "", + /* 0x0000009c */ "", + /* 0x0000009d */ "", + /* 0x0000009e */ "", + /* 0x0000009f */ "", + /* 0x000000a0 */ "", + /* 0x000000a1 */ " Pro for Workstations", + /* 0x000000a2 */ " Pro for Workstations N", + /* 0x000000a3 */ "", + /* 0x000000a4 */ " Pro Education", + /* 0x000000a5 */ "", + /* 0x000000a6 */ "", + /* 0x000000a7 */ "", + /* 0x000000a8 */ "", + /* 0x000000a9 */ "", + /* 0x000000aa */ "", + /* 0x000000ab */ "", + /* 0x000000ac */ "", + /* 0x000000ad */ "", + /* 0x000000ae */ "", + /* 0x000000af */ " Enterprise for Virtual Desktops", + /* 0x000000b0 */ "", + /* 0x000000b1 */ "", + /* 0x000000b2 */ "", + /* 0x000000b3 */ "", + /* 0x000000b4 */ "", + /* 0x000000b5 */ "", + /* 0x000000b6 */ "", + /* 0x000000b7 */ "", + /* 0x000000b8 */ "", + /* 0x000000b9 */ "", + /* 0x000000ba */ "", + /* 0x000000bb */ "", + /* 0x000000bc */ " IoT Enterprise", + /* 0x000000bd */ "", + /* 0x000000be */ "", + /* 0x000000bf */ " IoT Enterprise LTSC", }; if (prod == PRODUCT_UNLICENSED) strcat (osname, "Unlicensed"); - else if (prod > 0x00000085) + else if (prod > PRODUCT_IOTENTERPRISES) strcat (osname, ""); else strcat (osname, products[prod]); @@ -1637,7 +1732,7 @@ dump_sysinfo () if (givehelp) - printf ("Here's some environment variables that may affect msys:\n"); + printf ("Here's some environment variables that may affect cygwin:\n"); for (i = 0; environ[i]; i++) { char *eq = strchr (environ[i], '='); @@ -1865,7 +1960,7 @@ dump_sysinfo () printf ("\n"); if (givehelp) - printf ("Looking for various Msys DLLs... (-v gives version info)\n"); + printf ("Looking for various Cygwin DLLs... (-v gives version info)\n"); int cygwin_dll_count = 0; char cygdll_path[32768]; for (pathlike *pth = paths; pth->dir; pth++) @@ -2007,7 +2102,7 @@ check_keys () static const char safe_chars[] = "$-_.!*'(),"; /* the URL to query. */ -static const char base_url[] = +static const char grep_base_url[] = "http://cygwin.com/cgi-bin2/package-grep.cgi?text=1&grep="; #ifdef __x86_64__ @@ -2017,34 +2112,14 @@ static const char base_url[] = #endif static const char *ARCH_str = ARCH_STR; -/* Queries Cygwin web site for packages containing files matching a regexp. - Return value is 1 if there was a problem, otherwise 0. */ static int -package_grep (char *search) +fetch_url (const char *url, FILE *outstream) { - char buf[1024]; - - /* construct the actual URL by escaping */ - char *url = (char *) alloca (sizeof (base_url) + strlen (ARCH_str) - + strlen (search) * 3); - strcpy (url, base_url); - - char *dest; - for (dest = &url[sizeof (base_url) - 1]; *search; search++) - { - if (isalnum (*search) - || memchr (safe_chars, *search, sizeof (safe_chars) - 1)) - { - *dest++ = *search; - } - else - { - *dest++ = '%'; - sprintf (dest, "%02x", (unsigned char) *search); - dest += 2; - } - } - strcpy (dest, ARCH_str); + DWORD rc = 0, rc_s = sizeof (DWORD); + HINTERNET hi = NULL, hurl = NULL; + char buf[4096]; + DWORD numread; + int ret; /* Connect to the net and open the URL. */ if (InternetAttemptConnect (0) != ERROR_SUCCESS) @@ -2054,44 +2129,768 @@ package_grep (char *search) } /* Initialize WinInet and attempt to fetch our URL. */ - HINTERNET hi = NULL, hurl = NULL; if (!(hi = InternetOpenA ("cygcheck", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0))) return display_internet_error ("InternetOpen() failed", NULL); if (!(hurl = InternetOpenUrlA (hi, url, NULL, 0, 0, 0))) - return display_internet_error ("unable to contact cygwin.com site, " - "InternetOpenUrl() failed", hi, NULL); + { + ret = display_internet_error ("unable to contact cygwin.com site, " + "InternetOpenUrl() failed", hi, NULL); + goto out_open; + } /* Check the HTTP response code. */ - DWORD rc = 0, rc_s = sizeof (DWORD); if (!HttpQueryInfoA (hurl, HTTP_QUERY_STATUS_CODE | HTTP_QUERY_FLAG_NUMBER, (void *) &rc, &rc_s, NULL)) - return display_internet_error ("HttpQueryInfo() failed", hurl, hi, NULL); + { + ret = display_internet_error ("HttpQueryInfo() failed", hurl, hi, NULL); + goto out_open_url; + } if (rc != HTTP_STATUS_OK) { sprintf (buf, "error retrieving results from cygwin.com site, " "HTTP status code %lu", rc); - return display_internet_error (buf, hurl, hi, NULL); + ret = display_internet_error (buf, hurl, hi, NULL); + goto out_open_url; } - /* Fetch result and print to stdout. */ - DWORD numread; + /* Fetch result and print to outstream. */ do { if (!InternetReadFile (hurl, (void *) buf, sizeof (buf), &numread)) - return display_internet_error ("InternetReadFile failed", hurl, hi, NULL); + { + ret = display_internet_error ("InternetReadFile failed", hurl, hi, + NULL); + goto out_open_url; + } if (numread) - fwrite ((void *) buf, (size_t) numread, 1, stdout); + fwrite ((void *) buf, (size_t) numread, 1, outstream); } while (numread); + ret = 0; + +out_open_url: InternetCloseHandle (hurl); +out_open: InternetCloseHandle (hi); + return ret; +} + +struct passwd { + char *pw_name; /* user name */ + char *pw_passwd; /* encrypted password */ + uint32_t pw_uid; /* user uid */ + uint32_t pw_gid; /* user gid */ + char *pw_comment; /* comment */ + char *pw_gecos; /* Honeywell login info */ + char *pw_dir; /* home directory */ + char *pw_shell; /* default shell */ +}; + +/* Downloads setup.ini from cygwin.com, if it hasn't been downloaded + already or is older than 24h. */ +static FILE * +maybe_download_setup_ini () +{ + time_t t3h_before; + char *path; + struct stat st; + FILE *fp; + + t3h_before = time (NULL) - 3 * 60 * 60; + for (int i = 0; i < 2; ++i) + { + /* Check for the system-wide setup.ini file first. If that's too + old and not writable, check for ~/.setup.ini. */ + if (i == 0) + path = cygpath ("/etc/setup/setup.ini", NULL); + else + { + char *localappdata = getenv ("LOCALAPPDATA"); + char *cp; + + if (!localappdata) + return NULL; + path = (char *) malloc (strlen (localappdata) + + strlen ("\\.setup.ini") + 1); + cp = stpcpy (path, localappdata); + stpcpy (cp, "\\.setup.ini"); + } + /* If file exists, and has been downloaded less than 3h ago, + and if we can open it for reading, just use it. */ + if (stat (path, &st) == 0 + && st.st_mtime > t3h_before + && (fp = fopen (path, "rt")) != NULL) + return fp; + /* Otherwise, try to open it for writing and fetch from cygwin.com. */ + if ((fp = fopen (path, "w+")) != NULL) + { + fputs ("Fetching setup.ini from cygwin.com...\n", stderr); + if (!fetch_url ("https://cygwin.com/ftp/cygwin/x86_64/setup.ini", fp)) + { + fclose (fp); + fp = fopen (path, "rt"); + fputs ("\n", stderr); + return fp; + } + fclose (fp); + } + } + return NULL; +} + +struct vers_info +{ + char *version; + char *install; + char *source; + char *depends2; + char *build_depends; + time_t install_date; + bool matches; + bool installed; +}; + +struct ini_package_info +{ + char *name; + char *sdesc; + char *ldesc; + char *category; + char *url; + char *license; + vers_info curr; + size_t prev_count; + vers_info *prev; + size_t test_count; + vers_info *test; +}; + +static void +free_pkg_info (ini_package_info *pi) +{ + free (pi->name); + free (pi->sdesc); + free (pi->ldesc); + free (pi->category); + free (pi->url); + free (pi->license); + free (pi->curr.version); + free (pi->curr.install); + free (pi->curr.source); + free (pi->curr.depends2); + free (pi->curr.build_depends); + if (pi->prev) + { + for (size_t i = 0; i < pi->prev_count; ++i) + { + free (pi->prev[i].version); + free (pi->prev[i].install); + free (pi->prev[i].source); + free (pi->prev[i].depends2); + free (pi->prev[i].build_depends); + } + free (pi->prev); + } + if (pi->test) + { + for (size_t i = 0; i < pi->test_count; ++i) + { + free (pi->test[i].version); + free (pi->test[i].install); + free (pi->test[i].source); + free (pi->test[i].depends2); + free (pi->test[i].build_depends); + } + free (pi->test); + } +} + +static void +collect_quoted_string (char *&tgt, FILE *fp, char *buf, size_t size, size_t offset) +{ + bool found = false; + char *cp, *s; + + cp = buf + offset; + if (*cp != '"') /* just 'til end of line */ + { + if ((s = strchr (cp, '\n'))) + *s = '\0'; + tgt = strdup (cp); + return; + } + /* text starts with a quote, collect 'til the closing quote */ + ++cp; + do + { + if ((s = strrchr (cp, '"')) && (s == cp || s[-1] != '\\')) + { + *s = '\0'; + found = true; + } + if (!tgt) + s = (char *) calloc (strlen (cp) + 1, sizeof *s); + else + s = (char *) realloc (tgt, strlen (tgt) + strlen (cp) + 1); + if (s) + { + tgt = s; + strcat (tgt, cp); + } + } + while (!found && (cp = fgets (buf, size, fp))); +} + +static ini_package_info * +collect_pkg_info (FILE *fp, ini_package_info *pi, bool search) +{ + vers_info *vinfo = &pi->curr; + char buf[4096]; + char *s; + + memset (pi, 0, sizeof *pi); + /* Search next line starting with "@ ". */ + while ((s = fgets (buf, sizeof buf, fp))) + { + if (s[0] == '@' && s[1] == ' ') + break; + } + if (!s) + goto error; + /* Extract package name */ + if ((s = strchr (buf, '\n'))) + *s = '\0'; + pi->name = strdup (buf + 2); + /* collect all of this package block. */ + while ((s = fgets (buf, sizeof buf, fp))) + { + /* empty line? EOR. */ + if (s[0] == '\n') + break; + /* prev or test version? */ + if (buf[0] == '[') + { + vers_info **vers_p = NULL; + size_t *vers_cnt_p = NULL; + + if (!strncmp (buf, "[prev]", strlen ("[prev]"))) + { + vers_p = &pi->prev; + vers_cnt_p = &pi->prev_count; + } + else if (!strncmp (buf, "[test]", strlen ("[test]"))) + { + vers_p = &pi->test; + vers_cnt_p = &pi->test_count; + } + if (vers_p) + { + vers_info *v; + + v = (vers_info *) realloc (*vers_p, (*vers_cnt_p + 1) + * sizeof (vers_info)); + if (!v) + goto error; + *vers_p = v; + vinfo = *vers_p + *vers_cnt_p; + memset (vinfo, 0, sizeof *vinfo); + ++(*vers_cnt_p); + } + } + else if (!strncmp (buf, "sdesc: ", strlen ("sdesc: "))) + collect_quoted_string (pi->sdesc, fp, buf, sizeof buf, + strlen ("sdesc: ")); + else if (!strncmp (buf, "ldesc: ", strlen ("ldesc: "))) + collect_quoted_string (pi->ldesc, fp, buf, sizeof buf, + strlen ("ldesc: ")); + else + { + if ((s = strchr (buf, '\n'))) + *s = '\0'; + if (!strncmp (buf, "category: ", strlen ("category: "))) + pi->category = strdup (buf + strlen ("category: ")); + else if (!strncmp (buf, "url: ", strlen ("url: "))) + pi->url = strdup (buf + strlen ("url: ")); + else if (!strncmp (buf, "license: ", strlen ("license: "))) + pi->license = strdup (buf + strlen ("license: ")); + else if (!strncmp (buf, "version: ", strlen ("version: "))) + vinfo->version = strdup (buf + strlen ("version: ")); + else if (!strncmp (buf, "install: ", strlen ("install: "))) + vinfo->install = strdup (buf + strlen ("install: ")); + else if (!strncmp (buf, "source: ", strlen ("source: "))) + vinfo->source = strdup (buf + strlen ("source: ")); + else if (!strncmp (buf, "depends2: ", strlen ("depends2: "))) + { + if (!search) + vinfo->depends2 = strdup (buf + strlen ("depends2: ")); + else + { + /* For pattern matching we need a standarized format. + Make sure all deps are prepended and trailed by a comma. + Note the missing space after the colon, that's deliberate + to keep it in the stored string. Originally we kept the + spaces in, but spaces are filtered out by PathMatchSpecA, + so we now replace all space by comma here. */ + char *start = buf + strlen ("depends2:"); + size_t len = strlen (start); + + vinfo->depends2 = (char *) calloc (len + 2, 1); + if (vinfo->depends2) + { + *stpcpy (vinfo->depends2, start) = ','; + char *cp = vinfo->depends2; + while ((cp = strchr (cp, ' '))) + *cp = ','; + } + } + } + else if (!strncmp (buf, "build-depends: ", + strlen ("build-depends: "))) + { + if (!search) + vinfo->build_depends = strdup (buf + + strlen ("build-depends: ")); + else + { + /* Ditto */ + char *start = buf + strlen ("build-depends:"); + size_t len = strlen (start); + + vinfo->build_depends = (char *) calloc (len + 2, 1); + if (vinfo->build_depends) + { + *stpcpy (vinfo->build_depends, start) = ','; + char *cp = vinfo->build_depends; + while ((cp = strchr (cp, ' '))) + *cp++ = ','; + } + } + } + } + } + return pi; +error: + free_pkg_info (pi); + return NULL; +} + +static const char * +human_readable (char *buf, size_t bytes) +{ + const char *siz[] = { "B", "K", "M", "G", NULL }; + double db = bytes; + int idx = 0; + int prec; + + while (bytes > 1023 && siz[idx + 1]) + { + bytes >>= 10; + db /= 1024.0; + ++idx; + } + prec = log10 (db) + 1; + if (prec < 2) + prec = 2; + sprintf (buf, "%.*g %s", prec, db, siz[idx]); + return buf; +} + +static void +package_info_print (ini_package_info *pi, vers_info *vers, int selector) +{ + char buf[4096]; + + printf ("Name : %s\n", pi->name); + if (vers->version) + { + char *version = strcpy (buf, vers->version); + char *release = NULL; + + release = strrchr (version, '-'); + if (release) + *release++ = '\0'; + printf ("Version : %s\n", version); + if (release) + printf ("Release : %s\n", release); + } + if (vers->install) + { + char *arch = strcpy (buf, vers->install); + char *sizep; + size_t size = 0; + + char *cp; + + cp = strchr (arch, '/'); + if (cp) + { + *cp++ = '\0'; + cp = strchr (cp, ' '); + if (cp) + { + sizep = ++cp; + cp = strchr (cp, ' '); + if (cp) + { + *cp = '\0'; + size = strtoull (sizep, NULL, 10); + } + } + } + if (cp) + { + printf ("Architecture: %s\n", arch); + if (vers->install_date) + printf ("Install Date: %s", ctime (&vers->install_date)); + + printf ("Size : %llu (%s)\n", size, + human_readable (buf, size)); + } + } + if (pi->category) + printf ("Categories : %s\n", pi->category); + if (vers->source) + { + char *source = strcpy (buf, vers->source); + char *cp = strchr (source, ' '); + if (cp) + { + *cp = '\0'; + cp = strrchr (source, '/'); + if (cp) + printf ("Source : %s\n", cp + 1); + } + } + if ((selector & INFO_DEPS) && vers->depends2) + printf ("Dependencies: %s\n", vers->depends2); + if ((selector & INFO_BLDDEPS) && vers->build_depends) + printf ("Build Deps : %s\n", vers->build_depends); + if (pi->sdesc) + printf ("Summary : %s\n", pi->sdesc); + if (pi->url) + printf ("Url : %s\n", pi->url); + if (pi->license) + printf ("License : %s\n", pi->license); + if (pi->ldesc) + printf ("Description :\n%s\n", pi->ldesc); + puts (""); +} + +static void +package_info_check (ini_package_info *pi, vers_info *vi, pkgver *pv, + bool &am, bool &ai) +{ + vi->matches = true; + if (pv && !strcmp (vi->version, pv->ver)) + vi->installed = true; + am |= vi->matches; + ai |= vi->installed; +} + +static inline bool +check_name_version (char *pkg_name, char *pkg_version, char *search) +{ + char nv_buf[4096]; + char *nvp, *cp; + + nvp = stpcpy (nv_buf, pkg_name); + *nvp++ = '-'; + stpcpy (nvp, pkg_version); + if (PathMatchSpecA (nv_buf, search)) + return true; + if ((cp = strrchr (nvp, '-'))) /* try w/o release */ + { + *cp = '\0'; + if (PathMatchSpecA (nv_buf, search)) + return true; + } + return false; +} + +static void +package_info_vers_check (ini_package_info *pi, vers_info *vi, char *search, + pkgver *pv, bool &am, bool &ai) +{ + vi->matches = check_name_version (pi->name, vi->version, search); + if (pv && !strcmp (vi->version, pv->ver)) + vi->installed = true; + am |= vi->matches; + ai |= vi->installed; +} + +int +pkg_comp (const void *a, const void *b) +{ + pkgver *pa = (pkgver *) a; + pkgver *pb = (pkgver *) b; + + return strcmp (pa->name, pb->name); +} + +/* Print full info for the package matching the search string in terms of + name/version. */ +static int +package_info (char **search, int selector) +{ + FILE *fp = maybe_download_setup_ini (); + ini_package_info pi_buf, *pi; + size_t inst_pkg_count; + pkgver *inst_pkgs; + + if (!fp) + return 1; + + if ((selector & INFO_ALL) == 0) + selector |= INFO_ALL; + + inst_pkgs = get_installed_packages (NULL, &inst_pkg_count); + + while (search && *search) + { + rewind (fp); + while ((pi = collect_pkg_info (fp, &pi_buf, false))) + { + pkgver pv = { pi->name, NULL }, *inst_pkg = NULL; + bool avail_installed = false; + bool avail_matches = false; + bool inst_matches = false; + + if (selector & INFO_INST) + { + inst_pkg = (pkgver *) bsearch (&pv, inst_pkgs, inst_pkg_count, + sizeof *inst_pkgs, pkg_comp); + if (inst_pkg) + { + if (PathMatchSpecA (inst_pkg->name, *search)) + inst_matches = true; + else + inst_matches = check_name_version (inst_pkg->name, + inst_pkg->ver, + *search); + } + } + + /* Name matches? Print all versions */ + if (PathMatchSpecA (pi->name, *search)) + { + if (pi->curr.version) + package_info_check (pi, &pi->curr, inst_pkg, + avail_matches, avail_installed); + for (size_t i = 0; i < pi->prev_count; ++i) + package_info_check (pi, pi->prev + i, inst_pkg, + avail_matches, avail_installed); + for (size_t i = 0; i < pi->test_count; ++i) + package_info_check (pi, pi->test + i, inst_pkg, + avail_matches, avail_installed); + } + else + { + /* Check if search matches name-version string */ + if (pi->curr.version) + package_info_vers_check (pi, &pi->curr, *search, inst_pkg, + avail_matches, avail_installed); + for (size_t i = 0; i < pi->prev_count; ++i) + package_info_vers_check (pi, pi->prev + i, *search, inst_pkg, + avail_matches, avail_installed); + for (size_t i = 0; i < pi->test_count; ++i) + package_info_vers_check (pi, pi->test + i, *search, inst_pkg, + avail_matches, avail_installed); + } + + /* First print installed package(s) */ + if (inst_pkg && inst_matches) + { + time_t install_ts = 0; + struct stat st; + char *path; + + printf ("Installed package:\n" + "------------------\n\n"); + /* fetch timestamp of last install. */ + + path = cygpath ("/etc/setup/", inst_pkg->name, ".lst.gz", NULL); + if (path) + { + if (stat (path, &st) == 0) + install_ts = st.st_mtime; + free (path); + } + + /* Fake min info if installed package is not available anymore */ + if (!avail_installed) + { + ini_package_info inst_pi = { 0 }; + + inst_pi.name = inst_pkg->name; + inst_pi.sdesc = pi->sdesc; + inst_pi.ldesc = pi->ldesc; + inst_pi.url = pi->url; + inst_pi.license = pi->license; + inst_pi.curr.version = inst_pkg->ver; + inst_pi.curr.install_date = install_ts; + package_info_print (&inst_pi, &pi->curr, selector); + } + else + { + if (pi->curr.installed) + { + pi->curr.install_date = install_ts; + package_info_print (pi, &pi->curr, selector); + } + for (size_t i = 0; i < pi->prev_count; ++i) + if (pi->prev[i].installed) + { + pi->prev[i].install_date = install_ts; + package_info_print (pi, pi->prev + i, selector); + } + for (size_t i = 0; i < pi->test_count; ++i) + if (pi->test[i].installed) + { + pi->test[i].install_date = install_ts; + package_info_print (pi, pi->test + i, selector); + } + } + } + + /* Next print available, matching packages */ + if (avail_matches) + { + if ((selector & INFO_CURR) && pi->curr.matches) + { + puts ("Latest available package:\n" + "-------------------------\n"); + package_info_print (pi, &pi->curr, selector); + } + if (selector & INFO_PREV) + { + uint32_t header_printed = 0; + + for (size_t i = 0; i < pi->prev_count; ++i) + if (pi->prev[i].matches) + { + printf ("%s", header_printed++ + ? "" + : "Older available packages:\n" + "-------------------------\n\n"); + package_info_print (pi, pi->prev + i, selector); + } + } + if (selector & INFO_TEST) + { + uint32_t header_printed = 0; + + for (size_t i = 0; i < pi->test_count; ++i) + if (pi->test[i].matches) + { + printf ("%s", header_printed++ + ? "" + : "Available test packages:\n" + "------------------------\n\n"); + package_info_print (pi, pi->test + i, selector); + } + } + } + + free_pkg_info (&pi_buf); + } + ++search; + } + return 0; +} + +/* Search for the search string in name and sdesc of available packages. + The selector is used to search for dependencies. */ +static int +package_search (char **search, int selector) +{ + FILE *fp = maybe_download_setup_ini (); + ini_package_info pi_buf, *pi; + char *ext_search, *ep; + + if (!fp) + return 1; + + while (search && *search) + { + rewind (fp); + + ext_search = (char *) malloc (strlen (*search) + 5); + ep = ext_search; + if (selector) + { + ep = stpcpy (ep, "*,"); + ep = stpcpy (ep, *search); + ep = stpcpy (ep, ",*"); + } + else + { + if (*(search)[0] != '*') + *ep++ = '*'; + ep = stpcpy (ep, *search); + if (ep[-1] != '*') + stpcpy (ep, "*"); + } + + while ((pi = collect_pkg_info (fp, &pi_buf, true))) + { + /* Skip debuginfo packages */ + if (PathMatchSpecA (pi->name, "*-debuginfo")) + continue; + if (selector) + { + /* search only curr version info for the dependency */ + if (((selector & SRCH_REQS) && pi->curr.depends2 + && PathMatchSpecA (pi->curr.depends2, ext_search)) + || ((selector & SRCH_BLDREQS) && pi->curr.build_depends + && PathMatchSpecA (pi->curr.build_depends, ext_search))) + printf ("%s : %s\n", pi->name, pi->sdesc); + } + else if (PathMatchSpecA (pi->name, ext_search) + || (pi->sdesc && PathMatchSpecA (pi->sdesc, ext_search))) + printf ("%s : %s\n", pi->name, pi->sdesc); + free_pkg_info (&pi_buf); + } + free (ext_search); + ++search; + } + return 0; } +/* Queries Cygwin web site for packages containing files matching a regexp. + Return value is 1 if there was a problem, otherwise 0. */ +static int +package_grep (const char *search) +{ + /* construct the actual URL by escaping */ + char *url = (char *) alloca (sizeof (grep_base_url) + strlen (ARCH_str) + + strlen (search) * 3); + strcpy (url, grep_base_url); + + char *dest; + for (dest = &url[sizeof (grep_base_url) - 1]; *search; search++) + { + if (isalnum (*search) + || memchr (safe_chars, *search, sizeof (safe_chars) - 1)) + { + *dest++ = *search; + } + else + { + *dest++ = '%'; + sprintf (dest, "%02x", (unsigned char) *search); + dest += 2; + } + } + strcpy (dest, ARCH_str); + + return fetch_url (url, stdout); +} + static void __attribute__ ((__noreturn__)) usage (FILE * stream, int status) { @@ -2102,6 +2901,8 @@ Usage: cygcheck [-v] [-h] PROGRAM\n\ cygcheck -k\n\ cygcheck -f FILE [FILE]...\n\ cygcheck -l [PACKAGE]...\n\ + cygcheck -i [--inst] [--curr] [--prev] [--test] [PATTERN]...\n\ + cygcheck -e [PATTERN]...\n\ cygcheck -p REGEXP\n\ cygcheck --delete-orphaned-installation-keys\n\ cygcheck -h\n\n\ @@ -2111,28 +2912,50 @@ At least one command option or a PROGRAM is required, as shown above.\n\ \n\ PROGRAM list library (DLL) dependencies of PROGRAM\n\ -c, --check-setup show installed version of PACKAGE and verify integrity\n\ - (or for all installed packages if none specified)\n\ - -d, --dump-only just list packages, do not verify (with -c)\n\ + (or for all installed packages if none specified)\n\ + -d, --dump-only do not verify packages (with -c)\n\ + -n, --names-only just list package names (implies -c -d)\n\ -s, --sysinfo produce diagnostic system information (implies -c)\n\ -r, --registry also scan registry for Cygwin settings (with -s)\n\ -k, --keycheck perform a keyboard check session (must be run from a\n\ - plain console only, not from a pty/rxvt/xterm)\n\ - -f, --find-package find the package to which FILE belongs\n\ - -l, --list-package list contents of PACKAGE (or all packages if none given)\n\ + plain console only, not from a pty/rxvt/xterm)\n\ + -e, --search-package list all available packages matching PATTERN\n\ + PATTERN is a glob pattern with * and ? as wildcard chars\n\ + search selection specifiers (multiple allowed):\n\ + --requires list packages depending on packages matching PATTERN\n\ + --build-reqs list packages depending on packages matching PATTERN\n\ + when building these packages\n\ + only the most recent available releases are checked\n\ + to collect requirements info\n\ + -i, --info-package print full info on packages matching PATTERN, installed\n\ + and available releases\n\ + PATTERN is a glob pattern with * and ? as wildcard chars\n\ + info selection specifiers (multiple allowed):\n\ + --inst only print info on installed package release\n\ + --curr only print info on most recent available release\n\ + --prev only print info on older, still available releases\n\ + --test only print info on test releases\n\ + --deps additionally print package dependencies\n\ + --build-deps additionally print package build dependencies\n\ + -f, --find-package find the installed package to which FILE belongs\n\ + -l, --list-package list contents of the installed PACKAGE (or all\n\ + installed packages if none given)\n\ -p, --package-query search for REGEXP in the entire cygwin.com package\n\ - repository (requires internet connectivity)\n\ + repository (requires internet connectivity)\n\ --delete-orphaned-installation-keys\n\ - Delete installation keys of old, now unused\n\ - installations from the registry. Requires the right\n\ - to change the registry.\n\ + Delete installation keys of old, now unused\n\ + installations from the registry. Requires the right\n\ + to change the registry.\n\ -v, --verbose produce more verbose output\n\ -h, --help annotate output with explanatory comments when given\n\ - with another command, otherwise print this help\n\ + with another command, otherwise print this help\n\ -V, --version print the version of cygcheck and exit\n\ \n\ -Note: -c, -f, and -l only report on packages that are currently installed. To\n\ - search all official Cygwin packages use -p instead. The -p REGEXP matches\n\ - package names, descriptions, and names of files/paths within all packages.\n\ +Notes:\n\ + -c, -f, and -l only report on packages that are currently installed.\n\ + -i and -e report on available packages, too. To search for files within\n\ + uninstalled Cygwin packages, use -p. The -p REGEXP matches package names,\n\ + descriptions, and names of files/paths within all packages.\n\ \n"); exit (status); } @@ -2140,12 +2963,23 @@ Note: -c, -f, and -l only report on packages that are currently installed. To\n\ struct option longopts[] = { {"check-setup", no_argument, NULL, 'c'}, {"dump-only", no_argument, NULL, 'd'}, + {"names-only", no_argument, NULL, 'n'}, {"sysinfo", no_argument, NULL, 's'}, {"registry", no_argument, NULL, 'r'}, {"verbose", no_argument, NULL, 'v'}, {"keycheck", no_argument, NULL, 'k'}, {"find-package", no_argument, NULL, 'f'}, {"list-package", no_argument, NULL, 'l'}, + {"info-packages", no_argument, NULL, 'i'}, + {"inst", no_argument, NULL, 0x1001}, + {"curr", no_argument, NULL, 0x1002}, + {"prev", no_argument, NULL, 0x1004}, + {"test", no_argument, NULL, 0x1008}, + {"deps", no_argument, NULL, 0x1010}, + {"build-deps", no_argument, NULL, 0x1020}, + {"requires", no_argument, NULL, 0x1040}, + {"build-reqs", no_argument, NULL, 0x1080}, + {"search-packages", no_argument, NULL, 'e'}, {"package-query", no_argument, NULL, 'p'}, {"delete-orphaned-installation-keys", no_argument, NULL, CO_DELETE_KEYS}, {"help", no_argument, NULL, 'h'}, @@ -2153,13 +2987,13 @@ struct option longopts[] = { {0, no_argument, NULL, 0} }; -static char opts[] = "cdsrvkflphV"; +static char opts[] = "cdnsrvkfliephV"; static void print_version () { - printf ("cygcheck (msys) %d.%d.%d\n" - "System Checker for Msys\n" + printf ("cygcheck (cygwin) %d.%d.%d\n" + "System Checker for Cygwin\n" "Copyright (C) 1998 - %s Cygwin Authors\n" "This is free software; see the source for copying conditions. " "There is NO\n" @@ -2181,11 +3015,6 @@ nuke (char *ev) putenv (s); } -extern "C" { -uintptr_t (*cygwin_internal) (int, ...); -WCHAR cygwin_dll_path[32768]; -}; - static void load_cygwin (int& argc, char **&argv) { @@ -2194,8 +3023,8 @@ load_cygwin (int& argc, char **&argv) if (!(h = LoadLibrary ("msys-2.0.dll"))) return; GetModuleFileNameW (h, cygwin_dll_path, 32768); - if ((cygwin_internal = (uintptr_t (*) (int, ...)) - GetProcAddress (h, "cygwin_internal"))) + if ((cygwin_internal = (uintptr_t (*) (cygwin_getinfo_types, ...)) + GetProcAddress (h, "cygwin_internal"))) { char **av = (char **) cygwin_internal (CW_ARGV); if (av && ((uintptr_t) av != (uintptr_t) -1)) @@ -2232,6 +3061,7 @@ load_cygwin (int& argc, char **&argv) putenv (path); } } + /* GDB chokes when the DLL got unloaded and, for some reason, fails to set any breakpoint after the fact. */ if (!IsDebuggerPresent ()) @@ -2265,6 +3095,11 @@ main (int argc, char **argv) case 'd': dump_only = 1; break; + case 'n': + check_setup = 1; + dump_only = 1; + names_only = 1; + break; case 'r': registry = 1; break; @@ -2280,6 +3115,24 @@ main (int argc, char **argv) case 'l': list_package = 1; break; + case 'i': + info_packages = 1; + break; + case 0x1001: + case 0x1002: + case 0x1004: + case 0x1008: + case 0x1010: + case 0x1020: + info_selector |= (i & 0x3f); + break; + case 'e': + search_packages = 1; + break; + case 0x1040: + case 0x1080: + search_selector |= (i & 0xc0); + break; case 'p': grep_packages = 1; break; @@ -2303,7 +3156,7 @@ main (int argc, char **argv) putenv ("POSIXLY_CORRECT="); if ((argc == 0) && !sysinfo && !keycheck && !check_setup && !list_package - && !del_orphaned_reg) + && !del_orphaned_reg && !info_packages && !search_packages) { if (givehelp) usage (stdout, 0); @@ -2312,18 +3165,26 @@ main (int argc, char **argv) } if ((check_setup || sysinfo || find_package || list_package || grep_packages - || del_orphaned_reg) + || del_orphaned_reg || info_packages || search_packages) && keycheck) usage (stderr, 1); - if ((find_package || list_package || grep_packages) + if ((find_package || list_package || grep_packages + || info_packages || search_packages) && (check_setup || del_orphaned_reg)) usage (stderr, 1); if (dump_only && !check_setup && !sysinfo) usage (stderr, 1); - if (find_package + list_package + grep_packages > 1) + if (find_package + list_package + grep_packages + + info_packages + search_packages > 1) + usage (stderr, 1); + + if (!info_packages && info_selector) + usage (stderr, 1); + + if (!search_packages && search_selector) usage (stderr, 1); if (keycheck) @@ -2332,6 +3193,10 @@ main (int argc, char **argv) del_orphaned_reg_installations (); if (grep_packages) return package_grep (*argv); + if (info_packages) + return package_info (argv, info_selector); + if (search_packages) + return package_search (argv, search_selector); init_paths (); @@ -2347,7 +3212,7 @@ main (int argc, char **argv) } if (check_setup) - dump_setup (verbose, argv, !dump_only); + dump_setup (verbose, argv, !dump_only, names_only); else if (find_package) package_find (verbose, argv); else if (list_package) @@ -2366,7 +3231,7 @@ main (int argc, char **argv) if (!check_setup) { puts (""); - dump_setup (verbose, NULL, !dump_only); + dump_setup (verbose, NULL, !dump_only, FALSE); } if (!givehelp) diff --git a/winsup/utils/mingw/cygcheck.h b/winsup/utils/mingw/cygcheck.h new file mode 100644 index 0000000000..fb104a8e25 --- /dev/null +++ b/winsup/utils/mingw/cygcheck.h @@ -0,0 +1,17 @@ +/* cygcheck.h + +This file is part of Cygwin. + +This software is a copyrighted work licensed under the terms of the +Cygwin license. Please consult the file "CYGWIN_LICENSE" for +details. */ + +#pragma once + +struct pkgver +{ + char *name; + char *ver; +}; + +extern pkgver *get_installed_packages (char **, size_t * = NULL); diff --git a/winsup/utils/mingw/dump_setup.cc b/winsup/utils/mingw/dump_setup.cc index ec70da0db0..050679a0d3 100644 --- a/winsup/utils/mingw/dump_setup.cc +++ b/winsup/utils/mingw/dump_setup.cc @@ -21,6 +21,7 @@ details. */ #include #include #include "path.h" +#include "cygcheck.h" #include static int package_len = 20; @@ -151,12 +152,6 @@ dump_file (const char *msg, const char *fn) return printed; } -struct pkgver -{ - char *name; - char *ver; -}; - extern "C" { int compar (const void *a, const void *b) @@ -403,8 +398,8 @@ check_package_files (int verbose, char *package) * Returns a calloc'd sorted list of packages or NULL if no info. * The last entry in the list is {NULL,NULL}. */ -static pkgver * -get_packages (char **argv) +pkgver * +get_installed_packages (char **argv, size_t *count) { char *setup = cygpath ("/etc/setup/installed.db", NULL); FILE *fp = fopen (setup, "rt"); @@ -464,15 +459,20 @@ get_packages (char **argv) fclose (fp); + if (count) + *count = n; + return packages; } void -dump_setup (int verbose, char **argv, bool check_files) +dump_setup (int verbose, char **argv, bool check_files, bool names_only) { - pkgver *packages = get_packages(argv); + pkgver *packages = get_installed_packages (argv); + + if (!names_only) + puts ("Cygwin Package Information"); - puts ("Cygwin Package Information"); if (packages == NULL) { puts ("No setup information found"); @@ -486,12 +486,15 @@ dump_setup (int verbose, char **argv, bool check_files) puts (""); } - printf ("%-*s %-*s%s\n", package_len, "Package", - check_files ? version_len : 7, "Version", - check_files ? " Status" : ""); + if (!names_only) + printf ("%-*s %-*s%s\n", package_len, "Package", + check_files ? version_len : 7, "Version", + check_files ? " Status" : ""); for (int i = 0; packages[i].name; i++) { - if (check_files) + if (names_only) + printf ("%s\n", packages[i].name); + else if (check_files) printf ("%-*s %-*s%s\n", package_len, packages[i].name, version_len, packages[i].ver, check_package_files (verbose, packages[i].name) @@ -509,7 +512,7 @@ dump_setup (int verbose, char **argv, bool check_files) void package_list (int verbose, char **argv) { - pkgver *packages = get_packages(argv); + pkgver *packages = get_installed_packages (argv); if (packages == NULL) { puts ("No setup information found"); @@ -549,7 +552,7 @@ package_list (int verbose, char **argv) void package_find (int verbose, char **argv) { - pkgver *packages = get_packages(NULL); + pkgver *packages = get_installed_packages (NULL); if (packages == NULL) { puts ("No setup information found"); diff --git a/winsup/utils/mingw/strace.cc b/winsup/utils/mingw/strace.cc index f6186beeb6..a6b2e5d548 100644 --- a/winsup/utils/mingw/strace.cc +++ b/winsup/utils/mingw/strace.cc @@ -835,7 +835,7 @@ dotoggle (pid_t pid) child_pid = (DWORD) cygwin_internal (CW_CYGWIN_PID_TO_WINPID, pid); if (!child_pid) { - warn (0, "no such msys pid - %d", pid); + warn (0, "no such cygwin pid - %d", pid); child_pid = pid; } if (cygwin_internal (CW_STRACE_TOGGLE, child_pid)) diff --git a/winsup/utils/newgrp.c b/winsup/utils/newgrp.c new file mode 100644 index 0000000000..414e8cdf8e --- /dev/null +++ b/winsup/utils/newgrp.c @@ -0,0 +1,248 @@ +/* newgrp.c + +This file is part of Cygwin. + +This software is a copyrighted work licensed under the terms of the +Cygwin license. Please consult the file "CYGWIN_LICENSE" for +details. */ + +#define _GNU_SOURCE 1 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#define PATH_PREFIX "PATH=/usr/bin:" + +char * +create_env_var (const char *name, const char *val) +{ + char *var, *cp; + + var = (char *) calloc (strlen (name) + strlen (val) + 2, sizeof (char *)); + cp = stpcpy (var, name); + *cp++ = '='; + stpcpy (cp, val); + return var; +} + +char ** +create_child_env (struct passwd *pw) +{ + char **posix_env, *cp; + wchar_t *win_env, *wep; + size_t max_cnt = 0; + size_t idx = 0; + HANDLE token; + + /* Fecth Windows default environment of current user */ + if (!OpenProcessToken (GetCurrentProcess (), + TOKEN_QUERY | TOKEN_DUPLICATE, &token)) + { + fprintf (stderr, "%s: creating environment failed with error %u " + "(OpenProcessToken)\n", + program_invocation_short_name, GetLastError ()); + return NULL; + } + if (!CreateEnvironmentBlock ((PVOID *) &win_env, token, FALSE)) + { + fprintf (stderr, "%s: creating environment failed with error %u " + "(CreateEnvironmentBlock)\n", + program_invocation_short_name, GetLastError ()); + CloseHandle (token); + return NULL; + } + CloseHandle (token); + /* Convert to Posix env */ + for (wep = win_env; *wep; wep = wcschr (wep, '\0') + 1) + ++max_cnt; + posix_env = (char **) calloc (max_cnt + 6, sizeof (char *)); + if (!posix_env) + { + fprintf (stderr, "%s: allocating environment failed: %s\n", + program_invocation_short_name, strerror (errno)); + return NULL; + } + for (wep = win_env; *wep; ++idx, wep = wcschr (wep, '\0') + 1) + { + /* For $PATH we must prepend /usr/bin to the converted POSIX path list */ + if (!wcsncasecmp (wep, L"PATH=", 5)) + { + size_t len = cygwin_conv_path_list (CCP_WIN_W_TO_POSIX, + wep + 5, NULL, 0); + posix_env[idx] = (char *) calloc (sizeof (PATH_PREFIX) + len, + sizeof (char *)); + if (!posix_env[idx]) + { + fprintf (stderr, "%s: allocating environment failed: %s\n", + program_invocation_short_name, strerror (errno)); + return NULL; + } + cp = stpcpy (posix_env[idx], PATH_PREFIX); + cygwin_conv_path_list (CCP_WIN_W_TO_POSIX, wep + 5, cp, len); + } + else + { + size_t len = wcstombs (NULL, wep, 0); + + if (len == (size_t) -1) + { + fprintf (stderr, + "%s: invalid char in environment variable: %ls\n", + program_invocation_short_name, wep); + return NULL; + } + posix_env[idx] = (char *) calloc (len + 1, sizeof (char *)); + if (!posix_env[idx]) + { + fprintf (stderr, "%s: allocating environment failed: %s\n", + program_invocation_short_name, strerror (errno)); + return NULL; + } + wcstombs (posix_env[idx], wep, len + 1); + } + } + DestroyEnvironmentBlock (win_env); + /* Add USER, LOGNAME, HOME, LANG, just like sshd */ + posix_env[idx++] = create_env_var ("USER", pw->pw_name); + posix_env[idx++] = create_env_var ("LOGNAME", pw->pw_name); + posix_env[idx++] = create_env_var ("HOME", pw->pw_dir); + cp = getenv("LANG"); + if (cp) + posix_env[idx] = create_env_var ("LANG", cp); + cp = getenv("TERM"); + if (cp) + posix_env[idx] = create_env_var ("TERM", cp); + return posix_env; +} + +int +main (int argc, const char **argv) +{ + const char *cmd, **cmd_av, *fake_av[2]; + struct passwd *pw; + struct group *gr; + char **child_env; + bool new_child_env = false; + gid_t gid; + int ngrps; + + setlocale (LC_ALL, ""); + + if (argc < 2 || (argv[1][0] == '-' && argv[1][1])) + { + fprintf (stderr, "Usage: %s [-] [group] [command [args...]]\n", + program_invocation_short_name); + return 1; + } + + /* Check if we have to regenerate a stock environment */ + if (argv[1][0] == '-') + { + new_child_env = true; + --argc; + ++argv; + } + + pw = getpwuid (getuid ()); + + /* Fetch group */ + if (argv[1] == NULL) + { + gid = pw->pw_gid; + gr = getgrgid (gid); + } + else + { + gr = getgrnam (argv[1]); + if (!gr) + { + fprintf (stderr, "%s: group '%s' does not exist\n", + program_invocation_short_name, argv[1]); + return 2; + } + gid = gr->gr_gid; + --argc; + ++argv; + } + + /* Windows does not allow to set the primary group to another group if + it's not already part of the supplementary group list. However, our + setgid() allows this, otherwise OpenSSH and other account-switching + processes wouldn't work, given we only actually switch the user + context at setuid() time. Therefore we test this here and don't + allow other groups. */ + ngrps = getgroups (0, NULL); + if (ngrps > 0) + { + gid_t *glist = (gid_t *) alloca (ngrps * sizeof (gid_t)); + + ngrps = getgroups (ngrps, glist); + while (--ngrps >= 0) + if (gid == glist[ngrps]) + break; + if (ngrps < 0) + { + fprintf (stderr, "%s: can't switch primary group to '%s'\n", + program_invocation_short_name, gr->gr_name); + return 2; + } + } + + /* Set primary group */ + if (setgid (gid) != 0) + { + fprintf (stderr, "%s: can't switch primary group to '%s'\n", + program_invocation_short_name, gr->gr_name); + return 2; + } + + /* Maybe generate stock child environment */ + if (!new_child_env) + child_env = environ; + else + { + child_env = create_child_env (pw); + if (!child_env) + return 3; + chdir (pw->pw_dir); + } + + /* Set argc/argv for execvpe */ + --argc; + ++argv; + if (argc < 1) + { + if (!pw) + cmd = "/usr/bin/bash"; + else + cmd = pw->pw_shell; + fake_av[0] = new_child_env ? "-" : cmd; + fake_av[1] = NULL; + cmd_av = fake_av; + } + else + { + cmd = argv[0]; + cmd_av = argv; + } + + /* Exec child process */ + execvpe (cmd, (char **) cmd_av, child_env); + + /* Oops */ + fprintf (stderr, "%s: failed to start '%s': %s\n", + program_invocation_short_name, cmd, strerror (errno)); + return 4; +} diff --git a/winsup/utils/tzmap-from-unicode.org b/winsup/utils/tzmap-from-unicode.org index 5f55a51e34..6b7907a320 100755 --- a/winsup/utils/tzmap-from-unicode.org +++ b/winsup/utils/tzmap-from-unicode.org @@ -24,14 +24,15 @@ echo " This table maps Windows timezone keynames and countries per ISO 3166-1 echo " POSIX-compatible timezone IDs." echo "" echo " The mapping from unicode.org is just a bit incomplete. It doesn't contain" -echo " a few timezones available on Windows 8.1:" +echo " some (deprecated) timezones available since Windows 8.1:" echo "" -echo " E. Europe Standard Time" echo " Mid-Atlantic Standard Time" echo " Kamchatka Standard Time" echo "" echo " as well as a few combinations which got a new Windows timezone name" +echo " but may still be in use somewhere..." echo "" +echo " E. Europe Standard Time/CY" echo " Eastern Standard Time/TC" echo " Egypt Standard Time/PS" echo " Greenwich Standard Time/EH" @@ -39,14 +40,8 @@ echo " Hawaiian Standard Time/TK" echo " Kaliningrad Standard Time/BY" echo " SA Pacific Standard Time/HT " echo " South Africa Standard Time/LY" +echo "*/" echo "" -echo " It also doesn't contain deprecated country codes used in older" -echo " OSes, namely:" -echo "" -echo " CS (Serbian and Montenegro, dissolved, now RS and ME) used in Vista" -echo " " -echo " While these are apparently old, they are required here to get a complete" -echo " mapping on all supported OSes. */" echo "struct" echo "{" echo " PCWSTR win_tzkey;" @@ -59,8 +54,6 @@ wget -O - "${ZONES_FILE}" | \ sed -n -e 's#territory="001"#territory=""# s#Asia/Calcutta#Asia/Kolkata# s#.*mapZone other=\("[^"]*"\) territory=\("[^"]*"\) type=\("[^"]*"\).*# { L\1, L\2, L\3 },#p' - echo ' { L"Central Europe Standard Time", L"CS", L"Europe/Belgrade" },' - echo ' { L"E. Europe Standard Time", L"", L"Asia/Nicosia" },' echo ' { L"E. Europe Standard Time", L"CY", L"Asia/Nicosia" },' echo ' { L"Eastern Standard Time", L"TC", L"America/Grand_Turk" },' echo ' { L"Egypt Standard Time", L"PS", L"Asia/Gaza Asia/Hebron" },' diff --git a/winsup/utils/tzmap.h b/winsup/utils/tzmap.h index 9021181a5b..7a8cf44cd9 100644 --- a/winsup/utils/tzmap.h +++ b/winsup/utils/tzmap.h @@ -12,14 +12,15 @@ POSIX-compatible timezone IDs. The mapping from unicode.org is just a bit incomplete. It doesn't contain - a few timezones available on Windows 8.1: + some (deprecated) timezones available since Windows 8.1: - E. Europe Standard Time Mid-Atlantic Standard Time Kamchatka Standard Time as well as a few combinations which got a new Windows timezone name + but may still be in use somewhere... + E. Europe Standard Time/CY Eastern Standard Time/TC Egypt Standard Time/PS Greenwich Standard Time/EH @@ -27,9 +28,8 @@ Kaliningrad Standard Time/BY SA Pacific Standard Time/HT South Africa Standard Time/LY +*/ - While these are apparently old, they are required here to get a complete - mapping on all supported OSes. */ struct { PCWSTR win_tzkey; @@ -103,12 +103,11 @@ struct { L"Central America Standard Time", L"NI", L"America/Managua" }, { L"Central America Standard Time", L"SV", L"America/El_Salvador" }, { L"Central America Standard Time", L"ZZ", L"Etc/GMT+6" }, - { L"Central Asia Standard Time", L"", L"Asia/Almaty" }, + { L"Central Asia Standard Time", L"", L"Asia/Bishkek" }, { L"Central Asia Standard Time", L"AQ", L"Antarctica/Vostok" }, { L"Central Asia Standard Time", L"CN", L"Asia/Urumqi" }, { L"Central Asia Standard Time", L"IO", L"Indian/Chagos" }, { L"Central Asia Standard Time", L"KG", L"Asia/Bishkek" }, - { L"Central Asia Standard Time", L"KZ", L"Asia/Almaty Asia/Qostanay" }, { L"Central Asia Standard Time", L"ZZ", L"Etc/GMT-6" }, { L"Central Brazilian Standard Time", L"", L"America/Cuiaba" }, { L"Central Brazilian Standard Time", L"BR", L"America/Cuiaba America/Campo_Grande" }, @@ -133,12 +132,12 @@ struct { L"Central Pacific Standard Time", L"VU", L"Pacific/Efate" }, { L"Central Pacific Standard Time", L"ZZ", L"Etc/GMT-11" }, { L"Central Standard Time", L"", L"America/Chicago" }, - { L"Central Standard Time", L"CA", L"America/Winnipeg America/Rainy_River America/Rankin_Inlet America/Resolute" }, - { L"Central Standard Time", L"MX", L"America/Matamoros" }, + { L"Central Standard Time", L"CA", L"America/Winnipeg America/Rankin_Inlet America/Resolute" }, + { L"Central Standard Time", L"MX", L"America/Matamoros America/Ojinaga" }, { L"Central Standard Time", L"US", L"America/Chicago America/Indiana/Knox America/Indiana/Tell_City America/Menominee America/North_Dakota/Beulah America/North_Dakota/Center America/North_Dakota/New_Salem" }, { L"Central Standard Time", L"ZZ", L"CST6CDT" }, { L"Central Standard Time (Mexico)", L"", L"America/Mexico_City" }, - { L"Central Standard Time (Mexico)", L"MX", L"America/Mexico_City America/Bahia_Banderas America/Merida America/Monterrey" }, + { L"Central Standard Time (Mexico)", L"MX", L"America/Mexico_City America/Bahia_Banderas America/Merida America/Monterrey America/Chihuahua " }, { L"Chatham Islands Standard Time", L"", L"Pacific/Chatham" }, { L"Chatham Islands Standard Time", L"NZ", L"Pacific/Chatham" }, { L"China Standard Time", L"", L"Asia/Shanghai" }, @@ -164,7 +163,6 @@ struct { L"E. Africa Standard Time", L"ZZ", L"Etc/GMT-3" }, { L"E. Australia Standard Time", L"", L"Australia/Brisbane" }, { L"E. Australia Standard Time", L"AU", L"Australia/Brisbane Australia/Lindeman" }, - { L"E. Europe Standard Time", L"", L"Asia/Nicosia" }, { L"E. Europe Standard Time", L"", L"Europe/Chisinau" }, { L"E. Europe Standard Time", L"CY", L"Asia/Nicosia" }, { L"E. Europe Standard Time", L"MD", L"Europe/Chisinau" }, @@ -174,7 +172,7 @@ struct { L"Easter Island Standard Time", L"CL", L"Pacific/Easter" }, { L"Eastern Standard Time", L"", L"America/New_York" }, { L"Eastern Standard Time", L"BS", L"America/Nassau" }, - { L"Eastern Standard Time", L"CA", L"America/Toronto America/Iqaluit America/Montreal America/Nipigon America/Pangnirtung America/Thunder_Bay" }, + { L"Eastern Standard Time", L"CA", L"America/Toronto America/Iqaluit" }, { L"Eastern Standard Time", L"TC", L"America/Grand_Turk" }, { L"Eastern Standard Time", L"US", L"America/New_York America/Detroit America/Indiana/Petersburg America/Indiana/Vincennes America/Indiana/Winamac America/Kentucky/Monticello America/Louisville" }, { L"Eastern Standard Time", L"ZZ", L"EST5EDT" }, @@ -192,7 +190,7 @@ struct { L"FLE Standard Time", L"FI", L"Europe/Helsinki" }, { L"FLE Standard Time", L"LT", L"Europe/Vilnius" }, { L"FLE Standard Time", L"LV", L"Europe/Riga" }, - { L"FLE Standard Time", L"UA", L"Europe/Kiev Europe/Uzhgorod Europe/Zaporozhye" }, + { L"FLE Standard Time", L"UA", L"Europe/Kiev" }, { L"Fiji Standard Time", L"", L"Pacific/Fiji" }, { L"Fiji Standard Time", L"FJ", L"Pacific/Fiji" }, { L"GMT Standard Time", L"", L"Europe/London" }, @@ -235,7 +233,6 @@ struct { L"Hawaiian Standard Time", L"CK", L"Pacific/Rarotonga" }, { L"Hawaiian Standard Time", L"PF", L"Pacific/Tahiti" }, { L"Hawaiian Standard Time", L"TK", L"Pacific/Fakaofo" }, - { L"Hawaiian Standard Time", L"UM", L"Pacific/Johnston" }, { L"Hawaiian Standard Time", L"US", L"Pacific/Honolulu" }, { L"Hawaiian Standard Time", L"ZZ", L"Etc/GMT+10" }, { L"India Standard Time", L"", L"Asia/Kolkata" }, @@ -278,12 +275,12 @@ struct { L"Morocco Standard Time", L"EH", L"Africa/El_Aaiun" }, { L"Morocco Standard Time", L"MA", L"Africa/Casablanca" }, { L"Mountain Standard Time", L"", L"America/Denver" }, - { L"Mountain Standard Time", L"CA", L"America/Edmonton America/Cambridge_Bay America/Inuvik America/Yellowknife" }, - { L"Mountain Standard Time", L"MX", L"America/Ojinaga" }, + { L"Mountain Standard Time", L"CA", L"America/Edmonton America/Cambridge_Bay America/Inuvik" }, + { L"Mountain Standard Time", L"MX", L"America/Ciudad_Juarez" }, { L"Mountain Standard Time", L"US", L"America/Denver America/Boise" }, { L"Mountain Standard Time", L"ZZ", L"MST7MDT" }, - { L"Mountain Standard Time (Mexico)", L"", L"America/Chihuahua" }, - { L"Mountain Standard Time (Mexico)", L"MX", L"America/Chihuahua America/Mazatlan" }, + { L"Mountain Standard Time (Mexico)", L"", L"America/Mazatlan" }, + { L"Mountain Standard Time (Mexico)", L"MX", L"America/Mazatlan" }, { L"Myanmar Standard Time", L"", L"Asia/Rangoon" }, { L"Myanmar Standard Time", L"CC", L"Indian/Cocos" }, { L"Myanmar Standard Time", L"MM", L"Asia/Rangoon" }, @@ -315,7 +312,7 @@ struct { L"Pacific Standard Time", L"US", L"America/Los_Angeles" }, { L"Pacific Standard Time", L"ZZ", L"PST8PDT" }, { L"Pacific Standard Time (Mexico)", L"", L"America/Tijuana" }, - { L"Pacific Standard Time (Mexico)", L"MX", L"America/Tijuana America/Santa_Isabel" }, + { L"Pacific Standard Time (Mexico)", L"MX", L"America/Tijuana" }, { L"Pakistan Standard Time", L"", L"Asia/Karachi" }, { L"Pakistan Standard Time", L"PK", L"Asia/Karachi" }, { L"Paraguay Standard Time", L"", L"America/Asuncion" }, @@ -433,7 +430,7 @@ struct { L"Taipei Standard Time", L"", L"Asia/Taipei" }, { L"Taipei Standard Time", L"TW", L"Asia/Taipei" }, { L"Tasmania Standard Time", L"", L"Australia/Hobart" }, - { L"Tasmania Standard Time", L"AU", L"Australia/Hobart Australia/Currie Antarctica/Macquarie" }, + { L"Tasmania Standard Time", L"AU", L"Australia/Hobart Antarctica/Macquarie" }, { L"Tocantins Standard Time", L"", L"America/Araguaina" }, { L"Tocantins Standard Time", L"BR", L"America/Araguaina" }, { L"Tokyo Standard Time", L"", L"Asia/Tokyo" }, @@ -534,7 +531,7 @@ struct { L"W. Mongolia Standard Time", L"MN", L"Asia/Hovd" }, { L"West Asia Standard Time", L"", L"Asia/Tashkent" }, { L"West Asia Standard Time", L"AQ", L"Antarctica/Mawson" }, - { L"West Asia Standard Time", L"KZ", L"Asia/Oral Asia/Aqtau Asia/Aqtobe Asia/Atyrau" }, + { L"West Asia Standard Time", L"KZ", L"Asia/Oral Asia/Almaty Asia/Aqtau Asia/Aqtobe Asia/Atyrau Asia/Qostanay" }, { L"West Asia Standard Time", L"MV", L"Indian/Maldives" }, { L"West Asia Standard Time", L"TF", L"Indian/Kerguelen" }, { L"West Asia Standard Time", L"TJ", L"Asia/Dushanbe" }, diff --git a/winsup/utils/tzset.c b/winsup/utils/tzset.c index d369ff7a2c..0660da7d1d 100644 --- a/winsup/utils/tzset.c +++ b/winsup/utils/tzset.c @@ -15,10 +15,6 @@ details. */ #include #include -#ifndef GEOID_NOT_AVAILABLE -#define GEOID_NOT_AVAILABLE -1 -#endif - /* The auto-generated tzmap.h contains the mapping table from Windows timezone and country per ISO 3166-1 to POSIX timezone. For more info, see the file itself. */ @@ -35,49 +31,6 @@ static struct option longopts[] = static char opts[] = "hV"; -#define REG_TZINFO L"SYSTEM\\CurrentControlSet\\Control\\TimeZoneInformation" -#define REG_TZDB L"SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Time Zones" - -static inline HKEY -reg_open (HKEY pkey, PCWSTR path, const char *msg) -{ - LONG ret; - HKEY hkey; - - ret = RegOpenKeyExW (pkey, path, 0, KEY_READ, &hkey); - if (ret == ERROR_SUCCESS) - return hkey; - if (msg) - fprintf (stderr, "%s: cannot open registry %s, error code %" PRIu32 "\n", - program_invocation_short_name, msg, (unsigned int) ret); - return NULL; -} - -/* For symmetry */ -#define reg_close(hkey) RegCloseKey(hkey) - -static inline BOOL -reg_query (HKEY hkey, PCWSTR value, PWCHAR buf, DWORD size, const char *msg) -{ - LONG ret; - DWORD type; - - ret = RegQueryValueExW (hkey, value, 0, &type, (LPBYTE) buf, &size); - if (ret == ERROR_SUCCESS) - return TRUE; - if (msg) - fprintf (stderr, "%s: cannot query registry %s, error code %" PRIu32 "\n", - program_invocation_short_name, msg, (unsigned int) ret); - return FALSE; -} - -static inline BOOL -reg_enum (HKEY hkey, int idx, PWCHAR name, DWORD size) -{ - return RegEnumKeyExW (hkey, idx, name, &size, NULL, NULL, NULL, NULL) - == ERROR_SUCCESS; -} - static void __attribute__ ((__noreturn__)) usage (FILE *stream) { @@ -119,8 +72,8 @@ print_version () int main (int argc, char **argv) { - HKEY hkey; - WCHAR keyname[256], country[10], *spc; + DYNAMIC_TIME_ZONE_INFORMATION tz; + WCHAR country[10], *spc; GEOID geo; int opt, idx, gotit = -1; @@ -141,18 +94,8 @@ main (int argc, char **argv) if (optind < argc) usage (stderr); - /* First fetch current timezone information from registry. */ - hkey = reg_open (HKEY_LOCAL_MACHINE, REG_TZINFO, "timezone information"); - if (!hkey) + if (GetDynamicTimeZoneInformation (&tz) == TIME_ZONE_ID_INVALID) return 1; - /* Vista introduced the TimeZoneKeyName value, which simplifies the - job a lot. */ - if (!reg_query (hkey, L"TimeZoneKeyName", keyname, sizeof keyname, NULL)) - { - reg_close (hkey); - return 1; - } - reg_close (hkey); /* We fetch the current Geo-location of the user and convert it to an ISO 3166-1 compatible nation code. */ @@ -169,7 +112,7 @@ main (int argc, char **argv) /* Now iterate over the mapping table and find the right entry. */ for (idx = 0; idx < TZMAP_SIZE; ++idx) { - if (!wcscasecmp (keyname, tzmap[idx].win_tzkey)) + if (!wcscasecmp (tz.TimeZoneKeyName, tzmap[idx].win_tzkey)) { if (gotit < 0) gotit = idx; @@ -189,7 +132,7 @@ main (int argc, char **argv) fprintf (stderr, "%s: can't find matching POSIX timezone for " "Windows timezone \"%ls\"\n", - program_invocation_short_name, keyname); + program_invocation_short_name, tz.TimeZoneKeyName); return 1; } idx = gotit;