-
cyborg © (14.06.05 12:13) [0]Версия компилятора 2.0 почему-то ни одна функция не инлайнится :(
{$INLINE ON}
Program Test1;
Procedure EMMS; assembler; Inline;
asm
FEMMS;
end;
Function GetCPUTick : int64; assembler; inline;
asm
rdtsc;
end;
Function Num : int64; inline;
begin
Result:=1+2;
end;
VAR
T : Int64;
BEGIN
T := GetCPUTick;
T:=T+2;
T := Num;
EMMS;
ReadLn;
END.
Получается обычный вызов функций:
.globl P$TEST1_EMMS
P$TEST1_EMMS:
# Temps allocated between esp+0 and esp+0
# [6] FEMMS;
femms
ret
.section .text
.balign 4
.balign 4
# [12] end;
.globl P$TEST1_GETCPUTICK$$INT64
P$TEST1_GETCPUTICK$$INT64:
# Temps allocated between esp-8 and esp-8
subl $8,%esp
# Var $result located at esp-8
# [11] rdtsc;
rdtsc
addl $8,%esp
ret
.section .text
.balign 4
.balign 4
# [15] begin
.globl P$TEST1_NUM$$INT64
P$TEST1_NUM$$INT64:
# Temps allocated between ebp-4 and ebp+0
pushl %ebp
movl %esp,%ebp
subl $4,%esp
movl %ebx,-4(%ebp)
# Var $result located in register
# [16] Result:=1+2;
movl $3,%ecx
movl $0,%ebx
# [17] end;
movl %ecx,%eax
movl %ebx,%edx
movl -4(%ebp),%ebx
leave
ret
В чём дело, не поддерживается чтоли, игнорируется? -
cyborg © (14.06.05 14:05) [1]Функция Num вроде инлайнится, в коде сразу значение стоит, а вот ассамблерные функции почему не инлайнятся?
# [23] T := GetCPUTick;
call P$TEST1_GETCPUTICK$$INT64
# Register %ecx released
movl %eax,%esi
# Register %eax released
movl %edx,%ebx -
Иван Шихалев © (15.06.05 20:22) [2]Num вообще оптимизатором съедается... А ассемблерные процедуры/функции пока не инлайнятся. Цитирую из fpc-devel:
Assembler procedures/functions/operators can't be inlined.
For the near future there are no plans to get it working.
It is full of pitfalls. Also Delphi 2005 doesn't allow
inlining of assembler procedures.
------------
Peter Vreman -
thaddy (23.06.05 17:27) [3]But emms is a keyword in FP, so write simply - efficient!- pascal and everything should be OK. I have DSP Audio examples that make you laugh about the poor Delphi ;)
You have to think about your algo's though! This is always far more important than optimizing to assembler. -
cyborg © (24.06.05 06:47) [4][3] thaddy (23.06.05 17:27)
Можно по русски повторить? :)
На emms я всего лишь проверял как работают инлайны.