Примеры использования rdtsc в языках высокого уровня: различия между версиями
Содержимое удалено Содержимое добавлено
ЕссБот (обсуждение | вклад) м →[[w:PureBasic|PureBasic]]: замена категории на шаблон для работы полки, removed: Категория:Программирование с помощью AWB |
ЕссБот (обсуждение | вклад) м →[[w:PureBasic|PureBasic]]: установка шаблона "по алфавиту" по консенсусу на форуме с помощью AWB |
||
Строка 56: | Строка 56: | ||
</source> |
</source> |
||
⚫ | |||
{{По алфавиту}} |
|||
⚫ |
Версия от 22:02, 24 марта 2016
Microsoft Visual C++
#include <intrin.h>
#pragma intrinsic(__rdtsc)
unsigned __int64 rdtsc() {
return __rdtsc();
}
GNU С / C++
#include <stdint.h>
extern __inline__ uint64_t rdtsc() {
uint64_t x;
__asm__ volatile ("rdtsc\n\tshl $32, %%rdx\n\tor %%rdx, %%rax" : "=a" (x) : : "rdx");
return x;
}
Pascal / Delphi
function RDTSC: comp;
var TimeStamp: record case byte of
1: (Whole: comp);
2: (Lo, Hi: cardinal);
end;
begin
asm
db $0F; db $31;
mov [TimeStamp.Lo], eax
mov [TimeStamp.Hi], edx
end;
Result := TimeStamp.Whole;
end;
В более новых версиях Delphi можно реализовать это так:
function RDTSC: UInt64; register;
asm
rdtsc
{$IFDEF WIN64} // В случае 64-битной компиляции результат функции целиком передаётся через RAX
shl rdx, 32
or rax, rdx
{$ENDIF}
end;
PureBasic
Procedure.q RDTSC()
!rdtsc
ProcedureReturn
EndProcedure