Skip to main content

asmkit/x86/features/
AVX512CD.rs

1use crate::x86::assembler::*;
2use crate::x86::operands::*;
3use super::super::opcodes::*;
4use crate::core::emitter::*;
5use crate::core::operand::*;
6
7/// A dummy operand that represents no register. Here just for simplicity.
8const NOREG: Operand = Operand::new();
9
10/// `VPBROADCASTMB2Q` (VPBROADCASTMB2Q). 
11/// Broadcasts the zero-extended 64/32 bit value of the low byte/word of the source operand (the second operand) to each 64/32 bit element of the destination operand (the first operand). The source operand is an opmask register. The destination operand is a ZMM register (EVEX.512), YMM register (EVEX.256), or XMM register (EVEX.128).
12///
13///
14/// For more details, see the [Intel manual](https://www.felixcloutier.com/x86/VPBROADCASTM.html).
15///
16/// Supported operand variants:
17///
18/// ```text
19/// +---+-----------+
20/// | # | Operands  |
21/// +---+-----------+
22/// | 1 | Xmm, KReg |
23/// | 2 | Ymm, KReg |
24/// | 3 | Zmm, KReg |
25/// +---+-----------+
26/// ```
27pub trait Vpbroadcastmb2qEmitter<A, B> {
28    fn vpbroadcastmb2q(&mut self, op0: A, op1: B);
29}
30
31impl<'a> Vpbroadcastmb2qEmitter<Xmm, KReg> for Assembler<'a> {
32    fn vpbroadcastmb2q(&mut self, op0: Xmm, op1: KReg) {
33        self.emit(VPBROADCASTMB2Q128RK, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
34    }
35}
36
37impl<'a> Vpbroadcastmb2qEmitter<Ymm, KReg> for Assembler<'a> {
38    fn vpbroadcastmb2q(&mut self, op0: Ymm, op1: KReg) {
39        self.emit(VPBROADCASTMB2Q256RK, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
40    }
41}
42
43impl<'a> Vpbroadcastmb2qEmitter<Zmm, KReg> for Assembler<'a> {
44    fn vpbroadcastmb2q(&mut self, op0: Zmm, op1: KReg) {
45        self.emit(VPBROADCASTMB2Q512RK, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
46    }
47}
48
49/// `VPBROADCASTMW2D` (VPBROADCASTMW2D). 
50/// Broadcasts the zero-extended 64/32 bit value of the low byte/word of the source operand (the second operand) to each 64/32 bit element of the destination operand (the first operand). The source operand is an opmask register. The destination operand is a ZMM register (EVEX.512), YMM register (EVEX.256), or XMM register (EVEX.128).
51///
52///
53/// For more details, see the [Intel manual](https://www.felixcloutier.com/x86/VPBROADCASTM.html).
54///
55/// Supported operand variants:
56///
57/// ```text
58/// +---+-----------+
59/// | # | Operands  |
60/// +---+-----------+
61/// | 1 | Xmm, KReg |
62/// | 2 | Ymm, KReg |
63/// | 3 | Zmm, KReg |
64/// +---+-----------+
65/// ```
66pub trait Vpbroadcastmw2dEmitter<A, B> {
67    fn vpbroadcastmw2d(&mut self, op0: A, op1: B);
68}
69
70impl<'a> Vpbroadcastmw2dEmitter<Xmm, KReg> for Assembler<'a> {
71    fn vpbroadcastmw2d(&mut self, op0: Xmm, op1: KReg) {
72        self.emit(VPBROADCASTMW2D128RK, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
73    }
74}
75
76impl<'a> Vpbroadcastmw2dEmitter<Ymm, KReg> for Assembler<'a> {
77    fn vpbroadcastmw2d(&mut self, op0: Ymm, op1: KReg) {
78        self.emit(VPBROADCASTMW2D256RK, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
79    }
80}
81
82impl<'a> Vpbroadcastmw2dEmitter<Zmm, KReg> for Assembler<'a> {
83    fn vpbroadcastmw2d(&mut self, op0: Zmm, op1: KReg) {
84        self.emit(VPBROADCASTMW2D512RK, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
85    }
86}
87
88/// `VPCONFLICTD` (VPCONFLICTD). 
89/// Test each dword/qword element of the source operand (the second operand) for equality with all other elements in the source operand closer to the least significant element. Each element’s comparison results form a bit vector, which is then zero extended and written to the destination according to the writemask.
90///
91///
92/// For more details, see the [Intel manual](https://www.felixcloutier.com/x86/VPCONFLICTD%3AVPCONFLICTQ.html).
93///
94/// Supported operand variants:
95///
96/// ```text
97/// +---+----------+
98/// | # | Operands |
99/// +---+----------+
100/// | 1 | Xmm, Mem |
101/// | 2 | Xmm, Xmm |
102/// | 3 | Ymm, Mem |
103/// | 4 | Ymm, Ymm |
104/// | 5 | Zmm, Mem |
105/// | 6 | Zmm, Zmm |
106/// +---+----------+
107/// ```
108pub trait VpconflictdEmitter<A, B> {
109    fn vpconflictd(&mut self, op0: A, op1: B);
110}
111
112impl<'a> VpconflictdEmitter<Xmm, Xmm> for Assembler<'a> {
113    fn vpconflictd(&mut self, op0: Xmm, op1: Xmm) {
114        self.emit(VPCONFLICTD128RR, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
115    }
116}
117
118impl<'a> VpconflictdEmitter<Xmm, Mem> for Assembler<'a> {
119    fn vpconflictd(&mut self, op0: Xmm, op1: Mem) {
120        self.emit(VPCONFLICTD128RM, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
121    }
122}
123
124impl<'a> VpconflictdEmitter<Ymm, Ymm> for Assembler<'a> {
125    fn vpconflictd(&mut self, op0: Ymm, op1: Ymm) {
126        self.emit(VPCONFLICTD256RR, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
127    }
128}
129
130impl<'a> VpconflictdEmitter<Ymm, Mem> for Assembler<'a> {
131    fn vpconflictd(&mut self, op0: Ymm, op1: Mem) {
132        self.emit(VPCONFLICTD256RM, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
133    }
134}
135
136impl<'a> VpconflictdEmitter<Zmm, Zmm> for Assembler<'a> {
137    fn vpconflictd(&mut self, op0: Zmm, op1: Zmm) {
138        self.emit(VPCONFLICTD512RR, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
139    }
140}
141
142impl<'a> VpconflictdEmitter<Zmm, Mem> for Assembler<'a> {
143    fn vpconflictd(&mut self, op0: Zmm, op1: Mem) {
144        self.emit(VPCONFLICTD512RM, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
145    }
146}
147
148/// `VPCONFLICTD_MASK` (VPCONFLICTD). 
149/// Test each dword/qword element of the source operand (the second operand) for equality with all other elements in the source operand closer to the least significant element. Each element’s comparison results form a bit vector, which is then zero extended and written to the destination according to the writemask.
150///
151///
152/// For more details, see the [Intel manual](https://www.felixcloutier.com/x86/VPCONFLICTD%3AVPCONFLICTQ.html).
153///
154/// Supported operand variants:
155///
156/// ```text
157/// +---+----------+
158/// | # | Operands |
159/// +---+----------+
160/// | 1 | Xmm, Mem |
161/// | 2 | Xmm, Xmm |
162/// | 3 | Ymm, Mem |
163/// | 4 | Ymm, Ymm |
164/// | 5 | Zmm, Mem |
165/// | 6 | Zmm, Zmm |
166/// +---+----------+
167/// ```
168pub trait VpconflictdMaskEmitter<A, B> {
169    fn vpconflictd_mask(&mut self, op0: A, op1: B);
170}
171
172impl<'a> VpconflictdMaskEmitter<Xmm, Xmm> for Assembler<'a> {
173    fn vpconflictd_mask(&mut self, op0: Xmm, op1: Xmm) {
174        self.emit(VPCONFLICTD128RR_MASK, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
175    }
176}
177
178impl<'a> VpconflictdMaskEmitter<Xmm, Mem> for Assembler<'a> {
179    fn vpconflictd_mask(&mut self, op0: Xmm, op1: Mem) {
180        self.emit(VPCONFLICTD128RM_MASK, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
181    }
182}
183
184impl<'a> VpconflictdMaskEmitter<Ymm, Ymm> for Assembler<'a> {
185    fn vpconflictd_mask(&mut self, op0: Ymm, op1: Ymm) {
186        self.emit(VPCONFLICTD256RR_MASK, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
187    }
188}
189
190impl<'a> VpconflictdMaskEmitter<Ymm, Mem> for Assembler<'a> {
191    fn vpconflictd_mask(&mut self, op0: Ymm, op1: Mem) {
192        self.emit(VPCONFLICTD256RM_MASK, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
193    }
194}
195
196impl<'a> VpconflictdMaskEmitter<Zmm, Zmm> for Assembler<'a> {
197    fn vpconflictd_mask(&mut self, op0: Zmm, op1: Zmm) {
198        self.emit(VPCONFLICTD512RR_MASK, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
199    }
200}
201
202impl<'a> VpconflictdMaskEmitter<Zmm, Mem> for Assembler<'a> {
203    fn vpconflictd_mask(&mut self, op0: Zmm, op1: Mem) {
204        self.emit(VPCONFLICTD512RM_MASK, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
205    }
206}
207
208/// `VPCONFLICTD_MASKZ` (VPCONFLICTD). 
209/// Test each dword/qword element of the source operand (the second operand) for equality with all other elements in the source operand closer to the least significant element. Each element’s comparison results form a bit vector, which is then zero extended and written to the destination according to the writemask.
210///
211///
212/// For more details, see the [Intel manual](https://www.felixcloutier.com/x86/VPCONFLICTD%3AVPCONFLICTQ.html).
213///
214/// Supported operand variants:
215///
216/// ```text
217/// +---+----------+
218/// | # | Operands |
219/// +---+----------+
220/// | 1 | Xmm, Mem |
221/// | 2 | Xmm, Xmm |
222/// | 3 | Ymm, Mem |
223/// | 4 | Ymm, Ymm |
224/// | 5 | Zmm, Mem |
225/// | 6 | Zmm, Zmm |
226/// +---+----------+
227/// ```
228pub trait VpconflictdMaskzEmitter<A, B> {
229    fn vpconflictd_maskz(&mut self, op0: A, op1: B);
230}
231
232impl<'a> VpconflictdMaskzEmitter<Xmm, Xmm> for Assembler<'a> {
233    fn vpconflictd_maskz(&mut self, op0: Xmm, op1: Xmm) {
234        self.emit(VPCONFLICTD128RR_MASKZ, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
235    }
236}
237
238impl<'a> VpconflictdMaskzEmitter<Xmm, Mem> for Assembler<'a> {
239    fn vpconflictd_maskz(&mut self, op0: Xmm, op1: Mem) {
240        self.emit(VPCONFLICTD128RM_MASKZ, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
241    }
242}
243
244impl<'a> VpconflictdMaskzEmitter<Ymm, Ymm> for Assembler<'a> {
245    fn vpconflictd_maskz(&mut self, op0: Ymm, op1: Ymm) {
246        self.emit(VPCONFLICTD256RR_MASKZ, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
247    }
248}
249
250impl<'a> VpconflictdMaskzEmitter<Ymm, Mem> for Assembler<'a> {
251    fn vpconflictd_maskz(&mut self, op0: Ymm, op1: Mem) {
252        self.emit(VPCONFLICTD256RM_MASKZ, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
253    }
254}
255
256impl<'a> VpconflictdMaskzEmitter<Zmm, Zmm> for Assembler<'a> {
257    fn vpconflictd_maskz(&mut self, op0: Zmm, op1: Zmm) {
258        self.emit(VPCONFLICTD512RR_MASKZ, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
259    }
260}
261
262impl<'a> VpconflictdMaskzEmitter<Zmm, Mem> for Assembler<'a> {
263    fn vpconflictd_maskz(&mut self, op0: Zmm, op1: Mem) {
264        self.emit(VPCONFLICTD512RM_MASKZ, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
265    }
266}
267
268/// `VPCONFLICTQ` (VPCONFLICTQ). 
269/// Test each dword/qword element of the source operand (the second operand) for equality with all other elements in the source operand closer to the least significant element. Each element’s comparison results form a bit vector, which is then zero extended and written to the destination according to the writemask.
270///
271///
272/// For more details, see the [Intel manual](https://www.felixcloutier.com/x86/VPCONFLICTD%3AVPCONFLICTQ.html).
273///
274/// Supported operand variants:
275///
276/// ```text
277/// +---+----------+
278/// | # | Operands |
279/// +---+----------+
280/// | 1 | Xmm, Mem |
281/// | 2 | Xmm, Xmm |
282/// | 3 | Ymm, Mem |
283/// | 4 | Ymm, Ymm |
284/// | 5 | Zmm, Mem |
285/// | 6 | Zmm, Zmm |
286/// +---+----------+
287/// ```
288pub trait VpconflictqEmitter<A, B> {
289    fn vpconflictq(&mut self, op0: A, op1: B);
290}
291
292impl<'a> VpconflictqEmitter<Xmm, Xmm> for Assembler<'a> {
293    fn vpconflictq(&mut self, op0: Xmm, op1: Xmm) {
294        self.emit(VPCONFLICTQ128RR, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
295    }
296}
297
298impl<'a> VpconflictqEmitter<Xmm, Mem> for Assembler<'a> {
299    fn vpconflictq(&mut self, op0: Xmm, op1: Mem) {
300        self.emit(VPCONFLICTQ128RM, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
301    }
302}
303
304impl<'a> VpconflictqEmitter<Ymm, Ymm> for Assembler<'a> {
305    fn vpconflictq(&mut self, op0: Ymm, op1: Ymm) {
306        self.emit(VPCONFLICTQ256RR, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
307    }
308}
309
310impl<'a> VpconflictqEmitter<Ymm, Mem> for Assembler<'a> {
311    fn vpconflictq(&mut self, op0: Ymm, op1: Mem) {
312        self.emit(VPCONFLICTQ256RM, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
313    }
314}
315
316impl<'a> VpconflictqEmitter<Zmm, Zmm> for Assembler<'a> {
317    fn vpconflictq(&mut self, op0: Zmm, op1: Zmm) {
318        self.emit(VPCONFLICTQ512RR, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
319    }
320}
321
322impl<'a> VpconflictqEmitter<Zmm, Mem> for Assembler<'a> {
323    fn vpconflictq(&mut self, op0: Zmm, op1: Mem) {
324        self.emit(VPCONFLICTQ512RM, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
325    }
326}
327
328/// `VPCONFLICTQ_MASK` (VPCONFLICTQ). 
329/// Test each dword/qword element of the source operand (the second operand) for equality with all other elements in the source operand closer to the least significant element. Each element’s comparison results form a bit vector, which is then zero extended and written to the destination according to the writemask.
330///
331///
332/// For more details, see the [Intel manual](https://www.felixcloutier.com/x86/VPCONFLICTD%3AVPCONFLICTQ.html).
333///
334/// Supported operand variants:
335///
336/// ```text
337/// +---+----------+
338/// | # | Operands |
339/// +---+----------+
340/// | 1 | Xmm, Mem |
341/// | 2 | Xmm, Xmm |
342/// | 3 | Ymm, Mem |
343/// | 4 | Ymm, Ymm |
344/// | 5 | Zmm, Mem |
345/// | 6 | Zmm, Zmm |
346/// +---+----------+
347/// ```
348pub trait VpconflictqMaskEmitter<A, B> {
349    fn vpconflictq_mask(&mut self, op0: A, op1: B);
350}
351
352impl<'a> VpconflictqMaskEmitter<Xmm, Xmm> for Assembler<'a> {
353    fn vpconflictq_mask(&mut self, op0: Xmm, op1: Xmm) {
354        self.emit(VPCONFLICTQ128RR_MASK, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
355    }
356}
357
358impl<'a> VpconflictqMaskEmitter<Xmm, Mem> for Assembler<'a> {
359    fn vpconflictq_mask(&mut self, op0: Xmm, op1: Mem) {
360        self.emit(VPCONFLICTQ128RM_MASK, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
361    }
362}
363
364impl<'a> VpconflictqMaskEmitter<Ymm, Ymm> for Assembler<'a> {
365    fn vpconflictq_mask(&mut self, op0: Ymm, op1: Ymm) {
366        self.emit(VPCONFLICTQ256RR_MASK, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
367    }
368}
369
370impl<'a> VpconflictqMaskEmitter<Ymm, Mem> for Assembler<'a> {
371    fn vpconflictq_mask(&mut self, op0: Ymm, op1: Mem) {
372        self.emit(VPCONFLICTQ256RM_MASK, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
373    }
374}
375
376impl<'a> VpconflictqMaskEmitter<Zmm, Zmm> for Assembler<'a> {
377    fn vpconflictq_mask(&mut self, op0: Zmm, op1: Zmm) {
378        self.emit(VPCONFLICTQ512RR_MASK, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
379    }
380}
381
382impl<'a> VpconflictqMaskEmitter<Zmm, Mem> for Assembler<'a> {
383    fn vpconflictq_mask(&mut self, op0: Zmm, op1: Mem) {
384        self.emit(VPCONFLICTQ512RM_MASK, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
385    }
386}
387
388/// `VPCONFLICTQ_MASKZ` (VPCONFLICTQ). 
389/// Test each dword/qword element of the source operand (the second operand) for equality with all other elements in the source operand closer to the least significant element. Each element’s comparison results form a bit vector, which is then zero extended and written to the destination according to the writemask.
390///
391///
392/// For more details, see the [Intel manual](https://www.felixcloutier.com/x86/VPCONFLICTD%3AVPCONFLICTQ.html).
393///
394/// Supported operand variants:
395///
396/// ```text
397/// +---+----------+
398/// | # | Operands |
399/// +---+----------+
400/// | 1 | Xmm, Mem |
401/// | 2 | Xmm, Xmm |
402/// | 3 | Ymm, Mem |
403/// | 4 | Ymm, Ymm |
404/// | 5 | Zmm, Mem |
405/// | 6 | Zmm, Zmm |
406/// +---+----------+
407/// ```
408pub trait VpconflictqMaskzEmitter<A, B> {
409    fn vpconflictq_maskz(&mut self, op0: A, op1: B);
410}
411
412impl<'a> VpconflictqMaskzEmitter<Xmm, Xmm> for Assembler<'a> {
413    fn vpconflictq_maskz(&mut self, op0: Xmm, op1: Xmm) {
414        self.emit(VPCONFLICTQ128RR_MASKZ, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
415    }
416}
417
418impl<'a> VpconflictqMaskzEmitter<Xmm, Mem> for Assembler<'a> {
419    fn vpconflictq_maskz(&mut self, op0: Xmm, op1: Mem) {
420        self.emit(VPCONFLICTQ128RM_MASKZ, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
421    }
422}
423
424impl<'a> VpconflictqMaskzEmitter<Ymm, Ymm> for Assembler<'a> {
425    fn vpconflictq_maskz(&mut self, op0: Ymm, op1: Ymm) {
426        self.emit(VPCONFLICTQ256RR_MASKZ, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
427    }
428}
429
430impl<'a> VpconflictqMaskzEmitter<Ymm, Mem> for Assembler<'a> {
431    fn vpconflictq_maskz(&mut self, op0: Ymm, op1: Mem) {
432        self.emit(VPCONFLICTQ256RM_MASKZ, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
433    }
434}
435
436impl<'a> VpconflictqMaskzEmitter<Zmm, Zmm> for Assembler<'a> {
437    fn vpconflictq_maskz(&mut self, op0: Zmm, op1: Zmm) {
438        self.emit(VPCONFLICTQ512RR_MASKZ, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
439    }
440}
441
442impl<'a> VpconflictqMaskzEmitter<Zmm, Mem> for Assembler<'a> {
443    fn vpconflictq_maskz(&mut self, op0: Zmm, op1: Mem) {
444        self.emit(VPCONFLICTQ512RM_MASKZ, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
445    }
446}
447
448/// `VPLZCNTD` (VPLZCNTD). 
449/// Counts the number of leading most significant zero bits in each dword or qword element of the source operand (the second operand) and stores the results in the destination register (the first operand) according to the writemask. If an element is zero, the result for that element is the operand size of the element.
450///
451///
452/// For more details, see the [Intel manual](https://www.felixcloutier.com/x86/VPLZCNTD%3AVPLZCNTQ.html).
453///
454/// Supported operand variants:
455///
456/// ```text
457/// +---+----------+
458/// | # | Operands |
459/// +---+----------+
460/// | 1 | Xmm, Mem |
461/// | 2 | Xmm, Xmm |
462/// | 3 | Ymm, Mem |
463/// | 4 | Ymm, Ymm |
464/// | 5 | Zmm, Mem |
465/// | 6 | Zmm, Zmm |
466/// +---+----------+
467/// ```
468pub trait VplzcntdEmitter<A, B> {
469    fn vplzcntd(&mut self, op0: A, op1: B);
470}
471
472impl<'a> VplzcntdEmitter<Xmm, Xmm> for Assembler<'a> {
473    fn vplzcntd(&mut self, op0: Xmm, op1: Xmm) {
474        self.emit(VPLZCNTD128RR, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
475    }
476}
477
478impl<'a> VplzcntdEmitter<Xmm, Mem> for Assembler<'a> {
479    fn vplzcntd(&mut self, op0: Xmm, op1: Mem) {
480        self.emit(VPLZCNTD128RM, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
481    }
482}
483
484impl<'a> VplzcntdEmitter<Ymm, Ymm> for Assembler<'a> {
485    fn vplzcntd(&mut self, op0: Ymm, op1: Ymm) {
486        self.emit(VPLZCNTD256RR, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
487    }
488}
489
490impl<'a> VplzcntdEmitter<Ymm, Mem> for Assembler<'a> {
491    fn vplzcntd(&mut self, op0: Ymm, op1: Mem) {
492        self.emit(VPLZCNTD256RM, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
493    }
494}
495
496impl<'a> VplzcntdEmitter<Zmm, Zmm> for Assembler<'a> {
497    fn vplzcntd(&mut self, op0: Zmm, op1: Zmm) {
498        self.emit(VPLZCNTD512RR, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
499    }
500}
501
502impl<'a> VplzcntdEmitter<Zmm, Mem> for Assembler<'a> {
503    fn vplzcntd(&mut self, op0: Zmm, op1: Mem) {
504        self.emit(VPLZCNTD512RM, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
505    }
506}
507
508/// `VPLZCNTD_MASK` (VPLZCNTD). 
509/// Counts the number of leading most significant zero bits in each dword or qword element of the source operand (the second operand) and stores the results in the destination register (the first operand) according to the writemask. If an element is zero, the result for that element is the operand size of the element.
510///
511///
512/// For more details, see the [Intel manual](https://www.felixcloutier.com/x86/VPLZCNTD%3AVPLZCNTQ.html).
513///
514/// Supported operand variants:
515///
516/// ```text
517/// +---+----------+
518/// | # | Operands |
519/// +---+----------+
520/// | 1 | Xmm, Mem |
521/// | 2 | Xmm, Xmm |
522/// | 3 | Ymm, Mem |
523/// | 4 | Ymm, Ymm |
524/// | 5 | Zmm, Mem |
525/// | 6 | Zmm, Zmm |
526/// +---+----------+
527/// ```
528pub trait VplzcntdMaskEmitter<A, B> {
529    fn vplzcntd_mask(&mut self, op0: A, op1: B);
530}
531
532impl<'a> VplzcntdMaskEmitter<Xmm, Xmm> for Assembler<'a> {
533    fn vplzcntd_mask(&mut self, op0: Xmm, op1: Xmm) {
534        self.emit(VPLZCNTD128RR_MASK, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
535    }
536}
537
538impl<'a> VplzcntdMaskEmitter<Xmm, Mem> for Assembler<'a> {
539    fn vplzcntd_mask(&mut self, op0: Xmm, op1: Mem) {
540        self.emit(VPLZCNTD128RM_MASK, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
541    }
542}
543
544impl<'a> VplzcntdMaskEmitter<Ymm, Ymm> for Assembler<'a> {
545    fn vplzcntd_mask(&mut self, op0: Ymm, op1: Ymm) {
546        self.emit(VPLZCNTD256RR_MASK, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
547    }
548}
549
550impl<'a> VplzcntdMaskEmitter<Ymm, Mem> for Assembler<'a> {
551    fn vplzcntd_mask(&mut self, op0: Ymm, op1: Mem) {
552        self.emit(VPLZCNTD256RM_MASK, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
553    }
554}
555
556impl<'a> VplzcntdMaskEmitter<Zmm, Zmm> for Assembler<'a> {
557    fn vplzcntd_mask(&mut self, op0: Zmm, op1: Zmm) {
558        self.emit(VPLZCNTD512RR_MASK, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
559    }
560}
561
562impl<'a> VplzcntdMaskEmitter<Zmm, Mem> for Assembler<'a> {
563    fn vplzcntd_mask(&mut self, op0: Zmm, op1: Mem) {
564        self.emit(VPLZCNTD512RM_MASK, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
565    }
566}
567
568/// `VPLZCNTD_MASKZ` (VPLZCNTD). 
569/// Counts the number of leading most significant zero bits in each dword or qword element of the source operand (the second operand) and stores the results in the destination register (the first operand) according to the writemask. If an element is zero, the result for that element is the operand size of the element.
570///
571///
572/// For more details, see the [Intel manual](https://www.felixcloutier.com/x86/VPLZCNTD%3AVPLZCNTQ.html).
573///
574/// Supported operand variants:
575///
576/// ```text
577/// +---+----------+
578/// | # | Operands |
579/// +---+----------+
580/// | 1 | Xmm, Mem |
581/// | 2 | Xmm, Xmm |
582/// | 3 | Ymm, Mem |
583/// | 4 | Ymm, Ymm |
584/// | 5 | Zmm, Mem |
585/// | 6 | Zmm, Zmm |
586/// +---+----------+
587/// ```
588pub trait VplzcntdMaskzEmitter<A, B> {
589    fn vplzcntd_maskz(&mut self, op0: A, op1: B);
590}
591
592impl<'a> VplzcntdMaskzEmitter<Xmm, Xmm> for Assembler<'a> {
593    fn vplzcntd_maskz(&mut self, op0: Xmm, op1: Xmm) {
594        self.emit(VPLZCNTD128RR_MASKZ, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
595    }
596}
597
598impl<'a> VplzcntdMaskzEmitter<Xmm, Mem> for Assembler<'a> {
599    fn vplzcntd_maskz(&mut self, op0: Xmm, op1: Mem) {
600        self.emit(VPLZCNTD128RM_MASKZ, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
601    }
602}
603
604impl<'a> VplzcntdMaskzEmitter<Ymm, Ymm> for Assembler<'a> {
605    fn vplzcntd_maskz(&mut self, op0: Ymm, op1: Ymm) {
606        self.emit(VPLZCNTD256RR_MASKZ, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
607    }
608}
609
610impl<'a> VplzcntdMaskzEmitter<Ymm, Mem> for Assembler<'a> {
611    fn vplzcntd_maskz(&mut self, op0: Ymm, op1: Mem) {
612        self.emit(VPLZCNTD256RM_MASKZ, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
613    }
614}
615
616impl<'a> VplzcntdMaskzEmitter<Zmm, Zmm> for Assembler<'a> {
617    fn vplzcntd_maskz(&mut self, op0: Zmm, op1: Zmm) {
618        self.emit(VPLZCNTD512RR_MASKZ, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
619    }
620}
621
622impl<'a> VplzcntdMaskzEmitter<Zmm, Mem> for Assembler<'a> {
623    fn vplzcntd_maskz(&mut self, op0: Zmm, op1: Mem) {
624        self.emit(VPLZCNTD512RM_MASKZ, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
625    }
626}
627
628/// `VPLZCNTQ` (VPLZCNTQ). 
629/// Counts the number of leading most significant zero bits in each dword or qword element of the source operand (the second operand) and stores the results in the destination register (the first operand) according to the writemask. If an element is zero, the result for that element is the operand size of the element.
630///
631///
632/// For more details, see the [Intel manual](https://www.felixcloutier.com/x86/VPLZCNTD%3AVPLZCNTQ.html).
633///
634/// Supported operand variants:
635///
636/// ```text
637/// +---+----------+
638/// | # | Operands |
639/// +---+----------+
640/// | 1 | Xmm, Mem |
641/// | 2 | Xmm, Xmm |
642/// | 3 | Ymm, Mem |
643/// | 4 | Ymm, Ymm |
644/// | 5 | Zmm, Mem |
645/// | 6 | Zmm, Zmm |
646/// +---+----------+
647/// ```
648pub trait VplzcntqEmitter<A, B> {
649    fn vplzcntq(&mut self, op0: A, op1: B);
650}
651
652impl<'a> VplzcntqEmitter<Xmm, Xmm> for Assembler<'a> {
653    fn vplzcntq(&mut self, op0: Xmm, op1: Xmm) {
654        self.emit(VPLZCNTQ128RR, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
655    }
656}
657
658impl<'a> VplzcntqEmitter<Xmm, Mem> for Assembler<'a> {
659    fn vplzcntq(&mut self, op0: Xmm, op1: Mem) {
660        self.emit(VPLZCNTQ128RM, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
661    }
662}
663
664impl<'a> VplzcntqEmitter<Ymm, Ymm> for Assembler<'a> {
665    fn vplzcntq(&mut self, op0: Ymm, op1: Ymm) {
666        self.emit(VPLZCNTQ256RR, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
667    }
668}
669
670impl<'a> VplzcntqEmitter<Ymm, Mem> for Assembler<'a> {
671    fn vplzcntq(&mut self, op0: Ymm, op1: Mem) {
672        self.emit(VPLZCNTQ256RM, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
673    }
674}
675
676impl<'a> VplzcntqEmitter<Zmm, Zmm> for Assembler<'a> {
677    fn vplzcntq(&mut self, op0: Zmm, op1: Zmm) {
678        self.emit(VPLZCNTQ512RR, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
679    }
680}
681
682impl<'a> VplzcntqEmitter<Zmm, Mem> for Assembler<'a> {
683    fn vplzcntq(&mut self, op0: Zmm, op1: Mem) {
684        self.emit(VPLZCNTQ512RM, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
685    }
686}
687
688/// `VPLZCNTQ_MASK` (VPLZCNTQ). 
689/// Counts the number of leading most significant zero bits in each dword or qword element of the source operand (the second operand) and stores the results in the destination register (the first operand) according to the writemask. If an element is zero, the result for that element is the operand size of the element.
690///
691///
692/// For more details, see the [Intel manual](https://www.felixcloutier.com/x86/VPLZCNTD%3AVPLZCNTQ.html).
693///
694/// Supported operand variants:
695///
696/// ```text
697/// +---+----------+
698/// | # | Operands |
699/// +---+----------+
700/// | 1 | Xmm, Mem |
701/// | 2 | Xmm, Xmm |
702/// | 3 | Ymm, Mem |
703/// | 4 | Ymm, Ymm |
704/// | 5 | Zmm, Mem |
705/// | 6 | Zmm, Zmm |
706/// +---+----------+
707/// ```
708pub trait VplzcntqMaskEmitter<A, B> {
709    fn vplzcntq_mask(&mut self, op0: A, op1: B);
710}
711
712impl<'a> VplzcntqMaskEmitter<Xmm, Xmm> for Assembler<'a> {
713    fn vplzcntq_mask(&mut self, op0: Xmm, op1: Xmm) {
714        self.emit(VPLZCNTQ128RR_MASK, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
715    }
716}
717
718impl<'a> VplzcntqMaskEmitter<Xmm, Mem> for Assembler<'a> {
719    fn vplzcntq_mask(&mut self, op0: Xmm, op1: Mem) {
720        self.emit(VPLZCNTQ128RM_MASK, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
721    }
722}
723
724impl<'a> VplzcntqMaskEmitter<Ymm, Ymm> for Assembler<'a> {
725    fn vplzcntq_mask(&mut self, op0: Ymm, op1: Ymm) {
726        self.emit(VPLZCNTQ256RR_MASK, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
727    }
728}
729
730impl<'a> VplzcntqMaskEmitter<Ymm, Mem> for Assembler<'a> {
731    fn vplzcntq_mask(&mut self, op0: Ymm, op1: Mem) {
732        self.emit(VPLZCNTQ256RM_MASK, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
733    }
734}
735
736impl<'a> VplzcntqMaskEmitter<Zmm, Zmm> for Assembler<'a> {
737    fn vplzcntq_mask(&mut self, op0: Zmm, op1: Zmm) {
738        self.emit(VPLZCNTQ512RR_MASK, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
739    }
740}
741
742impl<'a> VplzcntqMaskEmitter<Zmm, Mem> for Assembler<'a> {
743    fn vplzcntq_mask(&mut self, op0: Zmm, op1: Mem) {
744        self.emit(VPLZCNTQ512RM_MASK, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
745    }
746}
747
748/// `VPLZCNTQ_MASKZ` (VPLZCNTQ). 
749/// Counts the number of leading most significant zero bits in each dword or qword element of the source operand (the second operand) and stores the results in the destination register (the first operand) according to the writemask. If an element is zero, the result for that element is the operand size of the element.
750///
751///
752/// For more details, see the [Intel manual](https://www.felixcloutier.com/x86/VPLZCNTD%3AVPLZCNTQ.html).
753///
754/// Supported operand variants:
755///
756/// ```text
757/// +---+----------+
758/// | # | Operands |
759/// +---+----------+
760/// | 1 | Xmm, Mem |
761/// | 2 | Xmm, Xmm |
762/// | 3 | Ymm, Mem |
763/// | 4 | Ymm, Ymm |
764/// | 5 | Zmm, Mem |
765/// | 6 | Zmm, Zmm |
766/// +---+----------+
767/// ```
768pub trait VplzcntqMaskzEmitter<A, B> {
769    fn vplzcntq_maskz(&mut self, op0: A, op1: B);
770}
771
772impl<'a> VplzcntqMaskzEmitter<Xmm, Xmm> for Assembler<'a> {
773    fn vplzcntq_maskz(&mut self, op0: Xmm, op1: Xmm) {
774        self.emit(VPLZCNTQ128RR_MASKZ, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
775    }
776}
777
778impl<'a> VplzcntqMaskzEmitter<Xmm, Mem> for Assembler<'a> {
779    fn vplzcntq_maskz(&mut self, op0: Xmm, op1: Mem) {
780        self.emit(VPLZCNTQ128RM_MASKZ, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
781    }
782}
783
784impl<'a> VplzcntqMaskzEmitter<Ymm, Ymm> for Assembler<'a> {
785    fn vplzcntq_maskz(&mut self, op0: Ymm, op1: Ymm) {
786        self.emit(VPLZCNTQ256RR_MASKZ, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
787    }
788}
789
790impl<'a> VplzcntqMaskzEmitter<Ymm, Mem> for Assembler<'a> {
791    fn vplzcntq_maskz(&mut self, op0: Ymm, op1: Mem) {
792        self.emit(VPLZCNTQ256RM_MASKZ, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
793    }
794}
795
796impl<'a> VplzcntqMaskzEmitter<Zmm, Zmm> for Assembler<'a> {
797    fn vplzcntq_maskz(&mut self, op0: Zmm, op1: Zmm) {
798        self.emit(VPLZCNTQ512RR_MASKZ, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
799    }
800}
801
802impl<'a> VplzcntqMaskzEmitter<Zmm, Mem> for Assembler<'a> {
803    fn vplzcntq_maskz(&mut self, op0: Zmm, op1: Mem) {
804        self.emit(VPLZCNTQ512RM_MASKZ, op0.as_operand(), op1.as_operand(), &NOREG, &NOREG);
805    }
806}
807
808
809impl<'a> Assembler<'a> {
810    /// `VPBROADCASTMB2Q` (VPBROADCASTMB2Q). 
811    /// Broadcasts the zero-extended 64/32 bit value of the low byte/word of the source operand (the second operand) to each 64/32 bit element of the destination operand (the first operand). The source operand is an opmask register. The destination operand is a ZMM register (EVEX.512), YMM register (EVEX.256), or XMM register (EVEX.128).
812    ///
813    ///
814    /// For more details, see the [Intel manual](https://www.felixcloutier.com/x86/VPBROADCASTM.html).
815    ///
816    /// Supported operand variants:
817    ///
818    /// ```text
819    /// +---+-----------+
820    /// | # | Operands  |
821    /// +---+-----------+
822    /// | 1 | Xmm, KReg |
823    /// | 2 | Ymm, KReg |
824    /// | 3 | Zmm, KReg |
825    /// +---+-----------+
826    /// ```
827    #[inline]
828    pub fn vpbroadcastmb2q<A, B>(&mut self, op0: A, op1: B)
829    where Assembler<'a>: Vpbroadcastmb2qEmitter<A, B> {
830        <Self as Vpbroadcastmb2qEmitter<A, B>>::vpbroadcastmb2q(self, op0, op1);
831    }
832    /// `VPBROADCASTMW2D` (VPBROADCASTMW2D). 
833    /// Broadcasts the zero-extended 64/32 bit value of the low byte/word of the source operand (the second operand) to each 64/32 bit element of the destination operand (the first operand). The source operand is an opmask register. The destination operand is a ZMM register (EVEX.512), YMM register (EVEX.256), or XMM register (EVEX.128).
834    ///
835    ///
836    /// For more details, see the [Intel manual](https://www.felixcloutier.com/x86/VPBROADCASTM.html).
837    ///
838    /// Supported operand variants:
839    ///
840    /// ```text
841    /// +---+-----------+
842    /// | # | Operands  |
843    /// +---+-----------+
844    /// | 1 | Xmm, KReg |
845    /// | 2 | Ymm, KReg |
846    /// | 3 | Zmm, KReg |
847    /// +---+-----------+
848    /// ```
849    #[inline]
850    pub fn vpbroadcastmw2d<A, B>(&mut self, op0: A, op1: B)
851    where Assembler<'a>: Vpbroadcastmw2dEmitter<A, B> {
852        <Self as Vpbroadcastmw2dEmitter<A, B>>::vpbroadcastmw2d(self, op0, op1);
853    }
854    /// `VPCONFLICTD` (VPCONFLICTD). 
855    /// Test each dword/qword element of the source operand (the second operand) for equality with all other elements in the source operand closer to the least significant element. Each element’s comparison results form a bit vector, which is then zero extended and written to the destination according to the writemask.
856    ///
857    ///
858    /// For more details, see the [Intel manual](https://www.felixcloutier.com/x86/VPCONFLICTD%3AVPCONFLICTQ.html).
859    ///
860    /// Supported operand variants:
861    ///
862    /// ```text
863    /// +---+----------+
864    /// | # | Operands |
865    /// +---+----------+
866    /// | 1 | Xmm, Mem |
867    /// | 2 | Xmm, Xmm |
868    /// | 3 | Ymm, Mem |
869    /// | 4 | Ymm, Ymm |
870    /// | 5 | Zmm, Mem |
871    /// | 6 | Zmm, Zmm |
872    /// +---+----------+
873    /// ```
874    #[inline]
875    pub fn vpconflictd<A, B>(&mut self, op0: A, op1: B)
876    where Assembler<'a>: VpconflictdEmitter<A, B> {
877        <Self as VpconflictdEmitter<A, B>>::vpconflictd(self, op0, op1);
878    }
879    /// `VPCONFLICTD_MASK` (VPCONFLICTD). 
880    /// Test each dword/qword element of the source operand (the second operand) for equality with all other elements in the source operand closer to the least significant element. Each element’s comparison results form a bit vector, which is then zero extended and written to the destination according to the writemask.
881    ///
882    ///
883    /// For more details, see the [Intel manual](https://www.felixcloutier.com/x86/VPCONFLICTD%3AVPCONFLICTQ.html).
884    ///
885    /// Supported operand variants:
886    ///
887    /// ```text
888    /// +---+----------+
889    /// | # | Operands |
890    /// +---+----------+
891    /// | 1 | Xmm, Mem |
892    /// | 2 | Xmm, Xmm |
893    /// | 3 | Ymm, Mem |
894    /// | 4 | Ymm, Ymm |
895    /// | 5 | Zmm, Mem |
896    /// | 6 | Zmm, Zmm |
897    /// +---+----------+
898    /// ```
899    #[inline]
900    pub fn vpconflictd_mask<A, B>(&mut self, op0: A, op1: B)
901    where Assembler<'a>: VpconflictdMaskEmitter<A, B> {
902        <Self as VpconflictdMaskEmitter<A, B>>::vpconflictd_mask(self, op0, op1);
903    }
904    /// `VPCONFLICTD_MASKZ` (VPCONFLICTD). 
905    /// Test each dword/qword element of the source operand (the second operand) for equality with all other elements in the source operand closer to the least significant element. Each element’s comparison results form a bit vector, which is then zero extended and written to the destination according to the writemask.
906    ///
907    ///
908    /// For more details, see the [Intel manual](https://www.felixcloutier.com/x86/VPCONFLICTD%3AVPCONFLICTQ.html).
909    ///
910    /// Supported operand variants:
911    ///
912    /// ```text
913    /// +---+----------+
914    /// | # | Operands |
915    /// +---+----------+
916    /// | 1 | Xmm, Mem |
917    /// | 2 | Xmm, Xmm |
918    /// | 3 | Ymm, Mem |
919    /// | 4 | Ymm, Ymm |
920    /// | 5 | Zmm, Mem |
921    /// | 6 | Zmm, Zmm |
922    /// +---+----------+
923    /// ```
924    #[inline]
925    pub fn vpconflictd_maskz<A, B>(&mut self, op0: A, op1: B)
926    where Assembler<'a>: VpconflictdMaskzEmitter<A, B> {
927        <Self as VpconflictdMaskzEmitter<A, B>>::vpconflictd_maskz(self, op0, op1);
928    }
929    /// `VPCONFLICTQ` (VPCONFLICTQ). 
930    /// Test each dword/qword element of the source operand (the second operand) for equality with all other elements in the source operand closer to the least significant element. Each element’s comparison results form a bit vector, which is then zero extended and written to the destination according to the writemask.
931    ///
932    ///
933    /// For more details, see the [Intel manual](https://www.felixcloutier.com/x86/VPCONFLICTD%3AVPCONFLICTQ.html).
934    ///
935    /// Supported operand variants:
936    ///
937    /// ```text
938    /// +---+----------+
939    /// | # | Operands |
940    /// +---+----------+
941    /// | 1 | Xmm, Mem |
942    /// | 2 | Xmm, Xmm |
943    /// | 3 | Ymm, Mem |
944    /// | 4 | Ymm, Ymm |
945    /// | 5 | Zmm, Mem |
946    /// | 6 | Zmm, Zmm |
947    /// +---+----------+
948    /// ```
949    #[inline]
950    pub fn vpconflictq<A, B>(&mut self, op0: A, op1: B)
951    where Assembler<'a>: VpconflictqEmitter<A, B> {
952        <Self as VpconflictqEmitter<A, B>>::vpconflictq(self, op0, op1);
953    }
954    /// `VPCONFLICTQ_MASK` (VPCONFLICTQ). 
955    /// Test each dword/qword element of the source operand (the second operand) for equality with all other elements in the source operand closer to the least significant element. Each element’s comparison results form a bit vector, which is then zero extended and written to the destination according to the writemask.
956    ///
957    ///
958    /// For more details, see the [Intel manual](https://www.felixcloutier.com/x86/VPCONFLICTD%3AVPCONFLICTQ.html).
959    ///
960    /// Supported operand variants:
961    ///
962    /// ```text
963    /// +---+----------+
964    /// | # | Operands |
965    /// +---+----------+
966    /// | 1 | Xmm, Mem |
967    /// | 2 | Xmm, Xmm |
968    /// | 3 | Ymm, Mem |
969    /// | 4 | Ymm, Ymm |
970    /// | 5 | Zmm, Mem |
971    /// | 6 | Zmm, Zmm |
972    /// +---+----------+
973    /// ```
974    #[inline]
975    pub fn vpconflictq_mask<A, B>(&mut self, op0: A, op1: B)
976    where Assembler<'a>: VpconflictqMaskEmitter<A, B> {
977        <Self as VpconflictqMaskEmitter<A, B>>::vpconflictq_mask(self, op0, op1);
978    }
979    /// `VPCONFLICTQ_MASKZ` (VPCONFLICTQ). 
980    /// Test each dword/qword element of the source operand (the second operand) for equality with all other elements in the source operand closer to the least significant element. Each element’s comparison results form a bit vector, which is then zero extended and written to the destination according to the writemask.
981    ///
982    ///
983    /// For more details, see the [Intel manual](https://www.felixcloutier.com/x86/VPCONFLICTD%3AVPCONFLICTQ.html).
984    ///
985    /// Supported operand variants:
986    ///
987    /// ```text
988    /// +---+----------+
989    /// | # | Operands |
990    /// +---+----------+
991    /// | 1 | Xmm, Mem |
992    /// | 2 | Xmm, Xmm |
993    /// | 3 | Ymm, Mem |
994    /// | 4 | Ymm, Ymm |
995    /// | 5 | Zmm, Mem |
996    /// | 6 | Zmm, Zmm |
997    /// +---+----------+
998    /// ```
999    #[inline]
1000    pub fn vpconflictq_maskz<A, B>(&mut self, op0: A, op1: B)
1001    where Assembler<'a>: VpconflictqMaskzEmitter<A, B> {
1002        <Self as VpconflictqMaskzEmitter<A, B>>::vpconflictq_maskz(self, op0, op1);
1003    }
1004    /// `VPLZCNTD` (VPLZCNTD). 
1005    /// Counts the number of leading most significant zero bits in each dword or qword element of the source operand (the second operand) and stores the results in the destination register (the first operand) according to the writemask. If an element is zero, the result for that element is the operand size of the element.
1006    ///
1007    ///
1008    /// For more details, see the [Intel manual](https://www.felixcloutier.com/x86/VPLZCNTD%3AVPLZCNTQ.html).
1009    ///
1010    /// Supported operand variants:
1011    ///
1012    /// ```text
1013    /// +---+----------+
1014    /// | # | Operands |
1015    /// +---+----------+
1016    /// | 1 | Xmm, Mem |
1017    /// | 2 | Xmm, Xmm |
1018    /// | 3 | Ymm, Mem |
1019    /// | 4 | Ymm, Ymm |
1020    /// | 5 | Zmm, Mem |
1021    /// | 6 | Zmm, Zmm |
1022    /// +---+----------+
1023    /// ```
1024    #[inline]
1025    pub fn vplzcntd<A, B>(&mut self, op0: A, op1: B)
1026    where Assembler<'a>: VplzcntdEmitter<A, B> {
1027        <Self as VplzcntdEmitter<A, B>>::vplzcntd(self, op0, op1);
1028    }
1029    /// `VPLZCNTD_MASK` (VPLZCNTD). 
1030    /// Counts the number of leading most significant zero bits in each dword or qword element of the source operand (the second operand) and stores the results in the destination register (the first operand) according to the writemask. If an element is zero, the result for that element is the operand size of the element.
1031    ///
1032    ///
1033    /// For more details, see the [Intel manual](https://www.felixcloutier.com/x86/VPLZCNTD%3AVPLZCNTQ.html).
1034    ///
1035    /// Supported operand variants:
1036    ///
1037    /// ```text
1038    /// +---+----------+
1039    /// | # | Operands |
1040    /// +---+----------+
1041    /// | 1 | Xmm, Mem |
1042    /// | 2 | Xmm, Xmm |
1043    /// | 3 | Ymm, Mem |
1044    /// | 4 | Ymm, Ymm |
1045    /// | 5 | Zmm, Mem |
1046    /// | 6 | Zmm, Zmm |
1047    /// +---+----------+
1048    /// ```
1049    #[inline]
1050    pub fn vplzcntd_mask<A, B>(&mut self, op0: A, op1: B)
1051    where Assembler<'a>: VplzcntdMaskEmitter<A, B> {
1052        <Self as VplzcntdMaskEmitter<A, B>>::vplzcntd_mask(self, op0, op1);
1053    }
1054    /// `VPLZCNTD_MASKZ` (VPLZCNTD). 
1055    /// Counts the number of leading most significant zero bits in each dword or qword element of the source operand (the second operand) and stores the results in the destination register (the first operand) according to the writemask. If an element is zero, the result for that element is the operand size of the element.
1056    ///
1057    ///
1058    /// For more details, see the [Intel manual](https://www.felixcloutier.com/x86/VPLZCNTD%3AVPLZCNTQ.html).
1059    ///
1060    /// Supported operand variants:
1061    ///
1062    /// ```text
1063    /// +---+----------+
1064    /// | # | Operands |
1065    /// +---+----------+
1066    /// | 1 | Xmm, Mem |
1067    /// | 2 | Xmm, Xmm |
1068    /// | 3 | Ymm, Mem |
1069    /// | 4 | Ymm, Ymm |
1070    /// | 5 | Zmm, Mem |
1071    /// | 6 | Zmm, Zmm |
1072    /// +---+----------+
1073    /// ```
1074    #[inline]
1075    pub fn vplzcntd_maskz<A, B>(&mut self, op0: A, op1: B)
1076    where Assembler<'a>: VplzcntdMaskzEmitter<A, B> {
1077        <Self as VplzcntdMaskzEmitter<A, B>>::vplzcntd_maskz(self, op0, op1);
1078    }
1079    /// `VPLZCNTQ` (VPLZCNTQ). 
1080    /// Counts the number of leading most significant zero bits in each dword or qword element of the source operand (the second operand) and stores the results in the destination register (the first operand) according to the writemask. If an element is zero, the result for that element is the operand size of the element.
1081    ///
1082    ///
1083    /// For more details, see the [Intel manual](https://www.felixcloutier.com/x86/VPLZCNTD%3AVPLZCNTQ.html).
1084    ///
1085    /// Supported operand variants:
1086    ///
1087    /// ```text
1088    /// +---+----------+
1089    /// | # | Operands |
1090    /// +---+----------+
1091    /// | 1 | Xmm, Mem |
1092    /// | 2 | Xmm, Xmm |
1093    /// | 3 | Ymm, Mem |
1094    /// | 4 | Ymm, Ymm |
1095    /// | 5 | Zmm, Mem |
1096    /// | 6 | Zmm, Zmm |
1097    /// +---+----------+
1098    /// ```
1099    #[inline]
1100    pub fn vplzcntq<A, B>(&mut self, op0: A, op1: B)
1101    where Assembler<'a>: VplzcntqEmitter<A, B> {
1102        <Self as VplzcntqEmitter<A, B>>::vplzcntq(self, op0, op1);
1103    }
1104    /// `VPLZCNTQ_MASK` (VPLZCNTQ). 
1105    /// Counts the number of leading most significant zero bits in each dword or qword element of the source operand (the second operand) and stores the results in the destination register (the first operand) according to the writemask. If an element is zero, the result for that element is the operand size of the element.
1106    ///
1107    ///
1108    /// For more details, see the [Intel manual](https://www.felixcloutier.com/x86/VPLZCNTD%3AVPLZCNTQ.html).
1109    ///
1110    /// Supported operand variants:
1111    ///
1112    /// ```text
1113    /// +---+----------+
1114    /// | # | Operands |
1115    /// +---+----------+
1116    /// | 1 | Xmm, Mem |
1117    /// | 2 | Xmm, Xmm |
1118    /// | 3 | Ymm, Mem |
1119    /// | 4 | Ymm, Ymm |
1120    /// | 5 | Zmm, Mem |
1121    /// | 6 | Zmm, Zmm |
1122    /// +---+----------+
1123    /// ```
1124    #[inline]
1125    pub fn vplzcntq_mask<A, B>(&mut self, op0: A, op1: B)
1126    where Assembler<'a>: VplzcntqMaskEmitter<A, B> {
1127        <Self as VplzcntqMaskEmitter<A, B>>::vplzcntq_mask(self, op0, op1);
1128    }
1129    /// `VPLZCNTQ_MASKZ` (VPLZCNTQ). 
1130    /// Counts the number of leading most significant zero bits in each dword or qword element of the source operand (the second operand) and stores the results in the destination register (the first operand) according to the writemask. If an element is zero, the result for that element is the operand size of the element.
1131    ///
1132    ///
1133    /// For more details, see the [Intel manual](https://www.felixcloutier.com/x86/VPLZCNTD%3AVPLZCNTQ.html).
1134    ///
1135    /// Supported operand variants:
1136    ///
1137    /// ```text
1138    /// +---+----------+
1139    /// | # | Operands |
1140    /// +---+----------+
1141    /// | 1 | Xmm, Mem |
1142    /// | 2 | Xmm, Xmm |
1143    /// | 3 | Ymm, Mem |
1144    /// | 4 | Ymm, Ymm |
1145    /// | 5 | Zmm, Mem |
1146    /// | 6 | Zmm, Zmm |
1147    /// +---+----------+
1148    /// ```
1149    #[inline]
1150    pub fn vplzcntq_maskz<A, B>(&mut self, op0: A, op1: B)
1151    where Assembler<'a>: VplzcntqMaskzEmitter<A, B> {
1152        <Self as VplzcntqMaskzEmitter<A, B>>::vplzcntq_maskz(self, op0, op1);
1153    }
1154}