C:\test\C>bufswap 536870912 268435456 2 ### 2^29 2^28 size:536870912 offset;268435456 [ 0 1 ... 268435454 268435455 ^ 268435456 268435457 ... 536870910 536870911 ] [ 268435456 268435457 ... 536870910 536870911 ^ 0 1 ... 268435454 268435455 ] iterative: swaps:536870912 took 4.364767872 secs. [ 0 1 ... 268435454 268435455 ^ 268435456 268435457 ... 536870910 536870911 ] [ 268435456 268435457 ... 536870910 536870911 ^ 0 1 ... 268435454 268435455 ] recursive: swaps:268435456 took 2.476348362 secs. #### C:\test\C>bufswap 30000000 20000000 2 size:30000000 offset;20000000 [ 0 1 ... 19999998 19999999 ^ 20000000 20000001 ... 29999998 29999999 ] [ 20000000 20000001 ... 29999998 29999999 ^ 0 1 ... 19999998 19999999 ] iterative: swaps:30000000 took 0.235516729 secs. [ 0 1 ... 19999998 19999999 ^ 20000000 20000001 ... 29999998 29999999 ] [ 20000000 20000001 ... 29999998 29999999 ^ 0 1 ... 19999998 19999999 ] recursive: swaps:20000000 took 0.163142653 secs. #### C:\test\C>bufswap 536870855 268435399 2 ### 2^28+prime prime size:536870855 offset;268435399 [ 0 1 ... 268435397 268435398 ^ 268435399 268435400 ... 536870853 536870854 ] [ 268435399 268435400 ... 536870853 536870854 ^ 0 1 ... 268435397 268435398 ] iterative: swaps:536870855 took 23.912365889 secs. [ 0 1 ... 268435397 268435398 ^ 268435399 268435400 ... 536870853 536870854 ] [ 268435399 268435400 ... 536870853 536870854 ^ 0 1 ... 268435397 268435398 ] recursive: swaps:536870854 took 3.633964430 secs. #### C:\test\C>bufswap 2097147 1048571 2 ### 2^20+prime prime size:2097147 offset;1048571 [ 0 1 ... 1048569 1048570 ^ 1048571 1048572 ... 2097145 2097146 ] [ 1048571 1048572 ... 2097145 2097146 ^ 0 1 ... 1048569 1048570 ] iterative: swaps:2097147 took 0.050917112 secs. [ 0 1 ... 1048569 1048570 ^ 1048571 1048572 ... 2097145 2097146 ] [ 1048571 1048572 ... 2097145 2097146 ^ 0 1 ... 1048569 1048570 ] recursive: swaps:2097146 took 0.022471381 secs. [ 0 1 ... 1048569 1048570 ^ 1048571 1048572 ... 2097145 2097146 ] [ 1048571 1048572 ... 2097145 2097146 ^ 0 1 ... 1048569 1048570 ] reversive: swaps:2097146 took 0.030067538 secs. C:\test\C>bufswap 33554429 16777213 2 ### 2^24+prime prime size:33554429 offset;16777213 [ 0 1 ... 16777211 16777212 ^ 16777213 16777214 ... 33554427 33554428 ] [ 16777213 16777214 ... 33554427 33554428 ^ 0 1 ... 16777211 16777212 ] iterative: swaps:33554429 took 0.519861854 secs. [ 0 1 ... 16777211 16777212 ^ 16777213 16777214 ... 33554427 33554428 ] [ 16777213 16777214 ... 33554427 33554428 ^ 0 1 ... 16777211 16777212 ] recursive: swaps:33554428 took 0.212679449 secs. [ 0 1 ... 16777211 16777212 ^ 16777213 16777214 ... 33554427 33554428 ] [ 16777213 16777214 ... 33554427 33554428 ^ 0 1 ... 16777211 16777212 ] reversive: swaps:33554428 took 0.275975182 secs. C:\test\C>bufswap 134217723 67108859 2 ### 2^26+prime prime size:134217723 offset;67108859 [ 0 1 ... 67108857 67108858 ^ 67108859 67108860 ... 134217721 134217722 ] [ 67108859 67108860 ... 134217721 134217722 ^ 0 1 ... 67108857 67108858 ] iterative: swaps:134217723 took 2.986443308 secs. [ 0 1 ... 67108857 67108858 ^ 67108859 67108860 ... 134217721 134217722 ] [ 67108859 67108860 ... 134217721 134217722 ^ 0 1 ... 67108857 67108858 ] recursive: swaps:134217722 took 0.957572077 secs. [ 0 1 ... 67108857 67108858 ^ 67108859 67108860 ... 134217721 134217722 ] [ 67108859 67108860 ... 134217721 134217722 ^ 0 1 ... 67108857 67108858 ] reversive: swaps:134217722 took 1.185514126 secs. C:\test\C>bufswap 268435417 134217689 2 ### 2^27+prime prime size:268435417 offset;134217689 [ 0 1 ... 134217687 134217688 ^ 134217689 134217690 ... 268435415 268435416 ] [ 134217689 134217690 ... 268435415 268435416 ^ 0 1 ... 134217687 134217688 ] iterative: swaps:268435417 took 11.702352647 secs. [ 0 1 ... 134217687 134217688 ^ 134217689 134217690 ... 268435415 268435416 ] [ 134217689 134217690 ... 268435415 268435416 ^ 0 1 ... 134217687 134217688 ] recursive: swaps:268435416 took 1.888340531 secs. [ 0 1 ... 134217687 134217688 ^ 134217689 134217690 ... 268435415 268435416 ] [ 134217689 134217690 ... 268435415 268435416 ^ 0 1 ... 134217687 134217688 ] reversive: swaps:268435416 took 2.337291168 secs. #### abcdef123 321fedcba reverse the entire buffer. 123fedcba reverse the smaller partition. 123abcdef reverse the larger partition. #### U32 reverseBuffer( register U64 *p, const U32 start, const U32 size ) { register U32 i, swaps = 0; const U32 half = size >> 1; for( i = start; i < half; ++i ) { swapElems( p, i, size -1 -i ); ++swaps; } return swaps; } U32 xchgBufferV( U64 *p, U32 size, U32 offset ) { register U32 swaps = 0; swaps += reverseBuffer( p, 0, size ); swaps += reverseBuffer( p, 0, size - offset ); swaps += reverseBuffer( p + (size - offset), 0, offset ); return swaps; }