[PATCH] svolume_{mmx, sse}, sconv_sse: Fix compilation errors with X32 toolchain

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, 2011-12-13 at 09:43 -0800, Kamble, Nitin A wrote:
> > -----Original Message-----
> > From: Arun Raghavan [mailto:arun.raghavan at collabora.co.uk]
> > Sent: Monday, December 12, 2011 8:40 PM
> > To: General PulseAudio Discussion
> > Cc: Kamble, Nitin A
> > Subject: Re: [pulseaudio-discuss] [PATCH] svolume_{mmx, sse},
> > sconv_sse: Fix compilation errors with X32 toolchain
> > 
> > On Sat, 2011-12-10 at 10:03 +0100, Paul Menzel wrote:
> > > From d8b81d5393df36085009bf9f69d41fa85e2ae58a Mon Sep 17 00:00:00
> > 2001
> > > From: Nitin A Kamble <nitin.a.kamble at intel.com>
> > > Date: Sat, 10 Dec 2011 09:09:06 +0100
> > >
> > > Make assembly syntax compatible to the X32 toolchain and fix the
> > > following kind of compilations errors with X32 gcc.
> > >
> > > | pulsecore/svolume_mmx.c: Assembler messages:
> > > | pulsecore/svolume_mmx.c:107: Error: `(%esi,%rdi,4)' is not a valid
> > base/index expression
> > > | pulsecore/svolume_mmx.c:135: Error: `(%esi,%rdi,4)' is not a valid
> > base/index expression
> > > | pulsecore/svolume_mmx.c:161: Error: `(%esi,%rdi,4)' is not a valid
> > base/index expression
> > > | pulsecore/svolume_mmx.c:162: Error: `8(%esi,%rdi,4)' is not a valid
> > base/index expression
> > > | pulsecore/svolume_mmx.c:180: Error: `(%esi,%rdi,4)' is not a valid
> > base/index expression
> > > | pulsecore/svolume_mmx.c:210: Error: `(%esi,%rdi,4)' is not a valid
> > base/index expression
> > > | pulsecore/svolume_mmx.c:244: Error: `(%esi,%rdi,4)' is not a valid
> > base/index expression
> > > | pulsecore/svolume_mmx.c:245: Error: `8(%esi,%rdi,4)' is not a valid
> > base/index expression
> > > | make[3]: *** [libpulsecore_1.1_la-svolume_mmx.lo] Error 1
> > >
> > > Originally these assembly lines were written for x86_64 ABI, now they
> > > are also compatible with X32 ABI [3][4].
> > >
> > > The patch was submitted to the OpenEmbedded-Core list [1][2].
> > >
> > > [1] http://lists.linuxtogo.org/pipermail/openembedded-core/2011-
> > December/014189.html
> > > [2] http://git.yoctoproject.org/cgit.cgi/poky-
> > contrib/commit/?h=nitin/x32&id=2d8eec54f755c51f2eff600390f5a4b3cc2a7662
> > > [3] https://wiki.yoctoproject.org/wiki/X32_abi
> > > [4] http://en.wikipedia.org/wiki/X32_ABI
> > > ---
> > > Please keep Nitin in CC when replying.
> > > ---
> > 
> > I might be missing something, but I've not been able to find any
> > documentation for this syntax (gcc.org docs still show the %<number>
> > use). Could you point me to some documentation?
> > 
> > Also, does this require some version of gcc to work? Not a deal-breaker
> > for me (but might be for others) -- does this work with clang too?
> > 
> > Cheers,
> > Arun
> 
> This syntax is documented in the gcc source code. http://gcc.gnu.org/viewcvs/trunk/gcc/config/i386/i386.c?revision=182191&view=markup
> 
> 13495 	/* Print the name of register X to FILE based on its machine mode and number.
> 13496 	If CODE is 'w', pretend the mode is HImode.
> 13497 	If CODE is 'b', pretend the mode is QImode.
> 13498 	If CODE is 'k', pretend the mode is SImode.
> 13499 	If CODE is 'q', pretend the mode is DImode.
> 13500 	If CODE is 'x', pretend the mode is V4SFmode.
> 13501 	If CODE is 't', pretend the mode is V8SFmode.
> 13502 	If CODE is 'h', pretend the reg is the 'high' byte register.
> 13503 	If CODE is 'y', print "st(0)" instead of "st", if the reg is stack op.
> 13504 	If CODE is 'd', duplicate the operand for AVX instruction.
> 13505 	*/

I could at least find this to expand on that a bit --
http://www.delorie.com/gnu/docs/gcc/gccint_53.html -- but I still don't
understand how the DImode is actually interpreted/used.

> This syntax was added when gcc supported x86_64. So older version is not an issue. 
> 
> Clang should support it too, otherwise it is not compatible with gcc, and it will 
> not be able build glibc which as this syntax in it's code.

I've pushed this change out now. Works fine for me on 64-bit, I'm
assuming you've tested at least on x32, and if anyone can report with
some testing on x86 and on multichannel output, would be great.

Cheers,
Arun



[Index of Archives]     [Linux Audio Users]     [AMD Graphics]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux