我有一个asm循环,保证不会超过128次迭代,我希望通过PC相对跳转来展开。这个想法是以相反的顺序展开每个迭代,然后跳转到需要的循环中。代码看起来像这样:gcc内嵌程序集中的PC相对跳转
#define __mul(i) \
"movq -"#i"(%3,%5,8),%%rax;" \
"mulq "#i"(%4,%6,8);" \
"addq %%rax,%0;" \
"adcq %%rdx,%1;" \
"adcq $0,%2;"
asm("jmp (128-count)*size_of_one_iteration" // I need to figure this jump out
__mul(127)
__mul(126)
__mul(125)
...
__mul(1)
__mul(0)
: "+r"(lo),"+r"(hi),"+r"(overflow)
: "r"(a.data),"r"(b.data),"r"(i-k),"r"(k)
: "%rax","%rdx");
是这样的可能与gcc内联汇编?
我现在使用的是Duff设备的变体,但是我发布了这个,因为我想切换到只有asm的方式 – Chris 2011-02-07 19:59:35