Хороший способ поделиться полосой переноса флага в сборке AMD GCN?

Мне нужно добавить два ulong.

Первая половина (младшие 32 бита) каждого номера сохраняется в дорожках с четным идентификатором, а вторая половина (старшие 32 бита) сохраняется в дорожке рядом с ней (следующий нечетный идентификатор).

Таким образом, одна дорожка добавляет младшие 32 бита, а одна дорожка добавляет старшие 32 бита.

Проблема в том, что если в младшей 32-битной сумме есть флаг переноса, мне нужно добавить этот флаг в старшую 32-битную сумму.

Один из способов может быть таким (для a += 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]  

Вторая строка нужна, потому что мне нужно перевести флаг переноса в число, чтобы я мог разделить его между строк, используя инструкцию dpp в строке 3.

Есть лучший способ сделать это? Заранее спасибо.

0 ответов

Другие вопросы по тегам