On Thu, Feb 26, 2026 at 10:01:45AM +0100, Jan Beulich wrote: > Using plain (signed) int variables as array indexes can be unhelpful on at > least x86, where the compiler may see the need to insert sign-extension > insns (strictly speaking it should be able to avoid that when the loop > continuation condition says >= 0, but that's not generally the case even > with gcc15). > > Observed effects with gcc15 (will of course vary with compiler version and > level of optimization): > - on x86, one less preserved register in use, yet due to sub-optimal > choice of register variables still a small code size increase (%r12 > isn't a good choice when it's used for base-without-index addressing, as > it requires a SIB byte which other registers wouldn't require), > - on Arm64 code size decreases, albeit that's eaten up by padding which is > being inserted ahead of a few labels, > - on Arm32 code size increases for a reason I didn't fully understand (my > ability to read Arm assembly is still somewhat limited). > > Signed-off-by: Jan Beulich <[email protected]> > > --- a/xen/common/domain.c > +++ b/xen/common/domain.c > @@ -1475,7 +1475,7 @@ static void cf_check complete_domain_des > { > struct domain *d = container_of(head, struct domain, rcu); > struct vcpu *v; > - int i; > + unsigned int i; > > /* > * Flush all state for the vCPU previously having run on the current CPU. > @@ -1485,7 +1485,7 @@ static void cf_check complete_domain_des > */ > sync_local_execstate(); > > - for ( i = d->max_vcpus - 1; i >= 0; i-- ) > + for ( i = d->max_vcpus; i-- > 0; )
Is there any reason we need to do those loops backwards? I would rather do: for ( i = 0; i < d->max_vcpus; i++ ) ? Thanks, Roger.
