|
|
| Посл.отвђт | Сообщен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 оптимизацию :) Так что тут ещё тот ворпос Конечно вопрос! Не совсем удачный пример у меня, но где-то можно и выиграть. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.114 |