From: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
To: Peter Zijlstra <peterz@infradead.org>
Cc: linux-kernel@vger.kernel.org
Subject: Re: [RFC PATCH 1/3] selftests/rseq: Implement rseq_unqual_scalar_typeof
Date: Thu, 4 May 2023 10:36:11 -0400 [thread overview]
Message-ID: <6605c787-941f-cf3c-b0eb-345a35a32cbb@efficios.com> (raw)
In-Reply-To: <20230504060923.GB1734100@hirez.programming.kicks-ass.net>
On 2023-05-04 02:09, Peter Zijlstra wrote:
> On Wed, May 03, 2023 at 04:13:22PM -0400, Mathieu Desnoyers wrote:
>> Allow defining variables and perform cast with a typeof which removes
>> the volatile and const qualifiers.
>>
>> This prevents declaring a stack variable with a volatile qualifier
>> within a macro, which would generate sub-optimal assembler.
>>
>> This is imported from the "librseq" project.
>>
>> Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
>> ---
>> tools/testing/selftests/rseq/compiler.h | 27 +++++++++++++++++++++++++
>> 1 file changed, 27 insertions(+)
>>
>> diff --git a/tools/testing/selftests/rseq/compiler.h b/tools/testing/selftests/rseq/compiler.h
>> index f47092bddeba..8dc7f881e253 100644
>> --- a/tools/testing/selftests/rseq/compiler.h
>> +++ b/tools/testing/selftests/rseq/compiler.h
>> @@ -33,4 +33,31 @@
>> #define RSEQ_COMBINE_TOKENS(_tokena, _tokenb) \
>> RSEQ__COMBINE_TOKENS(_tokena, _tokenb)
>>
>> +#ifdef __cplusplus
>> +#define rseq_unqual_scalar_typeof(x) \
>> + std::remove_cv<std::remove_reference<decltype(x)>::type>::type
>> +#else
>> +/*
>> + * Use C11 _Generic to express unqualified type from expression. This removes
>> + * volatile qualifier from expression type.
>> + */
>> +#define rseq_unqual_scalar_typeof(x) \
>> + __typeof__( \
>> + _Generic((x), \
>> + char: (char)0, \
>> + unsigned char: (unsigned char)0, \
>> + signed char: (signed char)0, \
>> + unsigned short: (unsigned short)0, \
>> + signed short: (signed short)0, \
>> + unsigned int: (unsigned int)0, \
>> + signed int: (signed int)0, \
>> + unsigned long: (unsigned long)0, \
>> + signed long: (signed long)0, \
>> + unsigned long long: (unsigned long long)0, \
>> + signed long long: (signed long long)0, \
>> + default: (x) \
>> + ) \
>> + )
>
> FWIW, I like how the kernel version uses a little helper for the
> signed/unsigned pairs. Makes it a little more readable.
OK, will update for next round:
#define rseq_scalar_type_to_expr(type) \
unsigned type: (unsigned type)0, \
signed type: (signed type)0
/*
* Use C11 _Generic to express unqualified type from expression. This removes
* volatile qualifier from expression type.
*/
#define rseq_unqual_scalar_typeof(x) \
__typeof__( \
_Generic((x), \
char: (char)0, \
rseq_scalar_type_to_expr(char), \
rseq_scalar_type_to_expr(short), \
rseq_scalar_type_to_expr(int), \
rseq_scalar_type_to_expr(long), \
rseq_scalar_type_to_expr(long long), \
default: (x) \
) \
)
Thanks,
Mathieu
>
>> +#endif
>> +
>> #endif /* RSEQ_COMPILER_H_ */
>> --
>> 2.25.1
>>
--
Mathieu Desnoyers
EfficiOS Inc.
https://www.efficios.com
prev parent reply other threads:[~2023-05-04 14:36 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-03 20:13 Mathieu Desnoyers
2023-05-03 20:13 ` [RFC PATCH 2/3] selftests/rseq: Fix arm64 buggy load-acquire/store-release macros Mathieu Desnoyers
2023-05-03 20:13 ` [RFC PATCH 3/3] selftests/rseq: Use rseq_unqual_scalar_typeof in macros Mathieu Desnoyers
2023-05-04 6:09 ` [RFC PATCH 1/3] selftests/rseq: Implement rseq_unqual_scalar_typeof Peter Zijlstra
2023-05-04 14:36 ` Mathieu Desnoyers [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=6605c787-941f-cf3c-b0eb-345a35a32cbb@efficios.com \
--to=mathieu.desnoyers@efficios.com \
--cc=linux-kernel@vger.kernel.org \
--cc=peterz@infradead.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®