linux-snps-arc.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: Vineet Gupta <Vineet.Gupta1@synopsys.com>
To: Florian Weimer <fweimer@redhat.com>,
	Vineet Gupta via Libc-alpha <libc-alpha@sourceware.org>
Cc: arcml <linux-snps-arc@lists.infradead.org>
Subject: Re: [PATCH v6 01/13] ARC: ABI Implementation
Date: Thu, 4 Jun 2020 23:56:37 +0000	[thread overview]
Message-ID: <10ca0b6b-b20c-a555-6624-167faaca333d@synopsys.com> (raw)
In-Reply-To: <009f0364-4089-a032-2cfc-beda06bfff2d@synopsys.com>

On 6/4/20 12:01 PM, Vineet Gupta wrote:
> On 6/4/20 2:04 AM, Florian Weimer via Libc-alpha wrote:
>> * Vineet Gupta via Libc-alpha:
>>
>>> On 5/27/20 11:26 AM, Adhemerval Zanella via Libc-alpha wrote:
>>>> +ENTRY (__longjmp)
>>>> +
>>>> +	ld_s r13,   [r0]
>>>> +	ld_s r14,   [r0,4]
>>>> +	ld   r15,   [r0,8]
>>>> +	ld   r16,   [r0,12]
>>>> +	ld   r17,   [r0,16]
>>>> +	ld   r18,   [r0,20]
>>>> +	ld   r19,   [r0,24]
>>>> +	ld   r20,   [r0,28]
>>>> +	ld   r21,   [r0,32]
>>>> +	ld   r22,   [r0,36]
>>>> +	ld   r23,   [r0,40]
>>>> +	ld   r24,   [r0,44]
>>>> +	ld   r25,   [r0,48]
>>>> +
>>>> +	ld   blink, [r0,60]
>>>> +	ld   fp,    [r0,52]
>>>> +	ld   sp,    [r0,56]
>>>> +
>>>> +	mov.f  r0, r1	; get the setjmp return value(due to longjmp) in place
>>>> +
>>>> +	j.d    [blink]	; to caller of setjmp location, right after the call
>>>> +	mov.z  r0, 1	; can't let setjmp return 0 when it is due to longjmp
>>>> +
>>>> +END (__longjmp)
>>>
>>> So wanted to pick your brains on this thing. While longjmp is not necessarily an
>>> application hotspot, it seems bulk load/store can in general benefit from with
>>> ARCv2 double load/store instructions LDD/STD which work with register pairs.
>>>
>>> So we could have 2 variants which compile differently to one runtime
>>> implementation or better still have 2 runtime implementations which could be
>>> switched to using hwcaps (which I can add to kernel). Does that require IFUNC
>>> which ARC toolchain doesn't support ATM.
>>
>> Without IFUNCs, you would have to use a conditional branch in the
>> (single) __longjmp implementation.
>>
>> With IFUNCs, all internal callers will have to go through a function
>> pointer—or those internal callers would have to turn into IFUNCs as
>> well.
>>
>> So it's doubtful whether this is beneficial in this case.
>>
>> Also, please double-check the register list.  The ABI manual says this:
>>
>> | The scratch registers are not preserved across function calls. When
>> | calling an external function, the compiler assumes that registers %r0
>> | through %r12 and %r30 are trashed; and that %r13 through %r29 are
>> | preserved.  The EV6x processor reserves %r25.
>>
>> r27 and r28 are handled as fp and sp.  That leaves r26 and r29 as
>> unhandled.
> 
> r29 is ILINK1 (Interrupt Link Register) and accessible only in kernel mode so can
> be ignored here.
> 
> r26 is GP and indeed could be potential problem and thus needs saving. The reason
> it is missing in first place is the historic use of GP as "PIC assist" register
> which has since been reworked in compiler). As of today the register allocator is
> simply ignoring GP.
> 
>> r25 seems to be the thread pointer.  It cannot change its value between
>> setjmp and longjmp because you cannot longjmp onto another thread, so
>> saving and restoring it should not be necessary.
> 
> Good point. This can be removed.
> 
> It seems that *jmp and *context routines deal with same set of regs (in different
> structures) and perhaps I should make them reuse asm code.

It seems better to keep them seperate afterall.

On the topic of ABI, and considering the future port to ARCv3 with slightly
different ABI I'm thinking I should simplify the existing
sysdeps/unix/sysv/linux/arc/sys/ucontext.h (patch 8/13) by not naming specific
registers (while still being compliant with the kernel exported interface).

