| // SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project | |
| // SPDX-License-Identifier: GPL-2.0-or-later | |
| namespace Common::X64 { | |
| __forceinline static u64 FencedRDTSC() { | |
| _mm_lfence(); | |
| _ReadWriteBarrier(); | |
| const u64 result = __rdtsc(); | |
| _mm_lfence(); | |
| _ReadWriteBarrier(); | |
| return result; | |
| } | |
| static inline u64 FencedRDTSC() { | |
| u64 eax; | |
| u64 edx; | |
| asm volatile("lfence\n\t" | |
| "rdtsc\n\t" | |
| "lfence\n\t" | |
| : "=a"(eax), "=d"(edx)); | |
| return (edx << 32) | eax; | |
| } | |
| u64 EstimateRDTSCFrequency(); | |
| } // namespace Common::X64 | |