[PATCH] LoongArch: Add support for TLS Descriptors

Xi Ruoyao xry111@xry111.site
Mon Dec 4 03:28:54 GMT 2023


On Fri, 2023-12-01 at 17:57 +0800, mengqinggang wrote:
> +.Lslow:

/* snip */

> +#ifdef USE_LASX
> +	xvst	xr0, sp, 13*SZREG + 0*SZXREG
> +	xvst	xr1, sp, 13*SZREG + 1*SZXREG
> +	xvst	xr2, sp, 13*SZREG + 2*SZXREG
> +	xvst	xr3, sp, 13*SZREG + 3*SZXREG
> +	xvst	xr4, sp, 13*SZREG + 4*SZXREG
> +	xvst	xr5, sp, 13*SZREG + 5*SZXREG
> +	xvst	xr6, sp, 13*SZREG + 6*SZXREG
> +	xvst	xr7, sp, 13*SZREG + 7*SZXREG
> +	xvst	xr8, sp, 13*SZREG + 8*SZXREG
> +	xvst	xr9, sp, 13*SZREG + 9*SZXREG
> +	xvst	xr10, sp, 13*SZREG + 10*SZXREG
> +	xvst	xr11, sp, 13*SZREG + 11*SZXREG
> +	xvst	xr12, sp, 13*SZREG + 12*SZXREG
> +	xvst	xr13, sp, 13*SZREG + 13*SZXREG
> +	xvst	xr14, sp, 13*SZREG + 14*SZXREG
> +	xvst	xr15, sp, 13*SZREG + 15*SZXREG
> +	xvst	xr16, sp, 13*SZREG + 16*SZXREG
> +	xvst	xr17, sp, 13*SZREG + 17*SZXREG
> +	xvst	xr18, sp, 13*SZREG + 18*SZXREG
> +	xvst	xr19, sp, 13*SZREG + 19*SZXREG
> +	xvst	xr20, sp, 13*SZREG + 20*SZXREG
> +	xvst	xr21, sp, 13*SZREG + 21*SZXREG
> +	xvst	xr22, sp, 13*SZREG + 22*SZXREG
> +	xvst	xr23, sp, 13*SZREG + 23*SZXREG
> +	xvst	xr23, sp, 13*SZREG + 24*SZXREG
> +	xvst	xr23, sp, 13*SZREG + 25*SZXREG
> +	xvst	xr23, sp, 13*SZREG + 26*SZXREG
> +	xvst	xr23, sp, 13*SZREG + 27*SZXREG
> +	xvst	xr23, sp, 13*SZREG + 28*SZXREG
> +	xvst	xr23, sp, 13*SZREG + 29*SZXREG
> +	xvst	xr23, sp, 13*SZREG + 30*SZXREG
> +	xvst	xr23, sp, 13*SZREG + 31*SZXREG

The typo here should be obvious.

