Ошибка: не удается найти регистр в классе 'AREG' при перезагрузке ASM

gcc assembly inline-assembly rdtsc

238 просмотра

1 ответ

6 Репутация автора

Когда я выполнил этот код bи cпеременные, то программа будет выполняться , но она не генерирует никакого вывода. Существует некоторая логическая ошибка, которая не выводит время на выходе.

__inline__ uint64_t timestamp(void)
{
   unsigned long a, b;
   asm volatile ("cpuid; rdtscp" : "=a" (a), "=b" (b) : : "%rax", "%rdx");
   return a | ((uint64_t) b << 32);
}
Автор: Rahat Ali Источник Размещён: 19.07.2016 03:47

Ответы (1)


1 плюс

5168 Репутация автора

Как насчет чего-то вроде:

unsigned int a;

/* 'volatile' prevents gcc from discarding 'unused' function.  */
asm volatile ("cpuid" : "=a" (a) : "a" (0): "rbx", "rcx", "rdx");

/* Use intrinsics when possible.  Ignore 'a', it's garbage.  */
return __builtin_ia32_rdtscp(&a);

Хотя я не совсем уверен, зачем вам нужен процессор здесь. Разве rdtscp уже не ждет завершения всех предыдущих инструкций? Вы имели в виду использование cpuid для проверки и поддержки rdtscp?

Автор: David Wohlferd Размещён: 19.07.2016 04:58
Вопросы из категории :
32x32