[PATCH v6 01/13] ARC: ABI Implementation

Vineet Gupta Vineet.Gupta1@synopsys.com
Wed Jun 3 20:05:02 GMT 2020


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.

-Vineet


More information about the Libc-alpha mailing list