[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Devise macros to encapsulate (x & -x)
- To: Nicola Vetrini <nicola.vetrini@xxxxxxxxxxx>
- From: Jan Beulich <jbeulich@xxxxxxxx>
- Date: Fri, 17 Nov 2023 12:39:17 +0100
- Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=suse.com; dmarc=pass action=none header.from=suse.com; dkim=pass header.d=suse.com; arc=none
- Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Xy4UtCTwjIpla34dHFXHMEV+J0x9hnovQCzacCqo3Ug=; b=e2qapYBffWKiO28TBdxBllI1ULwuxmq8+nze+BR+6+rqF4oLHdtfUV1HQt+AzUKVOob6d89d7i8KQ6wtlx3uQpyR9Lcb+porzVy57VHG3hYK86eioyxG5ZSxAyIL2y+O3n4ITCEqeM860+nzPdFkmQuYWCw//1FxRgReYH2D93YDzixm4TsPtEwYTou56PZ2ooETfvNbUea426T1/RiqWehoHVBKurSl0PlwhDE711FW03GHMAIYjv/u2MyXXiymF3rSup1bUuYx2rAqqtKhvYTkUvZ+BkarOmrkOfPYP+LJY5BfylSSNEG69n5+FQaiFC5O06O9TjeelRPUeYWetw==
- Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=ZXTJyuf5EQL5L7knLmhhLxi7YNqZO4agApaZ7yY/KuzC1+GCzpLUh+A5hIj8vXzh1kBygxgQuNmlLxx9bbWn4m11FGLqDu7tC1Ef5Z2f9Sd7n7imin6XhkRIGeaFVczghOoo/zOOVDDOeYEROwPlIk4lvq3A1GYyBCuPYQzeD5Mx6zxxV6gtDqLiIDZk7AKZyEmWtYUWaz6/t9la8aA13aN38udSgu3p9zejLkqLKTqUhtOuLRLTrPmJo5DBEOL9VYrbTAO1Wskyph37nZHIfUYcTsuleeMM3215VYPFqSnRm2spQF4oBo0CWj8gdbyjLMS1raPucJINBxzeBpBiKg==
- Authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=suse.com;
- Autocrypt: addr=jbeulich@xxxxxxxx; keydata= xsDiBFk3nEQRBADAEaSw6zC/EJkiwGPXbWtPxl2xCdSoeepS07jW8UgcHNurfHvUzogEq5xk hu507c3BarVjyWCJOylMNR98Yd8VqD9UfmX0Hb8/BrA+Hl6/DB/eqGptrf4BSRwcZQM32aZK 7Pj2XbGWIUrZrd70x1eAP9QE3P79Y2oLrsCgbZJfEwCgvz9JjGmQqQkRiTVzlZVCJYcyGGsD /0tbFCzD2h20ahe8rC1gbb3K3qk+LpBtvjBu1RY9drYk0NymiGbJWZgab6t1jM7sk2vuf0Py O9Hf9XBmK0uE9IgMaiCpc32XV9oASz6UJebwkX+zF2jG5I1BfnO9g7KlotcA/v5ClMjgo6Gl MDY4HxoSRu3i1cqqSDtVlt+AOVBJBACrZcnHAUSuCXBPy0jOlBhxPqRWv6ND4c9PH1xjQ3NP nxJuMBS8rnNg22uyfAgmBKNLpLgAGVRMZGaGoJObGf72s6TeIqKJo/LtggAS9qAUiuKVnygo 3wjfkS9A3DRO+SpU7JqWdsveeIQyeyEJ/8PTowmSQLakF+3fote9ybzd880fSmFuIEJldWxp Y2ggPGpiZXVsaWNoQHN1c2UuY29tPsJgBBMRAgAgBQJZN5xEAhsDBgsJCAcDAgQVAggDBBYC AwECHgECF4AACgkQoDSui/t3IH4J+wCfQ5jHdEjCRHj23O/5ttg9r9OIruwAn3103WUITZee e7Sbg12UgcQ5lv7SzsFNBFk3nEQQCACCuTjCjFOUdi5Nm244F+78kLghRcin/awv+IrTcIWF hUpSs1Y91iQQ7KItirz5uwCPlwejSJDQJLIS+QtJHaXDXeV6NI0Uef1hP20+y8qydDiVkv6l IreXjTb7DvksRgJNvCkWtYnlS3mYvQ9NzS9PhyALWbXnH6sIJd2O9lKS1Mrfq+y0IXCP10eS FFGg+Av3IQeFatkJAyju0PPthyTqxSI4lZYuJVPknzgaeuJv/2NccrPvmeDg6Coe7ZIeQ8Yj t0ARxu2xytAkkLCel1Lz1WLmwLstV30g80nkgZf/wr+/BXJW/oIvRlonUkxv+IbBM3dX2OV8 AmRv1ySWPTP7AAMFB/9PQK/VtlNUJvg8GXj9ootzrteGfVZVVT4XBJkfwBcpC/XcPzldjv+3 HYudvpdNK3lLujXeA5fLOH+Z/G9WBc5pFVSMocI71I8bT8lIAzreg0WvkWg5V2WZsUMlnDL9 mpwIGFhlbM3gfDMs7MPMu8YQRFVdUvtSpaAs8OFfGQ0ia3LGZcjA6Ik2+xcqscEJzNH+qh8V m5jjp28yZgaqTaRbg3M/+MTbMpicpZuqF4rnB0AQD12/3BNWDR6bmh+EkYSMcEIpQmBM51qM EKYTQGybRCjpnKHGOxG0rfFY1085mBDZCH5Kx0cl0HVJuQKC+dV2ZY5AqjcKwAxpE75MLFkr wkkEGBECAAkFAlk3nEQCGwwACgkQoDSui/t3IH7nnwCfcJWUDUFKdCsBH/E5d+0ZnMQi+G0A nAuWpQkjM1ASeQwSHEeAWPgskBQL
- Cc: Consulting <consulting@xxxxxxxxxxx>, Stefano Stabellini <sstabellini@xxxxxxxxxx>, Andrew Cooper3 <andrew.cooper3@xxxxxxxxxx>, George Dunlap <george.dunlap@xxxxxxxxxx>, Julien Grall <julien@xxxxxxx>, Wei Liu <wl@xxxxxxx>, Roger Pau <roger.pau@xxxxxxxxxx>, Bertrand Marquis <bertrand.marquis@xxxxxxx>, Michal Orzel <michal.orzel@xxxxxxx>, Xen Devel <xen-devel@xxxxxxxxxxxxxxxxxxxx>
- Delivery-date: Fri, 17 Nov 2023 11:39:26 +0000
- List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
On 17.11.2023 11:17, Nicola Vetrini wrote:
> Hi all,
>
> As discussed in this thread [1], which is about complying with MISRA C
> Rule 10.1,
> a macro was introduced to encapsulate a well-known construct:
>
> /*
> * Given an unsigned integer argument, expands to a mask where just the
> least
> * significant nonzero bit of the argument is set, or 0 if no bits are
> set.
> */
> #define ISOLATE_LSB(x) ((x) & -(x))
>
> This macro has a gained some calls in the subsequent patches in that
> thread, but concerns were raised around the fact that it would be better
> to devise a macro that evaluates its argument only once. A proposed
> solution is this (thanks to Jan Beulich):
>
> #define ISOLATE_LSB(x) ({ \
> typeof(x) x_ = (x); \
> x_ & -x_; \
> })
>
> However, it can't be used in all call sites that the previous macro
> would have once that series is committed, as can be seen in [2].
> Therefore, while the implementation looks ok,
> a case has been made to have separate macros, of which the latter form
> is preferred.
>
> The following points require some thought:
>
> - where the single evaluation macro should be placed?
> One proposed location is xen/include/xen/bitops.h
Or next to the existing one in macros.h. I can see pros and cons for either.
> - is the proposed form actually the best, or maybe it could be an inline
> function?
How would you make such a function type generic?
Jan
|