Uzyskaj GCC, aby użyć logiki Carry do arbitralnej arytmetyki precyzyjnej bez montażu liniowego?

Podczas pracy z dowolną arytmetyką precyzyjną (np. 512-bitowe liczby całkowite), czy jest jakiś sposób, aby GCC korzystał z ADC i podobnych instrukcji bez użycia wbudowanego zestawu?

Pierwszy rzut oka na kod źródłowy GMP pokazuje, że mają po prostu implementacje złożenia dla każdej obsługiwanej platformy.

Oto kod testowy, który napisałem, który dodaje dwie 128-bitowe liczby z wiersza poleceń i drukuje wynik. (Zainspirowany przez add_n mini-gmp):

#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>

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 Nie produkuje żadnychadc instrukcje sprawdzone przezobjdump. Moja wersja gcc toi686-pc-mingw32-gcc (GCC) 4.5.2.

questionAnswers(1)

yourAnswerToTheQuestion