![]() |
1
1
您的内部循环接受两个字节的片段并将它们移动到目标字节。这几乎是最佳的。以下是一些没有特别顺序的提示:
|
![]() |
2
7
这就是我最后要做的。(
|
![]() |
3
1
什么是最佳的将取决于目标平台。在某些没有桶形移位器的平台上,将整个向量右移或左移一位n次(n<3)将是最快的方法(在PIC18平台上,一个8x展开字节循环将左移一位每8字节需要11个指令周期)。否则,我喜欢这个模式(注意src2必须初始化,这取决于您想对缓冲区的末尾执行什么操作) src1 = *src++; src2 = (src1 shl shiftamount1) | (src2 shr shiftamount2); *dest++ = src2; src2 = *src++; src1 = (src2 shl shiftamount1) | (src1 shr shiftamount2); *dest++ = src1;
src0 = *src++; src1 = *src++; src2 = *src++; src3 = *src++; tmp = src0; src0 = src0 shr shiftamount1 src0 = src0 | src1 shl shiftamount2 src1 = src1 shr shiftamount1 src1 = src1 | src2 shl shiftamount2 src2 = src2 shr shiftamount1 src2 = src2 | src3 shl shiftamount2 src3 = src3 shr shiftamount1 src3 = src3 | tmp shl shiftamount2 *dest++ = src0; *dest++ = src1; *dest++ = src2; *dest++ = src3; 每旋转16字节11条指令。 |
![]() |
4
0
|