On Thu, Oct 17, 2013 at 11:12:31AM +0300, Michael S. Tsirkin wrote: > On Thu, Oct 17, 2013 at 09:27:51AM +0300, Gleb Natapov wrote: > > On Wed, Oct 16, 2013 at 10:46:53PM +0300, Michael S. Tsirkin wrote: > > > Old GCC didn't let you reference variable by > > > number if it is listed with a specific register > > > constraint, on the assumption you can just > > > use the register name explicitly. > > > > > > Build fails with errors like this: > > > a.c:6: error: invalid 'asm': invalid operand code 'd' > > > > > Is it worth to support such ancient compiler? Nobody complained till > > now. > > Well it's not as widely used as kvm itself yet :) > The patch seems simple enough though. > > > BTW with your patch I still cannot compile with 4.2: > > > > x86/s3.c: In function 'main': > > x86/s3.c:145: error: inconsistent operand constraints in an 'asm' > > OK that's easy to fix. > > > > To fix, let's just use %eax %al etc. > > > > > Only %d0 does not work and dropping "d" fixes it since compiler can > > figure out correct register from variable size. The patch bellow fixes > > compilation for 4.2. > > It does produce warnings with -Wall though: > Assembler messages: > Warning: using `%ax' instead of `%eax' due to `w' suffix > Warning: using `%al' instead of `%eax' due to `b' suffix > Not for me. No warning with 4.7.3 and 4.2. .s file produced by gcc shows correct assembly with my patch.
-- Gleb.