No difference. I even unrolled the encipher loop to emulate the C code I copied.
Another thing to consider is that the xojo framework has a bit of code for exception handling and variable allocation/deallocation/cleanup that other languages (like C) dont include automatically.
I don’t understand assembly well enough to know if that’s it, but the pseudo-code generated by Hopper when compared to the same function written in C seems a lot more verbose.
This is the pseudo-code from the C-compiled utility:
var_14 = *(int32_t *)arg1;
var_18 = *(int32_t *)(arg1 + 0x4);
var_14 = *(int32_t *)(arg0 + 0x1000) ^ var_14;
var_18 = (*(int32_t *)(arg0 + (var_14 >> 0x18 & 0xff) * 0x4) + *(int32_t *)(arg0 + ((var_14 >> 0x10 & 0xff) + 0x100) * 0x4) ^ *(int32_t *)(arg0 + ((var_14 >> 0x8 & 0xff) + 0x200) * 0x4)) + *(int32_t *)(arg0 + ((var_14 & 0xff) + 0x300) * 0x4) ^ *(int32_t *)(arg0 + 0x1004) ^ var_18;
var_14 = (*(int32_t *)(arg0 + (var_18 >> 0x18 & 0xff) * 0x4) + *(int32_t *)(arg0 + ((var_18 >> 0x10 & 0xff) + 0x100) * 0x4) ^ *(int32_t *)(arg0 + ((var_18 >> 0x8 & 0xff) + 0x200) * 0x4)) + *(int32_t *)(arg0 + ((var_18 & 0xff) + 0x300) * 0x4) ^ *(int32_t *)(arg0 + 0x1008) ^ var_14;
var_18 = (*(int32_t *)(arg0 + (var_14 >> 0x18 & 0xff) * 0x4) + *(int32_t *)(arg0 + ((var_14 >> 0x10 & 0xff) + 0x100) * 0x4) ^ *(int32_t *)(arg0 + ((var_14 >> 0x8 & 0xff) + 0x200) * 0x4)) + *(int32_t *)(arg0 + ((var_14 & 0xff) + 0x300) * 0x4) ^ *(int32_t *)(arg0 + 0x100c) ^ var_18;
var_14 = (*(int32_t *)(arg0 + (var_18 >> 0x18 & 0xff) * 0x4) + *(int32_t *)(arg0 + ((var_18 >> 0x10 & 0xff) + 0x100) * 0x4) ^ *(int32_t *)(arg0 + ((var_18 >> 0x8 & 0xff) + 0x200) * 0x4)) + *(int32_t *)(arg0 + ((var_18 & 0xff) + 0x300) * 0x4) ^ *(int32_t *)(arg0 + 0x1010) ^ var_14;
var_18 = (*(int32_t *)(arg0 + (var_14 >> 0x18 & 0xff) * 0x4) + *(int32_t *)(arg0 + ((var_14 >> 0x10 & 0xff) + 0x100) * 0x4) ^ *(int32_t *)(arg0 + ((var_14 >> 0x8 & 0xff) + 0x200) * 0x4)) + *(int32_t *)(arg0 + ((var_14 & 0xff) + 0x300) * 0x4) ^ *(int32_t *)(arg0 + 0x1014) ^ var_18;
var_14 = (*(int32_t *)(arg0 + (var_18 >> 0x18 & 0xff) * 0x4) + *(int32_t *)(arg0 + ((var_18 >> 0x10 & 0xff) + 0x100) * 0x4) ^ *(int32_t *)(arg0 + ((var_18 >> 0x8 & 0xff) + 0x200) * 0x4)) + *(int32_t *)(arg0 + ((var_18 & 0xff) + 0x300) * 0x4) ^ *(int32_t *)(arg0 + 0x1018) ^ var_14;
var_18 = (*(int32_t *)(arg0 + (var_14 >> 0x18 & 0xff) * 0x4) + *(int32_t *)(arg0 + ((var_14 >> 0x10 & 0xff) + 0x100) * 0x4) ^ *(int32_t *)(arg0 + ((var_14 >> 0x8 & 0xff) + 0x200) * 0x4)) + *(int32_t *)(arg0 + ((var_14 & 0xff) + 0x300) * 0x4) ^ *(int32_t *)(arg0 + 0x101c) ^ var_18;
var_14 = (*(int32_t *)(arg0 + (var_18 >> 0x18 & 0xff) * 0x4) + *(int32_t *)(arg0 + ((var_18 >> 0x10 & 0xff) + 0x100) * 0x4) ^ *(int32_t *)(arg0 + ((var_18 >> 0x8 & 0xff) + 0x200) * 0x4)) + *(int32_t *)(arg0 + ((var_18 & 0xff) + 0x300) * 0x4) ^ *(int32_t *)(arg0 + 0x1020) ^ var_14;
var_18 = (*(int32_t *)(arg0 + (var_14 >> 0x18 & 0xff) * 0x4) + *(int32_t *)(arg0 + ((var_14 >> 0x10 & 0xff) + 0x100) * 0x4) ^ *(int32_t *)(arg0 + ((var_14 >> 0x8 & 0xff) + 0x200) * 0x4)) + *(int32_t *)(arg0 + ((var_14 & 0xff) + 0x300) * 0x4) ^ *(int32_t *)(arg0 + 0x1024) ^ var_18;
var_14 = (*(int32_t *)(arg0 + (var_18 >> 0x18 & 0xff) * 0x4) + *(int32_t *)(arg0 + ((var_18 >> 0x10 & 0xff) + 0x100) * 0x4) ^ *(int32_t *)(arg0 + ((var_18 >> 0x8 & 0xff) + 0x200) * 0x4)) + *(int32_t *)(arg0 + ((var_18 & 0xff) + 0x300) * 0x4) ^ *(int32_t *)(arg0 + 0x1028) ^ var_14;
var_18 = (*(int32_t *)(arg0 + (var_14 >> 0x18 & 0xff) * 0x4) + *(int32_t *)(arg0 + ((var_14 >> 0x10 & 0xff) + 0x100) * 0x4) ^ *(int32_t *)(arg0 + ((var_14 >> 0x8 & 0xff) + 0x200) * 0x4)) + *(int32_t *)(arg0 + ((var_14 & 0xff) + 0x300) * 0x4) ^ *(int32_t *)(arg0 + 0x102c) ^ var_18;
var_14 = (*(int32_t *)(arg0 + (var_18 >> 0x18 & 0xff) * 0x4) + *(int32_t *)(arg0 + ((var_18 >> 0x10 & 0xff) + 0x100) * 0x4) ^ *(int32_t *)(arg0 + ((var_18 >> 0x8 & 0xff) + 0x200) * 0x4)) + *(int32_t *)(arg0 + ((var_18 & 0xff) + 0x300) * 0x4) ^ *(int32_t *)(arg0 + 0x1030) ^ var_14;
var_18 = (*(int32_t *)(arg0 + (var_14 >> 0x18 & 0xff) * 0x4) + *(int32_t *)(arg0 + ((var_14 >> 0x10 & 0xff) + 0x100) * 0x4) ^ *(int32_t *)(arg0 + ((var_14 >> 0x8 & 0xff) + 0x200) * 0x4)) + *(int32_t *)(arg0 + ((var_14 & 0xff) + 0x300) * 0x4) ^ *(int32_t *)(arg0 + 0x1034) ^ var_18;
var_14 = (*(int32_t *)(arg0 + (var_18 >> 0x18 & 0xff) * 0x4) + *(int32_t *)(arg0 + ((var_18 >> 0x10 & 0xff) + 0x100) * 0x4) ^ *(int32_t *)(arg0 + ((var_18 >> 0x8 & 0xff) + 0x200) * 0x4)) + *(int32_t *)(arg0 + ((var_18 & 0xff) + 0x300) * 0x4) ^ *(int32_t *)(arg0 + 0x1038) ^ var_14;
var_18 = (*(int32_t *)(arg0 + (var_14 >> 0x18 & 0xff) * 0x4) + *(int32_t *)(arg0 + ((var_14 >> 0x10 & 0xff) + 0x100) * 0x4) ^ *(int32_t *)(arg0 + ((var_14 >> 0x8 & 0xff) + 0x200) * 0x4)) + *(int32_t *)(arg0 + ((var_14 & 0xff) + 0x300) * 0x4) ^ *(int32_t *)(arg0 + 0x103c) ^ var_18;
var_14 = (*(int32_t *)(arg0 + (var_18 >> 0x18 & 0xff) * 0x4) + *(int32_t *)(arg0 + ((var_18 >> 0x10 & 0xff) + 0x100) * 0x4) ^ *(int32_t *)(arg0 + ((var_18 >> 0x8 & 0xff) + 0x200) * 0x4)) + *(int32_t *)(arg0 + ((var_18 & 0xff) + 0x300) * 0x4) ^ *(int32_t *)(arg0 + 0x1040) ^ var_14;
*(int32_t *)arg1 = var_18 ^ *(int32_t *)(arg0 + 0x1044);
After manually unrolling the loop and rewriting the calculations to match what was done in C, this is how my app appeared:
rcx = rax ^ *(int32_t *)r10;
rbx = *(int32_t *)(r15 + (rcx >> 0xe & 0x3fc | 0x400));
rbx = rbx + *(int32_t *)(r15 + (rcx >> 0x18) * 0x4);
rbx = rbx ^ *(int32_t *)(r15 + (HIBYTE(rcx) & 0xff) * 0x4 + 0x800);
rbx = rbx + *(int32_t *)(r15 + (rcx & 0xff) * 0x4 + 0xc00);
rdx = rdx ^ *(int32_t *)(r10 + 0x4);
rdi = *(int32_t *)(r15 + ((rdx ^ rbx) >> 0xe & 0x3fc | 0x400));
rdi = rdi + *(int32_t *)(r15 + ((rdx ^ rbx) >> 0x18) * 0x4);
rdi = rdi ^ *(int32_t *)(r15 + (HIBYTE(rdx ^ rbx) & 0xff) * 0x4 + 0x800);
rdi = rdi + *(int32_t *)(r15 + ((rdx ^ rbx) & 0xff) * 0x4 + 0xc00);
rcx = rcx ^ *(int32_t *)(r10 + 0x8);
rsi = *(int32_t *)(r15 + ((rcx ^ rdi) >> 0xe & 0x3fc | 0x400));
rsi = rsi + *(int32_t *)(r15 + ((rcx ^ rdi) >> 0x18) * 0x4);
rsi = rsi ^ *(int32_t *)(r15 + (HIBYTE(rcx ^ rdi) & 0xff) * 0x4 + 0x800);
rsi = rsi + *(int32_t *)(r15 + ((rcx ^ rdi) & 0xff) * 0x4 + 0xc00);
rdx = rdx ^ rbx ^ *(int32_t *)(r10 + 0xc);
rdx = rdx ^ rsi;
rsi = *(int32_t *)(r15 + (rdx >> 0xe & 0x3fc | 0x400));
rsi = rsi + *(int32_t *)(r15 + (rdx >> 0x18) * 0x4);
rsi = rsi ^ *(int32_t *)(r15 + (HIBYTE(rdx) & 0xff) * 0x4 + 0x800);
rsi = rsi + *(int32_t *)(r15 + (rdx & 0xff) * 0x4 + 0xc00);
rcx = rcx ^ rdi ^ *(int32_t *)(r10 + 0x10);
rcx = rcx ^ rsi;
rsi = *(int32_t *)(r15 + (rcx >> 0xe & 0x3fc | 0x400));
rsi = rsi + *(int32_t *)(r15 + (rcx >> 0x18) * 0x4);
rsi = rsi ^ *(int32_t *)(r15 + (HIBYTE(rcx) & 0xff) * 0x4 + 0x800);
rsi = rsi + *(int32_t *)(r15 + (rcx & 0xff) * 0x4 + 0xc00);
rdx = rdx ^ *(int32_t *)(r10 + 0x14);
rdx = rdx ^ rsi;
rsi = *(int32_t *)(r15 + (rdx >> 0xe & 0x3fc | 0x400));
rsi = rsi + *(int32_t *)(r15 + (rdx >> 0x18) * 0x4);
rsi = rsi ^ *(int32_t *)(r15 + (HIBYTE(rdx) & 0xff) * 0x4 + 0x800);
rsi = rsi + *(int32_t *)(r15 + (rdx & 0xff) * 0x4 + 0xc00);
rcx = rcx ^ *(int32_t *)(r10 + 0x18);
rcx = rcx ^ rsi;
rsi = *(int32_t *)(r15 + (rcx >> 0xe & 0x3fc | 0x400));
rsi = rsi + *(int32_t *)(r15 + (rcx >> 0x18) * 0x4);
rsi = rsi ^ *(int32_t *)(r15 + (HIBYTE(rcx) & 0xff) * 0x4 + 0x800);
rsi = rsi + *(int32_t *)(r15 + (rcx & 0xff) * 0x4 + 0xc00);
rdx = rdx ^ *(int32_t *)(r10 + 0x1c);
rdx = rdx ^ rsi;
rsi = *(int32_t *)(r15 + (rdx >> 0xe & 0x3fc | 0x400));
rsi = rsi + *(int32_t *)(r15 + (rdx >> 0x18) * 0x4);
rsi = rsi ^ *(int32_t *)(r15 + (HIBYTE(rdx) & 0xff) * 0x4 + 0x800);
rsi = rsi + *(int32_t *)(r15 + (rdx & 0xff) * 0x4 + 0xc00);
rcx = rcx ^ *(int32_t *)(r10 + 0x20);
rcx = rcx ^ rsi;
rsi = *(int32_t *)(r15 + (rcx >> 0xe & 0x3fc | 0x400));
rsi = rsi + *(int32_t *)(r15 + (rcx >> 0x18) * 0x4);
rsi = rsi ^ *(int32_t *)(r15 + (HIBYTE(rcx) & 0xff) * 0x4 + 0x800);
rsi = rsi + *(int32_t *)(r15 + (rcx & 0xff) * 0x4 + 0xc00);
rdx = rdx ^ *(int32_t *)(r10 + 0x24);
rdx = rdx ^ rsi;
rsi = *(int32_t *)(r15 + (rdx >> 0xe & 0x3fc | 0x400));
rsi = rsi + *(int32_t *)(r15 + (rdx >> 0x18) * 0x4);
rsi = rsi ^ *(int32_t *)(r15 + (HIBYTE(rdx) & 0xff) * 0x4 + 0x800);
rsi = rsi + *(int32_t *)(r15 + (rdx & 0xff) * 0x4 + 0xc00);
rcx = rcx ^ *(int32_t *)(r10 + 0x28);
rcx = rcx ^ rsi;
rsi = *(int32_t *)(r15 + (rcx >> 0xe & 0x3fc | 0x400));
rsi = rsi + *(int32_t *)(r15 + (rcx >> 0x18) * 0x4);
rsi = rsi ^ *(int32_t *)(r15 + (HIBYTE(rcx) & 0xff) * 0x4 + 0x800);
rsi = rsi + *(int32_t *)(r15 + (rcx & 0xff) * 0x4 + 0xc00);
rdx = rdx ^ *(int32_t *)(r10 + 0x2c);
rdx = rdx ^ rsi;
rsi = *(int32_t *)(r15 + (rdx >> 0xe & 0x3fc | 0x400));
rsi = rsi + *(int32_t *)(r15 + (rdx >> 0x18) * 0x4);
rsi = rsi ^ *(int32_t *)(r15 + (HIBYTE(rdx) & 0xff) * 0x4 + 0x800);
rsi = rsi + *(int32_t *)(r15 + (rdx & 0xff) * 0x4 + 0xc00);
rcx = rcx ^ *(int32_t *)(r10 + 0x30);
rcx = rcx ^ rsi;
rsi = *(int32_t *)(r15 + (rcx >> 0xe & 0x3fc | 0x400));
rsi = rsi + *(int32_t *)(r15 + (rcx >> 0x18) * 0x4);
rsi = rsi ^ *(int32_t *)(r15 + (HIBYTE(rcx) & 0xff) * 0x4 + 0x800);
rsi = rsi + *(int32_t *)(r15 + (rcx & 0xff) * 0x4 + 0xc00);
rdx = rdx ^ *(int32_t *)(r10 + 0x34);
rdx = rdx ^ rsi;
rsi = *(int32_t *)(r15 + (rdx >> 0xe & 0x3fc | 0x400));
rsi = rsi + *(int32_t *)(r15 + (rdx >> 0x18) * 0x4);
rsi = rsi ^ *(int32_t *)(r15 + (HIBYTE(rdx) & 0xff) * 0x4 + 0x800);
rsi = rsi + *(int32_t *)(r15 + (rdx & 0xff) * 0x4 + 0xc00);
rcx = rcx ^ *(int32_t *)(r10 + 0x38);
rcx = rcx ^ rsi;
rsi = *(int32_t *)(r15 + (rcx >> 0xe & 0x3fc | 0x400));
rsi = rsi + *(int32_t *)(r15 + (rcx >> 0x18) * 0x4);
rsi = rsi ^ *(int32_t *)(r15 + (HIBYTE(rcx) & 0xff) * 0x4 + 0x800);
rsi = rsi + *(int32_t *)(r15 + (rcx & 0xff) * 0x4 + 0xc00);
rdx = rdx ^ *(int32_t *)(r10 + 0x3c);
rbx = rcx ^ *(int32_t *)(r10 + 0x40) ^ (*(int32_t *)(r15 + ((rdx ^ rsi) >> 0xe & 0x3fc | 0x400)) + *(int32_t *)(r15 + ((rdx ^ rsi) >> 0x18) * 0x4) ^ *(int32_t *)(r15 + (HIBYTE(rdx ^ rsi) & 0xff) * 0x4 + 0x800)) + *(int32_t *)(r15 + ((rdx ^ rsi) & 0xff) * 0x4 + 0xc00);
rcx = rdx ^ rsi ^ *(int32_t *)(r10 + 0x44);
This is what the Xojo code looks like with constants and variables typed as UInt32:
temp = xl
xl = xr xor myPPtr.UInt32( 0 )
xr = temp
xr = xr xor ( ( ( ( ( mySPtr.UInt32( ( xl \\ kShift3 ) * CType( 4, UInt32 ) ) + _
mySPtr.UInt32( ( ( xl \\ kShift2 ) and kMask3 ) * CType( 4, UInt32 ) + CType( 1024, UInt32 ) ) ) xor _
mySPtr.UInt32( ( ( xl \\ kShift1 ) and kMask3 ) * CType( 4, UInt32 ) + CType( 2048, UInt32 ) ) ) + _
mySPtr.UInt32( ( xl and kMask3 ) * CType( 4, UInt32 ) + CType( 3072, UInt32 ) ) ) ) xor _
myPPtr.UInt32( 1 * 4 ) )
xl = xl xor ( ( ( ( ( mySPtr.UInt32( ( xr \\ kShift3 ) * CType( 4, UInt32 ) ) + _
mySPtr.UInt32( ( ( xr \\ kShift2 ) and kMask3 ) * CType( 4, UInt32 ) + CType( 1024, UInt32 ) ) ) xor _
mySPtr.UInt32( ( ( xr \\ kShift1 ) and kMask3 ) * CType( 4, UInt32 ) + CType( 2048, UInt32 ) ) ) + _
mySPtr.UInt32( ( xr and kMask3 ) * CType( 4, UInt32 ) + CType( 3072, UInt32 ) ) ) ) xor _
myPPtr.UInt32( 2 * 4 ) )
xr = xr xor ( ( ( ( ( mySPtr.UInt32( ( xl \\ kShift3 ) * CType( 4, UInt32 ) ) + _
mySPtr.UInt32( ( ( xl \\ kShift2 ) and kMask3 ) * CType( 4, UInt32 ) + CType( 1024, UInt32 ) ) ) xor _
mySPtr.UInt32( ( ( xl \\ kShift1 ) and kMask3 ) * CType( 4, UInt32 ) + CType( 2048, UInt32 ) ) ) + _
mySPtr.UInt32( ( xl and kMask3 ) * CType( 4, UInt32 ) + CType( 3072, UInt32 ) ) ) ) xor _
myPPtr.UInt32( 3 * 4 ) )
xl = xl xor ( ( ( ( ( mySPtr.UInt32( ( xr \\ kShift3 ) * CType( 4, UInt32 ) ) + _
mySPtr.UInt32( ( ( xr \\ kShift2 ) and kMask3 ) * CType( 4, UInt32 ) + CType( 1024, UInt32 ) ) ) xor _
mySPtr.UInt32( ( ( xr \\ kShift1 ) and kMask3 ) * CType( 4, UInt32 ) + CType( 2048, UInt32 ) ) ) + _
mySPtr.UInt32( ( xr and kMask3 ) * CType( 4, UInt32 ) + CType( 3072, UInt32 ) ) ) ) xor _
myPPtr.UInt32( 4 * 4 ) )
xr = xr xor ( ( ( ( ( mySPtr.UInt32( ( xl \\ kShift3 ) * CType( 4, UInt32 ) ) + _
mySPtr.UInt32( ( ( xl \\ kShift2 ) and kMask3 ) * CType( 4, UInt32 ) + CType( 1024, UInt32 ) ) ) xor _
mySPtr.UInt32( ( ( xl \\ kShift1 ) and kMask3 ) * CType( 4, UInt32 ) + CType( 2048, UInt32 ) ) ) + _
mySPtr.UInt32( ( xl and kMask3 ) * CType( 4, UInt32 ) + CType( 3072, UInt32 ) ) ) ) xor _
myPPtr.UInt32( 5 * 4 ) )
xl = xl xor ( ( ( ( ( mySPtr.UInt32( ( xr \\ kShift3 ) * CType( 4, UInt32 ) ) + _
mySPtr.UInt32( ( ( xr \\ kShift2 ) and kMask3 ) * CType( 4, UInt32 ) + CType( 1024, UInt32 ) ) ) xor _
mySPtr.UInt32( ( ( xr \\ kShift1 ) and kMask3 ) * CType( 4, UInt32 ) + CType( 2048, UInt32 ) ) ) + _
mySPtr.UInt32( ( xr and kMask3 ) * CType( 4, UInt32 ) + CType( 3072, UInt32 ) ) ) ) xor _
myPPtr.UInt32( 6 * 4 ) )
xr = xr xor ( ( ( ( ( mySPtr.UInt32( ( xl \\ kShift3 ) * CType( 4, UInt32 ) ) + _
mySPtr.UInt32( ( ( xl \\ kShift2 ) and kMask3 ) * CType( 4, UInt32 ) + CType( 1024, UInt32 ) ) ) xor _
mySPtr.UInt32( ( ( xl \\ kShift1 ) and kMask3 ) * CType( 4, UInt32 ) + CType( 2048, UInt32 ) ) ) + _
mySPtr.UInt32( ( xl and kMask3 ) * CType( 4, UInt32 ) + CType( 3072, UInt32 ) ) ) ) xor _
myPPtr.UInt32( 7 * 4 ) )
xl = xl xor ( ( ( ( ( mySPtr.UInt32( ( xr \\ kShift3 ) * CType( 4, UInt32 ) ) + _
mySPtr.UInt32( ( ( xr \\ kShift2 ) and kMask3 ) * CType( 4, UInt32 ) + CType( 1024, UInt32 ) ) ) xor _
mySPtr.UInt32( ( ( xr \\ kShift1 ) and kMask3 ) * CType( 4, UInt32 ) + CType( 2048, UInt32 ) ) ) + _
mySPtr.UInt32( ( xr and kMask3 ) * CType( 4, UInt32 ) + CType( 3072, UInt32 ) ) ) ) xor _
myPPtr.UInt32( 8 * 4 ) )
xr = xr xor ( ( ( ( ( mySPtr.UInt32( ( xl \\ kShift3 ) * CType( 4, UInt32 ) ) + _
mySPtr.UInt32( ( ( xl \\ kShift2 ) and kMask3 ) * CType( 4, UInt32 ) + CType( 1024, UInt32 ) ) ) xor _
mySPtr.UInt32( ( ( xl \\ kShift1 ) and kMask3 ) * CType( 4, UInt32 ) + CType( 2048, UInt32 ) ) ) + _
mySPtr.UInt32( ( xl and kMask3 ) * CType( 4, UInt32 ) + CType( 3072, UInt32 ) ) ) ) xor _
myPPtr.UInt32( 9 * 4 ) )
xl = xl xor ( ( ( ( ( mySPtr.UInt32( ( xr \\ kShift3 ) * CType( 4, UInt32 ) ) + _
mySPtr.UInt32( ( ( xr \\ kShift2 ) and kMask3 ) * CType( 4, UInt32 ) + CType( 1024, UInt32 ) ) ) xor _
mySPtr.UInt32( ( ( xr \\ kShift1 ) and kMask3 ) * CType( 4, UInt32 ) + CType( 2048, UInt32 ) ) ) + _
mySPtr.UInt32( ( xr and kMask3 ) * CType( 4, UInt32 ) + CType( 3072, UInt32 ) ) ) ) xor _
myPPtr.UInt32( 10 * 4 ) )
xr = xr xor ( ( ( ( ( mySPtr.UInt32( ( xl \\ kShift3 ) * CType( 4, UInt32 ) ) + _
mySPtr.UInt32( ( ( xl \\ kShift2 ) and kMask3 ) * CType( 4, UInt32 ) + CType( 1024, UInt32 ) ) ) xor _
mySPtr.UInt32( ( ( xl \\ kShift1 ) and kMask3 ) * CType( 4, UInt32 ) + CType( 2048, UInt32 ) ) ) + _
mySPtr.UInt32( ( xl and kMask3 ) * CType( 4, UInt32 ) + CType( 3072, UInt32 ) ) ) ) xor _
myPPtr.UInt32( 11 * 4 ) )
xl = xl xor ( ( ( ( ( mySPtr.UInt32( ( xr \\ kShift3 ) * CType( 4, UInt32 ) ) + _
mySPtr.UInt32( ( ( xr \\ kShift2 ) and kMask3 ) * CType( 4, UInt32 ) + CType( 1024, UInt32 ) ) ) xor _
mySPtr.UInt32( ( ( xr \\ kShift1 ) and kMask3 ) * CType( 4, UInt32 ) + CType( 2048, UInt32 ) ) ) + _
mySPtr.UInt32( ( xr and kMask3 ) * CType( 4, UInt32 ) + CType( 3072, UInt32 ) ) ) ) xor _
myPPtr.UInt32( 12 * 4 ) )
xr = xr xor ( ( ( ( ( mySPtr.UInt32( ( xl \\ kShift3 ) * CType( 4, UInt32 ) ) + _
mySPtr.UInt32( ( ( xl \\ kShift2 ) and kMask3 ) * CType( 4, UInt32 ) + CType( 1024, UInt32 ) ) ) xor _
mySPtr.UInt32( ( ( xl \\ kShift1 ) and kMask3 ) * CType( 4, UInt32 ) + CType( 2048, UInt32 ) ) ) + _
mySPtr.UInt32( ( xl and kMask3 ) * CType( 4, UInt32 ) + CType( 3072, UInt32 ) ) ) ) xor _
myPPtr.UInt32( 13 * 4 ) )
xl = xl xor ( ( ( ( ( mySPtr.UInt32( ( xr \\ kShift3 ) * CType( 4, UInt32 ) ) + _
mySPtr.UInt32( ( ( xr \\ kShift2 ) and kMask3 ) * CType( 4, UInt32 ) + CType( 1024, UInt32 ) ) ) xor _
mySPtr.UInt32( ( ( xr \\ kShift1 ) and kMask3 ) * CType( 4, UInt32 ) + CType( 2048, UInt32 ) ) ) + _
mySPtr.UInt32( ( xr and kMask3 ) * CType( 4, UInt32 ) + CType( 3072, UInt32 ) ) ) ) xor _
myPPtr.UInt32( 14 * 4 ) )
xr = xr xor ( ( ( ( ( mySPtr.UInt32( ( xl \\ kShift3 ) * CType( 4, UInt32 ) ) + _
mySPtr.UInt32( ( ( xl \\ kShift2 ) and kMask3 ) * CType( 4, UInt32 ) + CType( 1024, UInt32 ) ) ) xor _
mySPtr.UInt32( ( ( xl \\ kShift1 ) and kMask3 ) * CType( 4, UInt32 ) + CType( 2048, UInt32 ) ) ) + _
mySPtr.UInt32( ( xl and kMask3 ) * CType( 4, UInt32 ) + CType( 3072, UInt32 ) ) ) ) xor _
myPPtr.UInt32( 15 * 4 ) )
xl = xl xor ( ( ( ( ( mySPtr.UInt32( ( xr \\ kShift3 ) * CType( 4, UInt32 ) ) + _
mySPtr.UInt32( ( ( xr \\ kShift2 ) and kMask3 ) * CType( 4, UInt32 ) + CType( 1024, UInt32 ) ) ) xor _
mySPtr.UInt32( ( ( xr \\ kShift1 ) and kMask3 ) * CType( 4, UInt32 ) + CType( 2048, UInt32 ) ) ) + _
mySPtr.UInt32( ( xr and kMask3 ) * CType( 4, UInt32 ) + CType( 3072, UInt32 ) ) ) ) xor _
myPPtr.UInt32( 16 * 4 ) )
xr = xr xor myPPtr.UInt32( 17 * 4 )
I wonder if all the switching from UInt32 to Integer for the indexes is playing into this…
I think I’m going to have to bite the bullet and write a second 64-bit version of the code that uses UInt64 and Integer rather than UInt32. I’m just afraid I’ll do all that work and it won’t make a difference.