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)42void 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() const52bool CpuOptBase::has_mmx () const 53 { 54 return (_cpu._mmx_flag && _level >= Level_SSE2); 55 } 56 57 58 has_isse() const59bool CpuOptBase::has_isse () const 60 { 61 return (_cpu._isse_flag && _level >= Level_SSE2); 62 } 63 64 65 has_sse() const66bool CpuOptBase::has_sse () const 67 { 68 return (_cpu._sse_flag && _level >= Level_SSE2); 69 } 70 71 72 has_sse2() const73bool CpuOptBase::has_sse2 () const 74 { 75 return (_cpu._sse2_flag && _level >= Level_SSE2); 76 } 77 78 79 has_sse3() const80bool CpuOptBase::has_sse3 () const 81 { 82 return (_cpu._sse3_flag && _level >= Level_SSE3); 83 } 84 85 86 has_ssse3() const87bool CpuOptBase::has_ssse3 () const 88 { 89 return (_cpu._ssse3_flag && _level >= Level_SSSE3); 90 } 91 92 93 has_sse41() const94bool CpuOptBase::has_sse41 () const 95 { 96 return (_cpu._sse41_flag && _level >= Level_SSE41); 97 } 98 99 100 has_sse42() const101bool CpuOptBase::has_sse42 () const 102 { 103 return (_cpu._sse42_flag && _level >= Level_SSE42); 104 } 105 106 107 has_sse4a() const108bool CpuOptBase::has_sse4a () const 109 { 110 return (_cpu._sse4a_flag && _level >= Level_FMA4); 111 } 112 113 114 has_fma3() const115bool CpuOptBase::has_fma3 () const 116 { 117 return (_cpu._fma3_flag && _level >= Level_FMA3); 118 } 119 120 121 has_fma4() const122bool CpuOptBase::has_fma4 () const 123 { 124 return (_cpu._fma4_flag && _level >= Level_FMA4); 125 } 126 127 128 has_avx() const129bool CpuOptBase::has_avx () const 130 { 131 return (_cpu._avx_flag && _level >= Level_AVX); 132 } 133 134 135 has_avx2() const136bool CpuOptBase::has_avx2 () const 137 { 138 return (_cpu._avx2_flag && _level >= Level_AVX2); 139 } 140 141 142 has_avx512f() const143bool CpuOptBase::has_avx512f () const 144 { 145 return (_cpu._avx512f_flag && _level >= Level_AVX512F); 146 } 147 148 149 has_f16c() const150bool CpuOptBase::has_f16c () const 151 { 152 return (_cpu._f16c_flag && _level >= Level_F16C); 153 } 154 155 156 has_cx16() const157bool CpuOptBase::has_cx16 () const 158 { 159 return _cpu._cx16_flag; 160 } 161 162 163 use_raw_cpuid() const164const 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