¿Cómo hacer la adición de saturación en C?

¿Cuál es la mejor manera (más limpia y eficiente) de escribir la adición de saturación en C?

La función o macro debe agregar dos entradas sin signo (necesitan versiones de 16 y 32 bits) y devolver todos los bits uno (0xFFFF o 0xFFFFFFFF) si la suma se desborda.

El objetivo es x86 y ARM mediante gcc (4.1.2) y Visual Studio (solo para simulación, por lo que una implementación alternativa está bien ahí).

Respuestas a la pregunta(17)

Su respuesta a la pregunta