[an error occurred while processing this directive]
|
В таком виде вряд ли что-то получится - у вас данные организованы как массив структур. то есть (я делаю предположение что есть только LIST_0 и LIST_1):
struct my_struct {
ucRefFrameNum[2];
ucRefFrameIndex[2];
}
my_struct my_array_of_structs[16];
Обычно это неускоряемо.
сделайте так (это называется структура массивов):
struct my_struct_of_arrays {
ucRefFrameNum_LIST_0[16];
ucRefFrameNum_LIST_1[16];
ucRefFrameIndex_LIST_0[16];
ucRefFrameIndex_LIST_1[16];
}
my_struct_of_arrays variable;
код обнуления будет таким:
const long long MAGIC_VALUE = (INVALID_REF_FRAME<<56) | (INVALID_REF_FRAME<<48) | .... INVALID_REF_FRAME;
inline void foo(my_struct_of_arrays & restrict &S)
{
long long * restrict RF_L0 = (long long * restrict)&S.ucRefFrameNum_LIST_0[0]; // 1 такт
long long * restrict RFI_L1 = (long long * restrict)&S.ucRefFrameNum_LIST_1[0]; // на все 4
long long * restrict RFI_L0 = (long long * restrict)&S.ucRefFrameIndex_LIST_0[0]; // указателя
long long * restrict RFI_L1 = (long long * restrict)&S.ucRefFrameIndex_LIST_1[0]; // скорее всего
RF_L0[0] = MAGIC_VALUE; RF_L0[1] = MAGIC_VALUE; // 2 такта если будет выравнивание
RF_L1[0] = MAGIC_VALUE; RF_L1[1] = MAGIC_VALUE; // 2 такта если будет выравнивание
RFI_L0[0] = MAGIC_VALUE; RFI_L0[1] = MAGIC_VALUE; // 2 такта если будет выравнивание
RFI_L1[0] = MAGIC_VALUE; RFI_L1[1] = MAGIC_VALUE; // 2 такта если будет выравнивание
}
Итого: ориентировочно 9 тактов на всё.