/* Workaround: store BEFORE the comparison so the SUB that evaluates the * comparison no longer sits on the store path. Generates correct code. */ unsigned char vx; void update(unsigned char n) { unsigned char old = vx; vx = n; /* store first, with A still holding n */ if (n != old) { /* redraw / side effect */ } }