ako*_*sch 12 compiler-construction assembly haskell inline-assembly ghc
我可以以某种方式在Haskell中使用内联汇编(类似于GCC对C的内容)吗?
我想将我的Haskell代码与参考实现(ASM)进行比较,这似乎是最简单的方法.我想我可以从C调用Haskell并使用GCC内联汇编,但我仍然感兴趣,如果我可以反过来做.
(我在Linux/x86上)
Don*_*art 13
有两种方法:
两种解决方案都在C端使用内联汇编.前者是最惯用的.这是一个例子,来自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;
}
Run Code Online (Sandbox Code Playgroud)
rdtsc.c:
unsigned long long rdtsc(void)
{
return getticks();
}
Run Code Online (Sandbox Code Playgroud)
rdtsc.h:
unsigned long long rdtsc(void);
Run Code Online (Sandbox Code Playgroud)
rdtsc.hs:
foreign import ccall unsafe "rdtsc.h" rdtsc :: IO Word64
Run Code Online (Sandbox Code Playgroud)
最后: