Kleiner Compiler-Exkurs:
Hab gerade die Funktion swap_u32() von NGen überarbeitet, welche die Bytereihenfolge einer Ganzzahl vertauscht.
Einfach gesagt: Für eine natürliche Zahl n soll gelten: n = swap_u32(swap_u32(n)).
Ein einfacher verständliches Beispiel ist: n = (-1 * (-1 * n)).
Das war das von mir benutzte Testverfahren für alle 32-bit Werte in diesem Bereich.
Der GCC hat mit verschiedenen Optimierungsstufen keinen Fehler gemacht und passende Programme erzeugt.
Der Clang hat noch einen drauf gesetzt und zur Compilezeit erkannt, dass das immer stimmt und ein Programm erzeugt,
welches korrekterweise eine sehr kurze Laufzeit hatte.

Beim BCC (DOS) gibt es einige Optimierungsstufen (-O1, -O2) welche nicht korrekten Code erzeugen.
Code welcher mit anderen Optimierungsstufen generiert wurde (-O, -G, -Od) laufen scheinbar ohne Fehler.
P.S.: Das ist mir schon beim Code vom PowerPack-Dekompressionsalgo aufgefallen.
Die C-Version lässt sich zwar mit dem BCC übersetzen, aber die dekomprimierten Bilder sind unbrauchbar.
Hab gerade die Funktion swap_u32() von NGen überarbeitet, welche die Bytereihenfolge einer Ganzzahl vertauscht.
Einfach gesagt: Für eine natürliche Zahl n soll gelten: n = swap_u32(swap_u32(n)).
Ein einfacher verständliches Beispiel ist: n = (-1 * (-1 * n)).
Das war das von mir benutzte Testverfahren für alle 32-bit Werte in diesem Bereich.
Der GCC hat mit verschiedenen Optimierungsstufen keinen Fehler gemacht und passende Programme erzeugt.

Der Clang hat noch einen drauf gesetzt und zur Compilezeit erkannt, dass das immer stimmt und ein Programm erzeugt,
welches korrekterweise eine sehr kurze Laufzeit hatte.



Beim BCC (DOS) gibt es einige Optimierungsstufen (-O1, -O2) welche nicht korrekten Code erzeugen.

Code welcher mit anderen Optimierungsstufen generiert wurde (-O, -G, -Od) laufen scheinbar ohne Fehler.

P.S.: Das ist mir schon beim Code vom PowerPack-Dekompressionsalgo aufgefallen.
Die C-Version lässt sich zwar mit dem BCC übersetzen, aber die dekomprimierten Bilder sind unbrauchbar.