Метод HackersDelight работает. Сравнение производительности прямого и оптимизированного метода вращения битовой матрицы. http://caxapa.ru/299233.html
Оптимизированный метод практически в 6 раз быстрее прямого. (STM32L152 работает на частоте 32 МГц, клетка на осциллограмме 1 мс, компилятор IAR).
void test_transpose(void)
{
    unsigned char a[] = { 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80}; // diagonal matrix
    unsigned char b[8],i,k;
    unsigned int j;
    
    for(i = 0;i < 8; i++) b[i] = 0;
    for(j = 0; j < 50000; j++)
    {
        led_on(1);
        for(i = 0; i < 200; i++)
        {
            optimized_transpose_8x8(a,b);
            for(k = 0;k < 8; k++) b[k] = 0;
        }
        led_on(0);
        for(i = 0; i< 200; i++)
        {
            direct_transpose(a,b);
            for(k = 0;k < 8; k++) b[k] = 0;
        }
    }
    
}
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
void optimized_transpose_8x8(unsigned char *src, unsigned char *dst)
{
	register unsigned int x,y,t;
	x = (*src<<24) | ((*(src+1))<<16) |	((*(src+2))<<8) | (*(src+3));
	y = (*(src+4)<<24) | ((*(src+5))<<16) |	((*(src+6))<<8) | (*(src+7));
		
	t = (x^(x >> 7)) & 0x00aa00aa; 	x = x ^ t ^ (t << 7);
	t = (y^(y >> 7)) & 0x00aa00aa; 	y = y ^ t ^ (t << 7);
	t = (x^(x >> 14)) & 0x0000cccc;	x = x ^ t ^ (t << 14);
	t = (y^(y >> 14)) & 0x0000cccc; y = y ^ t ^ (t << 14);
	t = (x & 0xf0f0f0f0) | ((y >> 4) & 0x0f0f0f0f);
	y = ((x << 4)& 0xf0f0f0f0) | (y & 0x0f0f0f0f);
	*dst = t>>24;  (*(dst+1)) = t>>16; (*(dst+2)) = t>>8;  (*(dst+3) = t);
	*(dst+4) = y>>24;(*(dst+5)) = y>>16; (*(dst+6)) = y>>8;  (*(dst+7) = y);
}
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
void direct_transpose(unsigned char *ta, unsigned char *tb)
{
  unsigned char mask; 
  unsigned char *pdst;
  register unsigned int i = 0; 
  do{
    mask = 0x01;
    pdst = tb;
    do{
	if(*ta & mask)*pdst = *pdst | (1 << i);
	pdst++;
      mask <<= 1; 
    }while(mask);
    ta++;
    i++;
  }while(i<8);
}
//----------------------------------------------------------------------------
//----------------------------------------------------------------------------
 
Оптимизированный метод практически в 6 раз быстрее прямого. (STM32L152 работает на частоте 32 МГц, клетка на осциллограмме 1 мс, компилятор IAR).
