Skip to content

Commit d248c24

Browse files
committed
core: simplify impl
1 parent 0844d71 commit d248c24

File tree

1 file changed

+64
-217
lines changed

1 file changed

+64
-217
lines changed

include/proxsuite/helpers/instruction-set.hpp

Lines changed: 64 additions & 217 deletions
Original file line numberDiff line numberDiff line change
@@ -156,269 +156,116 @@ const typename InstructionSetBase<>::Data InstructionSetBase<>::data =
156156
// https://docs.microsoft.com/fr-fr/cpp/intrinsics/cpuid-cpuidex?view=msvc-170
157157
struct InstructionSet : public internal::InstructionSetBase<>
158158
{
159-
static std::string vendor(void)
160-
{
161-
return internal::InstructionSetBase<>::data.vendor_;
162-
}
163-
static std::string brand(void)
164-
{
165-
return internal::InstructionSetBase<>::data.brand_;
166-
}
159+
typedef internal::InstructionSetBase<> Base;
167160

168-
static bool has_SSE3(void)
169-
{
170-
return internal::InstructionSetBase<>::data.f_1_ECX_[0];
171-
}
172-
static bool has_PCLMULQDQ(void)
173-
{
174-
return internal::InstructionSetBase<>::data.f_1_ECX_[1];
175-
}
176-
static bool has_MONITOR(void)
177-
{
178-
return internal::InstructionSetBase<>::data.f_1_ECX_[3];
179-
}
180-
static bool has_SSSE3(void)
181-
{
182-
return internal::InstructionSetBase<>::data.f_1_ECX_[9];
183-
}
184-
static bool has_FMA(void)
185-
{
186-
return internal::InstructionSetBase<>::data.f_1_ECX_[12];
187-
}
188-
static bool has_CMPXCHG16B(void)
189-
{
190-
return internal::InstructionSetBase<>::data.f_1_ECX_[13];
191-
}
192-
static bool has_SSE41(void)
193-
{
194-
return internal::InstructionSetBase<>::data.f_1_ECX_[19];
195-
}
196-
static bool has_SSE42(void)
197-
{
198-
return internal::InstructionSetBase<>::data.f_1_ECX_[20];
199-
}
200-
static bool has_MOVBE(void)
201-
{
202-
return internal::InstructionSetBase<>::data.f_1_ECX_[22];
203-
}
204-
static bool has_POPCNT(void)
205-
{
206-
return internal::InstructionSetBase<>::data.f_1_ECX_[23];
207-
}
208-
static bool has_AES(void)
209-
{
210-
return internal::InstructionSetBase<>::data.f_1_ECX_[25];
211-
}
212-
static bool has_XSAVE(void)
213-
{
214-
return internal::InstructionSetBase<>::data.f_1_ECX_[26];
215-
}
216-
static bool has_OSXSAVE(void)
217-
{
218-
return internal::InstructionSetBase<>::data.f_1_ECX_[27];
219-
}
220-
static bool has_AVX(void)
221-
{
222-
return internal::InstructionSetBase<>::data.f_1_ECX_[28];
223-
}
224-
static bool has_F16C(void)
225-
{
226-
return internal::InstructionSetBase<>::data.f_1_ECX_[29];
227-
}
228-
static bool has_RDRAND(void)
229-
{
230-
return internal::InstructionSetBase<>::data.f_1_ECX_[30];
231-
}
161+
static std::string vendor(void) { return Base::data.vendor_; }
162+
static std::string brand(void) { return Base::data.brand_; }
232163

233-
static bool has_MSR(void)
234-
{
235-
return internal::InstructionSetBase<>::data.f_1_EDX_[5];
236-
}
237-
static bool has_CX8(void)
238-
{
239-
return internal::InstructionSetBase<>::data.f_1_EDX_[8];
240-
}
241-
static bool has_SEP(void)
242-
{
243-
return internal::InstructionSetBase<>::data.f_1_EDX_[11];
244-
}
245-
static bool has_CMOV(void)
246-
{
247-
return internal::InstructionSetBase<>::data.f_1_EDX_[15];
248-
}
249-
static bool has_CLFSH(void)
250-
{
251-
return internal::InstructionSetBase<>::data.f_1_EDX_[19];
252-
}
253-
static bool has_MMX(void)
254-
{
255-
return internal::InstructionSetBase<>::data.f_1_EDX_[23];
256-
}
257-
static bool has_FXSR(void)
258-
{
259-
return internal::InstructionSetBase<>::data.f_1_EDX_[24];
260-
}
261-
static bool has_SSE(void)
262-
{
263-
return internal::InstructionSetBase<>::data.f_1_EDX_[25];
264-
}
265-
static bool has_SSE2(void)
266-
{
267-
return internal::InstructionSetBase<>::data.f_1_EDX_[26];
268-
}
164+
static bool has_SSE3(void) { return Base::data.f_1_ECX_[0]; }
165+
static bool has_PCLMULQDQ(void) { return Base::data.f_1_ECX_[1]; }
166+
static bool has_MONITOR(void) { return Base::data.f_1_ECX_[3]; }
167+
static bool has_SSSE3(void) { return Base::data.f_1_ECX_[9]; }
168+
static bool has_FMA(void) { return Base::data.f_1_ECX_[12]; }
169+
static bool has_CMPXCHG16B(void) { return Base::data.f_1_ECX_[13]; }
170+
static bool has_SSE41(void) { return Base::data.f_1_ECX_[19]; }
171+
static bool has_SSE42(void) { return Base::data.f_1_ECX_[20]; }
172+
static bool has_MOVBE(void) { return Base::data.f_1_ECX_[22]; }
173+
static bool has_POPCNT(void) { return Base::data.f_1_ECX_[23]; }
174+
static bool has_AES(void) { return Base::data.f_1_ECX_[25]; }
175+
static bool has_XSAVE(void) { return Base::data.f_1_ECX_[26]; }
176+
static bool has_OSXSAVE(void) { return Base::data.f_1_ECX_[27]; }
177+
static bool has_AVX(void) { return Base::data.f_1_ECX_[28]; }
178+
static bool has_F16C(void) { return Base::data.f_1_ECX_[29]; }
179+
static bool has_RDRAND(void) { return Base::data.f_1_ECX_[30]; }
269180

270-
static bool has_FSGSBASE(void)
271-
{
272-
return internal::InstructionSetBase<>::data.f_7_EBX_[0];
273-
}
274-
static bool has_AVX512VBMI(void)
275-
{
276-
return internal::InstructionSetBase<>::data.f_7_EBX_[1];
277-
}
278-
static bool has_BMI1(void)
279-
{
280-
return internal::InstructionSetBase<>::data.f_7_EBX_[3];
281-
}
181+
static bool has_MSR(void) { return Base::data.f_1_EDX_[5]; }
182+
static bool has_CX8(void) { return Base::data.f_1_EDX_[8]; }
183+
static bool has_SEP(void) { return Base::data.f_1_EDX_[11]; }
184+
static bool has_CMOV(void) { return Base::data.f_1_EDX_[15]; }
185+
static bool has_CLFSH(void) { return Base::data.f_1_EDX_[19]; }
186+
static bool has_MMX(void) { return Base::data.f_1_EDX_[23]; }
187+
static bool has_FXSR(void) { return Base::data.f_1_EDX_[24]; }
188+
static bool has_SSE(void) { return Base::data.f_1_EDX_[25]; }
189+
static bool has_SSE2(void) { return Base::data.f_1_EDX_[26]; }
190+
191+
static bool has_FSGSBASE(void) { return Base::data.f_7_EBX_[0]; }
192+
static bool has_AVX512VBMI(void) { return Base::data.f_7_EBX_[1]; }
193+
static bool has_BMI1(void) { return Base::data.f_7_EBX_[3]; }
282194
static bool has_HLE(void)
283195
{
284-
return internal::InstructionSetBase<>::data.isIntel_ &&
285-
internal::InstructionSetBase<>::data.f_7_EBX_[4];
286-
}
287-
static bool has_AVX2(void)
288-
{
289-
return internal::InstructionSetBase<>::data.f_7_EBX_[5];
290-
}
291-
static bool has_BMI2(void)
292-
{
293-
return internal::InstructionSetBase<>::data.f_7_EBX_[8];
294-
}
295-
static bool has_ERMS(void)
296-
{
297-
return internal::InstructionSetBase<>::data.f_7_EBX_[9];
298-
}
299-
static bool has_INVPCID(void)
300-
{
301-
return internal::InstructionSetBase<>::data.f_7_EBX_[10];
196+
return Base::data.isIntel_ && Base::data.f_7_EBX_[4];
302197
}
198+
static bool has_AVX2(void) { return Base::data.f_7_EBX_[5]; }
199+
static bool has_BMI2(void) { return Base::data.f_7_EBX_[8]; }
200+
static bool has_ERMS(void) { return Base::data.f_7_EBX_[9]; }
201+
static bool has_INVPCID(void) { return Base::data.f_7_EBX_[10]; }
303202
static bool has_RTM(void)
304203
{
305-
return internal::InstructionSetBase<>::data.isIntel_ &&
306-
internal::InstructionSetBase<>::data.f_7_EBX_[11];
307-
}
308-
static bool has_AVX512F(void)
309-
{
310-
return internal::InstructionSetBase<>::data.f_7_EBX_[16];
311-
}
312-
static bool has_AVX512DQ(void)
313-
{
314-
return internal::InstructionSetBase<>::data.f_7_EBX_[17];
315-
}
316-
static bool has_RDSEED(void)
317-
{
318-
return internal::InstructionSetBase<>::data.f_7_EBX_[18];
319-
}
320-
static bool has_ADX(void)
321-
{
322-
return internal::InstructionSetBase<>::data.f_7_EBX_[19];
323-
}
324-
static bool has_AVX512IFMA(void)
325-
{
326-
return internal::InstructionSetBase<>::data.f_7_EBX_[21];
327-
}
328-
static bool has_AVX512PF(void)
329-
{
330-
return internal::InstructionSetBase<>::data.f_7_EBX_[26];
331-
}
332-
static bool has_AVX512ER(void)
333-
{
334-
return internal::InstructionSetBase<>::data.f_7_EBX_[27];
335-
}
336-
static bool has_AVX512CD(void)
337-
{
338-
return internal::InstructionSetBase<>::data.f_7_EBX_[28];
339-
}
340-
static bool has_SHA(void)
341-
{
342-
return internal::InstructionSetBase<>::data.f_7_EBX_[29];
343-
}
344-
static bool has_AVX512BW(void)
345-
{
346-
return internal::InstructionSetBase<>::data.f_7_EBX_[30];
347-
}
348-
static bool has_AVX512VL(void)
349-
{
350-
return internal::InstructionSetBase<>::data.f_7_EBX_[31];
351-
}
204+
return Base::data.isIntel_ && Base::data.f_7_EBX_[11];
205+
}
206+
static bool has_AVX512F(void) { return Base::data.f_7_EBX_[16]; }
207+
static bool has_AVX512DQ(void) { return Base::data.f_7_EBX_[17]; }
208+
static bool has_RDSEED(void) { return Base::data.f_7_EBX_[18]; }
209+
static bool has_ADX(void) { return Base::data.f_7_EBX_[19]; }
210+
static bool has_AVX512IFMA(void) { return Base::data.f_7_EBX_[21]; }
211+
static bool has_AVX512PF(void) { return Base::data.f_7_EBX_[26]; }
212+
static bool has_AVX512ER(void) { return Base::data.f_7_EBX_[27]; }
213+
static bool has_AVX512CD(void) { return Base::data.f_7_EBX_[28]; }
214+
static bool has_SHA(void) { return Base::data.f_7_EBX_[29]; }
215+
static bool has_AVX512BW(void) { return Base::data.f_7_EBX_[30]; }
216+
static bool has_AVX512VL(void) { return Base::data.f_7_EBX_[31]; }
352217

