In c code
extern unsigned int ww();
extern unsigned int yy;
unsigned int ss(unsigned char a, unsigned char b)
return (ww() << a) + (yy << b);
unsigned int ssss(unsigned char a, unsigned char b)
return (ww() >> a) + (yy >> b);
the "ww() >> a" and "ww() >> a" parts are operated on stack as two 8-bit operands, while there are free 16-bit registers.
After applying this patch, they are operated in a free register as one entire 16-bit operand.