On Fri, Nov 17, 2017 at 12:21 AM, Alan Hayward <alan.hayw...@arm.com> wrote:
>
>> On 16 Nov 2017, at 19:32, Andrew Pinski <pins...@gmail.com> wrote:
>>
>> On Thu, Nov 16, 2017 at 4:35 AM, Alan Hayward <alan.hayw...@arm.com> wrote:
>>> This final patch adds the clobber high expressions to tls_desc for aarch64.
>>> It also adds three tests.
>>>
>>> In addition I also tested by taking the gcc torture test suite and making
>>> all global variables __thread. Then emended the suite to compile with -fpic,
>>> save the .s file and only for one given O level.
>>> I ran this before and after the patch and compared the resulting .s files,
>>> ensuring that there were no ASM changes.
>>> I discarded the 10% of tests that failed to compile (due to the code in
>>> the test now being invalid C).
>>> I did this for O0,O2,O3 on both x86 and aarch64 and observed no difference
>>> between ASM files before and after the patch.
>>
>> Isn't the ABI defined as non-clobbering the lower 64bits for normal
>> function calls?  Or is the TLS function "special" in that it
>> saves/restores the 128bit registers; is that documented anywhere?  The
>> main reason why I am asking is because glibc is not the only libc out
>> there and someone could have a slightly different ABI here.
>>
>
> In NEON all the register SIMD registers are preserved around TLS calls - all
> 128bits of each register. That’s standard ABI behaviour for NEON.
>
> SVE doesn’t have any explicit preserving of it’s SIMD registers.
>
> However, the NEON and SVE registers share the same silicon - the lower
> 128bits of each SVE register is the same as the corresponding NEON
> register. The side effect of this is that the lower 128bits of the SVE 
> registers
> are getting backed up.
>
> Neither glibc or any libraries need updating to support this.
> But, compilers do need to aware of this.

I had a different question.  I asked if this specification of the TLS
calls requiring not to clobber the lower 128bits of the SIMD registers
documented anywhere.  As I was trying to say I am in the middle of
writing a libc and did not know of this requirement until I saw this
thread.

Thanks,
Andrew

>
>
> Alan.

Reply via email to