· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› StdCall или Pascal

<< . 1 . 2 .

Посл.отвђт Сообщенiе


Дата: Ноя 13, 2003 02:55:27

volodya
С выходом в массы Athlon64 откроется такое поле для оптимизации! :) А уж про выравнивание и копирование данных я и не говорю... Единственная неприятность - с названиями R9, R15 путаться чаще будешь, видимо, придеться через EQU псевдонимы нормальные делать.


Дата: Ноя 13, 2003 14:53:25

Если говорить о передаче параметров в регистрах...
К примеру в стек не обязательно каждый раз засовывать адрес возврата, если вызывается маленькая подпрограмма в цикле - это даст небольшой выигрыш в скорости.
К тому же если EBP не исполизуется для доступа к данным в стеке.

Например есть такой странный цикл:
DrawStringRep:	mov	EBX, CharClass.Execute[EAX]
			and	EBX, NOT BDO_NONACTIVE	;reset flag to get real address
			mov	EDI, [ESP]	;  CharString Object
			call	EBX 
			jnc	DrawStringRep  ; loop until CARRY is set


Его можно заменить на другой, абсурдный:
			push	@F
DrawStringRep:	mov	EBX, CharClass.Execute[EAX]
			and	EBX, NOT BDO_NONACTIVE	;reset flag to get real address
			mov	EDI, [ESP+DWORD]	;  CharString Object
			jmp	EBX  ; for example Char_Draw
@@:			jnc	DrawStringRep
			pop	ebx		; restore stack
.....
qret	macro	; quick return, don't clear stack
     jmp DWORD PTR [ESP]
endm

Char_Draw	proc
....
Char_Draw_Exit:	qret
Char_Draw	endp	


Выгода небольшая, но все же есть :)


Дата: Ноя 13, 2003 19:12:16

Если говорить о передаче параметров в регистрах...
К примеру в стек не обязательно каждый раз засовывать адрес возврата, если вызывается маленькая подпрограмма в цикле - это даст небольшой выигрыш в скорости.
К тому же если EBP не исполизуется для доступа к данным в стеке.



НЕ ФАКТ!!! Посмотри Агнера Фога....
Во первых косвенные переходы даются тежелее чем обычные, а потом процессор хранит историю вызовов функций.

Так что тут ещё тот ворпос


Дата: Ноя 13, 2003 20:14:58

косвенные переходы даются тежелее чем обычные
У меня и там и там косвенные. Да и Ret - тоже, по-моему.

Основная идея в том, что Call и Ret - не спаривается (по крайней мере на Athlon)
А JMP - при хорошем раскладе - да.

а потом процессор хранит историю вызовов функций
Ну и пусть хранит, не бесконечная же она :)

Экономия, конечно мизерная и далеко не во всех случаях. Но я ее в CodeAnalist видел.
Все-таки RISC ядро иногда перевешивает свою CISC оптимизацию :)

Так что тут ещё тот ворпос
Конечно вопрос! Не совсем удачный пример у меня, но где-то можно и выиграть.

<< . 1 . 2 .


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.114