353-
static bool has_PREFETCHWT1(void)
354-
{
355-
return internal::InstructionSetBase<>::data.f_7_ECX_[0];
356-
}
218+
static bool has_PREFETCHWT1(void) { return Base::data.f_7_ECX_[0]; }
357219

358-
static bool has_LAHF(void)
359-
{
360-
return internal::InstructionSetBase<>::data.f_81_ECX_[0];
361-
}
220+
static bool has_LAHF(void) { return Base::data.f_81_ECX_[0]; }
362221
static bool has_LZCNT(void)
363222
{
364-
return internal::InstructionSetBase<>::data.isIntel_ &&
365-
internal::InstructionSetBase<>::data.f_81_ECX_[5];
223+
return Base::data.isIntel_ && Base::data.f_81_ECX_[5];
366224
}
367225
static bool has_ABM(void)
368226
{
369-
return internal::InstructionSetBase<>::data.isAMD_ &&
370-
internal::InstructionSetBase<>::data.f_81_ECX_[5];
227+
return Base::data.isAMD_ && Base::data.f_81_ECX_[5];
371228
}
372229
static bool has_SSE4a(void)
373230
{
374-
return internal::InstructionSetBase<>::data.isAMD_ &&
375-
internal::InstructionSetBase<>::data.f_81_ECX_[6];
231+
return Base::data.isAMD_ && Base::data.f_81_ECX_[6];
376232
}
377233
static bool has_XOP(void)
378234
{
379-
return internal::InstructionSetBase<>::data.isAMD_ &&
380-
internal::InstructionSetBase<>::data.f_81_ECX_[11];
235+
return Base::data.isAMD_ && Base::data.f_81_ECX_[11];
381236
}
382237
static bool has_FMA4(void)
383238
{
384-
return internal::InstructionSetBase<>::data.isAMD_ &&
385-
internal::InstructionSetBase<>::data.f_81_ECX_[16];
239+
return Base::data.isAMD_ && Base::data.f_81_ECX_[16];
386240
}
387241
static bool has_TBM(void)
388242
{
389-
return internal::InstructionSetBase<>::data.isAMD_ &&
390-
internal::InstructionSetBase<>::data.f_81_ECX_[21];
243+
return Base::data.isAMD_ && Base::data.f_81_ECX_[21];
391244
}
392245

