55bd8300117a9ea764f98dce6fd7aa4afecd6ee8
[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, 1999, 2000 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 Library General Public License as
8    published by the Free Software Foundation; either version 2 of the
9    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    Library General Public License for more details.
15
16    You should have received a copy of the GNU Library General Public
17    License along with the GNU C Library; see the file COPYING.LIB.  If not,
18    write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
19    Boston, MA 02111-1307, USA.  */
20
21 #ifndef _DL_PROCINFO_H
22 #define _DL_PROCINFO_H  1
23
24 /* If anything should be added here check whether the size of each string
25    is still ok with the given array size.  */
26 static const char x86_cap_flags[][7] =
27   {
28     "fpu", "vme", "de", "pse", "tsc", "msr", "pae", "mce",
29     "cx8", "apic", "10", "sep", "mtrr", "pge", "mca", "cmov",
30     "pat", "pse36", "psn", "19", "20", "21", "22", "mmx",
31     "osfxsr", "xmm", "26", "27", "28", "29", "30", "amd3d"
32   };
33 #define _DL_HWCAP_COUNT 32
34
35 static const char x86_platforms[][5] =
36   {
37     "i386", "i486", "i586", "i686"
38   };
39 #define _DL_PLATFORMS_COUNT     4
40
41 /* Start at 48 to reserve some space.  */
42 #define _DL_FIRST_PLATFORM      48
43 /* Mask to filter out platforms.  */
44 #define _DL_HWCAP_PLATFORM      (7ULL << _DL_FIRST_PLATFORM)
45
46
47 static inline int
48 __attribute__ ((unused))
49 _dl_procinfo (int word)
50 {
51   /* This table should match the information from arch/i386/kernel/setup.c
52      in the kernel sources.  */
53   int i;
54
55   _dl_sysdep_message ("AT_HWCAP:   ", NULL);
56
57   for (i = 0; i < _DL_HWCAP_COUNT; ++i)
58     if (word & (1 << i))
59       _dl_sysdep_message (" ", x86_cap_flags[i], NULL);
60
61   _dl_sysdep_message ("\n", NULL);
62
63   return 0;
64 }
65
66 static inline const char *
67 __attribute__ ((unused))
68 _dl_hwcap_string (int idx)
69 {
70   return x86_cap_flags[idx];
71 };
72
73 static inline const char *
74 __attribute__ ((unused))
75 _dl_platform_string (int idx)
76 {
77   return x86_platforms [idx - _DL_FIRST_PLATFORM];
78 };
79
80 enum
81 {
82   HWCAP_I386_FPU   = 1 << 0,
83   HWCAP_I386_VME   = 1 << 1,
84   HWCAP_I386_DE    = 1 << 2,
85   HWCAP_I386_PSE   = 1 << 3,
86   HWCAP_I386_TSC   = 1 << 4,
87   HWCAP_I386_MSR   = 1 << 5,
88   HWCAP_I386_PAE   = 1 << 6,
89   HWCAP_I386_MCE   = 1 << 7,
90   HWCAP_I386_CX8   = 1 << 8,
91   HWCAP_I386_APIC  = 1 << 9,
92   HWCAP_I386_SEP   = 1 << 11,
93   HWCAP_I386_MTRR  = 1 << 12,
94   HWCAP_I386_PGE   = 1 << 13,
95   HWCAP_I386_MCA   = 1 << 14,
96   HWCAP_I386_CMOV  = 1 << 15,
97   HWCAP_I386_FCMOV = 1 << 16,
98   HWCAP_I386_MMX   = 1 << 23,
99   HWCAP_I386_OSFXSR = 1 << 24,
100   HWCAP_I386_AMD3D = 1 << 31,
101
102   /* XXX Which others to add here?  */
103   HWCAP_IMPORTANT = (HWCAP_I386_MMX)
104
105 };
106
107 static inline int
108 __attribute__ ((unused))
109 _dl_string_hwcap (const char *str)
110 {
111   int i;
112
113   for (i = 0; i < _DL_HWCAP_COUNT; i++)
114     {
115       if (strcmp (str, x86_cap_flags[i]) == 0)
116         return i;
117     }
118   return -1;
119 };
120
121
122 static inline int
123 __attribute__ ((unused))
124 _dl_string_platform (const char *str)
125 {
126   int i;
127
128   if (str != NULL)
129     for (i = 0; i < _DL_PLATFORMS_COUNT; ++i)
130       {
131         if (strcmp (str, x86_platforms[i]) == 0)
132           return _DL_FIRST_PLATFORM + i;
133       }
134   return -1;
135 };
136
137 #endif /* dl-procinfo.h */