This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Should we compile x86-64 ld.so with -mno-sse -mno-sse?


On Thu, Nov 1, 2012 at 5:27 PM, Rich Felker <dalias@aerifal.cx> wrote:
> On Thu, Nov 01, 2012 at 04:20:00PM -0700, H.J. Lu wrote:
>> On Thu, Nov 1, 2012 at 4:23 AM, Ondrej Bilka <neleai@seznam.cz> wrote:
>> > On Wed, Oct 31, 2012 at 04:18:10PM -0700, H.J. Lu wrote:
>> >> On Wed, Oct 31, 2012 at 3:59 PM, Richard Henderson <rth@twiddle.net> wrote:
>> >> > On 2012-11-01 03:10, Carlos O'Donell wrote:
>> >> >> What use case is there for not wanting to touch SEE in ld.so?
>> >> >
>> >> > I can only imagine HJL is worried about AVX performance if the
>> >> > dynamic linker uses SSE insns.
>> >> >
>> >>
>> >> That is not the main reason.  We make sure that ld.so string/memory
>> >> functions never touch SSE/AVX registers.  It is not for performance,
>> >> but for correctness.  Otherwise callee will get random values in
>> >> vector registers,
>> >
>> > Or we can save and restore used xmm registers or I am missing something?
>>
>> But it will introduce extra over head for every symbol lookup
>> and it wouldn't be forward compatible with AVX since we would
>> only save/restore 128bit SSE registers, not 256bit AVX registers.
>
> I'm confused what the issue is. As far as I know, the SSE/AVX
> registers are not call-saved, they're call-clobbered. As such, it
> makes no difference what you do with them in the dynamic linker.
>
> Source: x86_64 psABI (http://www.x86-64.org/documentation/abi.pdf),
> 3.2.1 Registers and the Stack Frame.
>

SSE registers are used to pass function parameters.  When calling
function foo, ld.so will perform symbol lookup up before branching
to foo.  If ld.so trashes SSE registers, foo will get garbage as
function parameters.


-- 
H.J.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]