我正在尝试将其他人的项目从32位转换为64位。除了一个函数外,一切似乎都没问题,它使用在构建x64时Visual Studio不支持的汇编表达式:
// Returns the Read Time Stamp Counter of the CPU
// The instruction returns in registers EDX:EAX the count of ticks from processor reset.
// Added in Pentium. Opcode: 0F 31.
int64_t CDiffieHellman::GetRTSC( void )
{
int tmp1 = 0;
int tmp2 = 0;
#if defined(WIN32)
__asm
{
RDTSC; // Clock cycles since CPU started
mov tmp1, eax;
mov tmp2, edx;
}
#else
asm( "RDTSC;\n\t"
"movl %%eax, %0;\n\t"
"movl %%edx, %1;"
:"=r"(tmp1),"=r"(tmp2)
:
:
);
#endif
return ((int64_t)tmp1 * (int64_t)tmp2);
}
最有趣的是,这被用于生成随机数。在{x}下,asm
块都无法编译,因此使用ifdef
无法提供帮助。我只需要找到C / C ++替换来避免重写整个程序。
答案 0 :(得分:7)
对于Windows分支,
sysLogErrorId
并调用setNotifyUrl
内在函数。
文档on MSDN
对于Linux分支,内在函数可以使用相同的名称,但是您需要一个不同的头文件:
#include <intrin.h>