Текущий архив: 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.45 MB
Время: 0.008 c