Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.03.03;
Скачать: CL | DM;

Вниз

round - VC vs Delphi   Найти похожие ветки 

 
REA ©   (2003-02-21 13:28) [0]

Пробовал скомпилировать код:

pt.X := Round(XOfs + pSData^*XScl) с помощью C++ и Delphi.

(Код примерно одинаковый получается:
mov ecx,dword ptr [ebp-0Ch]
fld dword ptr [ecx]
fmul qword ptr [ebp-28h]
fadd qword ptr [ebp-20h]
call _ftol (00401b36)
mov dword ptr [ebp-18h],eax)

стал трассировать дальше. В Delphi функция round выглядит так:
procedure _ROUND;
asm
{ -> FST(0) Extended argument }
{ <- EDX:EAX Result }

SUB ESP,8
FISTP qword ptr [ESP]
FWAIT
POP EAX
POP EDX
end;

а в VC (наверно) так:

78001BF1 push ebp
78001BF2 mov ebp,esp
78001BF4 add esp,0F4h
78001BF7 wait
78001BF8 fnstcw word ptr [ebp-2]
78001BFB wait
78001BFC mov ax,word ptr [ebp-2]
78001C00 or ah,0Ch
78001C03 mov word ptr [ebp-4],ax
78001C07 fldcw word ptr [ebp-4]
78001C0A fistp qword ptr [ebp-0Ch]
78001C0D fldcw word ptr [ebp-2]
78001C10 mov eax,dword ptr [ebp-0Ch]
78001C13 mov edx,dword ptr [ebp-8]
78001C16 leave
78001C17 ret

получается Delphi оптимальнее VC, у которого int(DoubleValue) должно по идее оптимальнее компилироваться?


 
REA ©   (2003-02-21 13:42) [1]

Полезная статейка по оптимизации FP в Delphi:
http://www.optimalcode.com/float.htm


 
Anatoly Podgoretsky ©   (2003-02-21 13:42) [2]

Ты об оптимальности Делmфи vs C++ vs VC или только про эту функцию. Для других функций какой нибудь другой язык вырвется вперед.


 
REA ©   (2003-02-21 13:52) [3]

Я думал что C скомпилирует inline эту инструкцию, поскольку оптимизация по скорости была поставлена (что-то вроде FISTP qword ptr [ESP]; FWAIT). Однако он вызывает функцию, но я в ассемблере слабоват и не могу сказать, что быстрее, хотя визуально Delphi код короче.
А хочется мне в итоге заполучить код без вызова функции и с нужными FWAIT в нужных местах. Каким бы компилятором это сделать?


 
Anatoly Podgoretsky ©   (2003-02-21 14:00) [4]

Не знаю есть там про FWAIT, но поосторожнее с ним.



Страницы: 1 вся ветка

Текущий архив: 2003.03.03;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.011 c
3-5467
Uran
2003-02-12 10:21
2003.03.03
Выборка по совпадению первых 10ти символов


14-5721
negtym
2003-02-14 22:44
2003.03.03
Как относится к заказу?


6-5706
Sniffer
2003-01-12 18:51
2003.03.03
ServerSocket и ClientSocket


9-5364
Ibrik
2002-09-29 15:20
2003.03.03
DelphiX


9-5372
Ricks
2002-09-22 12:37
2003.03.03
Clipping, или как там