Главный форум Велоклуба 3х9


[ На главную ] [ Последний список сообщений ] [ Вики ]

Сообщение да, б#$#% [Изменено админом] от rumata было добавлено 23/01/2006 16:47:18

inline double g(int x, int y,param inpar,int n)
{
double a0,a1,a3,res;
a0=x+y;
a1=a2(inpar,n);
a3=exp(-a1/a0);
res=(inpar.vi_const+n*inpar.vi_coeff)*(1-pow(1-a3,x));
return res;
}

дизасемблирование без оптимизатора:

inline double g(int x, int y,param inpar,int n)
{
00412F10 55 push ebp
00412F11 8B EC mov ebp,esp
00412F13 81 EC 08 01 00 00 sub esp,108h
00412F19 53 push ebx
00412F1A 56 push esi
00412F1B 57 push edi
00412F1C 8D BD F8 FE FF FF lea edi,[ebp-108h]
00412F22 B9 42 00 00 00 mov ecx,42h
00412F27 B8 CC CC CC CC mov eax,0CCCCCCCCh
00412F2C F3 AB rep stos dword ptr [edi]
double a0,a1,a3,res;
a0=x+y;
00412F2E 8B 45 08 mov eax,dword ptr [x]
00412F31 03 45 0C add eax,dword ptr [y]
00412F34 89 85 FC FE FF FF mov dword ptr [ebp-104h],eax
00412F3A DB 85 FC FE FF FF fild dword ptr [ebp-104h]
00412F40 DD 5D F4 fstp qword ptr [a0]
a1=a2(inpar,n);
00412F43 8B 85 90 00 00 00 mov eax,dword ptr [n]
00412F49 50 push eax
00412F4A 81 EC 80 00 00 00 sub esp,80h
00412F50 B9 20 00 00 00 mov ecx,20h
00412F55 8D 75 10 lea esi,[inpar]
00412F58 8B FC mov edi,esp
00412F5A F3 A5 rep movs dword ptr [edi],dword ptr [esi]
00412F5C E8 54 EF FF FF call a2 (411EB5h)
00412F61 81 C4 84 00 00 00 add esp,84h
00412F67 DD 5D E4 fstp qword ptr [a1]

a3=exp(-a1/a0);
00412F6A DD 45 E4 fld qword ptr [a1]
00412F6D D9 E0 fchs
00412F6F DC 75 F4 fdiv qword ptr [a0]
00412F72 83 EC 08 sub esp,8
00412F75 DD 1C 24 fstp qword ptr [esp]
00412F78 E8 A6 EA FF FF call @ILT+2590(_exp) (411A23h)
00412F7D 83 C4 08 add esp,8
00412F80 DD 5D D4 fstp qword ptr [a3]
res=(inpar.vi_const+n*inpar.vi_coeff)*(1-pow(1-a3,x));
00412F83 DB 85 90 00 00 00 fild dword ptr [n]
00412F89 DC 4D 38 fmul qword ptr [ebp+38h]
00412F8C DC 45 30 fadd qword ptr [ebp+30h]
00412F8F DD 9D F8 FE FF FF fstp qword ptr [ebp-108h]
00412F95 8B 45 08 mov eax,dword ptr [x]
00412F98 50 push eax
00412F99 DD 05 B8 91 42 00 fld qword ptr [__real@3ff0000000000000 (4291B8h)]
00412F9F DC 65 D4 fsub qword ptr [a3]
00412FA2 83 EC 08 sub esp,8
00412FA5 DD 1C 24 fstp qword ptr [esp]
00412FA8 E8 F9 EE FF FF call pow (411EA6h)
00412FAD 83 C4 0C add esp,0Ch
00412FB0 DC 2D B8 91 42 00 fsubr qword ptr [__real@3ff0000000000000 (4291B8h)]
00412FB6 DC 8D F8 FE FF FF fmul qword ptr [ebp-108h]
00412FBC DD 5D C4 fstp qword ptr [res]
return res;
00412FBF DD 45 C4 fld qword ptr [res]
}
00412FC2 5F pop edi
00412FC3 5E pop esi
00412FC4 5B pop ebx
00412FC5 81 C4 08 01 00 00 add esp,108h
00412FCB 3B EC cmp ebp,esp
00412FCD E8 D3 EA FF FF call @ILT+2720(__RTC_CheckEsp) (411AA5h)
00412FD2 8B E5 mov esp,ebp
00412FD4 5D pop ebp
00412FD5 C3 ret

Всё более ли менее ясно.

А теперь с оптимизатором:

inline double g(int x, int y,param inpar,int n)
{
double a0,a1,a3,res;
a0=x+y;
a1=a2(inpar,n);
004012C0 8B 84 24 8C 00 00 00 mov eax,dword ptr [esp+8Ch]
004012C7 53 push ebx


a3=exp(-a1/a0);
res=(inpar.vi_const+n*inpar.vi_coeff)*(1-pow(1-a3,x));
004012C8 8B 5C 24 08 mov ebx,dword ptr [esp+8]
004012CC 56 push esi
004012CD 57 push edi
004012CE 53 push ebx
004012CF 50 push eax
004012D0 81 EC 80 00 00 00 sub esp,80h
004012D6 B9 20 00 00 00 mov ecx,20h
004012DB 8D B4 24 A0 00 00 00 lea esi,[esp+0A0h]
004012E2 8B FC mov edi,esp
004012E4 F3 A5 rep movs dword ptr [edi],dword ptr [esi]
004012E6 E8 15 FD FF FF call a2 (401000h)
004012EB 8B 8C 24 9C 00 00 00 mov ecx,dword ptr [esp+9Ch]
004012F2 03 D9 add ebx,ecx
return res;
004012F4 89 9C 24 98 00 00 00 mov dword ptr [esp+98h],ebx
004012FB DB 84 24 98 00 00 00 fild dword ptr [esp+98h]
00401302 83 C4 7C add esp,7Ch
00401305 DC 3D F8 43 40 00 fdivr qword ptr [__real@bff0000000000000 (4043F8h)]
0040130B DE C9 fmulp st(1),st
0040130D D9 EA fldl2e
0040130F DE C9 fmulp st(1),st
00401311 D9 C0 fld st(0)
00401313 D9 FC frndint
00401315 D9 C9 fxch st(1)
00401317 D8 E1 fsub st,st(1)
00401319 D9 F0 f2xm1
0040131B D9 E8 fld1
0040131D DE C1 faddp st(1),st
0040131F D9 FD fscale
00401321 DD D9 fstp st(1)
00401323 DC 2D F0 43 40 00 fsubr qword ptr [__real@3ff0000000000000 (4043F0h)]
00401329 DD 1C 24 fstp qword ptr [esp]
0040132C E8 4F FF FF FF call _Pow_int<double> (401280h)
00401331 DC 2D F0 43 40 00 fsubr qword ptr [__real@3ff0000000000000 (4043F0h)]
00401337 DB 84 24 A4 00 00 00 fild dword ptr [esp+0A4h]
0040133E 83 C4 0C add esp,0Ch
}
00401341 5F pop edi
00401342 DC 4C 24 3C fmul qword ptr [esp+3Ch]
00401346 5E pop esi
00401347 5B pop ebx
00401348 DC 44 24 2C fadd qword ptr [esp+2Ch]
0040134C DE C9 fmulp st(1),st
0040134E C3 ret

Я хрен чо понял. Где он экспоненту находит? Я так на асме не написал бы(Я, правда, ещё в плавающей точке на асме очень "плаваю").
Вот сидишь и думаешь, что ты там что то оптимизировать пытаешся, сделать покрасивше, а оптимизатор всё равно умнее тебя, как не крути!
А бывают мужики, которые 1 байт всовввают и сами себе оптимизатор...

Статью давно читал на васм.ру.




Обратная связь с админом - про глюки писать сюда   правила форума   FAQ по форумам