blob: 14b86ac49a3d111da675cb98406aa2001ee9a784 [file] [log] [blame]
yuezonghe824eb0c2024-06-27 02:32:26 -07001/* Copyright (C) 1999, 2001, 2002, 2006 Free Software Foundation, Inc.
2 This file is part of the GNU C Library.
3
4 The GNU C Library is free software; you can redistribute it and/or
5 modify it under the terms of the GNU Lesser General Public
6 License as published by the Free Software Foundation; either
7 version 2.1 of the License, or (at your option) any later version.
8
9 The GNU C Library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 Lesser General Public License for more details.
13
14 You should have received a copy of the GNU Lesser General Public
15 License along with the GNU C Library; if not, write to the Free
16 Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
17 02111-1307 USA. */
18
19#include <common/sysdep.h>
20
21/*
22 * Powerpc Feature masks for the Aux Vector Hardware Capabilities (AT_HWCAP).
23 * This entry is copied to _dl_hwcap or rtld_global._dl_hwcap during startup.
24 * The following must match the kernels linux/asm/cputable.h.
25 */
26#define PPC_FEATURE_32 0x80000000 /* 32-bit mode. */
27#define PPC_FEATURE_64 0x40000000 /* 64-bit mode. */
28#define PPC_FEATURE_601_INSTR 0x20000000 /* 601 chip, Old POWER ISA. */
29#define PPC_FEATURE_HAS_ALTIVEC 0x10000000 /* SIMD/Vector Unit. */
30#define PPC_FEATURE_HAS_FPU 0x08000000 /* Floating Point Unit. */
31#define PPC_FEATURE_HAS_MMU 0x04000000 /* Memory Management Unit. */
32#define PPC_FEATURE_HAS_4xxMAC 0x02000000 /* 4xx Multiply Accumulator. */
33#define PPC_FEATURE_UNIFIED_CACHE 0x01000000 /* Unified I/D cache. */
34#define PPC_FEATURE_HAS_SPE 0x00800000 /* Signal Processing ext. */
35#define PPC_FEATURE_HAS_EFP_SINGLE 0x00400000 /* SPE Float. */
36#define PPC_FEATURE_HAS_EFP_DOUBLE 0x00200000 /* SPE Double. */
37#define PPC_FEATURE_NO_TB 0x00100000 /* 601/403gx have no timebase */
38#define PPC_FEATURE_POWER4 0x00080000 /* POWER4 ISA 2.00 */
39#define PPC_FEATURE_POWER5 0x00040000 /* POWER5 ISA 2.02 */
40#define PPC_FEATURE_POWER5_PLUS 0x00020000 /* POWER5+ ISA 2.03 */
41#define PPC_FEATURE_CELL_BE 0x00010000 /* CELL Broadband Engine */
42#define PPC_FEATURE_BOOKE 0x00008000
43#define PPC_FEATURE_SMT 0x00004000 /* Simultaneous Multi-Threading */
44#define PPC_FEATURE_ICACHE_SNOOP 0x00002000
45#define PPC_FEATURE_ARCH_2_05 0x00001000 /* ISA 2.05 */
46#define PPC_FEATURE_PA6T 0x00000800 /* PA Semi 6T Core */
47#define PPC_FEATURE_HAS_DFP 0x00000400 /* Decimal FP Unit */
48#define PPC_FEATURE_POWER6_EXT 0x00000200 /* P6 + mffgpr/mftgpr */
49#define PPC_FEATURE_ARCH_2_06 0x00000100 /* ISA 2.06 */
50#define PPC_FEATURE_HAS_VSX 0x00000080 /* P7 Vector Extension. */
51#define PPC_FEATURE_970 (PPC_FEATURE_POWER4 + PPC_FEATURE_HAS_ALTIVEC)
52
53#ifdef __ASSEMBLER__
54
55/* Symbolic names for the registers. The only portable way to write asm
56 code is to use number but this produces really unreadable code.
57 Therefore these symbolic names. */
58
59/* Integer registers. */
60#define r0 0
61#define r1 1
62#define r2 2
63#define r3 3
64#define r4 4
65#define r5 5
66#define r6 6
67#define r7 7
68#define r8 8
69#define r9 9
70#define r10 10
71#define r11 11
72#define r12 12
73#define r13 13
74#define r14 14
75#define r15 15
76#define r16 16
77#define r17 17
78#define r18 18
79#define r19 19
80#define r20 20
81#define r21 21
82#define r22 22
83#define r23 23
84#define r24 24
85#define r25 25
86#define r26 26
87#define r27 27
88#define r28 28
89#define r29 29
90#define r30 30
91#define r31 31
92
93/* Floating-point registers. */
94#define fp0 0
95#define fp1 1
96#define fp2 2
97#define fp3 3
98#define fp4 4
99#define fp5 5
100#define fp6 6
101#define fp7 7
102#define fp8 8
103#define fp9 9
104#define fp10 10
105#define fp11 11
106#define fp12 12
107#define fp13 13
108#define fp14 14
109#define fp15 15
110#define fp16 16
111#define fp17 17
112#define fp18 18
113#define fp19 19
114#define fp20 20
115#define fp21 21
116#define fp22 22
117#define fp23 23
118#define fp24 24
119#define fp25 25
120#define fp26 26
121#define fp27 27
122#define fp28 28
123#define fp29 29
124#define fp30 30
125#define fp31 31
126
127/* Condition code registers. */
128#define cr0 0
129#define cr1 1
130#define cr2 2
131#define cr3 3
132#define cr4 4
133#define cr5 5
134#define cr6 6
135#define cr7 7
136
137/* Vector registers. */
138#define v0 0
139#define v1 1
140#define v2 2
141#define v3 3
142#define v4 4
143#define v5 5
144#define v6 6
145#define v7 7
146#define v8 8
147#define v9 9
148#define v10 10
149#define v11 11
150#define v12 12
151#define v13 13
152#define v14 14
153#define v15 15
154#define v16 16
155#define v17 17
156#define v18 18
157#define v19 19
158#define v20 20
159#define v21 21
160#define v22 22
161#define v23 23
162#define v24 24
163#define v25 25
164#define v26 26
165#define v27 27
166#define v28 28
167#define v29 29
168#define v30 30
169#define v31 31
170
171#define VRSAVE 256
172
173
174#ifdef __ELF__
175
176/* This seems to always be the case on PPC. */
177#define ALIGNARG(log2) log2
178/* For ELF we need the `.type' directive to make shared libs work right. */
179#define ASM_TYPE_DIRECTIVE(name,typearg) .type name,typearg;
180#define ASM_SIZE_DIRECTIVE(name) .size name,.-name
181
182/* In ELF C symbols are asm symbols. */
183#undef NO_UNDERSCORES
184#define NO_UNDERSCORES
185
186#endif /* __ELF__ */
187
188# include <sys/syscall.h>
189# if defined(__powerpc64__)
190# include "powerpc64/sysdep.h"
191# else
192# include "powerpc32/sysdep.h"
193# endif
194
195#endif /* __ASSEMBLER__ */
196