]> git.proxmox.com Git - rustc.git/blob - library/stdarch/crates/std_detect/tests/x86-specific.rs
New upstream version 1.53.0+dfsg1
[rustc.git] / library / stdarch / crates / std_detect / tests / x86-specific.rs
1 #![feature(stdsimd)]
2 #![cfg(any(target_arch = "x86", target_arch = "x86_64"))]
3
4 extern crate cupid;
5 #[macro_use]
6 extern crate std_detect;
7
8 #[test]
9 fn dump() {
10 println!("aes: {:?}", is_x86_feature_detected!("aes"));
11 println!("pclmulqdq: {:?}", is_x86_feature_detected!("pclmulqdq"));
12 println!("rdrand: {:?}", is_x86_feature_detected!("rdrand"));
13 println!("rdseed: {:?}", is_x86_feature_detected!("rdseed"));
14 println!("tsc: {:?}", is_x86_feature_detected!("tsc"));
15 println!("sse: {:?}", is_x86_feature_detected!("sse"));
16 println!("sse2: {:?}", is_x86_feature_detected!("sse2"));
17 println!("sse3: {:?}", is_x86_feature_detected!("sse3"));
18 println!("ssse3: {:?}", is_x86_feature_detected!("ssse3"));
19 println!("sse4.1: {:?}", is_x86_feature_detected!("sse4.1"));
20 println!("sse4.2: {:?}", is_x86_feature_detected!("sse4.2"));
21 println!("sse4a: {:?}", is_x86_feature_detected!("sse4a"));
22 println!("sha: {:?}", is_x86_feature_detected!("sha"));
23 println!("avx: {:?}", is_x86_feature_detected!("avx"));
24 println!("avx2: {:?}", is_x86_feature_detected!("avx2"));
25 println!("avx512f {:?}", is_x86_feature_detected!("avx512f"));
26 println!("avx512cd {:?}", is_x86_feature_detected!("avx512cd"));
27 println!("avx512er {:?}", is_x86_feature_detected!("avx512er"));
28 println!("avx512pf {:?}", is_x86_feature_detected!("avx512pf"));
29 println!("avx512bw {:?}", is_x86_feature_detected!("avx512bw"));
30 println!("avx512dq {:?}", is_x86_feature_detected!("avx512dq"));
31 println!("avx512vl {:?}", is_x86_feature_detected!("avx512vl"));
32 println!("avx512_ifma {:?}", is_x86_feature_detected!("avx512ifma"));
33 println!("avx512vbmi {:?}", is_x86_feature_detected!("avx512vbmi"));
34 println!(
35 "avx512_vpopcntdq {:?}",
36 is_x86_feature_detected!("avx512vpopcntdq")
37 );
38 println!("avx512vbmi2 {:?}", is_x86_feature_detected!("avx512vbmi2"));
39 println!("avx512gfni {:?}", is_x86_feature_detected!("avx512gfni"));
40 println!("avx512vaes {:?}", is_x86_feature_detected!("avx512vaes"));
41 println!(
42 "avx512vpclmulqdq {:?}",
43 is_x86_feature_detected!("avx512vpclmulqdq")
44 );
45 println!("avx512vnni {:?}", is_x86_feature_detected!("avx512vnni"));
46 println!(
47 "avx512bitalg {:?}",
48 is_x86_feature_detected!("avx512bitalg")
49 );
50 println!("avx512bf16 {:?}", is_x86_feature_detected!("avx512bf16"));
51 println!(
52 "avx512vp2intersect {:?}",
53 is_x86_feature_detected!("avx512vp2intersect")
54 );
55 println!("fma: {:?}", is_x86_feature_detected!("fma"));
56 println!("abm: {:?}", is_x86_feature_detected!("abm"));
57 println!("bmi: {:?}", is_x86_feature_detected!("bmi1"));
58 println!("bmi2: {:?}", is_x86_feature_detected!("bmi2"));
59 println!("tbm: {:?}", is_x86_feature_detected!("tbm"));
60 println!("popcnt: {:?}", is_x86_feature_detected!("popcnt"));
61 println!("lzcnt: {:?}", is_x86_feature_detected!("lzcnt"));
62 println!("fxsr: {:?}", is_x86_feature_detected!("fxsr"));
63 println!("xsave: {:?}", is_x86_feature_detected!("xsave"));
64 println!("xsaveopt: {:?}", is_x86_feature_detected!("xsaveopt"));
65 println!("xsaves: {:?}", is_x86_feature_detected!("xsaves"));
66 println!("xsavec: {:?}", is_x86_feature_detected!("xsavec"));
67 println!("cmpxchg16b: {:?}", is_x86_feature_detected!("cmpxchg16b"));
68 println!("adx: {:?}", is_x86_feature_detected!("adx"));
69 println!("rtm: {:?}", is_x86_feature_detected!("rtm"));
70 }
71
72 #[cfg(feature = "std_detect_env_override")]
73 #[test]
74 fn env_override_no_avx() {
75 if let Ok(disable) = std::env::var("RUST_STD_DETECT_UNSTABLE") {
76 let information = cupid::master().unwrap();
77 for d in disable.split(" ") {
78 match d {
79 "avx" => {
80 if information.avx() {
81 assert_ne!(is_x86_feature_detected!("avx"), information.avx())
82 }
83 }
84 "avx2" => {
85 if information.avx2() {
86 assert_ne!(is_x86_feature_detected!("avx2"), information.avx2())
87 }
88 }
89 _ => {}
90 }
91 }
92 }
93 }
94
95 #[test]
96 fn compare_with_cupid() {
97 let information = cupid::master().unwrap();
98 assert_eq!(is_x86_feature_detected!("aes"), information.aesni());
99 assert_eq!(
100 is_x86_feature_detected!("pclmulqdq"),
101 information.pclmulqdq()
102 );
103 assert_eq!(is_x86_feature_detected!("rdrand"), information.rdrand());
104 assert_eq!(is_x86_feature_detected!("rdseed"), information.rdseed());
105 assert_eq!(is_x86_feature_detected!("tsc"), information.tsc());
106 assert_eq!(is_x86_feature_detected!("sse"), information.sse());
107 assert_eq!(is_x86_feature_detected!("sse2"), information.sse2());
108 assert_eq!(is_x86_feature_detected!("sse3"), information.sse3());
109 assert_eq!(is_x86_feature_detected!("ssse3"), information.ssse3());
110 assert_eq!(is_x86_feature_detected!("sse4.1"), information.sse4_1());
111 assert_eq!(is_x86_feature_detected!("sse4.2"), information.sse4_2());
112 assert_eq!(is_x86_feature_detected!("sse4a"), information.sse4a());
113 assert_eq!(is_x86_feature_detected!("sha"), information.sha());
114 assert_eq!(is_x86_feature_detected!("avx"), information.avx());
115 assert_eq!(is_x86_feature_detected!("avx2"), information.avx2());
116 assert_eq!(is_x86_feature_detected!("avx512f"), information.avx512f());
117 assert_eq!(is_x86_feature_detected!("avx512cd"), information.avx512cd());
118 assert_eq!(is_x86_feature_detected!("avx512er"), information.avx512er());
119 assert_eq!(is_x86_feature_detected!("avx512pf"), information.avx512pf());
120 assert_eq!(is_x86_feature_detected!("avx512bw"), information.avx512bw());
121 assert_eq!(is_x86_feature_detected!("avx512dq"), information.avx512dq());
122 assert_eq!(is_x86_feature_detected!("avx512vl"), information.avx512vl());
123 assert_eq!(
124 is_x86_feature_detected!("avx512ifma"),
125 information.avx512_ifma()
126 );
127 assert_eq!(
128 is_x86_feature_detected!("avx512vbmi"),
129 information.avx512_vbmi()
130 );
131 assert_eq!(
132 is_x86_feature_detected!("avx512vpopcntdq"),
133 information.avx512_vpopcntdq()
134 );
135 assert_eq!(is_x86_feature_detected!("fma"), information.fma());
136 assert_eq!(is_x86_feature_detected!("bmi1"), information.bmi1());
137 assert_eq!(is_x86_feature_detected!("bmi2"), information.bmi2());
138 assert_eq!(is_x86_feature_detected!("popcnt"), information.popcnt());
139 assert_eq!(is_x86_feature_detected!("abm"), information.lzcnt());
140 assert_eq!(is_x86_feature_detected!("tbm"), information.tbm());
141 assert_eq!(is_x86_feature_detected!("lzcnt"), information.lzcnt());
142 assert_eq!(is_x86_feature_detected!("xsave"), information.xsave());
143 assert_eq!(is_x86_feature_detected!("xsaveopt"), information.xsaveopt());
144 assert_eq!(
145 is_x86_feature_detected!("xsavec"),
146 information.xsavec_and_xrstor()
147 );
148 assert_eq!(
149 is_x86_feature_detected!("xsaves"),
150 information.xsaves_xrstors_and_ia32_xss()
151 );
152 assert_eq!(
153 is_x86_feature_detected!("cmpxchg16b"),
154 information.cmpxchg16b(),
155 );
156 assert_eq!(is_x86_feature_detected!("adx"), information.adx(),);
157 assert_eq!(is_x86_feature_detected!("rtm"), information.rtm(),);
158 }