Skip to content
Snippets Groups Projects
  1. Jul 19, 2024
  2. Jul 18, 2024
  3. Jun 26, 2024
  4. Jun 25, 2024
    • Victor Do Nascimento's avatar
      libatomic: Add rcpc3 128-bit atomic operations for AArch64 · 71075749
      Victor Do Nascimento authored
      The introduction of the optional RCPC3 architectural extension for
      Armv8.2-A upwards provides additional support for the release
      consistency model, introducing the Load-Acquire RCpc Pair Ordered, and
      Store-Release Pair Ordered operations in the form of LDIAPP and STILP.
      
      These operations are single-copy atomic on cores which also implement
      LSE2 and, as such, support for these operations is added to Libatomic
      and employed accordingly when the LSE2 and RCPC3 features are detected
      in a given core at runtime.
      
      libatomic/ChangeLog:
      
      	* config/linux/aarch64/atomic_16.S (libat_load_16): Add LRCPC3
      	variant.
      	(libat_store_16): Likewise.
      	* config/linux/aarch64/host-config.h (HWCAP2_LRCPC3): New.
      	(LSE2_LRCPC3_ATOP): Previously LSE2_ATOP.  New ifuncs guarded
      	under it.
      	(has_rcpc3): New.
      71075749
  5. Jun 13, 2024
  6. Jun 12, 2024
    • Victor Do Nascimento's avatar
      Libatomic: Clean up AArch64 `atomic_16.S' implementation file · 7663154c
      Victor Do Nascimento authored
      At present, `atomic_16.S' groups different implementations of the
      same functions together in the file.  Therefore, as an example,
      the LSE2 implementation of `load_16' follows on immediately from its
      core implementation, as does the `store_16' LSE2 implementation.
      
      Such architectural extension-dependent implementations are dependent
      on ifunc support, such that they are guarded by the relevant
      preprocessor macro, i.e.  `#if HAVE_IFUNC'.
      
      Having to apply these guards on a per-function basis adds unnecessary
      clutter to the file and makes its maintenance more error-prone.
      
      We therefore reorganize the layout of the file in such a way that all
      core implementations needing no `#ifdef's are placed first, followed
      by all ifunc-dependent implementations, which can all be guarded by a
      single `#if HAVE_IFUNC', greatly reducing the overall number of
      required `#ifdef' macros.
      
      libatomic/ChangeLog:
      
      	* config/linux/aarch64/atomic_16.S: Reorganize functions in
      	file.
      	(HAVE_FEAT_LSE2): Delete.
      7663154c
    • Victor Do Nascimento's avatar
      Libatomic: Make ifunc selector behavior contingent on importing file · 1af4a845
      Victor Do Nascimento authored
      By querying previously-defined file-identifier macros, `host-config.h'
      is able to get information about its environment and, based on this
      information, select more appropriate function-specific ifunc
      selectors.  This reduces the number of unnecessary feature tests that
      need to be carried out in order to find the best atomic implementation
      for a function at run-time.
      
      An immediate benefit of this is that we can further fine-tune the
      architectural requirements for each atomic function without risk of
      incurring the maintenance and runtime-performance penalties of having
      to maintain an ifunc selector with a huge number of alternatives, most
      of which are irrelevant for any particular function.  Consequently,
      for AArch64 targets, we relax the architectural requirements of
      `compare_exchange_16', which now requires only LSE as opposed to the
      newer LSE2.
      
      The new flexibility provided by this approach also means that certain
      functions can now be called directly, doing away with ifunc selectors
      altogether when only a single implementation is available for it on a
      given target.  As per the macro expansion framework laid out in
      `libatomic_i.h', such functions should have their names prefixed with
      `__atomic_' as opposed to `libat_'.  This is the same prefix applied
      to function names when Libatomic is configured with
      `--disable-gnu-indirect-function'.
      
      To achieve this, these functions unconditionally apply the aliasing
      rule that at present is conditionally applied only when libatomic is
      built without ifunc support, which ensures that the default
      `libat_##NAME' is accessible via the equivalent `__atomic_##NAME' too.
      This is ensured by using the new `ENTRY_ALIASED' macro.
      
      Finally, this means we are able to do away with a whole set of
      function aliases that were needed until now, thus considerably
      cleaning up the implementation.
      
      libatomic/ChangeLog:
      
      	* config/linux/aarch64/atomic_16.S: Remove unnecessary
      	aliasing.
      	(LSE): New.
      	(ENTRY_ALIASED): Likewise.
      	* config/linux/aarch64/host-config.h (LSE_ATOP): New.
      	(LSE2_ATOP): Likewise.
      	(LSE128_ATOP): Likewise.
      	(IFUNC_COND_1): Make its definition conditional on above 3
      	macros.
      	(IFUNC_NCOND): Likewise.
      1af4a845
    • Victor Do Nascimento's avatar
      Libatomic: Define per-file identifier macros · 6edf6fe7
      Victor Do Nascimento authored
      In order to facilitate the fine-tuning of how `libatomic_i.h' and
      `host-config.h' headers are used by different atomic functions, we
      define distinct identifier macros for each file which, in implementing
      atomic operations, imports these headers.
      
      The idea is that different parts of these headers could then be
      conditionally defined depending on the macros set by the file that
      `#include'd them.
      
      Given how it is possible that some file names are generic enough that
      using them as-is for macro names (e.g. flag.c -> FLAG) may potentially
      lead to name clashes with other macros, all file names first have LAT_
      prepended to them such that, for example, flag.c is assigned the
      LAT_FLAG macro.
      
      Libatomic/ChangeLog:
      
      	* cas_n.c (LAT_CAS_N): New.
      	* exch_n.c (LAT_EXCH_N): Likewise.
      	* fadd_n.c (LAT_FADD_N): Likewise.
      	* fand_n.c (LAT_FAND_N): Likewise.
      	* fence.c (LAT_FENCE): Likewise.
      	* fenv.c (LAT_FENV): Likewise.
      	* fior_n.c (LAT_FIOR_N): Likewise.
      	* flag.c (LAT_FLAG): Likewise.
      	* fnand_n.c (LAT_FNAND_N): Likewise.
      	* fop_n.c (LAT_FOP_N): Likewise
      	* fsub_n.c (LAT_FSUB_N): Likewise.
      	* fxor_n.c (LAT_FXOR_N): Likewise.
      	* gcas.c (LAT_GCAS): Likewise.
      	* gexch.c (LAT_GEXCH): Likewise.
      	* glfree.c (LAT_GLFREE): Likewise.
      	* gload.c (LAT_GLOAD): Likewise.
      	* gstore.c (LAT_GSTORE): Likewise.
      	* load_n.c (LAT_LOAD_N): Likewise.
      	* store_n.c (LAT_STORE_N): Likewise.
      	* tas_n.c (LAT_TAS_N): Likewise.
      6edf6fe7
    • Victor Do Nascimento's avatar
      Libatomic: AArch64: Convert all lse128 assembly to .insn directives · f6b9a064
      Victor Do Nascimento authored
      Given the lack of support for the LSE128 instructions in all but the
      the most up-to-date version of Binutils (2.42), having the build-time
      test for assembler support for these instructions often leads to the
      building of Libatomic without support for LSE128-dependent atomic
      function implementations.  This ultimately leads to different people
      having different versions of Libatomic on their machines, depending on
      which assembler was available at compilation time.
      
      Furthermore, the conditional inclusion of these atomic function
      implementations predicated on assembler support leads to a series of
      `#if HAVE_FEAT_LSE128' guards scattered throughout the codebase and
      the need for a series of aliases when the feature flag evaluates
      to false.  The preprocessor macro guards, together with the
      conditional aliasing leads to code that is cumbersome to understand
      and maintain.
      
      Both of the issues highlighted above will only get worse with the
      coming support for LRCPC3 atomics which under the current scheme will
      also require build-time checks.
      
      Consequently, a better option for both consistency across builds and
      code cleanness is to make recourse to the `.inst' directive.  By
      replacing all novel assembly instructions for their hexadecimal
      representation within `.inst's, we ensure that the Libatomic code is
      both considerably cleaner and all machines build the same binary,
      irrespective of binutils version available at compile time.
      
      This patch therefore removes all configure checks for LSE128-support
      in the assembler and all the guards and aliases that were associated
      with `HAVE_FEAT_LSE128'
      
      libatomic/ChangeLog:
      
      	* acinclude.m4 (LIBAT_TEST_FEAT_AARCH64_LSE128): Delete.
      	* auto-config.h.in (HAVE_FEAT_LSE128): Likewise
      	* config/linux/aarch64/atomic_16.S: Replace all LSE128
      	instructions with equivalent `.inst' directives.
      	(HAVE_FEAT_LSE128): Remove all references.
      	* configure: Regenerate.
      	* configure.ac: Remove call to LIBAT_TEST_FEAT_AARCH64_LSE128.
      f6b9a064
  7. Jun 01, 2024
  8. May 31, 2024
    • Rainer Orth's avatar
      testsuite: Adjust several dg-additional-files-options calls [PR115294] · 7e322d57
      Rainer Orth authored
      A recent patch
      
      commit bdc264a1
      Author: Alexandre Oliva <oliva@adacore.com>
      Date:   Thu May 30 02:06:48 2024 -0300
      
          [testsuite] conditionalize dg-additional-sources on target and type
      
      added two additional args to dg-additional-files-options.
      Unfortunately, this completely broke several testsuites like
      
      ERROR: tcl error sourcing /vol/gcc/src/hg/master/local/libatomic/testsuite/../../gcc/testsuite/lib/gcc-dg.exp.
      wrong # args: should be "dg-additional-files-options options source dest type"
      
      since the patch forgot to adjust some of the callers.
      
      This patch fixes that.
      
      Tested on i386-pc-solaris2.11, sparc-sun-solaris2.11, and
      x86_64-pc-linux-gnu.
      
      2024-05-31  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
      
      	libatomic:
      	PR testsuite/115294
      	* testsuite/lib/libatomic.exp (libatomic_target_compile): Pass new
      	dg-additional-files-options args.
      
      	libgomp:
      	PR testsuite/115294
      	* testsuite/lib/libgomp.exp (libgomp_target_compile): Pass new
      	dg-additional-files-options args.
      
      	libitm:
      	PR testsuite/115294
      	* testsuite/lib/libitm.exp (libitm_target_compile): Pass new
      	dg-additional-files-options args.
      
      	libphobos:
      	PR testsuite/115294
      	* testsuite/lib/libphobos.exp (libphobos_target_compile): Pass new
      	dg-additional-files-options args.
      
      	libvtv:
      	PR testsuite/115294
      	* testsuite/lib/libvtv.exp (libvtv_target_compile): Pass new
      	dg-additional-files-options args.
      7e322d57
  9. May 09, 2024
  10. May 07, 2024
    • Zac Walker's avatar
      aarch64: Add aarch64-w64-mingw32 target to libatomic · 0c23efc0
      Zac Walker authored
      libatomic/ChangeLog:
      
      	* configure.tgt: Add aarch64-w64-mingw32 target.
      0c23efc0
    • Rainer Orth's avatar
      build: Derive object names in make_sunver.pl · 35b05a02
      Rainer Orth authored
      The recent move of libgfortran object files to subdirs and the resulting
      breakage of libgfortran.so symbol exports demonstrated how fragile
      deriving object and archive names from their libtool counterparts in the
      Makefiles is.  Therefore, this patch moves that step into
      make_sunver.pl, considerably simplifying the Makefile rules to create
      the version scripts.
      
      Bootstrapped without regressions on i386-pc-solaris2.11 and
      sparc-sun-solaris2.11, verifying that the version scripts are identical
      except for the input filenames.
      
      2024-05-06  Rainer Orth  <ro@CeBiTec.Uni-Bielefeld.DE>
      
      	contrib:
      	* make_sunver.pl: Use File::Basename;
      	Skip -lLIB args.
      	Convert libtool object/archive names to underlying
      	objects/archives.
      
      	libatomic:
      	* Makefile.am [LIBAT_BUILD_VERSIONED_SHLIB_SUN]
      	(libatomic.map-sun): Pass $(libatomic_la_OBJECTS),
      	$(libatomic_la_LIBADD) to make_sunver.pl unmodified.
      	* Makefile.in: Regenerate.
      
      	libffi:
      	* Makefile.am [LIBFFI_BUILD_VERSIONED_SHLIB_SUN] (libffi.map-sun):
      	Pass $(libffi_la_OBJECTS), $(libffi_la_LIBADD) to make_sunver.pl
      	unmodified.
      	* Makefile.in: Regenerate.
      
      	libgfortran:
      	* Makefile.am [LIBGFOR_USE_SYMVER_SUN} (gfortran.ver-sun): Pass
      	$(libgfortran_la_OBJECTS), $(libgfortran_la_LIBADD) to
      	make_sunver.pl unmodified.
      	* Makefile.in: Regenerate.
      
      	libgomp:
      	* Makefile.am [LIBGOMP_BUILD_VERSIONED_SHLIB_SUN]
      	(libgomp.ver-sun): Pass $(libgomp_la_OBJECTS),
      	$(libgomp_la_LIBADD) to make_sunver.pl unmodified.
      	* Makefile.in: Regenerate.
      
      	libitm:
      	* Makefile.am [LIBITM_BUILD_VERSIONED_SHLIB_SUN] (libitm.map-sun):
      	Pass $(libitm_la_OBJECTS), $(libitm_la_LIBADD) to make_sunver.pl
      	unmodified.
      	* Makefile.in: Regenerate.
      
      	libquadmath:
      	* Makefile.am [LIBQUAD_USE_SYMVER_SUN] (quadmath.map-sun): Pass
      	$(libquadmath_la_OBJECTS), $(libquadmath_la_LIBADD) to
      	make_sunver.pl unmodified.
      	* Makefile.in: Regenerate.
      
      	libssp:
      	* Makefile.am [LIBSSP_USE_SYMVER_SUN] (ssp.map-sun): Pass
      	$(libssp_la_OBJECTS), $(libssp_la_LIBADD) to make_sunver.pl
      	unmodified.
      	* Makefile.in: Regenerate.
      
      	libstdc++-v3:
      	* src/Makefile.am [ENABLE_SYMVERS_SUN]
      	(libstdc++-symbols.ver-sun): Pass $(libstdc___la_OBJECTS),
      	$(libstdc___la_LIBADD) to make_sunver.pl unmodified.
      	* src/Makefile.in: Regenerate.
      35b05a02
  11. Apr 27, 2024
  12. Apr 26, 2024
    • Wilco Dijkstra's avatar
      libatomic: Cleanup macros in atomic_16.S · 5716f8da
      Wilco Dijkstra authored
      Cleanup the macros to add the libat_ prefixes in atomic_16.S.  Emit the
      alias to __atomic_<op> when ifuncs are not enabled in the ENTRY macro.
      
      libatomic:
      	* config/linux/aarch64/atomic_16.S: Add __libat_ prefix in the
      	LSE2/LSE128/CORE macros, remove elsewhere.  Add ATOMIC macro.
      5716f8da
  13. Apr 08, 2024
  14. Apr 05, 2024
  15. Apr 04, 2024
    • Wilco Dijkstra's avatar
      libatomic: Fix build for --disable-gnu-indirect-function [PR113986] · 27b6d081
      Wilco Dijkstra authored
      Fix libatomic build to support --disable-gnu-indirect-function on AArch64.
      Always build atomic_16.S, add aliases to the __atomic_ functions if !HAVE_IFUNC.
      Include auto-config.h in atomic_16.S to avoid having to pass defines via
      makefiles.  Fix build if HWCAP_ATOMICS/CPUID are not defined.
      
      libatomic:
      	PR target/113986
      	* Makefile.in: Regenerated.
      	* Makefile.am: Make atomic_16.S not depend on HAVE_IFUNC.
      	Remove predefine of HAVE_FEAT_LSE128.
      	* acinclude.m4: Remove ARCH_AARCH64_HAVE_LSE128.
      	* configure: Regenerated.
      	* config/linux/aarch64/atomic_16.S: Add __atomic_ alias if !HAVE_IFUNC.
      	* config/linux/aarch64/host-config.h: Correctly handle !HAVE_IFUNC.
      	Add defines for HWCAP_ATOMICS and HWCAP_CPUID.
      27b6d081
  16. Feb 15, 2024
  17. Feb 14, 2024
    • Roger Sayle's avatar
      PR other/113336: Fix libatomic testsuite regressions on ARM. · ea767576
      Roger Sayle authored
      This patch is a revised version of the fix for PR other/113336.
      Bootstrapping GCC on arm-linux-gnueabihf with --with-arch=armv6 currently
      has a large number of FAILs in libatomic (regressions since last time I
      attempted this).  The failure mode is related to IFUNC handling with the
      file tas_8_2_.o containing an unresolved reference to the function
      libat_test_and_set_1_i2.
      
      The following one line change, to build tas_1_2_.o when building tas_8_2_.o,
      resolves the problem for me and restores the libatomic testsuite to 44
      expected passes and 5 unsupported tests [from 22 unexpected failures
      and 22 unresolved testcases].
      `
      
      2024-02-14  Roger Sayle  <roger@nextmovesoftware.com>
      	    Victor Do Nascimento  <victor.donascimento@arm.com>
      
      libatomic/ChangeLog
      	PR other/113336
      	* Makefile.am: Build tas_1_2_.o on ARCH_ARM_LINUX
      	* Makefile.in: Regenerate.
      ea767576
  18. Feb 04, 2024
  19. Feb 03, 2024
    • John David Anglin's avatar
      libatomic: Provide FPU exception defines for __hppa__ · 26635401
      John David Anglin authored
      The exception defines in <fenv.h> do not match the exception bits
      in the FPU status register on hppa-linux and hppa64-hpux11.11.  On
      linux, they match the trap enable bits.  On 64-bit hpux, they match
      the exception bits for IA64.  The IA64 bits are in a different
      order and location than HPPA.  HP uses table look ups to reorder
      the bits in code to test and raise exceptions.
      
      All the architectures that I looked at just pass the FPU status
      register to __atomic_feraiseexcept().  The simplest approach for
      hppa is to define FE_INEXACT, etc, to match the status register
      and not include <fenv.h>..
      
      2024-02-03  John David Anglin  <danglin@gcc.gnu.org>
      
      libatomic/ChangeLog:
      
      	PR target/59778
      	* configure.tgt (hppa*): Set ARCH.
      	* config/pa/fenv.c: New file.
      26635401
  20. Jan 29, 2024
  21. Jan 28, 2024
    • Victor Do Nascimento's avatar
      Libatomic: Add checks in ifunc selectors for LSE/LSE2 requirements. · 7dd4466b
      Victor Do Nascimento authored
      At present, Evaluation of both `has_lse2(hwcap)' and
      `has_lse128(hwcap)' may require issuing an `mrs' instruction to query
      a system register.  This instruction, when issued from user-space
      results in a trap by the kernel which then returns the value read in
      by the system register.  Given the undesirable nature of the
      computational expense associated with the context switch, it is
      important to implement mechanisms to, wherever possible, forgo the
      operation.
      
      In light of this, given how other architectural requirements serving
      as prerequisites have long been assigned HWCAP bits by the kernel, we
      can inexpensively query for their availability before attempting to
      read any system registers.  Where one of these early tests fail, we
      can assert that the main feature of interest (be it LSE2 or LSE128)
      cannot be present, allowing us to return from the function early and
      skip the unnecessary expensive kernel-mediated access to system
      registers.
      
      libatomic/ChangeLog:
      
      	* config/linux/aarch64/host-config.h (has_lse2): Add test for LSE.
      	(has_lse128): Add test for LSE2.
      7dd4466b
    • Victor Do Nascimento's avatar
      libatomic: Enable LSE128 128-bit atomics for Armv9.4-a · 5ad64d76
      Victor Do Nascimento authored
      The armv9.4-a architectural revision adds three new atomic operations
      associated with the LSE128 feature:
      
        * LDCLRP - Atomic AND NOT (bitclear) of a location with 128-bit
        value held in a pair of registers, with original data loaded into
        the same 2 registers.
        * LDSETP - Atomic OR (bitset) of a location with 128-bit value held
        in a pair of registers, with original data loaded into the same 2
        registers.
        * SWPP - Atomic swap of one 128-bit value with 128-bit value held
        in a pair of registers.
      
      It is worth noting that in keeping with existing 128-bit atomic
      operations in `atomic_16.S', we have chosen to merge certain
      less-restrictive orderings into more restrictive ones.  This is done
      to minimize the number of branches in the atomic functions, minimizing
      both the likelihood of branch mispredictions and, in keeping code
      small, limit the need for extra fetch cycles.
      
      Past benchmarking has revealed that acquire is typically slightly
      faster than release (5-10%), such that for the most frequently used
      atomics (CAS and SWP) it makes sense to add support for acquire, as
      well as release.
      
      Likewise, it was identified that combining acquire and release typically
      results in little to no penalty, such that it is of negligible benefit
      to distinguish between release and acquire-release, making the
      combining release/acq_rel/seq_cst a worthwhile design choice.
      
      This patch adds the logic required to make use of these when the
      architectural feature is present and a suitable assembler available.
      
      In order to do this, the following changes are made:
      
        1. Add a configure-time check to check for LSE128 support in the
        assembler.
        2. Edit host-config.h so that when N == 16, nifunc = 2.
        3. Where available due to LSE128, implement the second ifunc, making
        use of the novel instructions.
        4. For atomic functions unable to make use of these new
        instructions, define a new alias which causes the _i1 function
        variant to point ahead to the corresponding _i2 implementation.
      
      libatomic/ChangeLog:
      
      	* Makefile.am (AM_CPPFLAGS): add conditional setting of
      	-DHAVE_FEAT_LSE128.
      	* acinclude.m4 (LIBAT_TEST_FEAT_AARCH64_LSE128): New.
      	* config/linux/aarch64/atomic_16.S (LSE128): New macro
      	definition.
      	(libat_exchange_16): New LSE128 variant.
      	(libat_fetch_or_16): Likewise.
      	(libat_or_fetch_16): Likewise.
      	(libat_fetch_and_16): Likewise.
      	(libat_and_fetch_16): Likewise.
      	* config/linux/aarch64/host-config.h (IFUNC_COND_2): New.
      	(IFUNC_NCOND): Add operand size checking.
      	(has_lse2): Renamed from `ifunc1`.
      	(has_lse128): New.
      	(HWCAP2_LSE128): Likewise.
      	* configure.ac: Add call to
      	LIBAT_TEST_FEAT_AARCH64_LSE128.
      	* configure (ac_subst_vars): Regenerated via autoreconf.
      	* Makefile.in: Likewise.
      	* auto-config.h.in: Likewise.
      5ad64d76
    • Victor Do Nascimento's avatar
      libatomic: Add support for __ifunc_arg_t arg in ifunc resolver · a899a1f2
      Victor Do Nascimento authored
      With support for new atomic features in Armv9.4-a being indicated by
      HWCAP2 bits, Libatomic's ifunc resolver must now query its second
      argument, of type __ifunc_arg_t*.
      
      We therefore make this argument known to libatomic, allowing us to
      query hwcap2 bits in the following manner:
      
        bool
        resolver (unsigned long hwcap, const __ifunc_arg_t *features);
        {
          return (features->hwcap2 & HWCAP2_<FEAT_NAME>);
        }
      
      libatomic/ChangeLog:
      
      	* config/linux/aarch64/host-config.h (__ifunc_arg_t):
      	Conditionally-defined if `sys/ifunc.h' not found.
      	(_IFUNC_ARG_HWCAP): Likewise.
      	(IFUNC_COND_1): Pass __ifunc_arg_t argument to ifunc.
      	(ifunc1): Modify function signature to accept __ifunc_arg_t
      	argument.
      	* configure.tgt: Add second `const __ifunc_arg_t *features'
      	argument to IFUNC_RESOLVER_ARGS.
      a899a1f2
    • Victor Do Nascimento's avatar
      libatomic: atomic_16.S: Improve ENTRY, END and ALIAS macro interface · e64602c0
      Victor Do Nascimento authored
      The introduction of further architectural-feature dependent ifuncs
      for AArch64 makes hard-coding ifunc `_i<n>' suffixes to functions
      cumbersome to work with.  It is awkward to remember which ifunc maps
      onto which arch feature and makes the code harder to maintain when new
      ifuncs are added and their suffixes possibly altered.
      
      This patch uses pre-processor `#define' statements to map each suffix to
      a descriptive feature name macro, for example:
      
        #define LSE(NAME) NAME##_i1
      
      Where we wish to generate ifunc names with the pre-processor's token
      concatenation feature, we add a level of indirection to previous macro
      calls.  If before we would have had`MACRO(<name>_i<n>)', we now have
      `MACRO_FEAT(name, feature)'.  Where we wish to refer to base
      functionality (i.e., functions where ifunc suffixes are absent), the
      original `MACRO(<name>)' may be used to bypass suffixing.
      
      Consequently, for base functionality, where the ifunc suffix is
      absent, the macro interface remains the same.  For example, the entry
      and endpoints of `libat_store_16' remain defined by:
      
        ENTRY (libat_store_16)
      
      and
      
        END (libat_store_16)
      
      For the LSE2 implementation of the same 16-byte atomic store, we now
      have:
      
        ENTRY_FEAT (libat_store_16, LSE2)
      
      and
      
        END_FEAT (libat_store_16, LSE2)
      
      For the aliasing of function names, we define the following new
      implementation of the ALIAS macro:
      
        ALIAS (FN_BASE_NAME, FROM_SUFFIX, TO_SUFFIX)
      
      Defining the `CORE(NAME)' macro to be the identity operator, it
      returns the base function name unaltered and allows us to alias
      target-specific ifuncs to the corresponding base implementation.
      For example, we'd alias the LSE2 `libat_exchange_16' to it base
      implementation with:
      
        ALIAS (libat_exchange_16, LSE2, CORE)
      
      libatomic/ChangeLog:
      	* config/linux/aarch64/atomic_16.S (CORE): New macro.
      	(LSE2): Likewise.
      	(ENTRY_FEAT): Likewise.
      	(ENTRY_FEAT1): Likewise.
      	(END_FEAT): Likewise.
      	(END_FEAT1): Likewise.
      	(ALIAS): Modify macro to take in `arch' arguments.
      	(ALIAS1): New.
      e64602c0
  22. Nov 19, 2024
  23. Nov 18, 2024
    • David Malcolm's avatar
      testsuite: move dg-test cleanup code from gcc-dg.exp to its own file · c9d21e19
      David Malcolm authored
      
      I need to use this cleanup logic for the testsuite for libdiagnostics
      where it's too awkward to directly use gcc-dg.exp itself.
      
      No functional change intended.
      
      gcc/testsuite/ChangeLog:
      	* lib/dg-test-cleanup.exp: New file, from material moved from
      	lib/gcc-dg.exp.
      	* lib/gcc-dg.exp: Add load_lib of dg-test-cleanup.exp.
      	(cleanup-after-saved-dg-test): Move to lib/dg-test-cleanup.exp.
      	(dg-test): Likewise for override.
      	(initialize_prune_notes): Likewise.
      
      libatomic/ChangeLog:
      	* testsuite/lib/libatomic.exp: Add
      	"load_gcc_lib dg-test-cleanup.exp".
      
      libgomp/ChangeLog:
      	* testsuite/lib/libgomp.exp: Add
      	"load_gcc_lib dg-test-cleanup.exp".
      libitm/ChangeLog:
      	* testsuite/lib/libitm.exp: Add
      	"load_gcc_lib dg-test-cleanup.exp".
      
      libphobos/ChangeLog:
      	* testsuite/lib/libphobos-dg.exp: Add
      	"load_gcc_lib dg-test-cleanup.exp".
      
      libstdc++-v3/ChangeLog:
      	* testsuite/lib/libstdc++.exp: Add
      	"load_gcc_lib dg-test-cleanup.exp".
      
      libvtv/ChangeLog:
      	* testsuite/lib/libvtv.exp: Add
      	"load_gcc_lib dg-test-cleanup.exp".
      
      Signed-off-by: default avatarDavid Malcolm <dmalcolm@redhat.com>
      c9d21e19
  24. Nov 14, 2024
  25. Sep 03, 2024
  26. Sep 02, 2024
    • Alex Coplan's avatar
      testsuite: Rename scanltranstree.exp -> scanltrans.exp · e4d3e7f9
      Alex Coplan authored
      Since r15-3254-g3f51f0dc88ec21c1ec79df694200f10ef85915f4
      added scan-ltrans-rtl* variants to scanltranstree.exp, it no longer
      makes sense to have "tree" in the name.  This renames the file
      accordingly and updates users.
      
      libatomic/ChangeLog:
      
      	* testsuite/lib/libatomic.exp: Load scanltrans.exp instead of
      	scanltranstree.exp.
      
      libgomp/ChangeLog:
      
      	* testsuite/lib/libgomp.exp: Load scanltrans.exp instead of
      	scanltranstree.exp.
      
      libitm/ChangeLog:
      
      	* testsuite/lib/libitm.exp: Load scanltrans.exp instead of
      	scanltranstree.exp.
      
      libphobos/ChangeLog:
      
      	* testsuite/lib/libphobos-dg.exp: Load scanltrans.exp instead of
      	scanltranstree.exp.
      
      libvtv/ChangeLog:
      
      	* testsuite/lib/libvtv.exp: Load scanltrans.exp instead of
      	scanltranstree.exp.
      
      gcc/testsuite/ChangeLog:
      
      	* gcc.dg-selftests/dg-final.exp: Load scanltrans.exp instead of
      	scanltranstree.exp.
      	* lib/gcc-dg.exp: Likewise.
      	* lib/scanltranstree.exp: Rename to ...
      	* lib/scanltrans.exp: ... this.
      e4d3e7f9
  27. Jan 03, 2024
  28. Dec 16, 2023
  29. Dec 15, 2023
    • Wilco Dijkstra's avatar
      libatomic: Enable lock-free 128-bit atomics on AArch64 · 3fa689f6
      Wilco Dijkstra authored
      Enable lock-free 128-bit atomics on AArch64.  This is backwards compatible with
      existing binaries (as for these GCC always calls into libatomic, so all 128-bit
      atomic uses in a process are switched), gives better performance than locking
      atomics and is what most users expect.
      
      128-bit atomic loads use a load/store exclusive loop if LSE2 is not supported.
      This results in an implicit store which is invisible to software as long as the
      given address is writeable (which will be true when using atomics in real code).
      
      This doesn't yet change __atomic_is_lock_free eventhough all atomics are finally
      lock-free on AArch64.
      
      libatomic:
      	* config/linux/aarch64/atomic_16.S: Implement lock-free ARMv8.0 atomics.
      	(libat_exchange_16): Merge RELEASE and ACQ_REL/SEQ_CST cases.
      	* config/linux/aarch64/host-config.h: Use atomic_16.S for baseline v8.0.
      3fa689f6
Loading