]>
Commit | Line | Data |
---|---|---|
9f95a23c TL |
1 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
2 | ; Copyright(c) 2011-2015 Intel Corporation All rights reserved. | |
3 | ; | |
4 | ; Redistribution and use in source and binary forms, with or without | |
5 | ; modification, are permitted provided that the following conditions | |
6 | ; are met: | |
7 | ; * Redistributions of source code must retain the above copyright | |
8 | ; notice, this list of conditions and the following disclaimer. | |
9 | ; * Redistributions in binary form must reproduce the above copyright | |
10 | ; notice, this list of conditions and the following disclaimer in | |
11 | ; the documentation and/or other materials provided with the | |
12 | ; distribution. | |
13 | ; * Neither the name of Intel Corporation nor the names of its | |
14 | ; contributors may be used to endorse or promote products derived | |
15 | ; from this software without specific prior written permission. | |
16 | ; | |
17 | ; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | |
18 | ; "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | |
19 | ; LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | |
20 | ; A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | |
21 | ; OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |
22 | ; SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |
23 | ; LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | |
24 | ; DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | |
25 | ; THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | |
26 | ; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |
27 | ; OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
28 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; | |
29 | ||
30 | %ifndef _REG_SIZES_ASM_ | |
31 | %define _REG_SIZES_ASM_ | |
32 | ||
33 | %ifdef __NASM_VER__ | |
34 | %ifidn __OUTPUT_FORMAT__, win64 | |
35 | %error nasm not supported in windows | |
36 | %else | |
37 | %define endproc_frame | |
38 | %endif | |
39 | %endif | |
40 | ||
f67539c2 TL |
41 | %ifndef AS_FEATURE_LEVEL |
42 | %define AS_FEATURE_LEVEL 4 | |
43 | %endif | |
44 | ||
9f95a23c TL |
45 | %define EFLAGS_HAS_CPUID (1<<21) |
46 | %define FLAG_CPUID1_ECX_CLMUL (1<<1) | |
47 | %define FLAG_CPUID1_EDX_SSE2 (1<<26) | |
48 | %define FLAG_CPUID1_ECX_SSE3 (1) | |
49 | %define FLAG_CPUID1_ECX_SSE4_1 (1<<19) | |
50 | %define FLAG_CPUID1_ECX_SSE4_2 (1<<20) | |
51 | %define FLAG_CPUID1_ECX_POPCNT (1<<23) | |
52 | %define FLAG_CPUID1_ECX_AESNI (1<<25) | |
53 | %define FLAG_CPUID1_ECX_OSXSAVE (1<<27) | |
54 | %define FLAG_CPUID1_ECX_AVX (1<<28) | |
55 | %define FLAG_CPUID1_EBX_AVX2 (1<<5) | |
56 | ||
57 | %define FLAG_CPUID7_EBX_AVX2 (1<<5) | |
58 | %define FLAG_CPUID7_EBX_AVX512F (1<<16) | |
59 | %define FLAG_CPUID7_EBX_AVX512DQ (1<<17) | |
60 | %define FLAG_CPUID7_EBX_AVX512IFMA (1<<21) | |
61 | %define FLAG_CPUID7_EBX_AVX512PF (1<<26) | |
62 | %define FLAG_CPUID7_EBX_AVX512ER (1<<27) | |
63 | %define FLAG_CPUID7_EBX_AVX512CD (1<<28) | |
64 | %define FLAG_CPUID7_EBX_AVX512BW (1<<30) | |
65 | %define FLAG_CPUID7_EBX_AVX512VL (1<<31) | |
f67539c2 | 66 | |
9f95a23c | 67 | %define FLAG_CPUID7_ECX_AVX512VBMI (1<<1) |
f67539c2 TL |
68 | %define FLAG_CPUID7_ECX_AVX512VBMI2 (1 << 6) |
69 | %define FLAG_CPUID7_ECX_GFNI (1 << 8) | |
70 | %define FLAG_CPUID7_ECX_VAES (1 << 9) | |
71 | %define FLAG_CPUID7_ECX_VPCLMULQDQ (1 << 10) | |
72 | %define FLAG_CPUID7_ECX_VNNI (1 << 11) | |
73 | %define FLAG_CPUID7_ECX_BITALG (1 << 12) | |
74 | %define FLAG_CPUID7_ECX_VPOPCNTDQ (1 << 14) | |
9f95a23c | 75 | |
f67539c2 TL |
76 | %define FLAGS_CPUID7_EBX_AVX512_G1 (FLAG_CPUID7_EBX_AVX512F | FLAG_CPUID7_EBX_AVX512VL | FLAG_CPUID7_EBX_AVX512BW | FLAG_CPUID7_EBX_AVX512CD | FLAG_CPUID7_EBX_AVX512DQ) |
77 | %define FLAGS_CPUID7_ECX_AVX512_G2 (FLAG_CPUID7_ECX_AVX512VBMI2 | FLAG_CPUID7_ECX_GFNI | FLAG_CPUID7_ECX_VAES | FLAG_CPUID7_ECX_VPCLMULQDQ | FLAG_CPUID7_ECX_VNNI | FLAG_CPUID7_ECX_BITALG | FLAG_CPUID7_ECX_VPOPCNTDQ) | |
9f95a23c TL |
78 | |
79 | %define FLAG_XGETBV_EAX_XMM (1<<1) | |
80 | %define FLAG_XGETBV_EAX_YMM (1<<2) | |
81 | %define FLAG_XGETBV_EAX_XMM_YMM 0x6 | |
82 | %define FLAG_XGETBV_EAX_ZMM_OPM 0xe0 | |
83 | ||
84 | %define FLAG_CPUID1_EAX_AVOTON 0x000406d0 | |
85 | %define FLAG_CPUID1_EAX_STEP_MASK 0xfffffff0 | |
86 | ||
87 | ; define d and w variants for registers | |
88 | ||
89 | %define raxd eax | |
90 | %define raxw ax | |
91 | %define raxb al | |
92 | ||
93 | %define rbxd ebx | |
94 | %define rbxw bx | |
95 | %define rbxb bl | |
96 | ||
97 | %define rcxd ecx | |
98 | %define rcxw cx | |
99 | %define rcxb cl | |
100 | ||
101 | %define rdxd edx | |
102 | %define rdxw dx | |
103 | %define rdxb dl | |
104 | ||
105 | %define rsid esi | |
106 | %define rsiw si | |
107 | %define rsib sil | |
108 | ||
109 | %define rdid edi | |
110 | %define rdiw di | |
111 | %define rdib dil | |
112 | ||
113 | %define rbpd ebp | |
114 | %define rbpw bp | |
115 | %define rbpb bpl | |
116 | ||
117 | %define ymm0x xmm0 | |
118 | %define ymm1x xmm1 | |
119 | %define ymm2x xmm2 | |
120 | %define ymm3x xmm3 | |
121 | %define ymm4x xmm4 | |
122 | %define ymm5x xmm5 | |
123 | %define ymm6x xmm6 | |
124 | %define ymm7x xmm7 | |
125 | %define ymm8x xmm8 | |
126 | %define ymm9x xmm9 | |
127 | %define ymm10x xmm10 | |
128 | %define ymm11x xmm11 | |
129 | %define ymm12x xmm12 | |
130 | %define ymm13x xmm13 | |
131 | %define ymm14x xmm14 | |
132 | %define ymm15x xmm15 | |
133 | ||
134 | %define zmm0x xmm0 | |
135 | %define zmm1x xmm1 | |
136 | %define zmm2x xmm2 | |
137 | %define zmm3x xmm3 | |
138 | %define zmm4x xmm4 | |
139 | %define zmm5x xmm5 | |
140 | %define zmm6x xmm6 | |
141 | %define zmm7x xmm7 | |
142 | %define zmm8x xmm8 | |
143 | %define zmm9x xmm9 | |
144 | %define zmm10x xmm10 | |
145 | %define zmm11x xmm11 | |
146 | %define zmm12x xmm12 | |
147 | %define zmm13x xmm13 | |
148 | %define zmm14x xmm14 | |
149 | %define zmm15x xmm15 | |
150 | %define zmm16x xmm16 | |
151 | %define zmm17x xmm17 | |
152 | %define zmm18x xmm18 | |
153 | %define zmm19x xmm19 | |
154 | %define zmm20x xmm20 | |
155 | %define zmm21x xmm21 | |
156 | %define zmm22x xmm22 | |
157 | %define zmm23x xmm23 | |
158 | %define zmm24x xmm24 | |
159 | %define zmm25x xmm25 | |
160 | %define zmm26x xmm26 | |
161 | %define zmm27x xmm27 | |
162 | %define zmm28x xmm28 | |
163 | %define zmm29x xmm29 | |
164 | %define zmm30x xmm30 | |
165 | %define zmm31x xmm31 | |
166 | ||
167 | %define zmm0y ymm0 | |
168 | %define zmm1y ymm1 | |
169 | %define zmm2y ymm2 | |
170 | %define zmm3y ymm3 | |
171 | %define zmm4y ymm4 | |
172 | %define zmm5y ymm5 | |
173 | %define zmm6y ymm6 | |
174 | %define zmm7y ymm7 | |
175 | %define zmm8y ymm8 | |
176 | %define zmm9y ymm9 | |
177 | %define zmm10y ymm10 | |
178 | %define zmm11y ymm11 | |
179 | %define zmm12y ymm12 | |
180 | %define zmm13y ymm13 | |
181 | %define zmm14y ymm14 | |
182 | %define zmm15y ymm15 | |
183 | %define zmm16y ymm16 | |
184 | %define zmm17y ymm17 | |
185 | %define zmm18y ymm18 | |
186 | %define zmm19y ymm19 | |
187 | %define zmm20y ymm20 | |
188 | %define zmm21y ymm21 | |
189 | %define zmm22y ymm22 | |
190 | %define zmm23y ymm23 | |
191 | %define zmm24y ymm24 | |
192 | %define zmm25y ymm25 | |
193 | %define zmm26y ymm26 | |
194 | %define zmm27y ymm27 | |
195 | %define zmm28y ymm28 | |
196 | %define zmm29y ymm29 | |
197 | %define zmm30y ymm30 | |
198 | %define zmm31y ymm31 | |
199 | ||
200 | %define DWORD(reg) reg %+ d | |
201 | %define WORD(reg) reg %+ w | |
202 | %define BYTE(reg) reg %+ b | |
203 | ||
204 | %define XWORD(reg) reg %+ x | |
205 | ||
206 | %ifidn __OUTPUT_FORMAT__,elf32 | |
207 | section .note.GNU-stack noalloc noexec nowrite progbits | |
208 | section .text | |
209 | %endif | |
210 | %ifidn __OUTPUT_FORMAT__,elf64 | |
211 | section .note.GNU-stack noalloc noexec nowrite progbits | |
212 | section .text | |
213 | %endif | |
214 | ||
215 | %ifdef REL_TEXT | |
216 | %define WRT_OPT | |
217 | %elifidn __OUTPUT_FORMAT__, elf64 | |
218 | %define WRT_OPT wrt ..plt | |
219 | %else | |
220 | %define WRT_OPT | |
221 | %endif | |
222 | ||
223 | %ifidn __OUTPUT_FORMAT__, macho64 | |
f67539c2 TL |
224 | %define elf64 macho64 |
225 | mac_equ equ 1 | |
226 | %ifdef __NASM_VER__ | |
227 | %define ISAL_SYM_TYPE_FUNCTION | |
228 | %define ISAL_SYM_TYPE_DATA_INTERNAL | |
229 | %else | |
230 | %define ISAL_SYM_TYPE_FUNCTION function | |
231 | %define ISAL_SYM_TYPE_DATA_INTERNAL data internal | |
232 | %endif | |
233 | %else | |
234 | %define ISAL_SYM_TYPE_FUNCTION function | |
235 | %define ISAL_SYM_TYPE_DATA_INTERNAL data internal | |
9f95a23c TL |
236 | %endif |
237 | ||
238 | %macro slversion 4 | |
239 | section .text | |
240 | global %1_slver_%2%3%4 | |
241 | global %1_slver | |
242 | %1_slver: | |
243 | %1_slver_%2%3%4: | |
244 | dw 0x%4 | |
245 | db 0x%3, 0x%2 | |
246 | %endmacro | |
247 | ||
248 | %endif ; ifndef _REG_SIZES_ASM_ |