64,634
社区成员
发帖
与我相关
我的任务
分享
int __cdecl FastStringCopy(int a1, int a2, signed int a3)
{
int result;
result = a1 & 2;
if ( a1 & 2 )
{
*(WORD *)a1 = *(WORD *)a2;
a1 += 2;
a2 += 2;
result = a3-- - 1;
}
while ( a3 >= 8 )
{
*(DWORD *)a1 = *(DWORD *)a2;
*(DWORD *)(a1 + 4) = *(DWORD *)(a2 + 4);
*(DWORD *)(a1 + 8) = *(DWORD *)(a2 + 8);
*(DWORD *)(a1 + 12) = *(DWORD *)(a2 + 12);
a1 += 16;
a2 += 16;
result = a3 - 8;
a3 -= 8;
}
if ( a3 & 4 )
{
*(DWORD *)a1 = *(DWORD *)a2;
*(DWORD *)(a1 + 4) = *(DWORD *)(a2 + 4);
a1 += 8;
result = a2 + 8;
a2 += 8;
}
if ( a3 & 2 )
{
*(DWORD *)a1 = *(DWORD *)a2;
a1 += 4;
result = a2 + 4;
a2 += 4;
}
if ( a3 & 1 )
{
result = a2;
*(WORD *)a1 = *(WORD *)a2;
}
return result;
}
TCHAR P[] = T("testcopy");
FastStringCopy((int)P, (int)(P+4), 4);
int __cdecl FastStringCopy(int a1, int a2, unsigned int a3)
{
int result;
int v4;
unsigned int v5;
unsigned int v6;
result = a1;
v4 = a2;
if ( a1 & 2 )
{
*(WORD *)a1 = *(WORD *)a2;
result = a1 + 2;
v4 = a2 + 2;
v5 = a3 - 1;
}
else
{
v5 = a3;
}
if ( (signed int)v5 >= 8 )
{
v6 = v5 >> 3;
v5 += -8 * (v5 >> 3);
do
{
*(DWORD *)result = *(DWORD *)v4;
*(DWORD *)(result + 4) = *(DWORD *)(v4 + 4);
*(DWORD *)(result + 8) = *(DWORD *)(v4 + 8);
*(DWORD *)(result + 12) = *(DWORD *)(v4 + 12);
result += 16;
v4 += 16;
--v6;
}
while ( v6 );
}
if ( v5 & 4 )
{
*(DWORD *)result = *(DWORD *)v4;
*(DWORD *)(result + 4) = *(DWORD *)(v4 + 4);
result += 8;
v4 += 8;
}
if ( v5 & 2 )
{
*(DWORD *)result = *(DWORD *)v4;
result += 4;
v4 += 4;
}
if ( v5 & 1 )
*(WORD *)result = *(WORD *)v4;
return result;
}