From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-oa1-x34.google.com (mail-oa1-x34.google.com [IPv6:2001:4860:4864:20::34]) by sourceware.org (Postfix) with ESMTPS id C29F83858C78 for ; Mon, 30 Oct 2023 19:03:52 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org C29F83858C78 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org C29F83858C78 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2001:4860:4864:20::34 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698692634; cv=none; b=JDfIR05ePE5kQSYcH3JXA6uxGLwxYAAbDOGYhkJAdNsoi3KnOUZ6JqQDBSZIOpiSeQhY7bWil+Z/LGryPh9oc+qyxxBwXfYCOQIe1bcbQwk1zqJswtaEDlSOvMAFYt8jdykwtbhVGKjRPtIfHan2vo0V9PrxwwkS2Z/e1TcneGs= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1698692634; c=relaxed/simple; bh=OQz2223FcMzkOoCC35NOh8uri5lx72MS0519fl6S5F0=; h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To; b=URhz336qeSqpUsIKGhay8kyloOwWAHfxByFlMtjtAspM2n7tGL52VR3BMCS6oU7uJvHZ02cV3rUef9P7b2YtZhtizAUjI4j64onDbK+7IgUCtP1h7bORWOAIG+AcnEJeNe66Bh7ey0oWtHgr1ze26U4f7abEbNuQU0PLSSrciU0= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-oa1-x34.google.com with SMTP id 586e51a60fabf-1e0ee4e777bso3266691fac.3 for ; Mon, 30 Oct 2023 12:03:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1698692632; x=1699297432; darn=sourceware.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=05XLVO/gPkLJytZGoisEsYFZe0v7cMqVArWn3yk7EVk=; b=W2OLTYDZVwDgY89f1hN/e76bv1LX+L49E8aBzx/u3VXWAzGDD1WARFQ+Aw9XWdlo+f /TWiEjBz2n7MobfW74P/xE0UguGqrIAcSuUgKSZ+jY0Yiaa2i3KiEEYkRO7zhSCZFFGR pxp5FTY9DrAw2qO6UAZ+QQfyddt+QReLv/+vw6/jApUgFoSeUPZWI0l9IxmVvWqB1DrN GZPDbazRB0TiLJV9O3u55q1mucojRAqkEgJmfLh+xIEew7AS4i3hEzLqsxaIOugDymKb uaTWpzrmEFCKNzQaBpENa/dlGZ5ss0B8H7HE8LfTKA/XBYmloMDZHnd2LQ0HdFGXh+gc SCMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1698692632; x=1699297432; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=05XLVO/gPkLJytZGoisEsYFZe0v7cMqVArWn3yk7EVk=; b=asqkABvUhSs0KwvFlFv2Jfgxnz9ttLom0YkRq5FsEEZHn6T0nVgZ4uAGC60A5kPYJH Oo/v1djTrWtz63b5I5VcmqHUQp3MzYhPtDHzQqFIVr7U1hfLhgd7ryOP+6/ENAwzJpni DHdZWInVFOC/O4fTq1WyHwfQ9xPHDM9EXUKr9PBxz/BhS4XwV5fNBFnqds2RMOTBDYCx m/CA6cXk0/kMwTNGNGE267N300heuXITDQLbebJwIcJmIYa2TUR9uYzGvU76AIGgoDZZ sN0m741Nr/TZbUXODxLoZVMejsfWOcv/vVQgAQxyqdQVDEeVtOubJubQBK7ULVM3q5Ga niIQ== X-Gm-Message-State: AOJu0YxrG+Cmy8FNZedNFcwCKvvGtHPbArOmMAUTjQ2BoVV+iVAZq+Ct 16PeO9g14iUsAD8EZSX174CkL2YJaKNHtfSRZ8o= X-Google-Smtp-Source: AGHT+IErjM+XDvNLbaBLLo/QRtF4ruBkH16hLoCsWpRe5ftWAEUno5kRXWFJnErTo9IlTjyF0krdqN7Vcw88b2fSqnE= X-Received: by 2002:a05:6870:d8cf:b0:1d6:5b09:1584 with SMTP id of15-20020a056870d8cf00b001d65b091584mr15022109oac.5.1698692632138; Mon, 30 Oct 2023 12:03:52 -0700 (PDT) MIME-Version: 1.0 References: <20231003122251.3325435-1-adhemerval.zanella@linaro.org> <20231003122251.3325435-5-adhemerval.zanella@linaro.org> In-Reply-To: <20231003122251.3325435-5-adhemerval.zanella@linaro.org> From: Noah Goldstein Date: Mon, 30 Oct 2023 14:03:40 -0500 Message-ID: Subject: Re: [PATCH v8 4/7] stdlib: qsort: Move some macros to inline function To: Adhemerval Zanella Cc: libc-alpha@sourceware.org, Paul Eggert , Florian Weimer Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-9.4 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: On Tue, Oct 3, 2023 at 7:23=E2=80=AFAM Adhemerval Zanella wrote: > > --- > stdlib/qsort.c | 35 +++++++++++++++++++++++------------ > 1 file changed, 23 insertions(+), 12 deletions(-) > > diff --git a/stdlib/qsort.c b/stdlib/qsort.c > index 5691249a9b..80706b3357 100644 > --- a/stdlib/qsort.c > +++ b/stdlib/qsort.c > @@ -100,15 +100,28 @@ typedef struct > char *hi; > } stack_node; > > -/* The next 4 #defines implement a very fast in-line stack abstraction. = */ > /* The stack needs log (total_elements) entries (we could even subtract > log(MAX_THRESH)). Since total_elements has type size_t, we get as > upper bound for log (total_elements): > bits per byte (CHAR_BIT) * sizeof(size_t). */ > -#define STACK_SIZE (CHAR_BIT * sizeof (size_t)) > -#define PUSH(low, high) ((void) ((top->lo =3D (low)), (top->hi = =3D (high)), ++top)) > -#define POP(low, high) ((void) (--top, (low =3D top->lo), (high = =3D top->hi))) > -#define STACK_NOT_EMPTY (stack < top) > +enum { STACK_SIZE =3D CHAR_BIT * sizeof (size_t) }; > + > +static inline stack_node * > +push (stack_node *top, char *lo, char *hi) > +{ > + top->lo =3D lo; > + top->hi =3D hi; > + return ++top; > +} > + > +static inline stack_node * > +pop (stack_node *top, char **lo, char **hi) > +{ > + --top; > + *lo =3D top->lo; > + *hi =3D top->hi; > + return top; > +} > > > static inline void > @@ -212,11 +225,9 @@ _quicksort (void *const pbase, size_t total_elems, s= ize_t size, > char *lo =3D base_ptr; > char *hi =3D &lo[size * (total_elems - 1)]; > stack_node stack[STACK_SIZE]; > - stack_node *top =3D stack; > - > - PUSH (NULL, NULL); > + stack_node *top =3D stack + 1; > > - while (STACK_NOT_EMPTY) > + while (stack < top) > { > char *left_ptr; > char *right_ptr; > @@ -281,7 +292,7 @@ _quicksort (void *const pbase, size_t total_elems, si= ze_t size, > { > if ((size_t) (hi - left_ptr) <=3D max_thresh) > /* Ignore both small partitions. */ > - POP (lo, hi); > + top =3D pop (top, &lo, &hi); > else > /* Ignore small left partition. */ > lo =3D left_ptr; > @@ -292,13 +303,13 @@ _quicksort (void *const pbase, size_t total_elems, = size_t size, > else if ((right_ptr - lo) > (hi - left_ptr)) > { > /* Push larger left partition indices. */ > - PUSH (lo, right_ptr); > + top =3D push (top, lo, right_ptr); > lo =3D left_ptr; > } > else > { > /* Push larger right partition indices. */ > - PUSH (left_ptr, hi); > + top =3D push (top, left_ptr, hi); > hi =3D right_ptr; > } > } > -- > 2.34.1 > LGTM Reviewed-by: Noah Goldstein