aboutsummaryrefslogtreecommitdiff
path: root/src/common/x64/cpu_detect.cpp
Commit message (Collapse)AuthorAgeFilesLines
* [core/core_timing] better MWAITX and WAITPKG delays (#3984)lizzie2026-05-301-250/+0
| | | | | | | | | | | | | This implements MWAITX and WAITPKG extensions (umonitor, mwait) for CPUs that support them. Reduces wait times and bypasses the timing stuff from the OS that is slow (windows notably). generally it should answer within 0.2 to 0.5 microsecs (since most requests wait for that long). Also does a general rework of static ctors and stuff Signed-off-by: lizzie <lizzie@eden-emu.dev> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3984 Reviewed-by: MaranBr <maranbr@eden-emu.dev> Reviewed-by: crueter <crueter@eden-emu.dev>
* [common/cpu_detect] Remove SSE/SSE2/FMA4/AVX_VNNI detection (#3979)RedBlackAka2026-05-201-6/+0
| | | | | | | | | | | | | Removes Eden's own feature detection for SSE, SSE2, FMA4 and AVX_VNNI, in order to clean up code and make the function slightly lighter. They are all unused and I have specific reasons for their removal: - SSE/SSE2 are always true for x64 - FMA4 is a deprecated AMD exclusive extension, replaced by the regular FMA and was logged here as "FMA" for no reason - AVX_VNNI simply does not seem applicable for Eden (but can still be checked for through Xbyak's feature detection if necessary) Co-authored-by: RedBlackAka <140876408+RedBlackAka@users.noreply.github.com> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3979 Reviewed-by: Lizzie <lizzie@eden-emu.dev> Reviewed-by: crueter <crueter@eden-emu.dev> Reviewed-by: MaranBr <maranbr@eden-emu.dev>
* [common/logging] Simplify logging logic and fix issues when logging before ↵lizzie2026-03-121-1/+4
| | | | | | | | | | | | | | | | | | | | | | | | | | system is created (#3688) - our logging code was bigger than spdlog itself, why???? just keep it simple - fix issues when logging before logging system is even started - removes the "initialized logging twice" issue - removes uneeded indirection in file logging - uses direct formatting instead of jumping hoopla-around the fmt::format() ressult - code duplication and dead code removal as usual I did explore dup2() but I think it's not worth the hassle I did try `fwopen()` but it's better if things are just kept as-is. there is a lot of noise because I removed a bunch of redundant files on logging and just put everything in one file now normally this wouldn't be a good idea, however consider: the complexity of logging; it's less than 500 lines... does it really need a whole subsystem?!?!?! ITS JUST LOGGING Signed-off-by: lizzie <lizzie@eden-emu.dev> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3688 Reviewed-by: crueter <crueter@eden-emu.dev> Reviewed-by: DraVee <chimera@dravee.dev> Reviewed-by: CamilleLaVey <camillelavey99@gmail.com> Co-authored-by: lizzie <lizzie@eden-emu.dev> Co-committed-by: lizzie <lizzie@eden-emu.dev>
* x64: Add detection of monitorx instructionsMorph2023-06-281-0/+1
| | | | monitorx introduces 2 instructions: MONITORX and MWAITX.
* x64: Deduplicate RDTSC usageMorph2023-06-071-0/+3
|
* x64: cpu_detect: Add detection of waitpkg instructionsMorph2023-03-271-0/+1
| | | | waitpkg introduces 3 instructions, UMONITOR, UMWAIT and TPAUSE.
* Add CPU core count to log filesMatías Locatti2022-11-111-3/+56
|
* guard against div-by-zeroMarshall Mohror2022-07-061-2/+5
|
* common/x64: Use TSC clock rate from CPUID when availableMarshall Mohror2022-07-061-0/+13
| | | | The current method used to estimate the TSC is fairly accurate - within a few kHz - but the exact value can be extracted from CPUID if available.
* general: Convert source file copyright comments over to SPDXMorph2022-04-231-2/+3
| | | | | This formats all copyright comments according to SPDX formatting guidelines. Additionally, this resolves the remaining GPLv2 only licensed files by relicensing them to GPLv2.0-or-later.
* common: Reduce unused includesameerj2022-03-191-1/+0
|
* cpu_detect: Add additional x86 flags and telemetryWunkolo2022-03-111-8/+22
| | | | | | | | | | | Adds detection of additional CPU flags to cpu_detect and additions to telemetry output. This is not exhaustive but guided by features that [dynarmic utilizes](https://github.com/merryhime/dynarmic/blob/bcfe377aaa5138af740e90af5be7a7dff7b62a52/src/dynarmic/backend/x64/host_feature.h#L12-L33) as well as features that are currently utilized but not reported to telemetry(invariant_tsc). This is intended to guide future optimizations. AVX512 in particular is broken up into its individual subsets and some other processor features such as [sha](https://en.wikipedia.org/wiki/Intel_SHA_extensions) and [gfni](https://en.wikipedia.org/wiki/AVX-512#GFNI) are added to have some forward-facing data-points. What used to be a single `CPU_Extension_x64_AVX512` telemetry field is also broken up into individual `CPU_Extension_x64_AVX512{F,VL,CD,...}` fields.
* cpu_detect: Revert `__cpuid{ex}` array-type argumentWunkolo2022-03-091-6/+6
| | | | Restores compatibility with MSVC's `__cpuid` intrinsic.
* cpu_detect: Add missing `lzcnt` detectionWunkolo2022-03-091-0/+1
|
* cpu_detect: Refactor cpu/manufacturer identificationWunkolo2022-03-091-15/+22
| | | | | | | Set the zero-enum value to Unknown Move the Manufacterer enum into the CPUCaps structure namespace Add "ParseManufacturer" utility-function Fix cpu/brand string buffer sizes(!)
* cpu_detect: Update array-types to `span` and `array`Wunkolo2022-03-091-11/+13
| | | | Update some uses of `int` into some more explicitly sized types as well
* cpu_detect: Utilize `Bit<N>` utility functionWunkolo2022-03-091-32/+20
|
* common/cpu_detect: Remove CPU family and modelMorph2021-12-131-12/+0
| | | | We currently do not make use of these fields, remove them for now.
* Merge pull request #3396 from FernandoS27/prometheus-1David2020-06-281-0/+33
|\ | | | | Implement SpinLocks, Fibers and a Host Timer
| * Common: Implement WallClock Interface and implement a native clock for x64Fernando Sahmkow2020-06-181-0/+33
| |
* | common/cpu_detect: Add AVX512 detectionMorph2020-06-201-0/+5
|/
* Remove unused CPU Vendor string and telemtry fieldJames Rowe2020-01-171-68/+0
| | | | The information is duplicated in the brand string and the telemetry field is unused
* cpu_detect.cpp: Change comment from citra to yuzuN00byKing2018-03-261-1/+1
|
* Common: Fix some out-of-style includesYuri Kunde Schlesner2017-05-271-1/+1
|
* common/cpu_detect: Add missing include and fix namespace scopeYuri Kunde Schlesner2017-03-121-5/+7
|
* common: use system CPUID routine on DragonFly as wellJan Beich2016-10-271-2/+2
|
* common: some FreeBSD headers are incomplete to avoid namespace pollutionJan Beich2016-10-271-1/+3
| | | | | | | | | | | | | | | | | | | | | | | | In file included from src/common/x64/cpu_detect.cpp:16: /usr/include/machine/cpufunc.h:66:17: error: unknown type name 'u_int' static __inline u_int ^ /usr/include/machine/cpufunc.h:67:6: error: unknown type name 'u_int' bsfl(u_int mask) ^ /usr/include/machine/cpufunc.h:69:2: error: unknown type name 'u_int' u_int result; ^ /usr/include/machine/cpufunc.h:75:17: error: unknown type name 'u_long'; did you mean 'long'? static __inline u_long ^ /usr/include/machine/cpufunc.h:76:6: error: unknown type name 'u_long'; did you mean 'long'? bsfq(u_long mask) ^ /usr/include/machine/cpufunc.h:78:2: error: use of undeclared identifier 'u_long'; did you mean 'long'? u_long result; ^ [...]
* Use negative priorities to avoid special-casing the self-includeYuri Kunde Schlesner2016-09-211-1/+1
|
* Remove empty newlines in #include blocks.Emmanuel Gil Peyrot2016-09-211-3/+1
| | | | | | | This makes clang-format useful on those. Also add a bunch of forgotten transitive includes, which otherwise prevented compilation.
* Sources: Run clang-format on everything.Emmanuel Gil Peyrot2016-09-181-36/+56
|
* Common: Cleanup CPU capability detection code.bunnei2015-08-151-131/+89
|
* Common: Move cpu_detect to x64 directory.bunnei2015-08-151-0/+229