> +#elif defined USE_LSX
> +	vst	vr0, sp, 13*SZREG + 0*SZVREG
> +	vst	vr1, sp, 13*SZREG + 1*SZVREG
> +	vst	vr2, sp, 13*SZREG + 2*SZVREG
> +	vst	vr3, sp, 13*SZREG + 3*SZVREG
> +	vst	vr4, sp, 13*SZREG + 4*SZVREG
> +	vst	vr5, sp, 13*SZREG + 5*SZVREG
> +	vst	vr6, sp, 13*SZREG + 6*SZVREG
> +	vst	vr7, sp, 13*SZREG + 7*SZVREG
> +	vst	vr8, sp, 13*SZREG + 8*SZVREG
> +	vst	vr9, sp, 13*SZREG + 9*SZVREG
> +	vst	vr10, sp, 13*SZREG + 10*SZVREG
> +	vst	vr11, sp, 13*SZREG + 11*SZVREG
> +	vst	vr12, sp, 13*SZREG + 12*SZVREG
> +	vst	vr13, sp, 13*SZREG + 13*SZVREG
> +	vst	vr14, sp, 13*SZREG + 14*SZVREG
> +	vst	vr15, sp, 13*SZREG + 15*SZVREG
> +	vst	vr16, sp, 13*SZREG + 16*SZVREG
> +	vst	vr17, sp, 13*SZREG + 17*SZVREG
> +	vst	vr18, sp, 13*SZREG + 18*SZVREG
> +	vst	vr19, sp, 13*SZREG + 19*SZVREG
> +	vst	vr20, sp, 13*SZREG + 20*SZVREG
> +	vst	vr21, sp, 13*SZREG + 21*SZVREG
> +	vst	vr22, sp, 13*SZREG + 22*SZVREG
> +	vst	vr23, sp, 13*SZREG + 23*SZVREG
> +	vst	vr23, sp, 13*SZREG + 24*SZVREG
> +	vst	vr23, sp, 13*SZREG + 25*SZVREG
> +	vst	vr23, sp, 13*SZREG + 26*SZVREG
> +	vst	vr23, sp, 13*SZREG + 27*SZVREG
> +	vst	vr23, sp, 13*SZREG + 28*SZVREG
> +	vst	vr23, sp, 13*SZREG + 29*SZVREG
> +	vst	vr23, sp, 13*SZREG + 30*SZVREG
> +	vst	vr23, sp, 13*SZREG + 31*SZVREG

Likewise.

> +#elif !defined __loongarch_soft_float
> +	FREG_S	fa0, sp, 13*SZREG + 0*SZFREG
> +	FREG_S	fa1, sp, 13*SZREG + 1*SZFREG
> +	FREG_S	fa2, sp, 13*SZREG + 2*SZFREG
> +	FREG_S	fa3, sp, 13*SZREG + 3*SZFREG
> +	FREG_S	fa4, sp, 13*SZREG + 4*SZFREG
> +	FREG_S	fa5, sp, 13*SZREG + 5*SZFREG
> +	FREG_S	fa6, sp, 13*SZREG + 6*SZFREG
> +	FREG_S	fa7, sp, 13*SZREG + 7*SZFREG
> +	FREG_S	ft0, sp, 13*SZREG + 8*SZFREG
> +	FREG_S	ft1, sp, 13*SZREG + 9*SZFREG
> +	FREG_S	ft2, sp, 13*SZREG + 10*SZFREG
> +	FREG_S	ft3, sp, 13*SZREG + 11*SZFREG
> +	FREG_S	ft4, sp, 13*SZREG + 12*SZFREG
> +	FREG_S	ft5, sp, 13*SZREG + 13*SZFREG
> +	FREG_S	ft6, sp, 13*SZREG + 14*SZFREG
> +	FREG_S	ft7, sp, 13*SZREG + 15*SZFREG
> +	FREG_S	ft8, sp, 13*SZREG + 16*SZFREG
> +	FREG_S	ft9, sp, 13*SZREG + 17*SZFREG
> +	FREG_S	ft10, sp, 13*SZREG + 18*SZFREG
> +	FREG_S	ft11, sp, 13*SZREG + 19*SZFREG
> +	FREG_S	ft12, sp, 13*SZREG + 20*SZFREG
> +	FREG_S	ft13, sp, 13*SZREG + 21*SZFREG
> +	FREG_S	ft14, sp, 13*SZREG + 22*SZFREG
> +	FREG_S	ft15, sp, 13*SZREG + 23*SZFREG
> +#endif /* #ifdef USE_LASX  */

And generally this seems too expensive.  Would it be better to compile
libc-tls.c with -ffixed-{f0,f1,...,f31} so we can avoid saving and
restoring FPR/VRs?

-- 
Xi Ruoyao <xry111@xry111.site>
School of Aerospace Science and Technology, Xidian University


More information about the Libc-alpha mailing list