On Fri, Oct 2, 2015 at 12:19 PM, Rich Felker wrote: > On Fri, Oct 02, 2015 at 12:02:03PM +0200, Alex Dowad wrote: > > +# this does NOT exhaustively check for all possible instructions which > could > > +# overwrite a register value inherited from the caller (just the common > ones) > > +/mov.*,%r(ax|bx|cx|dx|si|di|bp|8|9|10|11|12|13|14|15)/ { > trashed(get_reg2()) } > > +/(add|addl|sub|subl|and|or|xor|lea|sal|sar|shl|shr) > %r(ax|bx|cx|dx|si|di|bp|8|9|10|11|12|13|14|15),/ { > > + trashed(get_reg1()) > > +} > > This looks wrong but maybe it's already wrong in existing code. Why > are you marking the first operand as trashed rather than the second? You're absolutely right!