1  /* Check for hardware capabilities after HWCAP parsing.  powerpc64le version.
       2     Copyright (C) 2021-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  #ifndef _DL_HWCAP_CHECK_H
      20  #define _DL_HWCAP_CHECK_H
      21  
      22  #include <gcc-macros.h>
      23  #include <ldsodefs.h>
      24  
      25  static inline void
      26  dl_hwcap_check (void)
      27  {
      28  #ifdef GCCMACRO_ARCH_PWR9
      29    if ((GLRO (dl_hwcap2) & PPC_FEATURE2_ARCH_3_00) == 0)
      30      _dl_fatal_printf ("\
      31  Fatal glibc error: CPU lacks ISA 3.00 support (POWER9 or later required)\n");
      32  #endif
      33  #ifdef GCCMACRO__FLOAT128_HARDWARE__
      34    if ((GLRO (dl_hwcap2) & PPC_FEATURE2_HAS_IEEE128) == 0)
      35      _dl_fatal_printf ("\
      36  Fatal glibc error: CPU lacks float128 support (POWER 9 or later required)\n");
      37  #endif
      38     /* This check is not actually reached when building for POWER10 and
      39        running on POWER9 because there are faulting PCREL instructions
      40        before this point.  */
      41  #if defined GCCMACRO_ARCH_PWR10 || defined GCCMACRO__PCREL__
      42    if ((GLRO (dl_hwcap2) & PPC_FEATURE2_ARCH_3_1) == 0)
      43      _dl_fatal_printf ("\
      44  Fatal glibc error: CPU lacks ISA 3.10 support (POWER10 or later required)\n");
      45  #endif
      46  #ifdef GCCMACRO__MMA__
      47    if ((GLRO (dl_hwcap2) & PPC_FEATURE2_MMA) == 0)
      48      _dl_fatal_printf ("\
      49  Fatal glibc error: CPU lacks MMA support (POWER10 or later required)\n");
      50  #endif
      51  }
      52  
      53  #endif /* _DL_HWCAP_CHECK_H */