Ich suche nach einem C-Code für eine vorzeichenbehaftete gesättigte 64-Bit-Addition, die mit dem gcc-Optimierer zu effizientem X86-64-Code kompiliert. Portabler Code wäre ideal, obwohl bei Bedarf eine asm-Lösung verwendet werden könnte.
%Vor%Die Funktion wie geschrieben erzeugt eine ziemlich lange Assembly-Ausgabe mit mehreren Verzweigungen. Irgendwelche Tipps zur Optimierung? Scheint so, als ob es mit nur ein ADD mit ein paar CMOV Anweisungen implementiert werden könnte, aber ich bin ein wenig eingerostet mit diesem Zeug.
Dies ist eine Lösung, die in der Art und Weise fortgesetzt wird, die in einem der Kommentare angegeben wurde, und wurde auch in Ouahs Lösung verwendet. hier sollte der generierte Code ohne bedingte Sprünge sein
%Vor% Der erste sieht so aus, als würde es eine bedingte Bewegung geben, aber wegen der speziellen Werte kommt mein Compiler mit einem Zusatz davon: im 2er-Komplement ist INT64_MIN
INT64_MAX+1
.
Es gibt dann nur einen bedingten Zug für die Zuweisung der Summe, falls etwas in Ordnung ist.
All dies hat kein UB, weil in der abstrakten Zustandsmaschine die Summe nur dann erfolgt, wenn kein Überlauf vorliegt.
Tags und Links optimization c