]> git.lizzy.rs Git - rust.git/blob - src/test/assembly/asm/x86-types.rs
use jemallocator in rustc/rustdoc
[rust.git] / src / test / assembly / asm / x86-types.rs
1 // min-llvm-version: 10.0.1
2 // revisions: x86_64 i686
3 // assembly-output: emit-asm
4 //[x86_64] compile-flags: --target x86_64-unknown-linux-gnu
5 //[i686] compile-flags: --target i686-unknown-linux-gnu
6 // compile-flags: -C llvm-args=--x86-asm-syntax=intel
7 // compile-flags: -C target-feature=+avx512bw
8
9 #![feature(no_core, lang_items, rustc_attrs, repr_simd)]
10 #![crate_type = "rlib"]
11 #![no_core]
12 #![allow(asm_sub_register, non_camel_case_types)]
13
14 #[rustc_builtin_macro]
15 macro_rules! asm {
16     () => {};
17 }
18 #[rustc_builtin_macro]
19 macro_rules! concat {
20     () => {};
21 }
22 #[rustc_builtin_macro]
23 macro_rules! stringify {
24     () => {};
25 }
26
27 #[lang = "sized"]
28 trait Sized {}
29 #[lang = "copy"]
30 trait Copy {}
31
32 type ptr = *mut u8;
33
34 #[repr(simd)]
35 pub struct i8x16(i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8, i8);
36 #[repr(simd)]
37 pub struct i16x8(i16, i16, i16, i16, i16, i16, i16, i16);
38 #[repr(simd)]
39 pub struct i32x4(i32, i32, i32, i32);
40 #[repr(simd)]
41 pub struct i64x2(i64, i64);
42 #[repr(simd)]
43 pub struct f32x4(f32, f32, f32, f32);
44 #[repr(simd)]
45 pub struct f64x2(f64, f64);
46
47 #[repr(simd)]
48 pub struct i8x32(
49     i8,
50     i8,
51     i8,
52     i8,
53     i8,
54     i8,
55     i8,
56     i8,
57     i8,
58     i8,
59     i8,
60     i8,
61     i8,
62     i8,
63     i8,
64     i8,
65     i8,
66     i8,
67     i8,
68     i8,
69     i8,
70     i8,
71     i8,
72     i8,
73     i8,
74     i8,
75     i8,
76     i8,
77     i8,
78     i8,
79     i8,
80     i8,
81 );
82 #[repr(simd)]
83 pub struct i16x16(i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16, i16);
84 #[repr(simd)]
85 pub struct i32x8(i32, i32, i32, i32, i32, i32, i32, i32);
86 #[repr(simd)]
87 pub struct i64x4(i64, i64, i64, i64);
88 #[repr(simd)]
89 pub struct f32x8(f32, f32, f32, f32, f32, f32, f32, f32);
90 #[repr(simd)]
91 pub struct f64x4(f64, f64, f64, f64);
92
93 #[repr(simd)]
94 pub struct i8x64(
95     i8,
96     i8,
97     i8,
98     i8,
99     i8,
100     i8,
101     i8,
102     i8,
103     i8,
104     i8,
105     i8,
106     i8,
107     i8,
108     i8,
109     i8,
110     i8,
111     i8,
112     i8,
113     i8,
114     i8,
115     i8,
116     i8,
117     i8,
118     i8,
119     i8,
120     i8,
121     i8,
122     i8,
123     i8,
124     i8,
125     i8,
126     i8,
127     i8,
128     i8,
129     i8,
130     i8,
131     i8,
132     i8,
133     i8,
134     i8,
135     i8,
136     i8,
137     i8,
138     i8,
139     i8,
140     i8,
141     i8,
142     i8,
143     i8,
144     i8,
145     i8,
146     i8,
147     i8,
148     i8,
149     i8,
150     i8,
151     i8,
152     i8,
153     i8,
154     i8,
155     i8,
156     i8,
157     i8,
158     i8,
159 );
160 #[repr(simd)]
161 pub struct i16x32(
162     i16,
163     i16,
164     i16,
165     i16,
166     i16,
167     i16,
168     i16,
169     i16,
170     i16,
171     i16,
172     i16,
173     i16,
174     i16,
175     i16,
176     i16,
177     i16,
178     i16,
179     i16,
180     i16,
181     i16,
182     i16,
183     i16,
184     i16,
185     i16,
186     i16,
187     i16,
188     i16,
189     i16,
190     i16,
191     i16,
192     i16,
193     i16,
194 );
195 #[repr(simd)]
196 pub struct i32x16(i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32, i32);
197 #[repr(simd)]
198 pub struct i64x8(i64, i64, i64, i64, i64, i64, i64, i64);
199 #[repr(simd)]
200 pub struct f32x16(f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32, f32);
201 #[repr(simd)]
202 pub struct f64x8(f64, f64, f64, f64, f64, f64, f64, f64);
203
204 impl Copy for i8 {}
205 impl Copy for i16 {}
206 impl Copy for i32 {}
207 impl Copy for f32 {}
208 impl Copy for i64 {}
209 impl Copy for f64 {}
210 impl Copy for ptr {}
211 impl Copy for i8x16 {}
212 impl Copy for i16x8 {}
213 impl Copy for i32x4 {}
214 impl Copy for i64x2 {}
215 impl Copy for f32x4 {}
216 impl Copy for f64x2 {}
217 impl Copy for i8x32 {}
218 impl Copy for i16x16 {}
219 impl Copy for i32x8 {}
220 impl Copy for i64x4 {}
221 impl Copy for f32x8 {}
222 impl Copy for f64x4 {}
223 impl Copy for i8x64 {}
224 impl Copy for i16x32 {}
225 impl Copy for i32x16 {}
226 impl Copy for i64x8 {}
227 impl Copy for f32x16 {}
228 impl Copy for f64x8 {}
229
230 extern "C" {
231     fn extern_func();
232     static extern_static: u8;
233 }
234
235 // CHECK-LABEL: sym_fn:
236 // CHECK: #APP
237 // CHECK: call extern_func
238 // CHECK: #NO_APP
239 #[no_mangle]
240 pub unsafe fn sym_fn() {
241     asm!("call {}", sym extern_func);
242 }
243
244 // CHECK-LABEL: sym_static:
245 // CHECK: #APP
246 // CHECK: mov al, byte ptr [extern_static]
247 // CHECK: #NO_APP
248 #[no_mangle]
249 pub unsafe fn sym_static() {
250     asm!("mov al, byte ptr [{}]", sym extern_static);
251 }
252
253 macro_rules! check {
254     ($func:ident $ty:ident $class:ident $mov:literal) => {
255         #[no_mangle]
256         pub unsafe fn $func(x: $ty) -> $ty {
257             // Hack to avoid function merging
258             extern "Rust" {
259                 fn dont_merge(s: &str);
260             }
261             dont_merge(stringify!($func));
262
263             let y;
264             asm!(concat!($mov, " {}, {}"), lateout($class) y, in($class) x);
265             y
266         }
267     };
268 }
269
270 macro_rules! check_reg {
271     ($func:ident $ty:ident $reg:tt $mov:literal) => {
272         #[no_mangle]
273         pub unsafe fn $func(x: $ty) -> $ty {
274             // Hack to avoid function merging
275             extern "Rust" {
276                 fn dont_merge(s: &str);
277             }
278             dont_merge(stringify!($func));
279
280             let y;
281             asm!(concat!($mov, " ", $reg, ", ", $reg), lateout($reg) y, in($reg) x);
282             y
283         }
284     };
285 }
286
287 // CHECK-LABEL: reg_i16:
288 // CHECK: #APP
289 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
290 // i686: mov e{{[a-z0-9]+}}, e{{[a-z0-9]+}}
291 // CHECK: #NO_APP
292 check!(reg_i16 i16 reg "mov");
293
294 // CHECK-LABEL: reg_i32:
295 // CHECK: #APP
296 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
297 // i686: mov e{{[a-z0-9]+}}, e{{[a-z0-9]+}}
298 // CHECK: #NO_APP
299 check!(reg_i32 i32 reg "mov");
300
301 // CHECK-LABEL: reg_f32:
302 // CHECK: #APP
303 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
304 // i686: mov e{{[a-z0-9]+}}, e{{[a-z0-9]+}}
305 // CHECK: #NO_APP
306 check!(reg_f32 f32 reg "mov");
307
308 // x86_64-LABEL: reg_i64:
309 // x86_64: #APP
310 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
311 // x86_64: #NO_APP
312 #[cfg(x86_64)]
313 check!(reg_i64 i64 reg "mov");
314
315 // x86_64-LABEL: reg_f64:
316 // x86_64: #APP
317 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
318 // x86_64: #NO_APP
319 #[cfg(x86_64)]
320 check!(reg_f64 f64 reg "mov");
321
322 // CHECK-LABEL: reg_ptr:
323 // CHECK: #APP
324 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
325 // i686: mov e{{[a-z0-9]+}}, e{{[a-z0-9]+}}
326 // CHECK: #NO_APP
327 check!(reg_ptr ptr reg "mov");
328
329 // CHECK-LABEL: reg_abcd_i16:
330 // CHECK: #APP
331 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
332 // i686: mov e{{[a-z0-9]+}}, e{{[a-z0-9]+}}
333 // CHECK: #NO_APP
334 check!(reg_abcd_i16 i16 reg_abcd "mov");
335
336 // CHECK-LABEL: reg_abcd_i32:
337 // CHECK: #APP
338 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
339 // i686: mov e{{[a-z0-9]+}}, e{{[a-z0-9]+}}
340 // CHECK: #NO_APP
341 check!(reg_abcd_i32 i32 reg_abcd "mov");
342
343 // CHECK-LABEL: reg_abcd_f32:
344 // CHECK: #APP
345 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
346 // i686: mov e{{[a-z0-9]+}}, e{{[a-z0-9]+}}
347 // CHECK: #NO_APP
348 check!(reg_abcd_f32 f32 reg_abcd "mov");
349
350 // x86_64-LABEL: reg_abcd_i64:
351 // x86_64: #APP
352 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
353 // x86_64: #NO_APP
354 #[cfg(x86_64)]
355 check!(reg_abcd_i64 i64 reg_abcd "mov");
356
357 // x86_64-LABEL: reg_abcd_f64:
358 // x86_64: #APP
359 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
360 // x86_64: #NO_APP
361 #[cfg(x86_64)]
362 check!(reg_abcd_f64 f64 reg_abcd "mov");
363
364 // CHECK-LABEL: reg_abcd_ptr:
365 // CHECK: #APP
366 // x86_64: mov r{{[a-z0-9]+}}, r{{[a-z0-9]+}}
367 // i686: mov e{{[a-z0-9]+}}, e{{[a-z0-9]+}}
368 // CHECK: #NO_APP
369 check!(reg_abcd_ptr ptr reg_abcd "mov");
370
371 // CHECK-LABEL: reg_byte:
372 // CHECK: #APP
373 // CHECK: mov {{[a-z0-9]+}}, {{[a-z0-9]+}}
374 // CHECK: #NO_APP
375 check!(reg_byte i8 reg_byte "mov");
376
377 // CHECK-LABEL: xmm_reg_i32:
378 // CHECK: #APP
379 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
380 // CHECK: #NO_APP
381 check!(xmm_reg_i32 i32 xmm_reg "movaps");
382
383 // CHECK-LABEL: xmm_reg_f32:
384 // CHECK: #APP
385 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
386 // CHECK: #NO_APP
387 check!(xmm_reg_f32 f32 xmm_reg "movaps");
388
389 // CHECK-LABEL: xmm_reg_i64:
390 // CHECK: #APP
391 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
392 // CHECK: #NO_APP
393 check!(xmm_reg_i64 i64 xmm_reg "movaps");
394
395 // CHECK-LABEL: xmm_reg_f64:
396 // CHECK: #APP
397 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
398 // CHECK: #NO_APP
399 check!(xmm_reg_f64 f64 xmm_reg "movaps");
400
401 // CHECK-LABEL: xmm_reg_ptr:
402 // CHECK: #APP
403 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
404 // CHECK: #NO_APP
405 check!(xmm_reg_ptr ptr xmm_reg "movaps");
406
407 // CHECK-LABEL: xmm_reg_i8x16:
408 // CHECK: #APP
409 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
410 // CHECK: #NO_APP
411 check!(xmm_reg_i8x16 i8x16 xmm_reg "movaps");
412
413 // CHECK-LABEL: xmm_reg_i16x8:
414 // CHECK: #APP
415 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
416 // CHECK: #NO_APP
417 check!(xmm_reg_i16x8 i16x8 xmm_reg "movaps");
418
419 // CHECK-LABEL: xmm_reg_i32x4:
420 // CHECK: #APP
421 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
422 // CHECK: #NO_APP
423 check!(xmm_reg_i32x4 i32x4 xmm_reg "movaps");
424
425 // CHECK-LABEL: xmm_reg_i64x2:
426 // CHECK: #APP
427 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
428 // CHECK: #NO_APP
429 check!(xmm_reg_i64x2 i64x2 xmm_reg "movaps");
430
431 // CHECK-LABEL: xmm_reg_f32x4:
432 // CHECK: #APP
433 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
434 // CHECK: #NO_APP
435 check!(xmm_reg_f32x4 f32x4 xmm_reg "movaps");
436
437 // CHECK-LABEL: xmm_reg_f64x2:
438 // CHECK: #APP
439 // CHECK: movaps xmm{{[0-9]+}}, xmm{{[0-9]+}}
440 // CHECK: #NO_APP
441 check!(xmm_reg_f64x2 f64x2 xmm_reg "movaps");
442
443 // CHECK-LABEL: ymm_reg_i32:
444 // CHECK: #APP
445 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
446 // CHECK: #NO_APP
447 check!(ymm_reg_i32 i32 ymm_reg "vmovaps");
448
449 // CHECK-LABEL: ymm_reg_f32:
450 // CHECK: #APP
451 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
452 // CHECK: #NO_APP
453 check!(ymm_reg_f32 f32 ymm_reg "vmovaps");
454
455 // CHECK-LABEL: ymm_reg_i64:
456 // CHECK: #APP
457 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
458 // CHECK: #NO_APP
459 check!(ymm_reg_i64 i64 ymm_reg "vmovaps");
460
461 // CHECK-LABEL: ymm_reg_f64:
462 // CHECK: #APP
463 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
464 // CHECK: #NO_APP
465 check!(ymm_reg_f64 f64 ymm_reg "vmovaps");
466
467 // CHECK-LABEL: ymm_reg_ptr:
468 // CHECK: #APP
469 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
470 // CHECK: #NO_APP
471 check!(ymm_reg_ptr ptr ymm_reg "vmovaps");
472
473 // CHECK-LABEL: ymm_reg_i8x16:
474 // CHECK: #APP
475 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
476 // CHECK: #NO_APP
477 check!(ymm_reg_i8x16 i8x16 ymm_reg "vmovaps");
478
479 // CHECK-LABEL: ymm_reg_i16x8:
480 // CHECK: #APP
481 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
482 // CHECK: #NO_APP
483 check!(ymm_reg_i16x8 i16x8 ymm_reg "vmovaps");
484
485 // CHECK-LABEL: ymm_reg_i32x4:
486 // CHECK: #APP
487 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
488 // CHECK: #NO_APP
489 check!(ymm_reg_i32x4 i32x4 ymm_reg "vmovaps");
490
491 // CHECK-LABEL: ymm_reg_i64x2:
492 // CHECK: #APP
493 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
494 // CHECK: #NO_APP
495 check!(ymm_reg_i64x2 i64x2 ymm_reg "vmovaps");
496
497 // CHECK-LABEL: ymm_reg_f32x4:
498 // CHECK: #APP
499 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
500 // CHECK: #NO_APP
501 check!(ymm_reg_f32x4 f32x4 ymm_reg "vmovaps");
502
503 // CHECK-LABEL: ymm_reg_f64x2:
504 // CHECK: #APP
505 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
506 // CHECK: #NO_APP
507 check!(ymm_reg_f64x2 f64x2 ymm_reg "vmovaps");
508
509 // CHECK-LABEL: ymm_reg_i8x32:
510 // CHECK: #APP
511 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
512 // CHECK: #NO_APP
513 check!(ymm_reg_i8x32 i8x32 ymm_reg "vmovaps");
514
515 // CHECK-LABEL: ymm_reg_i16x16:
516 // CHECK: #APP
517 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
518 // CHECK: #NO_APP
519 check!(ymm_reg_i16x16 i16x16 ymm_reg "vmovaps");
520
521 // CHECK-LABEL: ymm_reg_i32x8:
522 // CHECK: #APP
523 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
524 // CHECK: #NO_APP
525 check!(ymm_reg_i32x8 i32x8 ymm_reg "vmovaps");
526
527 // CHECK-LABEL: ymm_reg_i64x4:
528 // CHECK: #APP
529 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
530 // CHECK: #NO_APP
531 check!(ymm_reg_i64x4 i64x4 ymm_reg "vmovaps");
532
533 // CHECK-LABEL: ymm_reg_f32x8:
534 // CHECK: #APP
535 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
536 // CHECK: #NO_APP
537 check!(ymm_reg_f32x8 f32x8 ymm_reg "vmovaps");
538
539 // CHECK-LABEL: ymm_reg_f64x4:
540 // CHECK: #APP
541 // CHECK: vmovaps ymm{{[0-9]+}}, ymm{{[0-9]+}}
542 // CHECK: #NO_APP
543 check!(ymm_reg_f64x4 f64x4 ymm_reg "vmovaps");
544
545 // CHECK-LABEL: zmm_reg_i32:
546 // CHECK: #APP
547 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
548 // CHECK: #NO_APP
549 check!(zmm_reg_i32 i32 zmm_reg "vmovaps");
550
551 // CHECK-LABEL: zmm_reg_f32:
552 // CHECK: #APP
553 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
554 // CHECK: #NO_APP
555 check!(zmm_reg_f32 f32 zmm_reg "vmovaps");
556
557 // CHECK-LABEL: zmm_reg_i64:
558 // CHECK: #APP
559 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
560 // CHECK: #NO_APP
561 check!(zmm_reg_i64 i64 zmm_reg "vmovaps");
562
563 // CHECK-LABEL: zmm_reg_f64:
564 // CHECK: #APP
565 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
566 // CHECK: #NO_APP
567 check!(zmm_reg_f64 f64 zmm_reg "vmovaps");
568
569 // CHECK-LABEL: zmm_reg_ptr:
570 // CHECK: #APP
571 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
572 // CHECK: #NO_APP
573 check!(zmm_reg_ptr ptr zmm_reg "vmovaps");
574
575 // CHECK-LABEL: zmm_reg_i8x16:
576 // CHECK: #APP
577 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
578 // CHECK: #NO_APP
579 check!(zmm_reg_i8x16 i8x16 zmm_reg "vmovaps");
580
581 // CHECK-LABEL: zmm_reg_i16x8:
582 // CHECK: #APP
583 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
584 // CHECK: #NO_APP
585 check!(zmm_reg_i16x8 i16x8 zmm_reg "vmovaps");
586
587 // CHECK-LABEL: zmm_reg_i32x4:
588 // CHECK: #APP
589 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
590 // CHECK: #NO_APP
591 check!(zmm_reg_i32x4 i32x4 zmm_reg "vmovaps");
592
593 // CHECK-LABEL: zmm_reg_i64x2:
594 // CHECK: #APP
595 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
596 // CHECK: #NO_APP
597 check!(zmm_reg_i64x2 i64x2 zmm_reg "vmovaps");
598
599 // CHECK-LABEL: zmm_reg_f32x4:
600 // CHECK: #APP
601 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
602 // CHECK: #NO_APP
603 check!(zmm_reg_f32x4 f32x4 zmm_reg "vmovaps");
604
605 // CHECK-LABEL: zmm_reg_f64x2:
606 // CHECK: #APP
607 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
608 // CHECK: #NO_APP
609 check!(zmm_reg_f64x2 f64x2 zmm_reg "vmovaps");
610
611 // CHECK-LABEL: zmm_reg_i8x32:
612 // CHECK: #APP
613 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
614 // CHECK: #NO_APP
615 check!(zmm_reg_i8x32 i8x32 zmm_reg "vmovaps");
616
617 // CHECK-LABEL: zmm_reg_i16x16:
618 // CHECK: #APP
619 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
620 // CHECK: #NO_APP
621 check!(zmm_reg_i16x16 i16x16 zmm_reg "vmovaps");
622
623 // CHECK-LABEL: zmm_reg_i32x8:
624 // CHECK: #APP
625 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
626 // CHECK: #NO_APP
627 check!(zmm_reg_i32x8 i32x8 zmm_reg "vmovaps");
628
629 // CHECK-LABEL: zmm_reg_i64x4:
630 // CHECK: #APP
631 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
632 // CHECK: #NO_APP
633 check!(zmm_reg_i64x4 i64x4 zmm_reg "vmovaps");
634
635 // CHECK-LABEL: zmm_reg_f32x8:
636 // CHECK: #APP
637 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
638 // CHECK: #NO_APP
639 check!(zmm_reg_f32x8 f32x8 zmm_reg "vmovaps");
640
641 // CHECK-LABEL: zmm_reg_f64x4:
642 // CHECK: #APP
643 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
644 // CHECK: #NO_APP
645 check!(zmm_reg_f64x4 f64x4 zmm_reg "vmovaps");
646
647 // CHECK-LABEL: zmm_reg_i8x64:
648 // CHECK: #APP
649 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
650 // CHECK: #NO_APP
651 check!(zmm_reg_i8x64 i8x64 zmm_reg "vmovaps");
652
653 // CHECK-LABEL: zmm_reg_i16x32:
654 // CHECK: #APP
655 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
656 // CHECK: #NO_APP
657 check!(zmm_reg_i16x32 i16x32 zmm_reg "vmovaps");
658
659 // CHECK-LABEL: zmm_reg_i32x16:
660 // CHECK: #APP
661 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
662 // CHECK: #NO_APP
663 check!(zmm_reg_i32x16 i32x16 zmm_reg "vmovaps");
664
665 // CHECK-LABEL: zmm_reg_i64x8:
666 // CHECK: #APP
667 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
668 // CHECK: #NO_APP
669 check!(zmm_reg_i64x8 i64x8 zmm_reg "vmovaps");
670
671 // CHECK-LABEL: zmm_reg_f32x16:
672 // CHECK: #APP
673 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
674 // CHECK: #NO_APP
675 check!(zmm_reg_f32x16 f32x16 zmm_reg "vmovaps");
676
677 // CHECK-LABEL: zmm_reg_f64x8:
678 // CHECK: #APP
679 // CHECK: vmovaps zmm{{[0-9]+}}, zmm{{[0-9]+}}
680 // CHECK: #NO_APP
681 check!(zmm_reg_f64x8 f64x8 zmm_reg "vmovaps");
682
683 // CHECK-LABEL: kreg_i8:
684 // CHECK: #APP
685 // CHECK: kmovb k{{[0-9]+}}, k{{[0-9]+}}
686 // CHECK: #NO_APP
687 check!(kreg_i8 i8 kreg "kmovb");
688
689 // CHECK-LABEL: kreg_i16:
690 // CHECK: #APP
691 // CHECK: kmovw k{{[0-9]+}}, k{{[0-9]+}}
692 // CHECK: #NO_APP
693 check!(kreg_i16 i16 kreg "kmovw");
694
695 // CHECK-LABEL: kreg_i32:
696 // CHECK: #APP
697 // CHECK: kmovd k{{[0-9]+}}, k{{[0-9]+}}
698 // CHECK: #NO_APP
699 check!(kreg_i32 i32 kreg "kmovd");
700
701 // CHECK-LABEL: kreg_i64:
702 // CHECK: #APP
703 // CHECK: kmovq k{{[0-9]+}}, k{{[0-9]+}}
704 // CHECK: #NO_APP
705 check!(kreg_i64 i64 kreg "kmovq");
706
707 // CHECK-LABEL: kreg_ptr:
708 // CHECK: #APP
709 // CHECK: kmovq k{{[0-9]+}}, k{{[0-9]+}}
710 // CHECK: #NO_APP
711 check!(kreg_ptr ptr kreg "kmovq");
712
713 // CHECK-LABEL: eax_i16:
714 // CHECK: #APP
715 // CHECK: mov eax, eax
716 // CHECK: #NO_APP
717 check_reg!(eax_i16 i16 "eax" "mov");
718
719 // CHECK-LABEL: eax_i32:
720 // CHECK: #APP
721 // CHECK: mov eax, eax
722 // CHECK: #NO_APP
723 check_reg!(eax_i32 i32 "eax" "mov");
724
725 // CHECK-LABEL: eax_f32:
726 // CHECK: #APP
727 // CHECK: mov eax, eax
728 // CHECK: #NO_APP
729 check_reg!(eax_f32 f32 "eax" "mov");
730
731 // x86_64-LABEL: eax_i64:
732 // x86_64: #APP
733 // x86_64: mov eax, eax
734 // x86_64: #NO_APP
735 #[cfg(x86_64)]
736 check_reg!(eax_i64 i64 "eax" "mov");
737
738 // x86_64-LABEL: eax_f64:
739 // x86_64: #APP
740 // x86_64: mov eax, eax
741 // x86_64: #NO_APP
742 #[cfg(x86_64)]
743 check_reg!(eax_f64 f64 "eax" "mov");
744
745 // CHECK-LABEL: eax_ptr:
746 // CHECK: #APP
747 // CHECK: mov eax, eax
748 // CHECK: #NO_APP
749 check_reg!(eax_ptr ptr "eax" "mov");
750
751 // CHECK-LABEL: ah_byte:
752 // CHECK: #APP
753 // CHECK: mov ah, ah
754 // CHECK: #NO_APP
755 check_reg!(ah_byte i8 "ah" "mov");
756
757 // CHECK-LABEL: xmm0_i32:
758 // CHECK: #APP
759 // CHECK: movaps xmm0, xmm0
760 // CHECK: #NO_APP
761 check_reg!(xmm0_i32 i32 "xmm0" "movaps");
762
763 // CHECK-LABEL: xmm0_f32:
764 // CHECK: #APP
765 // CHECK: movaps xmm0, xmm0
766 // CHECK: #NO_APP
767 check_reg!(xmm0_f32 f32 "xmm0" "movaps");
768
769 // CHECK-LABEL: xmm0_i64:
770 // CHECK: #APP
771 // CHECK: movaps xmm0, xmm0
772 // CHECK: #NO_APP
773 check_reg!(xmm0_i64 i64 "xmm0" "movaps");
774
775 // CHECK-LABEL: xmm0_f64:
776 // CHECK: #APP
777 // CHECK: movaps xmm0, xmm0
778 // CHECK: #NO_APP
779 check_reg!(xmm0_f64 f64 "xmm0" "movaps");
780
781 // CHECK-LABEL: xmm0_ptr:
782 // CHECK: #APP
783 // CHECK: movaps xmm0, xmm0
784 // CHECK: #NO_APP
785 check_reg!(xmm0_ptr ptr "xmm0" "movaps");
786
787 // CHECK-LABEL: xmm0_i8x16:
788 // CHECK: #APP
789 // CHECK: movaps xmm0, xmm0
790 // CHECK: #NO_APP
791 check_reg!(xmm0_i8x16 i8x16 "xmm0" "movaps");
792
793 // CHECK-LABEL: xmm0_i16x8:
794 // CHECK: #APP
795 // CHECK: movaps xmm0, xmm0
796 // CHECK: #NO_APP
797 check_reg!(xmm0_i16x8 i16x8 "xmm0" "movaps");
798
799 // CHECK-LABEL: xmm0_i32x4:
800 // CHECK: #APP
801 // CHECK: movaps xmm0, xmm0
802 // CHECK: #NO_APP
803 check_reg!(xmm0_i32x4 i32x4 "xmm0" "movaps");
804
805 // CHECK-LABEL: xmm0_i64x2:
806 // CHECK: #APP
807 // CHECK: movaps xmm0, xmm0
808 // CHECK: #NO_APP
809 check_reg!(xmm0_i64x2 i64x2 "xmm0" "movaps");
810
811 // CHECK-LABEL: xmm0_f32x4:
812 // CHECK: #APP
813 // CHECK: movaps xmm0, xmm0
814 // CHECK: #NO_APP
815 check_reg!(xmm0_f32x4 f32x4 "xmm0" "movaps");
816
817 // CHECK-LABEL: xmm0_f64x2:
818 // CHECK: #APP
819 // CHECK: movaps xmm0, xmm0
820 // CHECK: #NO_APP
821 check_reg!(xmm0_f64x2 f64x2 "xmm0" "movaps");
822
823 // CHECK-LABEL: ymm0_i32:
824 // CHECK: #APP
825 // CHECK: vmovaps ymm0, ymm0
826 // CHECK: #NO_APP
827 check_reg!(ymm0_i32 i32 "ymm0" "vmovaps");
828
829 // CHECK-LABEL: ymm0_f32:
830 // CHECK: #APP
831 // CHECK: vmovaps ymm0, ymm0
832 // CHECK: #NO_APP
833 check_reg!(ymm0_f32 f32 "ymm0" "vmovaps");
834
835 // CHECK-LABEL: ymm0_i64:
836 // CHECK: #APP
837 // CHECK: vmovaps ymm0, ymm0
838 // CHECK: #NO_APP
839 check_reg!(ymm0_i64 i64 "ymm0" "vmovaps");
840
841 // CHECK-LABEL: ymm0_f64:
842 // CHECK: #APP
843 // CHECK: vmovaps ymm0, ymm0
844 // CHECK: #NO_APP
845 check_reg!(ymm0_f64 f64 "ymm0" "vmovaps");
846
847 // CHECK-LABEL: ymm0_ptr:
848 // CHECK: #APP
849 // CHECK: vmovaps ymm0, ymm0
850 // CHECK: #NO_APP
851 check_reg!(ymm0_ptr ptr "ymm0" "vmovaps");
852
853 // CHECK-LABEL: ymm0_i8x16:
854 // CHECK: #APP
855 // CHECK: vmovaps ymm0, ymm0
856 // CHECK: #NO_APP
857 check_reg!(ymm0_i8x16 i8x16 "ymm0" "vmovaps");
858
859 // CHECK-LABEL: ymm0_i16x8:
860 // CHECK: #APP
861 // CHECK: vmovaps ymm0, ymm0
862 // CHECK: #NO_APP
863 check_reg!(ymm0_i16x8 i16x8 "ymm0" "vmovaps");
864
865 // CHECK-LABEL: ymm0_i32x4:
866 // CHECK: #APP
867 // CHECK: vmovaps ymm0, ymm0
868 // CHECK: #NO_APP
869 check_reg!(ymm0_i32x4 i32x4 "ymm0" "vmovaps");
870
871 // CHECK-LABEL: ymm0_i64x2:
872 // CHECK: #APP
873 // CHECK: vmovaps ymm0, ymm0
874 // CHECK: #NO_APP
875 check_reg!(ymm0_i64x2 i64x2 "ymm0" "vmovaps");
876
877 // CHECK-LABEL: ymm0_f32x4:
878 // CHECK: #APP
879 // CHECK: vmovaps ymm0, ymm0
880 // CHECK: #NO_APP
881 check_reg!(ymm0_f32x4 f32x4 "ymm0" "vmovaps");
882
883 // CHECK-LABEL: ymm0_f64x2:
884 // CHECK: #APP
885 // CHECK: vmovaps ymm0, ymm0
886 // CHECK: #NO_APP
887 check_reg!(ymm0_f64x2 f64x2 "ymm0" "vmovaps");
888
889 // CHECK-LABEL: ymm0_i8x32:
890 // CHECK: #APP
891 // CHECK: vmovaps ymm0, ymm0
892 // CHECK: #NO_APP
893 check_reg!(ymm0_i8x32 i8x32 "ymm0" "vmovaps");
894
895 // CHECK-LABEL: ymm0_i16x16:
896 // CHECK: #APP
897 // CHECK: vmovaps ymm0, ymm0
898 // CHECK: #NO_APP
899 check_reg!(ymm0_i16x16 i16x16 "ymm0" "vmovaps");
900
901 // CHECK-LABEL: ymm0_i32x8:
902 // CHECK: #APP
903 // CHECK: vmovaps ymm0, ymm0
904 // CHECK: #NO_APP
905 check_reg!(ymm0_i32x8 i32x8 "ymm0" "vmovaps");
906
907 // CHECK-LABEL: ymm0_i64x4:
908 // CHECK: #APP
909 // CHECK: vmovaps ymm0, ymm0
910 // CHECK: #NO_APP
911 check_reg!(ymm0_i64x4 i64x4 "ymm0" "vmovaps");
912
913 // CHECK-LABEL: ymm0_f32x8:
914 // CHECK: #APP
915 // CHECK: vmovaps ymm0, ymm0
916 // CHECK: #NO_APP
917 check_reg!(ymm0_f32x8 f32x8 "ymm0" "vmovaps");
918
919 // CHECK-LABEL: ymm0_f64x4:
920 // CHECK: #APP
921 // CHECK: vmovaps ymm0, ymm0
922 // CHECK: #NO_APP
923 check_reg!(ymm0_f64x4 f64x4 "ymm0" "vmovaps");
924
925 // CHECK-LABEL: zmm0_i32:
926 // CHECK: #APP
927 // CHECK: vmovaps zmm0, zmm0
928 // CHECK: #NO_APP
929 check_reg!(zmm0_i32 i32 "zmm0" "vmovaps");
930
931 // CHECK-LABEL: zmm0_f32:
932 // CHECK: #APP
933 // CHECK: vmovaps zmm0, zmm0
934 // CHECK: #NO_APP
935 check_reg!(zmm0_f32 f32 "zmm0" "vmovaps");
936
937 // CHECK-LABEL: zmm0_i64:
938 // CHECK: #APP
939 // CHECK: vmovaps zmm0, zmm0
940 // CHECK: #NO_APP
941 check_reg!(zmm0_i64 i64 "zmm0" "vmovaps");
942
943 // CHECK-LABEL: zmm0_f64:
944 // CHECK: #APP
945 // CHECK: vmovaps zmm0, zmm0
946 // CHECK: #NO_APP
947 check_reg!(zmm0_f64 f64 "zmm0" "vmovaps");
948
949 // CHECK-LABEL: zmm0_ptr:
950 // CHECK: #APP
951 // CHECK: vmovaps zmm0, zmm0
952 // CHECK: #NO_APP
953 check_reg!(zmm0_ptr ptr "zmm0" "vmovaps");
954
955 // CHECK-LABEL: zmm0_i8x16:
956 // CHECK: #APP
957 // CHECK: vmovaps zmm0, zmm0
958 // CHECK: #NO_APP
959 check_reg!(zmm0_i8x16 i8x16 "zmm0" "vmovaps");
960
961 // CHECK-LABEL: zmm0_i16x8:
962 // CHECK: #APP
963 // CHECK: vmovaps zmm0, zmm0
964 // CHECK: #NO_APP
965 check_reg!(zmm0_i16x8 i16x8 "zmm0" "vmovaps");
966
967 // CHECK-LABEL: zmm0_i32x4:
968 // CHECK: #APP
969 // CHECK: vmovaps zmm0, zmm0
970 // CHECK: #NO_APP
971 check_reg!(zmm0_i32x4 i32x4 "zmm0" "vmovaps");
972
973 // CHECK-LABEL: zmm0_i64x2:
974 // CHECK: #APP
975 // CHECK: vmovaps zmm0, zmm0
976 // CHECK: #NO_APP
977 check_reg!(zmm0_i64x2 i64x2 "zmm0" "vmovaps");
978
979 // CHECK-LABEL: zmm0_f32x4:
980 // CHECK: #APP
981 // CHECK: vmovaps zmm0, zmm0
982 // CHECK: #NO_APP
983 check_reg!(zmm0_f32x4 f32x4 "zmm0" "vmovaps");
984
985 // CHECK-LABEL: zmm0_f64x2:
986 // CHECK: #APP
987 // CHECK: vmovaps zmm0, zmm0
988 // CHECK: #NO_APP
989 check_reg!(zmm0_f64x2 f64x2 "zmm0" "vmovaps");
990
991 // CHECK-LABEL: zmm0_i8x32:
992 // CHECK: #APP
993 // CHECK: vmovaps zmm0, zmm0
994 // CHECK: #NO_APP
995 check_reg!(zmm0_i8x32 i8x32 "zmm0" "vmovaps");
996
997 // CHECK-LABEL: zmm0_i16x16:
998 // CHECK: #APP
999 // CHECK: vmovaps zmm0, zmm0
1000 // CHECK: #NO_APP
1001 check_reg!(zmm0_i16x16 i16x16 "zmm0" "vmovaps");
1002
1003 // CHECK-LABEL: zmm0_i32x8:
1004 // CHECK: #APP
1005 // CHECK: vmovaps zmm0, zmm0
1006 // CHECK: #NO_APP
1007 check_reg!(zmm0_i32x8 i32x8 "zmm0" "vmovaps");
1008
1009 // CHECK-LABEL: zmm0_i64x4:
1010 // CHECK: #APP
1011 // CHECK: vmovaps zmm0, zmm0
1012 // CHECK: #NO_APP
1013 check_reg!(zmm0_i64x4 i64x4 "zmm0" "vmovaps");
1014
1015 // CHECK-LABEL: zmm0_f32x8:
1016 // CHECK: #APP
1017 // CHECK: vmovaps zmm0, zmm0
1018 // CHECK: #NO_APP
1019 check_reg!(zmm0_f32x8 f32x8 "zmm0" "vmovaps");
1020
1021 // CHECK-LABEL: zmm0_f64x4:
1022 // CHECK: #APP
1023 // CHECK: vmovaps zmm0, zmm0
1024 // CHECK: #NO_APP
1025 check_reg!(zmm0_f64x4 f64x4 "zmm0" "vmovaps");
1026
1027 // CHECK-LABEL: zmm0_i8x64:
1028 // CHECK: #APP
1029 // CHECK: vmovaps zmm0, zmm0
1030 // CHECK: #NO_APP
1031 check_reg!(zmm0_i8x64 i8x64 "zmm0" "vmovaps");
1032
1033 // CHECK-LABEL: zmm0_i16x32:
1034 // CHECK: #APP
1035 // CHECK: vmovaps zmm0, zmm0
1036 // CHECK: #NO_APP
1037 check_reg!(zmm0_i16x32 i16x32 "zmm0" "vmovaps");
1038
1039 // CHECK-LABEL: zmm0_i32x16:
1040 // CHECK: #APP
1041 // CHECK: vmovaps zmm0, zmm0
1042 // CHECK: #NO_APP
1043 check_reg!(zmm0_i32x16 i32x16 "zmm0" "vmovaps");
1044
1045 // CHECK-LABEL: zmm0_i64x8:
1046 // CHECK: #APP
1047 // CHECK: vmovaps zmm0, zmm0
1048 // CHECK: #NO_APP
1049 check_reg!(zmm0_i64x8 i64x8 "zmm0" "vmovaps");
1050
1051 // CHECK-LABEL: zmm0_f32x16:
1052 // CHECK: #APP
1053 // CHECK: vmovaps zmm0, zmm0
1054 // CHECK: #NO_APP
1055 check_reg!(zmm0_f32x16 f32x16 "zmm0" "vmovaps");
1056
1057 // CHECK-LABEL: zmm0_f64x8:
1058 // CHECK: #APP
1059 // CHECK: vmovaps zmm0, zmm0
1060 // CHECK: #NO_APP
1061 check_reg!(zmm0_f64x8 f64x8 "zmm0" "vmovaps");
1062
1063 // CHECK-LABEL: k1_i8:
1064 // CHECK: #APP
1065 // CHECK: kmovb k1, k1
1066 // CHECK: #NO_APP
1067 check_reg!(k1_i8 i8 "k1" "kmovb");
1068
1069 // CHECK-LABEL: k1_i16:
1070 // CHECK: #APP
1071 // CHECK: kmovw k1, k1
1072 // CHECK: #NO_APP
1073 check_reg!(k1_i16 i16 "k1" "kmovw");
1074
1075 // CHECK-LABEL: k1_i32:
1076 // CHECK: #APP
1077 // CHECK: kmovd k1, k1
1078 // CHECK: #NO_APP
1079 check_reg!(k1_i32 i32 "k1" "kmovd");
1080
1081 // CHECK-LABEL: k1_i64:
1082 // CHECK: #APP
1083 // CHECK: kmovq k1, k1
1084 // CHECK: #NO_APP
1085 check_reg!(k1_i64 i64 "k1" "kmovq");
1086
1087 // CHECK-LABEL: k1_ptr:
1088 // CHECK: #APP
1089 // CHECK: kmovq k1, k1
1090 // CHECK: #NO_APP
1091 check_reg!(k1_ptr ptr "k1" "kmovq");