[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