[PATCH v6 14/39] acl: use C11 alignas
Konstantin Ananyev
konstantin.ananyev at huawei.com
Tue Feb 27 10:38:13 CET 2024
> Subject: [PATCH v6 14/39] acl: use C11 alignas
>
> The current location used for __rte_aligned(a) for alignment of types
> and variables is not compatible with MSVC. There is only a single
> location accepted by both toolchains.
>
> For variables standard C11 offers alignas(a) supported by conformant
> compilers i.e. both MSVC and GCC.
>
> For types the standard offers no alignment facility that compatibly
> interoperates with C and C++ but may be achieved by relocating the
> placement of __rte_aligned(a) to the aforementioned location accepted
> by all currently supported toolchains.
>
> To allow alignment for both compilers do the following:
>
> * Move __rte_aligned from the end of {struct,union} definitions to
> be between {struct,union} and tag.
>
> The placement between {struct,union} and the tag allows the desired
> alignment to be imparted on the type regardless of the toolchain being
> used for all of GCC, LLVM, MSVC compilers building both C and C++.
>
> * Replace use of __rte_aligned(a) on variables/fields with alignas(a).
>
> Signed-off-by: Tyler Retzlaff <roretzla at linux.microsoft.com>
> Acked-by: Morten Brørup <mb at smartsharesystems.com>
> ---
> lib/acl/acl_run.h | 4 ++--
> lib/acl/acl_run_altivec.h | 6 ++++--
> lib/acl/acl_run_neon.h | 6 ++++--
> 3 files changed, 10 insertions(+), 6 deletions(-)
>
> diff --git a/lib/acl/acl_run.h b/lib/acl/acl_run.h
> index 7d215de..7f09241 100644
> --- a/lib/acl/acl_run.h
> +++ b/lib/acl/acl_run.h
> @@ -55,12 +55,12 @@ struct acl_flow_data {
> * Structure to maintain running results for
> * a single packet (up to 4 tries).
> */
> -struct completion {
> +struct __rte_aligned(XMM_SIZE) completion {
> uint32_t *results; /* running results. */
> int32_t priority[RTE_ACL_MAX_CATEGORIES]; /* running priorities. */
> uint32_t count; /* num of remaining tries */
> /* true for allocated struct */
> -} __rte_aligned(XMM_SIZE);
> +};
>
> /*
> * One parms structure for each slot in the search engine.
> diff --git a/lib/acl/acl_run_altivec.h b/lib/acl/acl_run_altivec.h
> index 3c30466..2d398ff 100644
> --- a/lib/acl/acl_run_altivec.h
> +++ b/lib/acl/acl_run_altivec.h
> @@ -3,15 +3,17 @@
> * Copyright (C) IBM Corporation 2016.
> */
>
> +#include <stdalign.h>
> +
> #include "acl_run.h"
> #include "acl_vect.h"
>
> -struct _altivec_acl_const {
> +alignas(RTE_CACHE_LINE_SIZE) struct _altivec_acl_const {
> rte_xmm_t xmm_shuffle_input;
> rte_xmm_t xmm_index_mask;
> rte_xmm_t xmm_ones_16;
> rte_xmm_t range_base;
> -} altivec_acl_const __rte_cache_aligned = {
> +} altivec_acl_const = {
> {
> .u32 = {0x00000000, 0x04040404, 0x08080808, 0x0c0c0c0c}
> },
> diff --git a/lib/acl/acl_run_neon.h b/lib/acl/acl_run_neon.h
> index 69d1b6d..63074f8 100644
> --- a/lib/acl/acl_run_neon.h
> +++ b/lib/acl/acl_run_neon.h
> @@ -2,14 +2,16 @@
> * Copyright(c) 2015 Cavium, Inc
> */
>
> +#include <stdalign.h>
> +
> #include "acl_run.h"
> #include "acl_vect.h"
>
> -struct _neon_acl_const {
> +alignas(RTE_CACHE_LINE_SIZE) struct _neon_acl_const {
> rte_xmm_t xmm_shuffle_input;
> rte_xmm_t xmm_index_mask;
> rte_xmm_t range_base;
> -} neon_acl_const __rte_cache_aligned = {
> +} neon_acl_const = {
> {
> .u32 = {0x00000000, 0x04040404, 0x08080808, 0x0c0c0c0c}
> },
> --
Acked-by: Konstantin Ananyev <konstantin.ananyev at huawei.com>
> 1.8.3.1
More information about the dev
mailing list