get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

GET /api/patches/98613/?format=api
HTTP 200 OK
Allow: GET, PUT, PATCH, HEAD, OPTIONS
Content-Type: application/json
Vary: Accept

{
    "id": 98613,
    "url": "http://patches.dpdk.org/api/patches/98613/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/20210910123003.85448-13-cristian.dumitrescu@intel.com/",
    "project": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/projects/1/?format=api",
        "name": "DPDK",
        "link_name": "dpdk",
        "list_id": "dev.dpdk.org",
        "list_email": "dev@dpdk.org",
        "web_url": "http://core.dpdk.org",
        "scm_url": "git://dpdk.org/dpdk",
        "webscm_url": "http://git.dpdk.org/dpdk",
        "list_archive_url": "https://inbox.dpdk.org/dev",
        "list_archive_url_format": "https://inbox.dpdk.org/dev/{}",
        "commit_url_format": ""
    },
    "msgid": "<20210910123003.85448-13-cristian.dumitrescu@intel.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/20210910123003.85448-13-cristian.dumitrescu@intel.com",
    "date": "2021-09-10T12:29:52",
    "name": "[13/24] pipeline: create inline functions for register instructions",
    "commit_ref": null,
    "pull_url": null,
    "state": "superseded",
    "archived": true,
    "hash": "2187062f25a713fe8ef155f0d2ed66c340e76751",
    "submitter": {
        "id": 19,
        "url": "http://patches.dpdk.org/api/people/19/?format=api",
        "name": "Cristian Dumitrescu",
        "email": "cristian.dumitrescu@intel.com"
    },
    "delegate": null,
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/20210910123003.85448-13-cristian.dumitrescu@intel.com/mbox/",
    "series": [
        {
            "id": 18838,
            "url": "http://patches.dpdk.org/api/series/18838/?format=api",
            "web_url": "http://patches.dpdk.org/project/dpdk/list/?series=18838",
            "date": "2021-09-10T12:29:44",
            "name": "[01/24] pipeline: move data structures to internal header file",
            "version": 1,
            "mbox": "http://patches.dpdk.org/series/18838/mbox/"
        }
    ],
    "comments": "http://patches.dpdk.org/api/patches/98613/comments/",
    "check": "warning",
    "checks": "http://patches.dpdk.org/api/patches/98613/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@inbox.dpdk.org",
        "Delivered-To": "patchwork@inbox.dpdk.org",
        "Received": [
            "from mails.dpdk.org (mails.dpdk.org [217.70.189.124])\n\tby inbox.dpdk.org (Postfix) with ESMTP id 1F2C6A0547;\n\tFri, 10 Sep 2021 14:31:41 +0200 (CEST)",
            "from [217.70.189.124] (localhost [127.0.0.1])\n\tby mails.dpdk.org (Postfix) with ESMTP id 2F03641166;\n\tFri, 10 Sep 2021 14:30:35 +0200 (CEST)",
            "from mga01.intel.com (mga01.intel.com [192.55.52.88])\n by mails.dpdk.org (Postfix) with ESMTP id CEF5540DDE\n for <dev@dpdk.org>; Fri, 10 Sep 2021 14:30:22 +0200 (CEST)",
            "from orsmga001.jf.intel.com ([10.7.209.18])\n by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;\n 10 Sep 2021 05:30:16 -0700",
            "from silpixa00400573.ir.intel.com (HELO\n silpixa00400573.ger.corp.intel.com) ([10.237.223.107])\n by orsmga001.jf.intel.com with ESMTP; 10 Sep 2021 05:30:15 -0700"
        ],
        "X-IronPort-AV": [
            "E=McAfee;i=\"6200,9189,10102\"; a=\"243386293\"",
            "E=Sophos;i=\"5.85,282,1624345200\"; d=\"scan'208\";a=\"243386293\"",
            "E=Sophos;i=\"5.85,282,1624345200\"; d=\"scan'208\";a=\"514279762\""
        ],
        "X-ExtLoop1": "1",
        "From": "Cristian Dumitrescu <cristian.dumitrescu@intel.com>",
        "To": "dev@dpdk.org",
        "Date": "Fri, 10 Sep 2021 13:29:52 +0100",
        "Message-Id": "<20210910123003.85448-13-cristian.dumitrescu@intel.com>",
        "X-Mailer": "git-send-email 2.17.1",
        "In-Reply-To": "<20210910123003.85448-1-cristian.dumitrescu@intel.com>",
        "References": "<20210910123003.85448-1-cristian.dumitrescu@intel.com>",
        "Subject": "[dpdk-dev] [PATCH 13/24] pipeline: create inline functions for\n register instructions",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.29",
        "Precedence": "list",
        "List-Id": "DPDK patches and discussions <dev.dpdk.org>",
        "List-Unsubscribe": "<https://mails.dpdk.org/options/dev>,\n <mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://mails.dpdk.org/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<https://mails.dpdk.org/listinfo/dev>,\n <mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "Signed-off-by: Cristian Dumitrescu <cristian.dumitrescu@intel.com>\n---\n lib/pipeline/rte_swx_pipeline.c          | 320 ++-------------\n lib/pipeline/rte_swx_pipeline_internal.h | 475 +++++++++++++++++++++++\n 2 files changed, 502 insertions(+), 293 deletions(-)",
    "diff": "diff --git a/lib/pipeline/rte_swx_pipeline.c b/lib/pipeline/rte_swx_pipeline.c\nindex 8956b6de27..c7117bb6da 100644\n--- a/lib/pipeline/rte_swx_pipeline.c\n+++ b/lib/pipeline/rte_swx_pipeline.c\n@@ -3901,134 +3901,14 @@ instr_regadd_translate(struct rte_swx_pipeline *p,\n \treturn 0;\n }\n \n-static inline uint64_t *\n-instr_regarray_regarray(struct rte_swx_pipeline *p, struct instruction *ip)\n-{\n-\tstruct regarray_runtime *r = &p->regarray_runtime[ip->regarray.regarray_id];\n-\treturn r->regarray;\n-}\n-\n-static inline uint64_t\n-instr_regarray_idx_hbo(struct rte_swx_pipeline *p, struct thread *t, struct instruction *ip)\n-{\n-\tstruct regarray_runtime *r = &p->regarray_runtime[ip->regarray.regarray_id];\n-\n-\tuint8_t *idx_struct = t->structs[ip->regarray.idx.struct_id];\n-\tuint64_t *idx64_ptr = (uint64_t *)&idx_struct[ip->regarray.idx.offset];\n-\tuint64_t idx64 = *idx64_ptr;\n-\tuint64_t idx64_mask = UINT64_MAX >> (64 - ip->regarray.idx.n_bits);\n-\tuint64_t idx = idx64 & idx64_mask & r->size_mask;\n-\n-\treturn idx;\n-}\n-\n-#if RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN\n-\n-static inline uint64_t\n-instr_regarray_idx_nbo(struct rte_swx_pipeline *p, struct thread *t, struct instruction *ip)\n-{\n-\tstruct regarray_runtime *r = &p->regarray_runtime[ip->regarray.regarray_id];\n-\n-\tuint8_t *idx_struct = t->structs[ip->regarray.idx.struct_id];\n-\tuint64_t *idx64_ptr = (uint64_t *)&idx_struct[ip->regarray.idx.offset];\n-\tuint64_t idx64 = *idx64_ptr;\n-\tuint64_t idx = (ntoh64(idx64) >> (64 - ip->regarray.idx.n_bits)) & r->size_mask;\n-\n-\treturn idx;\n-}\n-\n-#else\n-\n-#define instr_regarray_idx_nbo instr_regarray_idx_hbo\n-\n-#endif\n-\n-static inline uint64_t\n-instr_regarray_idx_imm(struct rte_swx_pipeline *p, struct instruction *ip)\n-{\n-\tstruct regarray_runtime *r = &p->regarray_runtime[ip->regarray.regarray_id];\n-\n-\tuint64_t idx = ip->regarray.idx_val & r->size_mask;\n-\n-\treturn idx;\n-}\n-\n-static inline uint64_t\n-instr_regarray_src_hbo(struct thread *t, struct instruction *ip)\n-{\n-\tuint8_t *src_struct = t->structs[ip->regarray.dstsrc.struct_id];\n-\tuint64_t *src64_ptr = (uint64_t *)&src_struct[ip->regarray.dstsrc.offset];\n-\tuint64_t src64 = *src64_ptr;\n-\tuint64_t src64_mask = UINT64_MAX >> (64 - ip->regarray.dstsrc.n_bits);\n-\tuint64_t src = src64 & src64_mask;\n-\n-\treturn src;\n-}\n-\n-#if RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN\n-\n-static inline uint64_t\n-instr_regarray_src_nbo(struct thread *t, struct instruction *ip)\n-{\n-\tuint8_t *src_struct = t->structs[ip->regarray.dstsrc.struct_id];\n-\tuint64_t *src64_ptr = (uint64_t *)&src_struct[ip->regarray.dstsrc.offset];\n-\tuint64_t src64 = *src64_ptr;\n-\tuint64_t src = ntoh64(src64) >> (64 - ip->regarray.dstsrc.n_bits);\n-\n-\treturn src;\n-}\n-\n-#else\n-\n-#define instr_regarray_src_nbo instr_regarray_src_hbo\n-\n-#endif\n-\n-static inline void\n-instr_regarray_dst_hbo_src_hbo_set(struct thread *t, struct instruction *ip, uint64_t src)\n-{\n-\tuint8_t *dst_struct = t->structs[ip->regarray.dstsrc.struct_id];\n-\tuint64_t *dst64_ptr = (uint64_t *)&dst_struct[ip->regarray.dstsrc.offset];\n-\tuint64_t dst64 = *dst64_ptr;\n-\tuint64_t dst64_mask = UINT64_MAX >> (64 - ip->regarray.dstsrc.n_bits);\n-\n-\t*dst64_ptr = (dst64 & ~dst64_mask) | (src & dst64_mask);\n-\n-}\n-\n-#if RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN\n-\n-static inline void\n-instr_regarray_dst_nbo_src_hbo_set(struct thread *t, struct instruction *ip, uint64_t src)\n-{\n-\tuint8_t *dst_struct = t->structs[ip->regarray.dstsrc.struct_id];\n-\tuint64_t *dst64_ptr = (uint64_t *)&dst_struct[ip->regarray.dstsrc.offset];\n-\tuint64_t dst64 = *dst64_ptr;\n-\tuint64_t dst64_mask = UINT64_MAX >> (64 - ip->regarray.dstsrc.n_bits);\n-\n-\tsrc = hton64(src) >> (64 - ip->regarray.dstsrc.n_bits);\n-\t*dst64_ptr = (dst64 & ~dst64_mask) | (src & dst64_mask);\n-}\n-\n-#else\n-\n-#define instr_regarray_dst_nbo_src_hbo_set instr_regarray_dst_hbo_src_hbo_set\n-\n-#endif\n-\n static inline void\n instr_regprefetch_rh_exec(struct rte_swx_pipeline *p)\n {\n \tstruct thread *t = &p->threads[p->thread_id];\n \tstruct instruction *ip = t->ip;\n-\tuint64_t *regarray, idx;\n-\n-\tTRACE(\"[Thread %2u] regprefetch (r[h])\\n\", p->thread_id);\n \n \t/* Structs. */\n-\tregarray = instr_regarray_regarray(p, ip);\n-\tidx = instr_regarray_idx_nbo(p, t, ip);\n-\trte_prefetch0(&regarray[idx]);\n+\t__instr_regprefetch_rh_exec(p, t, ip);\n \n \t/* Thread. */\n \tthread_ip_inc(p);\n@@ -4039,14 +3919,9 @@ instr_regprefetch_rm_exec(struct rte_swx_pipeline *p)\n {\n \tstruct thread *t = &p->threads[p->thread_id];\n \tstruct instruction *ip = t->ip;\n-\tuint64_t *regarray, idx;\n-\n-\tTRACE(\"[Thread %2u] regprefetch (r[m])\\n\", p->thread_id);\n \n \t/* Structs. */\n-\tregarray = instr_regarray_regarray(p, ip);\n-\tidx = instr_regarray_idx_hbo(p, t, ip);\n-\trte_prefetch0(&regarray[idx]);\n+\t__instr_regprefetch_rm_exec(p, t, ip);\n \n \t/* Thread. */\n \tthread_ip_inc(p);\n@@ -4057,14 +3932,9 @@ instr_regprefetch_ri_exec(struct rte_swx_pipeline *p)\n {\n \tstruct thread *t = &p->threads[p->thread_id];\n \tstruct instruction *ip = t->ip;\n-\tuint64_t *regarray, idx;\n-\n-\tTRACE(\"[Thread %2u] regprefetch (r[i])\\n\", p->thread_id);\n \n \t/* Structs. */\n-\tregarray = instr_regarray_regarray(p, ip);\n-\tidx = instr_regarray_idx_imm(p, ip);\n-\trte_prefetch0(&regarray[idx]);\n+\t__instr_regprefetch_ri_exec(p, t, ip);\n \n \t/* Thread. */\n \tthread_ip_inc(p);\n@@ -4075,14 +3945,9 @@ instr_regrd_hrh_exec(struct rte_swx_pipeline *p)\n {\n \tstruct thread *t = &p->threads[p->thread_id];\n \tstruct instruction *ip = t->ip;\n-\tuint64_t *regarray, idx;\n-\n-\tTRACE(\"[Thread %2u] regrd (h = r[h])\\n\", p->thread_id);\n \n \t/* Structs. */\n-\tregarray = instr_regarray_regarray(p, ip);\n-\tidx = instr_regarray_idx_nbo(p, t, ip);\n-\tinstr_regarray_dst_nbo_src_hbo_set(t, ip, regarray[idx]);\n+\t__instr_regrd_hrh_exec(p, t, ip);\n \n \t/* Thread. */\n \tthread_ip_inc(p);\n@@ -4093,14 +3958,9 @@ instr_regrd_hrm_exec(struct rte_swx_pipeline *p)\n {\n \tstruct thread *t = &p->threads[p->thread_id];\n \tstruct instruction *ip = t->ip;\n-\tuint64_t *regarray, idx;\n-\n-\tTRACE(\"[Thread %2u] regrd (h = r[m])\\n\", p->thread_id);\n \n \t/* Structs. */\n-\tregarray = instr_regarray_regarray(p, ip);\n-\tidx = instr_regarray_idx_hbo(p, t, ip);\n-\tinstr_regarray_dst_nbo_src_hbo_set(t, ip, regarray[idx]);\n+\t__instr_regrd_hrm_exec(p, t, ip);\n \n \t/* Thread. */\n \tthread_ip_inc(p);\n@@ -4111,14 +3971,9 @@ instr_regrd_mrh_exec(struct rte_swx_pipeline *p)\n {\n \tstruct thread *t = &p->threads[p->thread_id];\n \tstruct instruction *ip = t->ip;\n-\tuint64_t *regarray, idx;\n-\n-\tTRACE(\"[Thread %2u] regrd (m = r[h])\\n\", p->thread_id);\n \n \t/* Structs. */\n-\tregarray = instr_regarray_regarray(p, ip);\n-\tidx = instr_regarray_idx_nbo(p, t, ip);\n-\tinstr_regarray_dst_hbo_src_hbo_set(t, ip, regarray[idx]);\n+\t__instr_regrd_mrh_exec(p, t, ip);\n \n \t/* Thread. */\n \tthread_ip_inc(p);\n@@ -4129,12 +3984,9 @@ instr_regrd_mrm_exec(struct rte_swx_pipeline *p)\n {\n \tstruct thread *t = &p->threads[p->thread_id];\n \tstruct instruction *ip = t->ip;\n-\tuint64_t *regarray, idx;\n \n \t/* Structs. */\n-\tregarray = instr_regarray_regarray(p, ip);\n-\tidx = instr_regarray_idx_hbo(p, t, ip);\n-\tinstr_regarray_dst_hbo_src_hbo_set(t, ip, regarray[idx]);\n+\t__instr_regrd_mrm_exec(p, t, ip);\n \n \t/* Thread. */\n \tthread_ip_inc(p);\n@@ -4145,14 +3997,9 @@ instr_regrd_hri_exec(struct rte_swx_pipeline *p)\n {\n \tstruct thread *t = &p->threads[p->thread_id];\n \tstruct instruction *ip = t->ip;\n-\tuint64_t *regarray, idx;\n-\n-\tTRACE(\"[Thread %2u] regrd (h = r[i])\\n\", p->thread_id);\n \n \t/* Structs. */\n-\tregarray = instr_regarray_regarray(p, ip);\n-\tidx = instr_regarray_idx_imm(p, ip);\n-\tinstr_regarray_dst_nbo_src_hbo_set(t, ip, regarray[idx]);\n+\t__instr_regrd_hri_exec(p, t, ip);\n \n \t/* Thread. */\n \tthread_ip_inc(p);\n@@ -4163,14 +4010,9 @@ instr_regrd_mri_exec(struct rte_swx_pipeline *p)\n {\n \tstruct thread *t = &p->threads[p->thread_id];\n \tstruct instruction *ip = t->ip;\n-\tuint64_t *regarray, idx;\n-\n-\tTRACE(\"[Thread %2u] regrd (m = r[i])\\n\", p->thread_id);\n \n \t/* Structs. */\n-\tregarray = instr_regarray_regarray(p, ip);\n-\tidx = instr_regarray_idx_imm(p, ip);\n-\tinstr_regarray_dst_hbo_src_hbo_set(t, ip, regarray[idx]);\n+\t__instr_regrd_mri_exec(p, t, ip);\n \n \t/* Thread. */\n \tthread_ip_inc(p);\n@@ -4181,15 +4023,9 @@ instr_regwr_rhh_exec(struct rte_swx_pipeline *p)\n {\n \tstruct thread *t = &p->threads[p->thread_id];\n \tstruct instruction *ip = t->ip;\n-\tuint64_t *regarray, idx, src;\n-\n-\tTRACE(\"[Thread %2u] regwr (r[h] = h)\\n\", p->thread_id);\n \n \t/* Structs. */\n-\tregarray = instr_regarray_regarray(p, ip);\n-\tidx = instr_regarray_idx_nbo(p, t, ip);\n-\tsrc = instr_regarray_src_nbo(t, ip);\n-\tregarray[idx] = src;\n+\t__instr_regwr_rhh_exec(p, t, ip);\n \n \t/* Thread. */\n \tthread_ip_inc(p);\n@@ -4200,15 +4036,9 @@ instr_regwr_rhm_exec(struct rte_swx_pipeline *p)\n {\n \tstruct thread *t = &p->threads[p->thread_id];\n \tstruct instruction *ip = t->ip;\n-\tuint64_t *regarray, idx, src;\n-\n-\tTRACE(\"[Thread %2u] regwr (r[h] = m)\\n\", p->thread_id);\n \n \t/* Structs. */\n-\tregarray = instr_regarray_regarray(p, ip);\n-\tidx = instr_regarray_idx_nbo(p, t, ip);\n-\tsrc = instr_regarray_src_hbo(t, ip);\n-\tregarray[idx] = src;\n+\t__instr_regwr_rhm_exec(p, t, ip);\n \n \t/* Thread. */\n \tthread_ip_inc(p);\n@@ -4219,15 +4049,9 @@ instr_regwr_rmh_exec(struct rte_swx_pipeline *p)\n {\n \tstruct thread *t = &p->threads[p->thread_id];\n \tstruct instruction *ip = t->ip;\n-\tuint64_t *regarray, idx, src;\n-\n-\tTRACE(\"[Thread %2u] regwr (r[m] = h)\\n\", p->thread_id);\n \n \t/* Structs. */\n-\tregarray = instr_regarray_regarray(p, ip);\n-\tidx = instr_regarray_idx_hbo(p, t, ip);\n-\tsrc = instr_regarray_src_nbo(t, ip);\n-\tregarray[idx] = src;\n+\t__instr_regwr_rmh_exec(p, t, ip);\n \n \t/* Thread. */\n \tthread_ip_inc(p);\n@@ -4238,15 +4062,9 @@ instr_regwr_rmm_exec(struct rte_swx_pipeline *p)\n {\n \tstruct thread *t = &p->threads[p->thread_id];\n \tstruct instruction *ip = t->ip;\n-\tuint64_t *regarray, idx, src;\n-\n-\tTRACE(\"[Thread %2u] regwr (r[m] = m)\\n\", p->thread_id);\n \n \t/* Structs. */\n-\tregarray = instr_regarray_regarray(p, ip);\n-\tidx = instr_regarray_idx_hbo(p, t, ip);\n-\tsrc = instr_regarray_src_hbo(t, ip);\n-\tregarray[idx] = src;\n+\t__instr_regwr_rmm_exec(p, t, ip);\n \n \t/* Thread. */\n \tthread_ip_inc(p);\n@@ -4257,15 +4075,9 @@ instr_regwr_rhi_exec(struct rte_swx_pipeline *p)\n {\n \tstruct thread *t = &p->threads[p->thread_id];\n \tstruct instruction *ip = t->ip;\n-\tuint64_t *regarray, idx, src;\n-\n-\tTRACE(\"[Thread %2u] regwr (r[h] = i)\\n\", p->thread_id);\n \n \t/* Structs. */\n-\tregarray = instr_regarray_regarray(p, ip);\n-\tidx = instr_regarray_idx_nbo(p, t, ip);\n-\tsrc = ip->regarray.dstsrc_val;\n-\tregarray[idx] = src;\n+\t__instr_regwr_rhi_exec(p, t, ip);\n \n \t/* Thread. */\n \tthread_ip_inc(p);\n@@ -4276,15 +4088,9 @@ instr_regwr_rmi_exec(struct rte_swx_pipeline *p)\n {\n \tstruct thread *t = &p->threads[p->thread_id];\n \tstruct instruction *ip = t->ip;\n-\tuint64_t *regarray, idx, src;\n-\n-\tTRACE(\"[Thread %2u] regwr (r[m] = i)\\n\", p->thread_id);\n \n \t/* Structs. */\n-\tregarray = instr_regarray_regarray(p, ip);\n-\tidx = instr_regarray_idx_hbo(p, t, ip);\n-\tsrc = ip->regarray.dstsrc_val;\n-\tregarray[idx] = src;\n+\t__instr_regwr_rmi_exec(p, t, ip);\n \n \t/* Thread. */\n \tthread_ip_inc(p);\n@@ -4295,15 +4101,9 @@ instr_regwr_rih_exec(struct rte_swx_pipeline *p)\n {\n \tstruct thread *t = &p->threads[p->thread_id];\n \tstruct instruction *ip = t->ip;\n-\tuint64_t *regarray, idx, src;\n-\n-\tTRACE(\"[Thread %2u] regwr (r[i] = h)\\n\", p->thread_id);\n \n \t/* Structs. */\n-\tregarray = instr_regarray_regarray(p, ip);\n-\tidx = instr_regarray_idx_imm(p, ip);\n-\tsrc = instr_regarray_src_nbo(t, ip);\n-\tregarray[idx] = src;\n+\t__instr_regwr_rih_exec(p, t, ip);\n \n \t/* Thread. */\n \tthread_ip_inc(p);\n@@ -4314,15 +4114,9 @@ instr_regwr_rim_exec(struct rte_swx_pipeline *p)\n {\n \tstruct thread *t = &p->threads[p->thread_id];\n \tstruct instruction *ip = t->ip;\n-\tuint64_t *regarray, idx, src;\n-\n-\tTRACE(\"[Thread %2u] regwr (r[i] = m)\\n\", p->thread_id);\n \n \t/* Structs. */\n-\tregarray = instr_regarray_regarray(p, ip);\n-\tidx = instr_regarray_idx_imm(p, ip);\n-\tsrc = instr_regarray_src_hbo(t, ip);\n-\tregarray[idx] = src;\n+\t__instr_regwr_rim_exec(p, t, ip);\n \n \t/* Thread. */\n \tthread_ip_inc(p);\n@@ -4333,15 +4127,9 @@ instr_regwr_rii_exec(struct rte_swx_pipeline *p)\n {\n \tstruct thread *t = &p->threads[p->thread_id];\n \tstruct instruction *ip = t->ip;\n-\tuint64_t *regarray, idx, src;\n-\n-\tTRACE(\"[Thread %2u] regwr (r[i] = i)\\n\", p->thread_id);\n \n \t/* Structs. */\n-\tregarray = instr_regarray_regarray(p, ip);\n-\tidx = instr_regarray_idx_imm(p, ip);\n-\tsrc = ip->regarray.dstsrc_val;\n-\tregarray[idx] = src;\n+\t__instr_regwr_rii_exec(p, t, ip);\n \n \t/* Thread. */\n \tthread_ip_inc(p);\n@@ -4352,15 +4140,9 @@ instr_regadd_rhh_exec(struct rte_swx_pipeline *p)\n {\n \tstruct thread *t = &p->threads[p->thread_id];\n \tstruct instruction *ip = t->ip;\n-\tuint64_t *regarray, idx, src;\n-\n-\tTRACE(\"[Thread %2u] regadd (r[h] += h)\\n\", p->thread_id);\n \n \t/* Structs. */\n-\tregarray = instr_regarray_regarray(p, ip);\n-\tidx = instr_regarray_idx_nbo(p, t, ip);\n-\tsrc = instr_regarray_src_nbo(t, ip);\n-\tregarray[idx] += src;\n+\t__instr_regadd_rhh_exec(p, t, ip);\n \n \t/* Thread. */\n \tthread_ip_inc(p);\n@@ -4371,15 +4153,9 @@ instr_regadd_rhm_exec(struct rte_swx_pipeline *p)\n {\n \tstruct thread *t = &p->threads[p->thread_id];\n \tstruct instruction *ip = t->ip;\n-\tuint64_t *regarray, idx, src;\n-\n-\tTRACE(\"[Thread %2u] regadd (r[h] += m)\\n\", p->thread_id);\n \n \t/* Structs. */\n-\tregarray = instr_regarray_regarray(p, ip);\n-\tidx = instr_regarray_idx_nbo(p, t, ip);\n-\tsrc = instr_regarray_src_hbo(t, ip);\n-\tregarray[idx] += src;\n+\t__instr_regadd_rhm_exec(p, t, ip);\n \n \t/* Thread. */\n \tthread_ip_inc(p);\n@@ -4390,15 +4166,9 @@ instr_regadd_rmh_exec(struct rte_swx_pipeline *p)\n {\n \tstruct thread *t = &p->threads[p->thread_id];\n \tstruct instruction *ip = t->ip;\n-\tuint64_t *regarray, idx, src;\n-\n-\tTRACE(\"[Thread %2u] regadd (r[m] += h)\\n\", p->thread_id);\n \n \t/* Structs. */\n-\tregarray = instr_regarray_regarray(p, ip);\n-\tidx = instr_regarray_idx_hbo(p, t, ip);\n-\tsrc = instr_regarray_src_nbo(t, ip);\n-\tregarray[idx] += src;\n+\t__instr_regadd_rmh_exec(p, t, ip);\n \n \t/* Thread. */\n \tthread_ip_inc(p);\n@@ -4409,15 +4179,9 @@ instr_regadd_rmm_exec(struct rte_swx_pipeline *p)\n {\n \tstruct thread *t = &p->threads[p->thread_id];\n \tstruct instruction *ip = t->ip;\n-\tuint64_t *regarray, idx, src;\n-\n-\tTRACE(\"[Thread %2u] regadd (r[m] += m)\\n\", p->thread_id);\n \n \t/* Structs. */\n-\tregarray = instr_regarray_regarray(p, ip);\n-\tidx = instr_regarray_idx_hbo(p, t, ip);\n-\tsrc = instr_regarray_src_hbo(t, ip);\n-\tregarray[idx] += src;\n+\t__instr_regadd_rmm_exec(p, t, ip);\n \n \t/* Thread. */\n \tthread_ip_inc(p);\n@@ -4428,15 +4192,9 @@ instr_regadd_rhi_exec(struct rte_swx_pipeline *p)\n {\n \tstruct thread *t = &p->threads[p->thread_id];\n \tstruct instruction *ip = t->ip;\n-\tuint64_t *regarray, idx, src;\n-\n-\tTRACE(\"[Thread %2u] regadd (r[h] += i)\\n\", p->thread_id);\n \n \t/* Structs. */\n-\tregarray = instr_regarray_regarray(p, ip);\n-\tidx = instr_regarray_idx_nbo(p, t, ip);\n-\tsrc = ip->regarray.dstsrc_val;\n-\tregarray[idx] += src;\n+\t__instr_regadd_rhi_exec(p, t, ip);\n \n \t/* Thread. */\n \tthread_ip_inc(p);\n@@ -4447,15 +4205,9 @@ instr_regadd_rmi_exec(struct rte_swx_pipeline *p)\n {\n \tstruct thread *t = &p->threads[p->thread_id];\n \tstruct instruction *ip = t->ip;\n-\tuint64_t *regarray, idx, src;\n-\n-\tTRACE(\"[Thread %2u] regadd (r[m] += i)\\n\", p->thread_id);\n \n \t/* Structs. */\n-\tregarray = instr_regarray_regarray(p, ip);\n-\tidx = instr_regarray_idx_hbo(p, t, ip);\n-\tsrc = ip->regarray.dstsrc_val;\n-\tregarray[idx] += src;\n+\t__instr_regadd_rmi_exec(p, t, ip);\n \n \t/* Thread. */\n \tthread_ip_inc(p);\n@@ -4466,15 +4218,9 @@ instr_regadd_rih_exec(struct rte_swx_pipeline *p)\n {\n \tstruct thread *t = &p->threads[p->thread_id];\n \tstruct instruction *ip = t->ip;\n-\tuint64_t *regarray, idx, src;\n-\n-\tTRACE(\"[Thread %2u] regadd (r[i] += h)\\n\", p->thread_id);\n \n \t/* Structs. */\n-\tregarray = instr_regarray_regarray(p, ip);\n-\tidx = instr_regarray_idx_imm(p, ip);\n-\tsrc = instr_regarray_src_nbo(t, ip);\n-\tregarray[idx] += src;\n+\t__instr_regadd_rih_exec(p, t, ip);\n \n \t/* Thread. */\n \tthread_ip_inc(p);\n@@ -4485,15 +4231,9 @@ instr_regadd_rim_exec(struct rte_swx_pipeline *p)\n {\n \tstruct thread *t = &p->threads[p->thread_id];\n \tstruct instruction *ip = t->ip;\n-\tuint64_t *regarray, idx, src;\n-\n-\tTRACE(\"[Thread %2u] regadd (r[i] += m)\\n\", p->thread_id);\n \n \t/* Structs. */\n-\tregarray = instr_regarray_regarray(p, ip);\n-\tidx = instr_regarray_idx_imm(p, ip);\n-\tsrc = instr_regarray_src_hbo(t, ip);\n-\tregarray[idx] += src;\n+\t__instr_regadd_rim_exec(p, t, ip);\n \n \t/* Thread. */\n \tthread_ip_inc(p);\n@@ -4504,15 +4244,9 @@ instr_regadd_rii_exec(struct rte_swx_pipeline *p)\n {\n \tstruct thread *t = &p->threads[p->thread_id];\n \tstruct instruction *ip = t->ip;\n-\tuint64_t *regarray, idx, src;\n-\n-\tTRACE(\"[Thread %2u] regadd (r[i] += i)\\n\", p->thread_id);\n \n \t/* Structs. */\n-\tregarray = instr_regarray_regarray(p, ip);\n-\tidx = instr_regarray_idx_imm(p, ip);\n-\tsrc = ip->regarray.dstsrc_val;\n-\tregarray[idx] += src;\n+\t__instr_regadd_rii_exec(p, t, ip);\n \n \t/* Thread. */\n \tthread_ip_inc(p);\ndiff --git a/lib/pipeline/rte_swx_pipeline_internal.h b/lib/pipeline/rte_swx_pipeline_internal.h\nindex 7c4a2c05ef..2526c2f4c7 100644\n--- a/lib/pipeline/rte_swx_pipeline_internal.h\n+++ b/lib/pipeline/rte_swx_pipeline_internal.h\n@@ -2827,4 +2827,479 @@ __instr_alu_ckadd_struct_exec(struct rte_swx_pipeline *p __rte_unused,\n \t*dst16_ptr = (uint16_t)r;\n }\n \n+/*\n+ * Register array.\n+ */\n+static inline uint64_t *\n+instr_regarray_regarray(struct rte_swx_pipeline *p, const struct instruction *ip)\n+{\n+\tstruct regarray_runtime *r = &p->regarray_runtime[ip->regarray.regarray_id];\n+\treturn r->regarray;\n+}\n+\n+static inline uint64_t\n+instr_regarray_idx_hbo(struct rte_swx_pipeline *p, struct thread *t, const struct instruction *ip)\n+{\n+\tstruct regarray_runtime *r = &p->regarray_runtime[ip->regarray.regarray_id];\n+\n+\tuint8_t *idx_struct = t->structs[ip->regarray.idx.struct_id];\n+\tuint64_t *idx64_ptr = (uint64_t *)&idx_struct[ip->regarray.idx.offset];\n+\tuint64_t idx64 = *idx64_ptr;\n+\tuint64_t idx64_mask = UINT64_MAX >> (64 - ip->regarray.idx.n_bits);\n+\tuint64_t idx = idx64 & idx64_mask & r->size_mask;\n+\n+\treturn idx;\n+}\n+\n+#if RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN\n+\n+static inline uint64_t\n+instr_regarray_idx_nbo(struct rte_swx_pipeline *p, struct thread *t, const struct instruction *ip)\n+{\n+\tstruct regarray_runtime *r = &p->regarray_runtime[ip->regarray.regarray_id];\n+\n+\tuint8_t *idx_struct = t->structs[ip->regarray.idx.struct_id];\n+\tuint64_t *idx64_ptr = (uint64_t *)&idx_struct[ip->regarray.idx.offset];\n+\tuint64_t idx64 = *idx64_ptr;\n+\tuint64_t idx = (ntoh64(idx64) >> (64 - ip->regarray.idx.n_bits)) & r->size_mask;\n+\n+\treturn idx;\n+}\n+\n+#else\n+\n+#define instr_regarray_idx_nbo instr_regarray_idx_hbo\n+\n+#endif\n+\n+static inline uint64_t\n+instr_regarray_idx_imm(struct rte_swx_pipeline *p, const struct instruction *ip)\n+{\n+\tstruct regarray_runtime *r = &p->regarray_runtime[ip->regarray.regarray_id];\n+\n+\tuint64_t idx = ip->regarray.idx_val & r->size_mask;\n+\n+\treturn idx;\n+}\n+\n+static inline uint64_t\n+instr_regarray_src_hbo(struct thread *t, const struct instruction *ip)\n+{\n+\tuint8_t *src_struct = t->structs[ip->regarray.dstsrc.struct_id];\n+\tuint64_t *src64_ptr = (uint64_t *)&src_struct[ip->regarray.dstsrc.offset];\n+\tuint64_t src64 = *src64_ptr;\n+\tuint64_t src64_mask = UINT64_MAX >> (64 - ip->regarray.dstsrc.n_bits);\n+\tuint64_t src = src64 & src64_mask;\n+\n+\treturn src;\n+}\n+\n+#if RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN\n+\n+static inline uint64_t\n+instr_regarray_src_nbo(struct thread *t, const struct instruction *ip)\n+{\n+\tuint8_t *src_struct = t->structs[ip->regarray.dstsrc.struct_id];\n+\tuint64_t *src64_ptr = (uint64_t *)&src_struct[ip->regarray.dstsrc.offset];\n+\tuint64_t src64 = *src64_ptr;\n+\tuint64_t src = ntoh64(src64) >> (64 - ip->regarray.dstsrc.n_bits);\n+\n+\treturn src;\n+}\n+\n+#else\n+\n+#define instr_regarray_src_nbo instr_regarray_src_hbo\n+\n+#endif\n+\n+static inline void\n+instr_regarray_dst_hbo_src_hbo_set(struct thread *t, const struct instruction *ip, uint64_t src)\n+{\n+\tuint8_t *dst_struct = t->structs[ip->regarray.dstsrc.struct_id];\n+\tuint64_t *dst64_ptr = (uint64_t *)&dst_struct[ip->regarray.dstsrc.offset];\n+\tuint64_t dst64 = *dst64_ptr;\n+\tuint64_t dst64_mask = UINT64_MAX >> (64 - ip->regarray.dstsrc.n_bits);\n+\n+\t*dst64_ptr = (dst64 & ~dst64_mask) | (src & dst64_mask);\n+\n+}\n+\n+#if RTE_BYTE_ORDER == RTE_LITTLE_ENDIAN\n+\n+static inline void\n+instr_regarray_dst_nbo_src_hbo_set(struct thread *t, const struct instruction *ip, uint64_t src)\n+{\n+\tuint8_t *dst_struct = t->structs[ip->regarray.dstsrc.struct_id];\n+\tuint64_t *dst64_ptr = (uint64_t *)&dst_struct[ip->regarray.dstsrc.offset];\n+\tuint64_t dst64 = *dst64_ptr;\n+\tuint64_t dst64_mask = UINT64_MAX >> (64 - ip->regarray.dstsrc.n_bits);\n+\n+\tsrc = hton64(src) >> (64 - ip->regarray.dstsrc.n_bits);\n+\t*dst64_ptr = (dst64 & ~dst64_mask) | (src & dst64_mask);\n+}\n+\n+#else\n+\n+#define instr_regarray_dst_nbo_src_hbo_set instr_regarray_dst_hbo_src_hbo_set\n+\n+#endif\n+\n+static inline void\n+__instr_regprefetch_rh_exec(struct rte_swx_pipeline *p,\n+\t\t\t    struct thread *t,\n+\t\t\t    const struct instruction *ip)\n+{\n+\tuint64_t *regarray, idx;\n+\n+\tTRACE(\"[Thread %2u] regprefetch (r[h])\\n\", p->thread_id);\n+\n+\tregarray = instr_regarray_regarray(p, ip);\n+\tidx = instr_regarray_idx_nbo(p, t, ip);\n+\trte_prefetch0(&regarray[idx]);\n+}\n+\n+static inline void\n+__instr_regprefetch_rm_exec(struct rte_swx_pipeline *p,\n+\t\t\t    struct thread *t,\n+\t\t\t    const struct instruction *ip)\n+{\n+\tuint64_t *regarray, idx;\n+\n+\tTRACE(\"[Thread %2u] regprefetch (r[m])\\n\", p->thread_id);\n+\n+\tregarray = instr_regarray_regarray(p, ip);\n+\tidx = instr_regarray_idx_hbo(p, t, ip);\n+\trte_prefetch0(&regarray[idx]);\n+}\n+\n+static inline void\n+__instr_regprefetch_ri_exec(struct rte_swx_pipeline *p,\n+\t\t\t    struct thread *t __rte_unused,\n+\t\t\t    const struct instruction *ip)\n+{\n+\tuint64_t *regarray, idx;\n+\n+\tTRACE(\"[Thread %2u] regprefetch (r[i])\\n\", p->thread_id);\n+\n+\tregarray = instr_regarray_regarray(p, ip);\n+\tidx = instr_regarray_idx_imm(p, ip);\n+\trte_prefetch0(&regarray[idx]);\n+}\n+\n+static inline void\n+__instr_regrd_hrh_exec(struct rte_swx_pipeline *p,\n+\t\t       struct thread *t,\n+\t\t       const struct instruction *ip)\n+{\n+\tuint64_t *regarray, idx;\n+\n+\tTRACE(\"[Thread %2u] regrd (h = r[h])\\n\", p->thread_id);\n+\n+\tregarray = instr_regarray_regarray(p, ip);\n+\tidx = instr_regarray_idx_nbo(p, t, ip);\n+\tinstr_regarray_dst_nbo_src_hbo_set(t, ip, regarray[idx]);\n+}\n+\n+static inline void\n+__instr_regrd_hrm_exec(struct rte_swx_pipeline *p,\n+\t\t       struct thread *t,\n+\t\t       const struct instruction *ip)\n+{\n+\tuint64_t *regarray, idx;\n+\n+\tTRACE(\"[Thread %2u] regrd (h = r[m])\\n\", p->thread_id);\n+\n+\t/* Structs. */\n+\tregarray = instr_regarray_regarray(p, ip);\n+\tidx = instr_regarray_idx_hbo(p, t, ip);\n+\tinstr_regarray_dst_nbo_src_hbo_set(t, ip, regarray[idx]);\n+}\n+\n+static inline void\n+__instr_regrd_mrh_exec(struct rte_swx_pipeline *p, struct thread *t, const struct instruction *ip)\n+{\n+\tuint64_t *regarray, idx;\n+\n+\tTRACE(\"[Thread %2u] regrd (m = r[h])\\n\", p->thread_id);\n+\n+\tregarray = instr_regarray_regarray(p, ip);\n+\tidx = instr_regarray_idx_nbo(p, t, ip);\n+\tinstr_regarray_dst_hbo_src_hbo_set(t, ip, regarray[idx]);\n+}\n+\n+static inline void\n+__instr_regrd_mrm_exec(struct rte_swx_pipeline *p, struct thread *t, const struct instruction *ip)\n+{\n+\tuint64_t *regarray, idx;\n+\n+\tTRACE(\"[Thread %2u] regrd (m = r[m])\\n\", p->thread_id);\n+\n+\tregarray = instr_regarray_regarray(p, ip);\n+\tidx = instr_regarray_idx_hbo(p, t, ip);\n+\tinstr_regarray_dst_hbo_src_hbo_set(t, ip, regarray[idx]);\n+}\n+\n+static inline void\n+__instr_regrd_hri_exec(struct rte_swx_pipeline *p, struct thread *t, const struct instruction *ip)\n+{\n+\tuint64_t *regarray, idx;\n+\n+\tTRACE(\"[Thread %2u] regrd (h = r[i])\\n\", p->thread_id);\n+\n+\tregarray = instr_regarray_regarray(p, ip);\n+\tidx = instr_regarray_idx_imm(p, ip);\n+\tinstr_regarray_dst_nbo_src_hbo_set(t, ip, regarray[idx]);\n+}\n+\n+static inline void\n+__instr_regrd_mri_exec(struct rte_swx_pipeline *p, struct thread *t, const struct instruction *ip)\n+{\n+\tuint64_t *regarray, idx;\n+\n+\tTRACE(\"[Thread %2u] regrd (m = r[i])\\n\", p->thread_id);\n+\n+\tregarray = instr_regarray_regarray(p, ip);\n+\tidx = instr_regarray_idx_imm(p, ip);\n+\tinstr_regarray_dst_hbo_src_hbo_set(t, ip, regarray[idx]);\n+}\n+\n+static inline void\n+__instr_regwr_rhh_exec(struct rte_swx_pipeline *p, struct thread *t, const struct instruction *ip)\n+{\n+\tuint64_t *regarray, idx, src;\n+\n+\tTRACE(\"[Thread %2u] regwr (r[h] = h)\\n\", p->thread_id);\n+\n+\tregarray = instr_regarray_regarray(p, ip);\n+\tidx = instr_regarray_idx_nbo(p, t, ip);\n+\tsrc = instr_regarray_src_nbo(t, ip);\n+\tregarray[idx] = src;\n+}\n+\n+static inline void\n+__instr_regwr_rhm_exec(struct rte_swx_pipeline *p, struct thread *t, const struct instruction *ip)\n+{\n+\tuint64_t *regarray, idx, src;\n+\n+\tTRACE(\"[Thread %2u] regwr (r[h] = m)\\n\", p->thread_id);\n+\n+\tregarray = instr_regarray_regarray(p, ip);\n+\tidx = instr_regarray_idx_nbo(p, t, ip);\n+\tsrc = instr_regarray_src_hbo(t, ip);\n+\tregarray[idx] = src;\n+}\n+\n+static inline void\n+__instr_regwr_rmh_exec(struct rte_swx_pipeline *p, struct thread *t, const struct instruction *ip)\n+{\n+\tuint64_t *regarray, idx, src;\n+\n+\tTRACE(\"[Thread %2u] regwr (r[m] = h)\\n\", p->thread_id);\n+\n+\tregarray = instr_regarray_regarray(p, ip);\n+\tidx = instr_regarray_idx_hbo(p, t, ip);\n+\tsrc = instr_regarray_src_nbo(t, ip);\n+\tregarray[idx] = src;\n+}\n+\n+static inline void\n+__instr_regwr_rmm_exec(struct rte_swx_pipeline *p, struct thread *t, const struct instruction *ip)\n+{\n+\tuint64_t *regarray, idx, src;\n+\n+\tTRACE(\"[Thread %2u] regwr (r[m] = m)\\n\", p->thread_id);\n+\n+\tregarray = instr_regarray_regarray(p, ip);\n+\tidx = instr_regarray_idx_hbo(p, t, ip);\n+\tsrc = instr_regarray_src_hbo(t, ip);\n+\tregarray[idx] = src;\n+}\n+\n+static inline void\n+__instr_regwr_rhi_exec(struct rte_swx_pipeline *p, struct thread *t, const struct instruction *ip)\n+{\n+\tuint64_t *regarray, idx, src;\n+\n+\tTRACE(\"[Thread %2u] regwr (r[h] = i)\\n\", p->thread_id);\n+\n+\tregarray = instr_regarray_regarray(p, ip);\n+\tidx = instr_regarray_idx_nbo(p, t, ip);\n+\tsrc = ip->regarray.dstsrc_val;\n+\tregarray[idx] = src;\n+}\n+\n+static inline void\n+__instr_regwr_rmi_exec(struct rte_swx_pipeline *p, struct thread *t, const struct instruction *ip)\n+{\n+\tuint64_t *regarray, idx, src;\n+\n+\tTRACE(\"[Thread %2u] regwr (r[m] = i)\\n\", p->thread_id);\n+\n+\tregarray = instr_regarray_regarray(p, ip);\n+\tidx = instr_regarray_idx_hbo(p, t, ip);\n+\tsrc = ip->regarray.dstsrc_val;\n+\tregarray[idx] = src;\n+}\n+\n+static inline void\n+__instr_regwr_rih_exec(struct rte_swx_pipeline *p, struct thread *t, const struct instruction *ip)\n+{\n+\tuint64_t *regarray, idx, src;\n+\n+\tTRACE(\"[Thread %2u] regwr (r[i] = h)\\n\", p->thread_id);\n+\n+\tregarray = instr_regarray_regarray(p, ip);\n+\tidx = instr_regarray_idx_imm(p, ip);\n+\tsrc = instr_regarray_src_nbo(t, ip);\n+\tregarray[idx] = src;\n+}\n+\n+static inline void\n+__instr_regwr_rim_exec(struct rte_swx_pipeline *p, struct thread *t, const struct instruction *ip)\n+{\n+\tuint64_t *regarray, idx, src;\n+\n+\tTRACE(\"[Thread %2u] regwr (r[i] = m)\\n\", p->thread_id);\n+\n+\tregarray = instr_regarray_regarray(p, ip);\n+\tidx = instr_regarray_idx_imm(p, ip);\n+\tsrc = instr_regarray_src_hbo(t, ip);\n+\tregarray[idx] = src;\n+}\n+\n+static inline void\n+__instr_regwr_rii_exec(struct rte_swx_pipeline *p,\n+\t\t       struct thread *t __rte_unused,\n+\t\t       const struct instruction *ip)\n+{\n+\tuint64_t *regarray, idx, src;\n+\n+\tTRACE(\"[Thread %2u] regwr (r[i] = i)\\n\", p->thread_id);\n+\n+\tregarray = instr_regarray_regarray(p, ip);\n+\tidx = instr_regarray_idx_imm(p, ip);\n+\tsrc = ip->regarray.dstsrc_val;\n+\tregarray[idx] = src;\n+}\n+\n+static inline void\n+__instr_regadd_rhh_exec(struct rte_swx_pipeline *p, struct thread *t, const struct instruction *ip)\n+{\n+\tuint64_t *regarray, idx, src;\n+\n+\tTRACE(\"[Thread %2u] regadd (r[h] += h)\\n\", p->thread_id);\n+\n+\tregarray = instr_regarray_regarray(p, ip);\n+\tidx = instr_regarray_idx_nbo(p, t, ip);\n+\tsrc = instr_regarray_src_nbo(t, ip);\n+\tregarray[idx] += src;\n+}\n+\n+static inline void\n+__instr_regadd_rhm_exec(struct rte_swx_pipeline *p, struct thread *t, const struct instruction *ip)\n+{\n+\tuint64_t *regarray, idx, src;\n+\n+\tTRACE(\"[Thread %2u] regadd (r[h] += m)\\n\", p->thread_id);\n+\n+\tregarray = instr_regarray_regarray(p, ip);\n+\tidx = instr_regarray_idx_nbo(p, t, ip);\n+\tsrc = instr_regarray_src_hbo(t, ip);\n+\tregarray[idx] += src;\n+}\n+\n+static inline void\n+__instr_regadd_rmh_exec(struct rte_swx_pipeline *p, struct thread *t, const struct instruction *ip)\n+{\n+\tuint64_t *regarray, idx, src;\n+\n+\tTRACE(\"[Thread %2u] regadd (r[m] += h)\\n\", p->thread_id);\n+\n+\tregarray = instr_regarray_regarray(p, ip);\n+\tidx = instr_regarray_idx_hbo(p, t, ip);\n+\tsrc = instr_regarray_src_nbo(t, ip);\n+\tregarray[idx] += src;\n+}\n+\n+static inline void\n+__instr_regadd_rmm_exec(struct rte_swx_pipeline *p, struct thread *t, const struct instruction *ip)\n+{\n+\tuint64_t *regarray, idx, src;\n+\n+\tTRACE(\"[Thread %2u] regadd (r[m] += m)\\n\", p->thread_id);\n+\n+\tregarray = instr_regarray_regarray(p, ip);\n+\tidx = instr_regarray_idx_hbo(p, t, ip);\n+\tsrc = instr_regarray_src_hbo(t, ip);\n+\tregarray[idx] += src;\n+}\n+\n+static inline void\n+__instr_regadd_rhi_exec(struct rte_swx_pipeline *p, struct thread *t, const struct instruction *ip)\n+{\n+\tuint64_t *regarray, idx, src;\n+\n+\tTRACE(\"[Thread %2u] regadd (r[h] += i)\\n\", p->thread_id);\n+\n+\tregarray = instr_regarray_regarray(p, ip);\n+\tidx = instr_regarray_idx_nbo(p, t, ip);\n+\tsrc = ip->regarray.dstsrc_val;\n+\tregarray[idx] += src;\n+}\n+\n+static inline void\n+__instr_regadd_rmi_exec(struct rte_swx_pipeline *p, struct thread *t, const struct instruction *ip)\n+{\n+\tuint64_t *regarray, idx, src;\n+\n+\tTRACE(\"[Thread %2u] regadd (r[m] += i)\\n\", p->thread_id);\n+\n+\tregarray = instr_regarray_regarray(p, ip);\n+\tidx = instr_regarray_idx_hbo(p, t, ip);\n+\tsrc = ip->regarray.dstsrc_val;\n+\tregarray[idx] += src;\n+}\n+\n+static inline void\n+__instr_regadd_rih_exec(struct rte_swx_pipeline *p, struct thread *t, const struct instruction *ip)\n+{\n+\tuint64_t *regarray, idx, src;\n+\n+\tTRACE(\"[Thread %2u] regadd (r[i] += h)\\n\", p->thread_id);\n+\n+\tregarray = instr_regarray_regarray(p, ip);\n+\tidx = instr_regarray_idx_imm(p, ip);\n+\tsrc = instr_regarray_src_nbo(t, ip);\n+\tregarray[idx] += src;\n+}\n+\n+static inline void\n+__instr_regadd_rim_exec(struct rte_swx_pipeline *p, struct thread *t, const struct instruction *ip)\n+{\n+\tuint64_t *regarray, idx, src;\n+\n+\tTRACE(\"[Thread %2u] regadd (r[i] += m)\\n\", p->thread_id);\n+\n+\tregarray = instr_regarray_regarray(p, ip);\n+\tidx = instr_regarray_idx_imm(p, ip);\n+\tsrc = instr_regarray_src_hbo(t, ip);\n+\tregarray[idx] += src;\n+}\n+\n+static inline void\n+__instr_regadd_rii_exec(struct rte_swx_pipeline *p,\n+\t\t\tstruct thread *t __rte_unused,\n+\t\t\tconst struct instruction *ip)\n+{\n+\tuint64_t *regarray, idx, src;\n+\n+\tTRACE(\"[Thread %2u] regadd (r[i] += i)\\n\", p->thread_id);\n+\n+\tregarray = instr_regarray_regarray(p, ip);\n+\tidx = instr_regarray_idx_imm(p, ip);\n+\tsrc = ip->regarray.dstsrc_val;\n+\tregarray[idx] += src;\n+}\n+\n #endif\n",
    "prefixes": [
        "13/24"
    ]
}