Re[2]: asm вставки в C++ (mingw) для работы с FPU
От: shvellerr Россия  
Дата: 11.08.12 19:10
Оценка:
Здравствуйте, Erop, Вы писали:

Спасибо всем за советы буду стараться "обозреть все" но постепенно . Хочу поделиться тем что удалось найти про вставки немного но может комуто поможет. Цитирую изразных источникво пока сам в кучу собрать информацию не могу еще не понял


Написание inline asm вставок в gcc
Ассемблерная вставка в с++ код, подобна использованию шаблона с аргументами
asm | __asm__ ("тело шаблона" [: [b]output operands] [: [b]input operands [/b][: [clobber]]]] ]);[/b]тело шаблона это одна или несколько ассемблерных команд

или (из другого источника)
asm("code" : "output" : "input": "registers");

если команды в теле шаблона должны использовать переменные или регистры из c окружения, то в теле шаблона нужно использовать операнды вида %0,%1, ... все операнды должны быть проинициализированы или в output operands или в input operands или и там и там инициализируются они через запятую

Пример: (чужой и мне не очень понятный)

static __inline__ void
powerpmc250_set_bat(void)
{
        unsigned long   bat3u, bat3l;
        static int        mapping_set = 0;

        if (!mapping_set)
        {
                __asm__ __volatile__(
                                " lis %0,0xf000\n \
                                ori %1,%0,0x002a\n \
                                ori %0,%0,0x1ffe\n \
                                mtspr 0x21e,%0\n \
                                mtspr 0x21f,%1\n \
                                isync\n \
                                sync "
                                : "=r" (bat3u), "=r" (bat3l));
                mapping_set = 1;
        }
        return;
}


в этом примере используются два операнда %0 и %1 и их значения должны быть переданы в локальные переменные bat3u и bat3l соответственно.
порядок записи : "=r" (bat3u), "=r" (bat3l) соответствует порядку нумерации операндов
тоесть "=r" (bat3u) соответствует 0 операнду, а "=r" (bat3l) — первому.
з.ы. из за специфической инициализации немогу найти "новый" синтаксис некоторых команд.. (особенно для FPU)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.