-Vineet
_______________________________________________
linux-snps-arc mailing list
linux-snps-arc@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-snps-arc

  reply	other threads:[~2020-06-04 23:56 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-04-23  1:41 [PATCH v6 00/13] glibc port to ARC processors Vineet Gupta
2020-04-23  1:41 ` [PATCH v6 01/13] ARC: ABI Implementation Vineet Gupta
     [not found]   ` <88508d10-2d29-026a-bb54-ad607154ab87@linaro.org>
2020-05-27 22:15     ` Vineet Gupta
2020-05-29 13:56       ` Adhemerval Zanella
     [not found]     ` <a56a35d4-3e9e-9a88-4be5-8553d5f11ad3@synopsys.com>
     [not found]       ` <87mu5jxkv7.fsf@oldenburg2.str.redhat.com>
2020-06-04 19:01         ` Vineet Gupta
2020-06-04 23:56           ` Vineet Gupta [this message]
2020-04-23  1:41 ` [PATCH v6 02/13] ARC: startup and dynamic linking code Vineet Gupta
     [not found]   ` <17957ee6-2bc1-f43b-f184-f0703ba2765f@linaro.org>
2020-05-28  1:14     ` Vineet Gupta
2020-04-23  1:41 ` [PATCH v6 03/13] ARC: Thread Local Storage support Vineet Gupta
     [not found]   ` <4f7a67fb-6f96-57e6-b827-d1ab5dd6733f@linaro.org>
2020-05-28  1:36     ` Vineet Gupta
2020-06-01 18:53       ` Adhemerval Zanella
2020-04-23  1:41 ` [PATCH v6 04/13] ARC: Atomics and Locking primitives Vineet Gupta
     [not found]   ` <03f4a9b3-b1ca-90fa-0b6a-609a3135267d@linaro.org>
2020-04-24  7:23     ` Vineet Gupta
     [not found]     ` <20200427215938.14136-1-vgupta@synopsys.com>
2020-04-27 22:13       ` [PATCH] semaphore: consolidate arch headers into a generic one Vineet Gupta
     [not found]       ` <ac93c301-36d3-b20a-d31c-50c1f3264c68@linaro.org>
2020-05-05 22:59         ` Vineet Gupta
2020-05-08 13:32           ` Adhemerval Zanella
2020-04-23  1:41 ` [PATCH v6 05/13] ARC: math soft float support Vineet Gupta
2020-04-23  1:41 ` [PATCH v6 06/13] ARC: hardware floating point support Vineet Gupta
2020-05-29 14:12   ` Adhemerval Zanella
2020-05-29 22:28     ` Vineet Gupta
2020-05-29 23:50       ` Vineet Gupta
2020-06-02 17:51         ` Joseph Myers
     [not found]         ` <07887c48-7e07-9f89-035d-3f336a16f2da@synopsys.com>
2020-06-02 18:13           ` static inline math functions (was Re: [PATCH v6 06/13] ARC: hardware floating point support) Joseph Myers
2020-06-02 18:35             ` Adhemerval Zanella
2020-06-05  4:44         ` [PATCH v6 06/13] ARC: hardware floating point support Vineet Gupta
2020-06-05 17:22           ` Adhemerval Zanella
2020-06-02 17:48       ` Joseph Myers
2020-04-23  1:41 ` [PATCH v6 07/13] ARC: Linux Syscall Interface Vineet Gupta
2020-05-29 16:49   ` Adhemerval Zanella
2020-05-30  2:02     ` Vineet Gupta
2020-06-03 19:46     ` Vineet Gupta
2020-06-03 20:04       ` Adhemerval Zanella
2020-06-03 20:17         ` Vineet Gupta
2020-06-04 11:06           ` Adhemerval Zanella
2020-04-23  1:41 ` [PATCH v6 08/13] ARC: Linux ABI Vineet Gupta
2020-04-23  1:41 ` [PATCH v6 09/13] ARC: Linux Startup and Dynamic Loading Vineet Gupta
2020-04-23  1:41 ` [PATCH v6 10/13] ARC: ABI lists Vineet Gupta
2020-04-23  1:41 ` [PATCH v6 11/13] ARC: Build Infrastructure Vineet Gupta
2020-06-03 19:58   ` Adhemerval Zanella
2020-06-04 15:25     ` Vineet Gupta
2020-06-04 17:05       ` Adhemerval Zanella
2020-06-08  4:18         ` Vineet Gupta
2020-04-23  1:41 ` [PATCH v6 12/13] build-many-glibcs.py: Enable ARC builds Vineet Gupta
2020-04-23  1:41 ` [PATCH v6 13/13] Documentation for ARC port Vineet Gupta
2020-05-04 21:21 ` [PATCH v6 00/13] glibc port to ARC processors Vineet Gupta
2020-05-15  0:45   ` Vineet Gupta
2020-05-27  1:49     ` Vineet Gupta
     [not found]       ` <d7f1176c-87c6-90c6-161c-4705a47837ea@linaro.org>
2020-05-27 18:38         ` Vineet Gupta

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=10ca0b6b-b20c-a555-6624-167faaca333d@synopsys.com \
    --to=vineet.gupta1@synopsys.com \
    --cc=fweimer@redhat.com \
    --cc=libc-alpha@sourceware.org \
    --cc=linux-snps-arc@lists.infradead.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).