реклама на сайте
подробности

 
 
> Математика в CORTEX на GCC, Длинные сложения и умножения
Tanker
сообщение Sep 19 2009, 13:46
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 30-06-07
Пользователь №: 28 806



Здравствуйте!
по скольку стандартных средств языка Си для подобных действий нет, прошу научить или подсказать, как на GCC под CORTEX написать следующй код:
1) нужно сложить целые числа: 32bit + 16bit и проконтролировать переполнение при сложении
2) нужно умножить целые числа: 32bit х 16bit и проконтролировать переполнение при умножении

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

С уважением.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Diz
сообщение Sep 19 2009, 14:18
Сообщение #2


Частый гость
**

Группа: Участник
Сообщений: 84
Регистрация: 1-08-06
Пользователь №: 19 250



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;
}
Go to the top of the page
 
+Quote Post
Tanker
сообщение Sep 19 2009, 16:13
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 30-06-07
Пользователь №: 28 806



Цитата(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 и фигачил в привычном стиле, вот и не научился... а щас под арм пишу всякие фильтры с математикой на фиксированной точке, значит буду асм осваивать дабы перфоманс получить.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 15:35
Рейтинг@Mail.ru


Страница сгенерированна за 0.01376 секунд с 7
ELECTRONIX ©2004-2016