Стоит задача перемножить в GF(2) два двоичных вектора, которые хранятся в двух массивах 32-битных слов. Вопрос заключается в том, как оптимизировать код под ARM7,ARM9 и CORTEX M3 с учётом их особенностей, возможно, с использованием ассемблера.
Пока в голову пришло вот это:
unsigned int multAB(unsigned int *A,unsigned int *B, unsigned int size) { unsigned int y=0; for (i=0; i<size; i++)y^=A[i]^B[i]; y=y^(y>>1); y=y^(y>>2); y=y^(y>>4); y=y^(y>>8); y=y^(y>>16); return y; }
|