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...
Or maybe we should add -march=la64-baseline (or another name?) as the
"bottom line" of a LA64 CPU. Currently the definition of -
march=loongarch64 includes unaligned access and 64-bit FP support, so
IMO we should have a baseline definition if we need to support something
"below" loongarch64.
--
Xi Ruoyao <[email protected]>
School of Aerospace Science and Technology, Xidian University