0undNichtig wrote:
> Das Problem ist ja eigentlich auch, dass eine Stelle kommt, wo beide
> Variablen gebraucht werden, ...
Woher willst du das wissen? Der Compiler kann und darf deinen Code
doch so umformen, dass er vielleicht nicht mehr beide Variablen
braucht?
>
1 | > //check if the first pixelbyte is incomplete (necessary byte allready
|
2 | > allocated)
|
3 | > pixelrest=x % PixelSpace; //if x<3 it returns 3
|
4 | > if (pixelrest!=0)
|
5 | > {...
|
6 | >
|
Ja, die Variable x wird ab dieser Stelle nicht mehr benötigt
(zumindest nicht im geposteten Teil), daher wird ihr ,Speicher' (also
ihr Registerpaar) durch den neuen Wert von pixelrest überlagert. Das
hat hier sogar doppelt Sinn, da die Modulo-Operation mit (offenbar) 8
als UND-Verknüpfung mit 7 implementiert ist, und diese Operation ihr
Ergebnis zwangsweise erst einmal im bisherigen Register hinterlässt.
Wenn der Compiler also ab der linken Seite dieser Zuweisung den Wert
von x nicht mehr braucht, dann spart er sich sinnlosen Kopieraufwand.
Wenn dem nicht so ist: bitte compilierfähiges Schnipsel posten (am
besten gleich als Anhang), bitte nur den Code, keine langen
Disassemblerlistings. Ich kann die Dinger sowieso nicht lesen, und
die Zuordnung des Quellcodes zum Objektcode ist bei guter Optimierung
schlicht nicht mehr möglich, verwirrt also eher.