我需要加两个乌龙。
每个数字的前半部分(低32位)存储在具有偶数id的通道中,后半部分(高32位)存储在其偶数id的通道中(下一个奇数id)。
所以一个通道将低32位加起来,而一个通道将高32位加起来。
问题是,如果低32位和有一个进位标志,我需要将该标志添加到高32位和。
一种方法可能是这样的(对于+ = b):
v_add_co_u32 %[a], vcc, %[b], %[a]
v_addc_co_u32 %[carry], vcc, 0, 0, vcc
v_add_co_u32_dpp %[a], vcc, %[carry], %[a] quad_perm[1, 0, 3, 2]
第二行是必需的,因为我需要将进位标志转换为数字,以便可以使用第3行中的dpp指令跨通道共享它。
有更好的方法吗?预先感谢。