Thank you for your review. Yes, I noticed sync.c is required but this error didn't cause any issues.
Thanks, Xin Wang Richard Sandiford <[email protected]> 于2026年1月25日周日 07:57写道: > Xin Wang <[email protected]> writes: > > From: Xin Wang <[email protected]> > > > > The use of UOItype with mode(OI) for 16-byte atomic operations is > > non-standard. The OI mode is not defined in machmode.def and exists > > only as an ad-hoc construct in libgcc/sync.c. > > > > This patch replaces it with UTItype using mode(TI), which is the > > standard GCC machine mode for 16-byte integers (Tetra Integer). > > The size argument is also corrected from 8 to 16 to match the actual > > operand width. > > > > libgcc/ChangeLog: > > * sync.c: Replace UOItype with UTItype and use mode(TI) pass 16, not > > 8, to DEFINE macro. > > Sorry for the slow reply. I no longer have access to my @arm.com > account and didn't see this message till today. > > I'd completely forgotten that I wrote this code. Like you say, > the 16-byte entry is clearly wrong (in two ways). The fact that the > byte count was wrong suggests that no-one was relying on the buggy > version. MIPS remains the only in-tree target to define SYNC to yes. > > Since the patch was posted in stage 3, I think it should go in for GCC 16. > > Pushed to trunk, thanks. > > Richard > > > > > Signed-off-by: Xin Wang <[email protected]> > > --- > > libgcc/sync.c | 11 +++++------ > > 1 file changed, 5 insertions(+), 6 deletions(-) > > > > diff --git a/libgcc/sync.c b/libgcc/sync.c > > index f2d35ecf1e0..55ea4ba8ccc 100644 > > --- a/libgcc/sync.c > > +++ b/libgcc/sync.c > > @@ -124,10 +124,9 @@ see the files COPYING3 and COPYING.RUNTIME > respectively. If not, see > > > > /* Find an appropriate type TYPE for SIZE and invoke DEFINE (FN, SIZE, > TYPE). > > > > - The types chosen here may be incorrect for some targets. > > - For example, targets with 16-byte atomicity support might not > > - support OImode. We would need some kind of target-specific > > - override if that becomes a problem. */ > > + The types chosen here are based on standard GCC modes. > > + If a target supports atomic operations for a given SIZE but lacks > > + the corresponding mode, a target-specific override will be needed. > */ > > > > #if SIZE == 1 && __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 > > > > @@ -151,8 +150,8 @@ DEFINE (FN, 8, UDItype) > > > > #elif SIZE == 16 && __GCC_HAVE_SYNC_COMPARE_AND_SWAP_16 > > > > -typedef unsigned int UOItype __attribute__((mode (OI))); > > -DEFINE (FN, 8, UOItype) > > +typedef unsigned int UTItype __attribute__((mode (TI))); > > +DEFINE (FN, 16, UTItype) > > > > #endif >
