gpt4 book ai didi

c++ - 在 gcc 中的内联汇编程序中出错

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:03:01 25 4
gpt4 key购买 nike

<分区>

我已经成功地在 gcc 中编写了一些内联汇编程序来向右旋转一位遵循一些很好的说明:http://www.cs.dartmouth.edu/~sergey/cs108/2009/gcc-inline-asm.pdf

这是一个例子:

static inline int ror(int v) {
asm ("ror %0;" :"=r"(v) /* output */ :"0"(v) /* input */ );
return v;
}

但是,我想要代码来计算时钟周期,并且看到了一些错误的(可能是微软的)格式。我不知道如何在 gcc 中做这些事情。有帮助吗?

unsigned __int64 inline GetRDTSC() {
__asm {
; Flush the pipeline
XOR eax, eax
CPUID
; Get RDTSC counter in edx:eax
RDTSC
}
}

我试过:

static inline unsigned long long getClocks() {
asm("xor %%eax, %%eax" );
asm(CPUID);
asm(RDTSC : : %%edx %%eax); //Get RDTSC counter in edx:eax

但我不知道如何让 edx:eax 对以 64 位的形式干净地返回,也不知道如何真正刷新管道。

此外,我找到的最佳源代码位于:http://www.strchr.com/performance_measurements_with_rdtsc

上面提到的是奔腾,所以如果在不同的英特尔/AMD 变体上有不同的方法,请告诉我。我更喜欢适用于所有 x86 平台的东西,即使它有点难看,也不愿为每个变体提供一系列解决方案,但我不介意了解它。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com