On Wed, Aug 30, 2023 at 04:22:13PM +0800, Xi Ruoyao wrote: > On Wed, 2023-08-30 at 14:51 +0800, Yujie Yang wrote: > > > > LoongArch processors may not support memory accesses without natural > > > > alignments. Building libraries with -mstrict-align may help with > > > > toolchain binary compatiblity and performance on these implementations > > > > (e.g. Loongson 2K1000LA). > > > > > > > > No significant performance degredation is observed on current mainstream > > > > LoongArch processors when the option is enabled. > > > > > > > > gcc/ChangeLog: > > > > > > > > * config.gcc: use -mstrict-align for building libraries > > > > if --with-strict-align-lib is given. > > > > > > Isn't this equivalent to --with-default-multilib=mno-strict-align now? > > > > > > And I still believe the easiest way for 2K1000LA is adding -march=la264 > > > support so the user can simply configure with --with-arch=la264. > > > > Not exactly -- Options given in --with-multilib-default= will not be applied > > to multilib variants that have build options specified in > > --with-multilib-list, > > but --with-strict-align-lib is always effective. > > > > e.g. for the following configuration: > > > > --with-multilib-default=mstrict-align > > --with-multilib-list=lp64d/la464,lp64s > > > > The library build options would be: > > > > base/lp64d variant: -mabi=lp64d -march=la464 (no -mstrict-align appended) > > base/lp64s variant: -mabi=lp64s -march=abi-default -mstrict-align > > > > Sure, you can do it with --with-arch=la264. It's just a convenient > > switch that we can use for building generic toolchains. > > If you want a generic toolchain, it should default to -mstrict-align as > well. Or it will still do unexpected thing for cases like: > > struct foo { char x; int y; } __attribute__ ((packed)); > > int get (struct foo *foo) { return foo->y; } > > So it should be --with-strict-align (it should make the *compiler* > default to -mstrict-align). But them it seems --with-arch=la264 is just > easier...
By "generic" I mean: when you enable "-march=la264"/"-march=la464" and link statically, you get a binary that's good for running on LA264/LA464 cores, respectively. It's more of a cross-toolchain case.