霜恸 发表于 2013-9-16 18:35
版主您好,非常感谢!再麻烦您一下,乘加指令是否可能类似的设定寄存器中的进位标志呢? ...
楼主您好,
可以设置使用标志寄存器的CF位的。
以下代码给出了示意(请注意仅为示意,不保证完全正确):
uint32_t a1,a0; //64位被乘数
uint32_t b1,b0; //64位乘数
uint32_t c3,c2,c1,c0; //128-bit积
asm volatile
("mul.lo.u32 %0,%4,%6;"
"mul.hi.u32 %1,%4,%6;" //分2次计算a0 * b0, 64位乘法
"mad.lo.cc.u32 %1,%5,%6,%1;"
"madc.hi.u32 %2,%5,%6,0;" //分2次计算a1 * b0, 并累加上次结果
"mad.lo.cc.u32 %1,%4,%7,%1;"
"madc.hi.cc.u32 %2,%4,%7,%2;"
"addc.u32 %3,0,0;" //分2次计算a0 * b1, 累加结果和进位
"mad.lo.cc.u32 %2,%5,%7,%2;"
"madc.hi.u32 %3,%5,%7,%3;" //a1 * b1, 并累加结果
:"=r"(c0),"=r"(c1),"=r"(c2),"=r"(c3)
:"r"(a0),"r"(a1),"r"(b0),"r"(b1)
);
|