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.

Reply via email to