Diskussion:AVR Arithmetik/Saturierung
"Daher versuchen wir nach Möglichkeit Status-Flags des AVR zu verwenden, um einen Überlauf zu erkennen. Dies ist von einer Hochsprache aus leider nicht möglich, so daß wir auf (Inline-)Assembler zurückgreifen müssen, um eine effiziente Implementierung zu erhalten."
Stimmt IMHO nur halb. <c> uint8_t add_sat(uint8_t a, uint8_t b) { uint8_t c; c = a + b; if (SREG & (1<<0)) { c = 255; } return c; } </c> Geht zwar nur auf dem AVR, aber das täte Assembler erst recht. Eventuell gibts auch defines für die Bits des SREG.
Natürlich wäre das nicht so gut wie die Verwendung von brcc, aber wohl besser als mehrere aufwändige Vergleiche. Auch darf der Compiler nicht auf die Idee kommen die Berechnung a + b im Code wo anders hin zu stellen.
Malte 20:21, 1. Feb. 2010 (UTC)