我可以以某种方式在 Haskell 中使用内联汇编(类似于 GCC 对 C 的作用)吗?
我想将我的 Haskell 代码与参考实现 (ASM) 进行比较,这似乎是最直接的方法。我想我可以从 C 调用 Haskell 并使用 GCC 内联汇编,但我仍然很感兴趣是否可以以相反的方式做到这一点。
(我使用的是 Linux/x86)
rdtsc 包的示例:
cycles.h:
static __inline__ ticks getticks(void)
{
unsigned int tbl, tbu0, tbu1;
do {
__asm__ __volatile__ ("mftbu %0" : "=r"(tbu0));
__asm__ __volatile__ ("mftb %0" : "=r"(tbl));
__asm__ __volatile__ ("mftbu %0" : "=r"(tbu1));
} while (tbu0 != tbu1);
return (((unsigned long long)tbu0) << 32) | tbl;
}
rdtsc.c:
unsigned long long rdtsc(void)
{
return getticks();
}
rdtsc.h:
unsigned long long rdtsc(void);
rdtsc.hs:
foreign import ccall unsafe "rdtsc.h" rdtsc :: IO Word64
最后: