项目遇到一段调用非常多的代码,运算能力不足,各位路过帮帮看看怎么优化一下.
一段16字节整体左移一位,最后或上一位可变量C代码.跑在stm32或者arm9上.
改查表,汇编都行,谢过.代码如下
- uint32_t* st;
- st[3] = (st[3] << 1) | ((st[2] >> 31) & 1);
- st[2] = (st[2] << 1) | ((st[1] >> 31) & 1);
- st[1] = (st[1] << 1) | ((st[0] >> 31) & 1);
- st[0] = (st[0] << 1) | v;
复制代码
比如这样,虽然看起来C语句更多,但其实性能更好。
- uint32_t* st;
- uint32_t a3, a2, a1, a0;
- a3 = st[3];
- a2 = st[2];
- a1 = st[1];
- a0 = st[0];
- a3 = (a3 << 1) | ((a2 >> 31) & 1);
- a2 = (a2 << 1) | ((a1 >> 31) & 1);
- a1 = (a1 << 1) | ((a0 >> 31) & 1);
- a0 = (a0 << 1) | v;
- st[3] = a3;
- st[2] = a2;
- st[1] = a1;
- st[0] = a0;
复制代码如果能用汇编的LDM和STM就更好了!
补充,如果是在具备cache的CPU上,就把内存的读取和写入改为地址增序排列能发挥cache行的性能。无cache系统则无所谓。
一周热门 更多>