hc
2024-10-12 a5969cabbb4660eab42b6ef0412cbbd1200cf14d
kernel/arch/x86/include/asm/inst.h
....@@ -12,7 +12,6 @@
1212
1313 #define REG_TYPE_R32 0
1414 #define REG_TYPE_R64 1
15
-#define REG_TYPE_XMM 2
1615 #define REG_TYPE_INVALID 100
1716
1817 .macro R32_NUM opd r32
....@@ -123,75 +122,16 @@
123122 #endif
124123 .endm
125124
126
- .macro XMM_NUM opd xmm
127
- \opd = REG_NUM_INVALID
128
- .ifc \xmm,%xmm0
129
- \opd = 0
130
- .endif
131
- .ifc \xmm,%xmm1
132
- \opd = 1
133
- .endif
134
- .ifc \xmm,%xmm2
135
- \opd = 2
136
- .endif
137
- .ifc \xmm,%xmm3
138
- \opd = 3
139
- .endif
140
- .ifc \xmm,%xmm4
141
- \opd = 4
142
- .endif
143
- .ifc \xmm,%xmm5
144
- \opd = 5
145
- .endif
146
- .ifc \xmm,%xmm6
147
- \opd = 6
148
- .endif
149
- .ifc \xmm,%xmm7
150
- \opd = 7
151
- .endif
152
- .ifc \xmm,%xmm8
153
- \opd = 8
154
- .endif
155
- .ifc \xmm,%xmm9
156
- \opd = 9
157
- .endif
158
- .ifc \xmm,%xmm10
159
- \opd = 10
160
- .endif
161
- .ifc \xmm,%xmm11
162
- \opd = 11
163
- .endif
164
- .ifc \xmm,%xmm12
165
- \opd = 12
166
- .endif
167
- .ifc \xmm,%xmm13
168
- \opd = 13
169
- .endif
170
- .ifc \xmm,%xmm14
171
- \opd = 14
172
- .endif
173
- .ifc \xmm,%xmm15
174
- \opd = 15
175
- .endif
176
- .endm
177
-
178125 .macro REG_TYPE type reg
179126 R32_NUM reg_type_r32 \reg
180127 R64_NUM reg_type_r64 \reg
181
- XMM_NUM reg_type_xmm \reg
182128 .if reg_type_r64 <> REG_NUM_INVALID
183129 \type = REG_TYPE_R64
184130 .elseif reg_type_r32 <> REG_NUM_INVALID
185131 \type = REG_TYPE_R32
186
- .elseif reg_type_xmm <> REG_NUM_INVALID
187
- \type = REG_TYPE_XMM
188132 .else
189133 \type = REG_TYPE_INVALID
190134 .endif
191
- .endm
192
-
193
- .macro PFX_OPD_SIZE
194
- .byte 0x66
195135 .endm
196136
197137 .macro PFX_REX opd1 opd2 W=0
....@@ -204,108 +144,20 @@
204144 .byte \mod | (\opd1 & 7) | ((\opd2 & 7) << 3)
205145 .endm
206146
207
- .macro PSHUFB_XMM xmm1 xmm2
208
- XMM_NUM pshufb_opd1 \xmm1
209
- XMM_NUM pshufb_opd2 \xmm2
210
- PFX_OPD_SIZE
211
- PFX_REX pshufb_opd1 pshufb_opd2
212
- .byte 0x0f, 0x38, 0x00
213
- MODRM 0xc0 pshufb_opd1 pshufb_opd2
214
- .endm
215
-
216
- .macro PCLMULQDQ imm8 xmm1 xmm2
217
- XMM_NUM clmul_opd1 \xmm1
218
- XMM_NUM clmul_opd2 \xmm2
219
- PFX_OPD_SIZE
220
- PFX_REX clmul_opd1 clmul_opd2
221
- .byte 0x0f, 0x3a, 0x44
222
- MODRM 0xc0 clmul_opd1 clmul_opd2
223
- .byte \imm8
224
- .endm
225
-
226
- .macro PEXTRD imm8 xmm gpr
227
- R32_NUM extrd_opd1 \gpr
228
- XMM_NUM extrd_opd2 \xmm
229
- PFX_OPD_SIZE
230
- PFX_REX extrd_opd1 extrd_opd2
231
- .byte 0x0f, 0x3a, 0x16
232
- MODRM 0xc0 extrd_opd1 extrd_opd2
233
- .byte \imm8
234
- .endm
235
-
236
- .macro AESKEYGENASSIST rcon xmm1 xmm2
237
- XMM_NUM aeskeygen_opd1 \xmm1
238
- XMM_NUM aeskeygen_opd2 \xmm2
239
- PFX_OPD_SIZE
240
- PFX_REX aeskeygen_opd1 aeskeygen_opd2
241
- .byte 0x0f, 0x3a, 0xdf
242
- MODRM 0xc0 aeskeygen_opd1 aeskeygen_opd2
243
- .byte \rcon
244
- .endm
245
-
246
- .macro AESIMC xmm1 xmm2
247
- XMM_NUM aesimc_opd1 \xmm1
248
- XMM_NUM aesimc_opd2 \xmm2
249
- PFX_OPD_SIZE
250
- PFX_REX aesimc_opd1 aesimc_opd2
251
- .byte 0x0f, 0x38, 0xdb
252
- MODRM 0xc0 aesimc_opd1 aesimc_opd2
253
- .endm
254
-
255
- .macro AESENC xmm1 xmm2
256
- XMM_NUM aesenc_opd1 \xmm1
257
- XMM_NUM aesenc_opd2 \xmm2
258
- PFX_OPD_SIZE
259
- PFX_REX aesenc_opd1 aesenc_opd2
260
- .byte 0x0f, 0x38, 0xdc
261
- MODRM 0xc0 aesenc_opd1 aesenc_opd2
262
- .endm
263
-
264
- .macro AESENCLAST xmm1 xmm2
265
- XMM_NUM aesenclast_opd1 \xmm1
266
- XMM_NUM aesenclast_opd2 \xmm2
267
- PFX_OPD_SIZE
268
- PFX_REX aesenclast_opd1 aesenclast_opd2
269
- .byte 0x0f, 0x38, 0xdd
270
- MODRM 0xc0 aesenclast_opd1 aesenclast_opd2
271
- .endm
272
-
273
- .macro AESDEC xmm1 xmm2
274
- XMM_NUM aesdec_opd1 \xmm1
275
- XMM_NUM aesdec_opd2 \xmm2
276
- PFX_OPD_SIZE
277
- PFX_REX aesdec_opd1 aesdec_opd2
278
- .byte 0x0f, 0x38, 0xde
279
- MODRM 0xc0 aesdec_opd1 aesdec_opd2
280
- .endm
281
-
282
- .macro AESDECLAST xmm1 xmm2
283
- XMM_NUM aesdeclast_opd1 \xmm1
284
- XMM_NUM aesdeclast_opd2 \xmm2
285
- PFX_OPD_SIZE
286
- PFX_REX aesdeclast_opd1 aesdeclast_opd2
287
- .byte 0x0f, 0x38, 0xdf
288
- MODRM 0xc0 aesdeclast_opd1 aesdeclast_opd2
289
- .endm
290
-
291
- .macro MOVQ_R64_XMM opd1 opd2
292
- REG_TYPE movq_r64_xmm_opd1_type \opd1
293
- .if movq_r64_xmm_opd1_type == REG_TYPE_XMM
294
- XMM_NUM movq_r64_xmm_opd1 \opd1
295
- R64_NUM movq_r64_xmm_opd2 \opd2
147
+.macro RDPID opd
148
+ REG_TYPE rdpid_opd_type \opd
149
+ .if rdpid_opd_type == REG_TYPE_R64
150
+ R64_NUM rdpid_opd \opd
296151 .else
297
- R64_NUM movq_r64_xmm_opd1 \opd1
298
- XMM_NUM movq_r64_xmm_opd2 \opd2
152
+ R32_NUM rdpid_opd \opd
299153 .endif
300
- PFX_OPD_SIZE
301
- PFX_REX movq_r64_xmm_opd1 movq_r64_xmm_opd2 1
302
- .if movq_r64_xmm_opd1_type == REG_TYPE_XMM
303
- .byte 0x0f, 0x7e
304
- .else
305
- .byte 0x0f, 0x6e
154
+ .byte 0xf3
155
+ .if rdpid_opd > 7
156
+ PFX_REX rdpid_opd 0
306157 .endif
307
- MODRM 0xc0 movq_r64_xmm_opd1 movq_r64_xmm_opd2
308
- .endm
158
+ .byte 0x0f, 0xc7
159
+ MODRM 0xc0 rdpid_opd 0x7
160
+.endm
309161 #endif
310162
311163 #endif