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