Главная страница
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.022 c
14-5724
Cr@sh
2003-02-14 09:42
2003.03.03
С Днем Святого Валентина!


1-5582
orion_st
2003-02-19 11:08
2003.03.03
Сверху всех.


1-5636
Ozone
2003-02-20 13:35
2003.03.03
Компоненты RUN-TIME


1-5639
Zn
2003-02-20 10:57
2003.03.03
Подскажите алгоритм обработки текстового файла.


1-5645
Volly
2003-02-19 17:33
2003.03.03
Экспорт из RTF в HTML