Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.03.03;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.011 c
14-5738
New
2003-02-15 09:32
2003.03.03
Проблема с определением логина


14-5863
Nox
2003-02-14 14:17
2003.03.03
Proxy


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


7-5901
Disraptor
2003-01-02 19:30
2003.03.03
Народ подскажите как записать в реестрее двоичное значение...


6-5705
Spy X
2003-01-12 11:38
2003.03.03
Связь по модему.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский