Dmitry_Milk
> Проблема остается только с регистрами, когда приходится помнить, что в данный
> момент лежит в регистре.
в Fasm-e было сделано именование (а может не только в Fasm-е). И вместо регистра ставилось имя. А регистры прописывались выше к именам. сейчас может уже сделали чтоб компилятор сам регистры выставлял.
=A=L=X=
> просто начинаешь делать рутинную работу которую автоматически делают
> компиляторы языков высокого уровня, а когда они еще хорошо оптимизированные, то
> даже хуже их.
> А в целом само по себе программирование получается довольно прямолинейное,
> практически классическое
Так не делается. Делаются наработки и их используют в дальнейшем. Смысла постоянно оптимизировать код нет, особенно если пишешь код под разные технологии. Это надо делать прекомпилятор встроенный в программу, тогда этот прекомпилятор будет смотреть что за машина на которой он запустился и компилировать уже код до конца, с нужными оптимизациями (интересно, кто-то этим заморочился?).
Оптимизировать надо, в основном, статические данные. Компилятор этого, зачастую не сделает, а человек такие данные может увидеть и произвести их вычисление до момента их использования. По этой причине ни один компилятор не выиграет у человека на данный момент в оптимизации (если человек умеет в оптимизацию).
А в мелочах - да, маловероятно выиграть у хорошо оптимизирующего компилятора. Но зато у него иногда можно подсмотреть код. )))
Noir
> а комментить каждую инструкцию это x1000 работа.
Ну во первых не в x1000, а максимум раза в два, во вторых каждую прям инструкцию не надо, надо давать ясно понять что они делают. Распавшиеся на отдельные инструкции асма вещи сложно считывать, хотя они могут быть очень простыми типа a = 10 * b + c; - описать это очень просто и потом не надо морщить лоб что там за b << 3 + b << 1 + c в виде асмоинструкций происходят.
=A=L=X=
дело в том, что столько же текста нужно будет написать в хайлвевел языке , и это будет самим кодом.
вот щас заглянул. уже с набегу не могу понять что я тут хотел изобразить))))
команды перетасовки всегда добавляют определенной загадочности такому коду
function TD3DQuaternion.Normalized: TD3DQuaternion; {$IFDEF CPUX64} asm movups xmm0, [Self] // W Z Y X movaps xmm2, xmm0 // Dot(A, A) mulps xmm0, xmm0 // W*W Z*Z Y*Y X*X pshufd xmm1, xmm0, $4E // Y*Y X*X W*W Z*Z addps xmm0, xmm1 // (Y*Y+W*W) (X*X+Z*Z) (Y*Y+W*W) (X*X+Z*Z) pshufd xmm1, xmm0, $11 // (X*X+Z*Z) (Y*Y+W*W) (X*X+Z*Z) (Y*Y+W*W) addps xmm0, xmm1 // (X*X + Y*Y + Z*Z + W*W) (4x) sqrtps xmm0, xmm0 // (1 / Sqrt(X*X + Y*Y + Z*Z + W*W)) (4x) divps xmm2, xmm0 // A * (1 / Sqrt(Dot(A, A))) movups [Result], xmm2 end;
Эй !
Вы тут это, не разгоняйтесь ! :)
А то начнете, все на асме писать :)
Тема в архиве.