(_dl_string_hwcap): Always inline.
[kopensolaris-gnu/glibc.git] / sysdeps / unix / sysv / linux / i386 / dl-procinfo.h
1 /* Linux/i386 version of processor capability information handling macros.
2    Copyright (C) 1998-2002, 2003 Free Software Foundation, Inc.
3    This file is part of the GNU C Library.
4    Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
5
6    The GNU C Library is free software; you can redistribute it and/or
7    modify it under the terms of the GNU Lesser General Public
8    License as published by the Free Software Foundation; either
9    version 2.1 of the License, or (at your option) any later version.
10
11    The GNU C Library is distributed in the hope that it will be useful,
12    but WITHOUT ANY WARRANTY; without even the implied warranty of
13    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14    Lesser General Public License for more details.
15
16    You should have received a copy of the GNU Lesser General Public
17    License along with the GNU C Library; if not, write to the Free
18    Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
19    02111-1307 USA.  */
20
21 #ifndef _DL_PROCINFO_H
22 #define _DL_PROCINFO_H  1
23
24 #include <ldsodefs.h>
25
26 #define _DL_HWCAP_COUNT 32
27
28 #define _DL_PLATFORMS_COUNT     4
29
30 /* Start at 48 to reserve some space.  */
31 #define _DL_FIRST_PLATFORM      48
32 /* Mask to filter out platforms.  */
33 #define _DL_HWCAP_PLATFORM      (((1ULL << _DL_PLATFORMS_COUNT) - 1) \
34                                  << _DL_FIRST_PLATFORM)
35
36
37 static inline int
38 __attribute__ ((unused))
39 _dl_procinfo (int word)
40 {
41   /* This table should match the information from arch/i386/kernel/setup.c
42      in the kernel sources.  */
43   int i;
44
45   _dl_printf ("AT_HWCAP:   ");
46
47   for (i = 0; i < _DL_HWCAP_COUNT; ++i)
48     if (word & (1 << i))
49       _dl_printf (" %s", GL(dl_x86_cap_flags)[i]);
50
51   _dl_printf ("\n");
52
53   return 0;
54 }
55
56 static inline const char *
57 __attribute__ ((unused))
58 _dl_hwcap_string (int idx)
59 {
60   return GL(dl_x86_cap_flags)[idx];
61 };
62
63 static inline const char *
64 __attribute__ ((unused))
65 _dl_platform_string (int idx)
66 {
67   return GL(dl_x86_platforms)[idx - _DL_FIRST_PLATFORM];
68 };
69
70 enum
71 {
72   HWCAP_I386_FPU   = 1 << 0,
73   HWCAP_I386_VME   = 1 << 1,
74   HWCAP_I386_DE    = 1 << 2,
75   HWCAP_I386_PSE   = 1 << 3,
76   HWCAP_I386_TSC   = 1 << 4,
77   HWCAP_I386_MSR   = 1 << 5,
78   HWCAP_I386_PAE   = 1 << 6,
79   HWCAP_I386_MCE   = 1 << 7,
80   HWCAP_I386_CX8   = 1 << 8,
81   HWCAP_I386_APIC  = 1 << 9,
82   HWCAP_I386_SEP   = 1 << 11,
83   HWCAP_I386_MTRR  = 1 << 12,
84   HWCAP_I386_PGE   = 1 << 13,
85   HWCAP_I386_MCA   = 1 << 14,
86   HWCAP_I386_CMOV  = 1 << 15,
87   HWCAP_I386_FCMOV = 1 << 16,
88   HWCAP_I386_MMX   = 1 << 23,
89   HWCAP_I386_OSFXSR = 1 << 24,
90   HWCAP_I386_XMM   = 1 << 25,
91   HWCAP_I386_XMM2  = 1 << 26,
92   HWCAP_I386_AMD3D = 1 << 31,
93
94   /* XXX Which others to add here?  */
95   HWCAP_IMPORTANT = (HWCAP_I386_MMX)
96
97 };
98
99 static inline int
100 __attribute__ ((unused, always_inline))
101 _dl_string_hwcap (const char *str)
102 {
103   int i;
104
105   for (i = 0; i < _DL_HWCAP_COUNT; i++)
106     {
107       if (strcmp (str, GL(dl_x86_cap_flags)[i]) == 0)
108         return i;
109     }
110   return -1;
111 };
112
113
114 static inline int
115 __attribute__ ((unused, always_inline))
116 _dl_string_platform (const char *str)
117 {
118   int i;
119
120   if (str != NULL)
121     for (i = 0; i < _DL_PLATFORMS_COUNT; ++i)
122       {
123         if (strcmp (str, GL(dl_x86_platforms)[i]) == 0)
124           return _DL_FIRST_PLATFORM + i;
125       }
126   return -1;
127 };
128
129 #endif /* dl-procinfo.h */