Перед тем как оптимизировать на асме, разберитесь сначала с оптимизацией ни СИ. Во-первых, при оптимизации на асме можно сделать очепятку, которую потом будете долго и упорно искать. Во-вторых, оптимизация на Си выполняется гораздо быстрее. В-третьих, при хорошо изученном поведении своего компилятора, отимизированный код на Си будет всего на 5...15% больше своего собрата на асме, зато скока сэкономленого времени?!
И если только оптимизация на Си не помогает, то необходимо залезать в ассемблер.
Но и при ассемблерной оптимизации есть куча подводных камней.
Примеры:
1. Использование указателей вместо индексации массивов
Код
int8_t * val = &Values[0]; // в не тела цикла
..................................
// в цикле:
FsummRe[FLookignForFreq] += (int32_t) (*val) * cosVal;
FsummIm[FLookignForFreq] += (int32_t) (*val) * sinVal;
..................................
val++;
Это сокращает код на одно вычисление адреса Values[CurVal]. FsummIm и FsummRe, FsinTable и FcosTable также можно привести к использованию указателей
2. Оптимизация циклов.
Цикл i=N;do{.....}while(i--); в большинстве случаев более оптимизировано компилируется, чем цикл for(i = 0; i < N; i++){........};
3. При целочисленной арифметике, деление заменяется на умножение и сдвиг.
4. Объявление наиболее используемых локальных переменных как register (не вовсех компиляторах)
5. и т.д. и т.п..........................