Получить GCC использовать Carry Logic для произвольной точности арифметики без встроенной сборки?

При работе с арифметикой произвольной точности (например, 512-битные целые числа), есть ли способ заставить GCC использовать АЦП и подобные инструкции без использования встроенной сборки?

Первый взгляд на GMPИсходный код s показывает, что они просто имеют реализации сборки для каждой поддерживаемой платформы.

Вот тестовый код, который я написал, который добавляет два 128-битных числа из командной строки и печатает результат. (Вдохновленный мини-gmp 's add_n):

#include 
#include 
#include 

int main (int argc, char **argv)
{
    uint32_t a[4];
    uint32_t b[4];
    uint32_t c[4];
    uint32_t carry = 0;

    for (int i = 0; i < 4; ++i)
    {
        a[i] = strtoul (argv[i+1], NULL, 16);
        b[i] = strtoul (argv[i+5], NULL, 16);
    }

    for (int i = 0; i < 4; ++i)
    {
        uint32_t aa = a[i];
        uint32_t bb = b[i];
        uint32_t r = aa + carry;
        carry = (r < carry);
        r += bb;
        carry += (r < bb);
        c[i] = r;
    }

    printf ("%08X%08X%08X%08X + %08X%08X%08X%08X =\n", a[3], a[2], a[1], a[0], b[3], b[2], b[1], b[0]);
    printf ("%08X%08X%08X%08X\n", c[3], c[2], c[1], c[0]);

    return 0;
}

GCC -O3 -std=c99 Не производит никакихadc инструкции, проверенныеobjdump, Моя версия gcc есть.i686-pc-mingw32-gcc (GCC) 4.5.2

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

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