(root)/
glibc-2.38/
sysdeps/
s390/
s390-64/
dl-hwcaps-subdirs.c
       1  /* Architecture-specific glibc-hwcaps subdirectories.  s390x version.
       2     Copyright (C) 2020-2023 Free Software Foundation, Inc.
       3     This file is part of the GNU C Library.
       4  
       5     The GNU C Library is free software; you can redistribute it and/or
       6     modify it under the terms of the GNU Lesser General Public
       7     License as published by the Free Software Foundation; either
       8     version 2.1 of the License, or (at your option) any later version.
       9  
      10     The GNU C Library is distributed in the hope that it will be useful,
      11     but WITHOUT ANY WARRANTY; without even the implied warranty of
      12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      13     Lesser General Public License for more details.
      14  
      15     You should have received a copy of the GNU Lesser General Public
      16     License along with the GNU C Library; if not, see
      17     <https://www.gnu.org/licenses/>.  */
      18  
      19  #include <dl-hwcaps.h>
      20  #include <ldsodefs.h>
      21  
      22  const char _dl_hwcaps_subdirs[] = "z16:z15:z14:z13";
      23  enum { subdirs_count = 4 }; /* Number of components in _dl_hwcaps_subdirs.  */
      24  
      25  uint32_t
      26  _dl_hwcaps_subdirs_active (void)
      27  {
      28    int active = 0;
      29  
      30    /* Test in reverse preference order.  */
      31  
      32    /* z13.  */
      33    if (!(GLRO (dl_hwcap) & HWCAP_S390_VX))
      34      return _dl_hwcaps_subdirs_build_bitmask (subdirs_count, active);
      35    ++active;
      36  
      37    /* z14.  */
      38    if (!((GLRO (dl_hwcap) & HWCAP_S390_VXD)
      39          && (GLRO (dl_hwcap) & HWCAP_S390_VXE)
      40          && (GLRO (dl_hwcap) & HWCAP_S390_GS)))
      41      return _dl_hwcaps_subdirs_build_bitmask (subdirs_count, active);
      42    ++active;
      43  
      44    /* z15.
      45       Note: We do not list HWCAP_S390_SORT and HWCAP_S390_DFLT here as,
      46       according to the Principles of Operation, those may be replaced or removed
      47       in future.  */
      48    if (!((GLRO (dl_hwcap) & HWCAP_S390_VXRS_EXT2)
      49          && (GLRO (dl_hwcap) & HWCAP_S390_VXRS_PDE)))
      50      return _dl_hwcaps_subdirs_build_bitmask (subdirs_count, active);
      51    ++active;
      52  
      53    /* z16.
      54     Note: We do not list HWCAP_S390_NNPA here as, according to the Principles of
      55     Operation, those instructions may be replaced or removed in future.  */
      56    if (!(GLRO (dl_hwcap) & HWCAP_S390_VXRS_PDE2))
      57      return _dl_hwcaps_subdirs_build_bitmask (subdirs_count, active);
      58    ++active;
      59  
      60    return _dl_hwcaps_subdirs_build_bitmask (subdirs_count, active);
      61  }