【发布时间】:2011-02-05 17:04:20
【问题描述】:
我有一个 asm 循环保证不会超过 128 次迭代,我想用相对于 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 内联汇编可以实现这样的事情吗?
【问题讨论】:
标签: gcc x86-64 inline-assembly