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