Целочисленное деление с Cortex-M0 под RVDS

Я пытаюсь разделить 64-битный интегральный тип на 32-битный и использую RVDS 4.1 в качестве цепочки инструментов.

Cortex-M0 не имеет аппаратного делителя, могу ли я выполнить описанную ниже операцию? Если да, то как?

unsigned long int b = 2590202;
unsigned long long int a = 953502716552001ULL;
unsigned long long int result;
result = a/b;

person albin    schedule 02.07.2012    source источник


Ответы (1)


Компилятор скомпилирует операцию деления как вызов библиотечной подпрограммы, выполняющей программный 64-битный алгоритм деления. Возможно, вам также придется указать компилятору связать с математической библиотекой, у меня нет опыта работы с RVDS.

Почему бы не попробовать скомпилировать код самостоятельно и посмотреть, что получится? Попробуйте разобрать получившийся машинный код, чтобы увидеть, как он работает: это должно быть очень поучительно.

person Colin D Bennett    schedule 06.12.2012
comment
RVDS выполняет эту операцию на Cortex-M0, используя встроенные библиотечные функции, например. __aeabi_uldivmod. Я лукавил, потом увидел ответвление этой функции для выполнения оператора деления. - person albin; 08.12.2012