Как выровнять C для петли тела с GCC?

В нашей встроенной архитектуре мы имеем 64-битный IAB (буфер выравнивания инструкций). Для оптимизации последовательности выборки требуется, чтобы тело цикла начинало выравниваться по 8-байтовой границе.

Это легко сделать при сборке, используя.balign директива, но я не могу найти синтаксис, который будет подсказывать компилятору C для выравнивания кода.

Попытка предшествовать циклу for со встроенной сборкой с помощью.balign Директива не работает, так как она выравнивает пролог цикла for (setup), а не тело цикла.

Делать то же самое, гдеasm() линия находится внутри цикла, добавляетnop-с телом цикла, которое стоит драгоценных циклов.

РЕДАКТИРОВАТЬ 1: принять код:

    __asm__ volatile("nop");  
    __asm__ volatile("nop");  

    for (j0=0; j0<N; j0+=4)
    {
        c[j0+ 0] = a[j0+ 0] + b[j0+ 0];
        c[j0+ 1] = a[j0+ 1] + b[j0+ 1];
        c[j0+ 2] = a[j0+ 2] + b[j0+ 2];
        c[j0+ 3] = a[j0+ 3] + b[j0+ 3];
    }

Я хочу первыйc=a+b быть выровненным по 8-байтовому адресу. Я могу добавитьnop-показано выше после предварительной компиляции, но это специальное решение, которое сломается с первым изменением кода.

РЕДАКТИРОВАТЬ 2: Благодаря @R .., решение заключается в использовании-falign-loops=8 опция компилятора.

Ответы на вопрос(1)

Ваш ответ на вопрос