¿Conseguir que GCC use la lógica de transporte para aritmética de precisión arbitraria sin ensamblaje en línea?

Cuando se trabaja con aritmética de precisión arbitraria (por ejemplo, enteros de 512 bits), ¿hay alguna forma de hacer que GCC use ADC e instrucciones similares sin usar ensamblaje en línea?

Un primer vistazo al código fuente de GMP muestra que simplemente tienen implementaciones de ensamblaje para cada plataforma compatible.

Aquí está el código de prueba que escribí, que agrega dos números de 128 bits desde la línea de comando e imprime el resultado. (Inspirado en el add_n de 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 No produce ninguna.adc instrucciones, verificadas porobjdump. Mi versión de gcc esi686-pc-mingw32-gcc (GCC) 4.5.2.

Respuestas a la pregunta(1)

Su respuesta a la pregunta