1 /*****************************************************************************
2 
3         CpuOptBase.cpp
4         Author: Laurent de Soras, 2021
5 
6 --- Legal stuff ---
7 
8 This program is free software. It comes without any warranty, to
9 the extent permitted by applicable law. You can redistribute it
10 and/or modify it under the terms of the Do What The Fuck You Want
11 To Public License, Version 2, as published by Sam Hocevar. See
12 http://www.wtfpl.net/ for more details.
13 
14 *Tab=3***********************************************************************/
15 
16 
17 
18 #if defined (_MSC_VER)
19 	#pragma warning (1 : 4130 4223 4705 4706)
20 	#pragma warning (4 : 4355 4786 4800)
21 #endif
22 
23 
24 
25 /*\\\ INCLUDE FILES \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
26 
27 #include "fmtcl/CpuOptBase.h"
28 
29 #include <cassert>
30 
31 
32 
33 namespace fmtcl
34 {
35 
36 
37 
38 /*\\\ PUBLIC \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
39 
40 
41 
set_level(Level level)42 void	CpuOptBase::set_level (Level level)
43 {
44 	assert (level >= 0);
45 	assert (level <= Level_ANY_AVAILABLE);
46 
47 	_level = level;
48 }
49 
50 
51 
has_mmx() const52 bool	CpuOptBase::has_mmx () const
53 {
54 	return (_cpu._mmx_flag && _level >= Level_SSE2);
55 }
56 
57 
58 
has_isse() const59 bool	CpuOptBase::has_isse () const
60 {
61 	return (_cpu._isse_flag && _level >= Level_SSE2);
62 }
63 
64 
65 
has_sse() const66 bool	CpuOptBase::has_sse () const
67 {
68 	return (_cpu._sse_flag && _level >= Level_SSE2);
69 }
70 
71 
72 
has_sse2() const73 bool	CpuOptBase::has_sse2 () const
74 {
75 	return (_cpu._sse2_flag && _level >= Level_SSE2);
76 }
77 
78 
79 
has_sse3() const80 bool	CpuOptBase::has_sse3 () const
81 {
82 	return (_cpu._sse3_flag && _level >= Level_SSE3);
83 }
84 
85 
86 
has_ssse3() const87 bool	CpuOptBase::has_ssse3 () const
88 {
89 	return (_cpu._ssse3_flag && _level >= Level_SSSE3);
90 }
91 
92 
93 
has_sse41() const94 bool	CpuOptBase::has_sse41 () const
95 {
96 	return (_cpu._sse41_flag && _level >= Level_SSE41);
97 }
98 
99 
100 
has_sse42() const101 bool	CpuOptBase::has_sse42 () const
102 {
103 	return (_cpu._sse42_flag && _level >= Level_SSE42);
104 }
105 
106 
107 
has_sse4a() const108 bool	CpuOptBase::has_sse4a () const
109 {
110 	return (_cpu._sse4a_flag && _level >= Level_FMA4);
111 }
112 
113 
114 
has_fma3() const115 bool	CpuOptBase::has_fma3 () const
116 {
117 	return (_cpu._fma3_flag && _level >= Level_FMA3);
118 }
119 
120 
121 
has_fma4() const122 bool	CpuOptBase::has_fma4 () const
123 {
124 	return (_cpu._fma4_flag && _level >= Level_FMA4);
125 }
126 
127 
128 
has_avx() const129 bool	CpuOptBase::has_avx () const
130 {
131 	return (_cpu._avx_flag && _level >= Level_AVX);
132 }
133 
134 
135 
has_avx2() const136 bool	CpuOptBase::has_avx2 () const
137 {
138 	return (_cpu._avx2_flag && _level >= Level_AVX2);
139 }
140 
141 
142 
has_avx512f() const143 bool	CpuOptBase::has_avx512f () const
144 {
145 	return (_cpu._avx512f_flag && _level >= Level_AVX512F);
146 }
147 
148 
149 
has_f16c() const150 bool	CpuOptBase::has_f16c () const
151 {
152 	return (_cpu._f16c_flag && _level >= Level_F16C);
153 }
154 
155 
156 
has_cx16() const157 bool	CpuOptBase::has_cx16 () const
158 {
159 	return _cpu._cx16_flag;
160 }
161 
162 
163 
use_raw_cpuid() const164 const fstb::CpuId &	CpuOptBase::use_raw_cpuid () const
165 {
166 	return _cpu;
167 }
168 
169 
170 
171 /*\\\ PROTECTED \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
172 
173 
174 
175 /*\\\ PRIVATE \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
176 
177 
178 
179 }  // namespace fmtcl
180 
181 
182 
183 /*\\\ EOF \\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\*/
184