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.

Reply via email to