Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Математика в CORTEX на GCC
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Tanker
Здравствуйте!
по скольку стандартных средств языка Си для подобных действий нет, прошу научить или подсказать, как на GCC под CORTEX написать следующй код:
1) нужно сложить целые числа: 32bit + 16bit и проконтролировать переполнение при сложении
2) нужно умножить целые числа: 32bit х 16bit и проконтролировать переполнение при умножении

в описании инструкций Cortex такие штуки есть и довольно эффекивные на первый взляд, как их в GCC интегрировать?

С уважением.
zltigo
На выбор:
1. 64 бита
2. Ассемблер
Diz
Inline assembler, обернутый в inline-функцию.

Например, для ARM7 сложение с ограничением:
Код
static inline long sat_add( long Mac, long Add)
{
    long Out;
    __asm__(
            "   adds  %0, %1, %2"              "\n\t"
            "   movvs %0, %0, asr #31 "     "\n\t"  // Move 0 or ~0
            "   eorvs %0, %0, #(1 << 31)"   "\n\t"  // Craft 0x7FFFFFFF or 0x80000000
            :  "=r" (Out)
            :  "r" (Mac), "r"(Add)
            :  "cc"
        );
    return Out;
}
Tanker
Цитата(Diz @ Sep 19 2009, 17:18) *
Inline assembler, обернутый в inline-функцию.
Например, для ARM7 сложение с ограничением:

Круто!!!
я использовал long long ибо не шарю в as для арма
строку типа e.Q += d; (к 64бит(QWORD) прибавить 16бит) компилер разворачивает в 10 срок кода при -О3 явно действуя не оптимально.
Что выкурить чтобы так же програмить в инлайн асм функциях?
на вскидку - не понял передачу параметров и возврат результата

С уважением!
Я когда-то много програмил на FreePascal для x86, там тоже была возможность кодить именно в таком (как Вы продемонстрировали) стиле инлайны на асме (в доке было написано что это типа кроссплатформенный асм) но я это дело манал, указывал $asmmode intel и фигачил в привычном стиле, вот и не научился... а щас под арм пишу всякие фильтры с математикой на фиксированной точке, значит буду асм осваивать дабы перфоманс получить.
AHTOXA
Цитата(Tanker @ Sep 19 2009, 22:13) *
Что выкурить чтобы так же програмить в инлайн асм функциях?


http://www.ethernut.de/en/documents/arm-inline-asm.html
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.