393246
static bool has_SYSCALL(void)
394247
{
395-
return internal::InstructionSetBase<>::data.isIntel_ &&
396-
internal::InstructionSetBase<>::data.f_81_EDX_[11];
248+
return Base::data.isIntel_ && Base::data.f_81_EDX_[11];
397249
}
398250
static bool has_MMXEXT(void)
399251
{
400-
return internal::InstructionSetBase<>::data.isAMD_ &&
401-
internal::InstructionSetBase<>::data.f_81_EDX_[22];
252+
return Base::data.isAMD_ && Base::data.f_81_EDX_[22];
402253
}
403254
static bool has_RDTSCP(void)
404255
{
405-
return internal::InstructionSetBase<>::data.isIntel_ &&
406-
internal::InstructionSetBase<>::data.f_81_EDX_[27];
256+
return Base::data.isIntel_ && Base::data.f_81_EDX_[27];
407257
}
408258
static bool has_x64(void)
409259
{
410-
return internal::InstructionSetBase<>::data.isIntel_ &&
411-
internal::InstructionSetBase<>::data.f_81_EDX_[29];
260+
return Base::data.isIntel_ && Base::data.f_81_EDX_[29];
412261
}
413262
static bool has_3DNOWEXT(void)
414263
{
415-
return internal::InstructionSetBase<>::data.isAMD_ &&
416-
internal::InstructionSetBase<>::data.f_81_EDX_[30];
264+
return Base::data.isAMD_ && Base::data.f_81_EDX_[30];
417265
}
418266
static bool has_3DNOW(void)
419267
{
420-
return internal::InstructionSetBase<>::data.isAMD_ &&
421-
internal::InstructionSetBase<>::data.f_81_EDX_[31];
268+
return Base::data.isAMD_ && Base::data.f_81_EDX_[31];
422269
}
423270
};
424271

0 commit comments

Comments
 (0)