From 09614b35c01702b73c757d9ec374bf381d51b008 Mon Sep 17 00:00:00 2001 From: Jan Janssen Date: Wed, 12 Apr 2023 23:33:29 +0200 Subject: [PATCH] boot: Use compiler intrinsic for TSC --- src/boot/efi/ticks.c | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/src/boot/efi/ticks.c b/src/boot/efi/ticks.c index 13972528cd..84dfdc4542 100644 --- a/src/boot/efi/ticks.c +++ b/src/boot/efi/ticks.c @@ -4,28 +4,15 @@ #include "util.h" #include "vmm.h" -#ifdef __x86_64__ +#if defined(__i386__) || defined(__x86_64__) static uint64_t ticks_read(void) { - uint64_t a, d; - /* The TSC might or might not be virtualized in VMs (and thus might not be accurate or start at zero * at boot), depending on hypervisor and CPU functionality. If it's not virtualized it's not useful * for keeping time, hence don't attempt to use it. */ if (in_hypervisor()) return 0; - __asm__ volatile ("rdtsc" : "=a" (a), "=d" (d)); - return (d << 32) | a; -} -#elif defined(__i386__) -static uint64_t ticks_read(void) { - uint64_t val; - - if (in_hypervisor()) - return 0; - - __asm__ volatile ("rdtsc" : "=A" (val)); - return val; + return __builtin_ia32_rdtsc(); } #elif defined(__aarch64__) static uint64_t ticks_read(void) { -- 2.25.1