From: Jan Janssen Date: Wed, 12 Apr 2023 21:33:29 +0000 (+0200) Subject: boot: Use compiler intrinsic for TSC X-Git-Tag: v254-rc1~691^2~2 X-Git-Url: http://git-history.diyao.me/?a=commitdiff_plain;h=09614b35c01702b73c757d9ec374bf381d51b008;p=systemd%2F.git boot: Use compiler intrinsic for TSC --- 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) {