summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/sys/auxv_386.h
blob: 3654474787fdbc289bb8bb0c00275a94ddf40ee0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
/*
 * CDDL HEADER START
 *
 * The contents of this file are subject to the terms of the
 * Common Development and Distribution License (the "License").
 * You may not use this file except in compliance with the License.
 *
 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
 * or http://www.opensolaris.org/os/licensing.
 * See the License for the specific language governing permissions
 * and limitations under the License.
 *
 * When distributing Covered Code, include this CDDL HEADER in each
 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
 * If applicable, add the following below this CDDL HEADER, with the
 * fields enclosed by brackets "[]" replaced with your own identifying
 * information: Portions Copyright [yyyy] [name of copyright owner]
 *
 * CDDL HEADER END
 */
/*
 * Copyright (c) 2004, 2010, Oracle and/or its affiliates. All rights reserved.
 * Copyright 2019, Joyent, Inc.
 */

#ifndef	_SYS_AUXV_386_H
#define	_SYS_AUXV_386_H

#ifdef __cplusplus
extern "C" {
#endif

/*
 * Flags used in AT_SUN_HWCAP elements to describe various userland
 * instruction set extensions available on different processors.
 * The basic assumption is that of the i386 ABI; that is, i386 plus i387
 * floating point.
 *
 * Note that if a given bit is set; the implication is that the kernel
 * provides all the underlying architectural support for the correct
 * functioning of the extended instruction(s).
 */
#define	AV_386_FPU		0x00001	/* x87-style floating point */
#define	AV_386_TSC		0x00002	/* rdtsc insn */
#define	AV_386_CX8		0x00004	/* cmpxchg8b insn */
#define	AV_386_SEP		0x00008	/* sysenter and sysexit */
#define	AV_386_AMD_SYSC		0x00010	/* AMD's syscall and sysret */
#define	AV_386_CMOV		0x00020	/* conditional move insns */
#define	AV_386_MMX		0x00040	/* MMX insns */
#define	AV_386_AMD_MMX		0x00080	/* AMD's MMX insns */
#define	AV_386_AMD_3DNow	0x00100	/* AMD's 3Dnow! insns */
#define	AV_386_AMD_3DNowx	0x00200	/* AMD's 3Dnow! extended insns */
#define	AV_386_FXSR		0x00400	/* fxsave and fxrstor */
#define	AV_386_SSE		0x00800	/* SSE insns and regs */
#define	AV_386_SSE2		0x01000	/* SSE2 insns and regs */
					/* 0x02000 withdrawn - do not assign */
#define	AV_386_SSE3		0x04000	/* SSE3 insns and regs */
					/* 0x08000 withdrawn - do not assign */
#define	AV_386_CX16		0x10000	/* cmpxchg16b insn */
#define	AV_386_AHF		0x20000	/* lahf/sahf insns */
#define	AV_386_TSCP		0x40000	/* rdtscp instruction */
#define	AV_386_AMD_SSE4A	0x80000	/* AMD's SSE4A insns */
#define	AV_386_POPCNT		0x100000 /* POPCNT insn */
#define	AV_386_AMD_LZCNT	0x200000 /* AMD's LZCNT insn */
#define	AV_386_SSSE3		0x400000 /* Intel SSSE3 insns */
#define	AV_386_SSE4_1		0x800000 /* Intel SSE4.1 insns */
#define	AV_386_SSE4_2		0x1000000 /* Intel SSE4.2 insns */
#define	AV_386_MOVBE		0x2000000 /* Intel MOVBE insns */
#define	AV_386_AES		0x4000000 /* Intel AES insns */
#define	AV_386_PCLMULQDQ	0x8000000 /* Intel PCLMULQDQ insn */
#define	AV_386_XSAVE		0x10000000 /* Intel XSAVE/XRSTOR insns */
#define	AV_386_AVX		0x20000000 /* Intel AVX insns */
#define	AV_386_VMX		0x40000000 /* Intel VMX support */
#define	AV_386_AMD_SVM		0x80000000 /* AMD SVM support */

#define	FMT_AV_386							\
	"\020"								\
	"\040svm\037vmx\036avx\035xsave"				\
	"\034pclmulqdq\033aes"						\
	"\032movbe\031sse4.2"						\
	"\030sse4.1\027ssse3\026amd_lzcnt\025popcnt"			\
	"\024amd_sse4a\023tscp\022ahf\021cx16"				\
	"\017sse3\015sse2\014sse\013fxsr\012amd3dx\011amd3d"		\
	"\010amdmmx\07mmx\06cmov\05amdsysc\04sep\03cx8\02tsc\01fpu"

/*
 * Flags used in AT_SUN_HWCAP2 elements
 */
#define	AV_386_2_F16C		0x00000001 /* F16C half percision extensions */
#define	AV_386_2_RDRAND		0x00000002 /* RDRAND insn */
#define	AV_386_2_BMI1		0x00000004 /* BMI1 insns */
#define	AV_386_2_BMI2		0x00000008 /* BMI2 insns */
#define	AV_386_2_FMA		0x00000010 /* FMA insns */
#define	AV_386_2_AVX2		0x00000020 /* AVX2 insns */
#define	AV_386_2_ADX		0x00000040 /* ADX insns */
#define	AV_386_2_RDSEED		0x00000080 /* RDSEED insn */
#define	AV_386_2_AVX512F	0x00000100 /* AVX512 foundation insns */
#define	AV_386_2_AVX512DQ	0x00000200 /* AVX512DQ insns */
#define	AV_386_2_AVX512IFMA	0x00000400 /* AVX512IFMA insns */
#define	AV_386_2_AVX512PF	0x00000800 /* AVX512PF insns */
#define	AV_386_2_AVX512ER	0x00001000 /* AVX512ER insns */
#define	AV_386_2_AVX512CD	0x00002000 /* AVX512CD insns */
#define	AV_386_2_AVX512BW	0x00004000 /* AVX512BW insns */
#define	AV_386_2_AVX512VL	0x00008000 /* AVX512VL insns */
#define	AV_386_2_AVX512VBMI	0x00010000 /* AVX512VBMI insns */
#define	AV_386_2_AVX512VPOPCDQ	0x00020000 /* AVX512VPOPCNTDQ insns */
#define	AV_386_2_AVX512_4NNIW	0x00040000 /* AVX512 4NNIW insns */
#define	AV_386_2_AVX512_4FMAPS	0x00080000 /* AVX512 4FMAPS insns */
#define	AV_386_2_SHA		0x00100000 /* SHA insns */
#define	AV_386_2_FSGSBASE	0x00200000 /* FSBASE/GSBASE */
#define	AV_386_2_CLFLUSHOPT	0x00400000 /* CLFLUSHOPT instr */
#define	AV_386_2_CLWB		0x00800000 /* CLWB insn */
#define	AV_386_2_MONITORX	0x01000000 /* MONITORX insns */
#define	AV_386_2_CLZERO		0x02000000 /* CLZERO */
#define	AV_386_2_AVX512_VNNI	0x04000000 /* AVX512_VNNI */
#define	AV_386_2_VPCLMULQDQ	0x08000000 /* VPCLMULQDQ */
#define	AV_386_2_VAES		0x10000000 /* VAES */

#define	FMT_AV_386_2							\
	"\035vaes\034vpclmulqdq\033avx512_vnni"				\
	"\032clzero\031monitorx\030clwb\027clflushopt\026fsgsbase"	\
	"\025sha\024avx512_4fmaps\023avx512_4nniw\022avx512vpopcntdq"	\
	"\021avx512vbmi\020avx512vl\017avx512bw\016avx512cd"		\
	"\015avx512er\014avx512pf\013avx512ifma\012avx512dq\011avx512f"	\
	"\010rdseed\07adx\06avx2\05fma\04bmi2\03bmi1\02rdrand\01f16c"

/*
 * Flags used in AT_SUN_FPTYPE on x86.
 *
 * We don't currently support xsavec in illumos. However, when we do, then we
 * should add this to the type list and extend our primary consumer (rtld) to
 * use it. xsaveopt is not in this list because it is not appropriate for the
 * stack based storage.
 */
#define	AT_386_FPINFO_NONE		0
#define	AT_386_FPINFO_FXSAVE		1
#define	AT_386_FPINFO_XSAVE		2
#define	AT_386_FPINFO_XSAVE_AMD		3

#ifdef __cplusplus
}
#endif

#endif	/* !_SYS_AUXV_386_H */