get:
Show a patch.

patch:
Update a patch.

put:
Update a patch.

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

{
    "id": 11456,
    "url": "http://patches.dpdk.org/api/patches/11456/?format=api",
    "web_url": "http://patches.dpdk.org/project/dpdk/patch/1457668379-7316-2-git-send-email-jerin.jacob@caviumnetworks.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": "<1457668379-7316-2-git-send-email-jerin.jacob@caviumnetworks.com>",
    "list_archive_url": "https://inbox.dpdk.org/dev/1457668379-7316-2-git-send-email-jerin.jacob@caviumnetworks.com",
    "date": "2016-03-11T03:52:57",
    "name": "[dpdk-dev,v5,1/3] lpm: make rte_lpm_lookupx4 API definition architecture agnostic",
    "commit_ref": null,
    "pull_url": null,
    "state": "accepted",
    "archived": true,
    "hash": "dfe25a21fd5e403e369eb54723221c309eab4189",
    "submitter": {
        "id": 305,
        "url": "http://patches.dpdk.org/api/people/305/?format=api",
        "name": "Jerin Jacob",
        "email": "jerin.jacob@caviumnetworks.com"
    },
    "delegate": {
        "id": 1,
        "url": "http://patches.dpdk.org/api/users/1/?format=api",
        "username": "tmonjalo",
        "first_name": "Thomas",
        "last_name": "Monjalon",
        "email": "thomas@monjalon.net"
    },
    "mbox": "http://patches.dpdk.org/project/dpdk/patch/1457668379-7316-2-git-send-email-jerin.jacob@caviumnetworks.com/mbox/",
    "series": [],
    "comments": "http://patches.dpdk.org/api/patches/11456/comments/",
    "check": "pending",
    "checks": "http://patches.dpdk.org/api/patches/11456/checks/",
    "tags": {},
    "related": [],
    "headers": {
        "Return-Path": "<dev-bounces@dpdk.org>",
        "X-Original-To": "patchwork@dpdk.org",
        "Delivered-To": "patchwork@dpdk.org",
        "Received": [
            "from [92.243.14.124] (localhost [IPv6:::1])\n\tby dpdk.org (Postfix) with ESMTP id 5AAF22FDD;\n\tFri, 11 Mar 2016 04:53:46 +0100 (CET)",
            "from na01-bn1-obe.outbound.protection.outlook.com\n\t(mail-bn1on0079.outbound.protection.outlook.com [157.56.110.79])\n\tby dpdk.org (Postfix) with ESMTP id 4C2D12C67\n\tfor <dev@dpdk.org>; Fri, 11 Mar 2016 04:53:45 +0100 (CET)",
            "from localhost.localdomain (110.170.137.253) by\n\tBLUPR0701MB1714.namprd07.prod.outlook.com (10.163.85.140) with\n\tMicrosoft SMTP\n\tServer (TLS) id 15.1.415.20; Fri, 11 Mar 2016 03:53:40 +0000"
        ],
        "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=CAVIUMNETWORKS.onmicrosoft.com; s=selector1-caviumnetworks-com;\n\th=From:To:Date:Subject:Message-ID:Content-Type:MIME-Version;\n\tbh=sWKIQfmHOfblVadk9KGtgSYk0teF0wHPAZBUxj6qxYU=;\n\tb=LughFV+2P79eZuZi8bsXi8xW7WMDtStOh9KBJ7JBLNHn5kTRi2fqgbC82QM227A9wW1E0ojhVWC3NB9RrEOkqxacIRxovVTltWxdInGtFOQTCt/3uo6hKU1ngkBoIZtFswUn4xa1B3HBD2D6ks+5332WmIUF6dAkg+crfwDa0AY=",
        "Authentication-Results": "dpdk.org; dkim=none (message not signed)\n\theader.d=none;dpdk.org; dmarc=none action=none\n\theader.from=caviumnetworks.com;",
        "From": "Jerin Jacob <jerin.jacob@caviumnetworks.com>",
        "To": "<dev@dpdk.org>",
        "Date": "Fri, 11 Mar 2016 09:22:57 +0530",
        "Message-ID": "<1457668379-7316-2-git-send-email-jerin.jacob@caviumnetworks.com>",
        "X-Mailer": "git-send-email 2.1.0",
        "In-Reply-To": "<1457668379-7316-1-git-send-email-jerin.jacob@caviumnetworks.com>",
        "References": "<1455280123-9311-1-git-send-email-jerin.jacob@caviumnetworks.com>\n\t<1457668379-7316-1-git-send-email-jerin.jacob@caviumnetworks.com>",
        "MIME-Version": "1.0",
        "Content-Type": "text/plain",
        "X-Originating-IP": "[110.170.137.253]",
        "X-ClientProxiedBy": "SIXPR04CA0075.apcprd04.prod.outlook.com (10.141.119.33) To\n\tBLUPR0701MB1714.namprd07.prod.outlook.com (25.163.85.140)",
        "X-Microsoft-Exchange-Diagnostics": [
            "1; BLUPR0701MB1714;\n\t2:f3KAj3ip3PtMuQXumpN9QIk8FBE/uxErVSIMVQlivwXAhN5bulk30RAoSy0UPiG5ushG7AUZ2KlQkKQso+OMoxyiqgSEXQcTzHwp62lYO/SWYA1fuJx17eAhY3PwPRl/tCNFpM2DkyUAuObFogBcDA==;\n\t3:DqW8agoxdQ/UNQBltsD4NhGW6G36IDZD4l0zIAqYv9ehVODTIqqpWv2lsC1KUqh23gIhTW7ZjTGPaJKG1ibV2KHMsqQFu2XWPhRbvSsh1JeqDIUHGdBFw5flua6nW8mE;\n\t25:xYpsSMnYASrNhZAiI272lW3eaLw26mmiVLy4eZhqt6I7tbVYRyFt0nS8VfL/Du9NGp+1/Lat1MYJb3KXsM4ZZ1hVq1KmDyNijhK966urfZKnZiZZc+50jW3qOTJaKHtxXBXM0rq9+prFvD46nb69oSXfQxrljd8u3oZF71LHWZh2/int5fRr/RaCqmG4Xu/cxvMDlD/IwMPMiDnasOJiV1iwnvhs+eRtzEVEQGPfjZMLluLefcPEmfV7Ogv6CqKSRLt4ItFQc0K1L9vKRGS98NVSVA7MHjLSd1qilFlyQaPExdtvtW24x5Bkef+FtLBFdHvrYnLcmn+I5F1kcSLoQA==",
            "1; BLUPR0701MB1714;\n\t20:gsdFy/FvxNhrtiLirQVUgiAvHVapRDw2YhlutJlO87BUvdYZigWs3SfuEjybbf2DhbDPKnBChJVETzFq4jFHDHrw0Ys8pLucsICc4TnHjYUws8wK1gqcHVxuszoAop1BJaj4s+ngL9AkYVMPxhwO34BI3jXJo8DHN5oKX8E2+IgCscaKeMX9+5zje1ESYzv2l5VJIOzSyaGvnQghLXaj1fpR1LF3CDmjMXXc8hZowcwLgqERMu5+vXO2I5quH8e+2Ie4jXJ7azOOeT2m01jH2/NK9ThPAV9jZE5XumowT40RoIc2Vo29hpqcB4ucuOR3Qwt3AqUXKX6DgjPHl2iGjZFU7yKJ4aA7x/BlVVZ8FrndGScK6gck7ESjYoIxeCtBzTc4RmKE5GcZqnQ80P6TLYXl0xzXBLYm8+alnCj0qPdol4jS+b8xgKVjbT/AKuP8979P5Udsq8RuuAdH8lmgKUq9soJAQSxZG1PLAWWYa8AhYkHzbqYKu5uVHUfM8K7Cwv+OKuR2Wx1gXObQYFErCAyQhKTIItnUbJK2ndobkqowOuG+aiHZ0zo9u8+/K9ywhLKXcZP0tP2Yw9e6YFEe+wJJzXRVFKHlCC14r8Tk1X4=",
            "1; BLUPR0701MB1714;\n\t4:t49MfrnncBLx6JOxkpHHRIhKtTsQ9Ok8z+qkGn7jgKzUWwLAxxACtkQUxbkUABudqD9uyTpVzeMeIYB75c/TBLparnHICxECRFwrdjNTfBtzGERsKk9Vz4+CMf5xEyUkPDeuL8hTqZphyQGKu35SiWsKqj5aRO3LYGMkv6PCiBosJnBnPFITbH9sCB8lP1zerREMcUXrZ+u/Px0aV4LrlM2P+b8zrTgCoSkVwwCAXo8ELlKnCjxn7gbcl9s0I/eMtUmb9ybIcsBX2oVpPcZUfuDoa6PCJRel9koWpkc15EfDGmuk1Vclu+g/aP27J8Bihb4TLivmqa14Sqs59UMXkD7aBmy66V2/SzIJKEo3jRj7h7qGi7uoaBBIf7wOnmRJ",
            "=?us-ascii?Q?1; BLUPR0701MB1714;\n\t23:uhO/m9TKrZhy5TuSkB/kejmbqbu06Wk6BvgX6dd?=\n\t=?us-ascii?Q?vAEpLo7CTX5Gsy8d4D0nmVjDXlSFvT0hIlTXrpmPaDLHmPnjA0dJ/BCcetW2?=\n\t=?us-ascii?Q?p+SNCDN3kK6fhkeV5y8okI9pxQ450DWe17yrYrEs/pAso0YdsBLnkvk2VYnq?=\n\t=?us-ascii?Q?q2PeT3nuvyOz2oixbdJyXutGoA/LGsVt6kycMhemlDvmWzypSQ4Wmvn4Jw6/?=\n\t=?us-ascii?Q?s913zVrQVw83whb76V48ou7oL6zv3K0MQ44Zwb+W5Myd9Nc2XYr+WfDZ4PEL?=\n\t=?us-ascii?Q?SdNc/0hzlxJllG7efV40i0zXjZlrzzBVsMYUwEgGzuX7X3WHyR0IZwtki1z3?=\n\t=?us-ascii?Q?Cn536Ry2f6V9vB1c4/lVVgEgluOvAgpH8O34iIDaSj0xiKBsgvlRt20GwpyL?=\n\t=?us-ascii?Q?DbUX5OgKie9LoNvb0gyILn/hWxXHn7+oehKdb7Zgg4k8UVsPwoWPzzT1Iq+e?=\n\t=?us-ascii?Q?35F2blwau8sHGe1x9vjBtYK/PC1Hb0j3vNX1b2iswxT4Anz1R8AB2gDfv8aY?=\n\t=?us-ascii?Q?KvmIIYTefG8IFFeu2qUCNtLz5fYNktWG1FnnYjX2pVwUzP81Yj51aqtKMOG/?=\n\t=?us-ascii?Q?AUZo1EYE+BKUItyW3D/1qvaqTrdMaEhzExBXyGqvZVguCsjSrfbNaUp3KJHs?=\n\t=?us-ascii?Q?sPfMOKiREPOKwdEvlG3J+PH4tokhK88UuuoL/UCSAEkaSC7NPtVzIB/8O1ML?=\n\t=?us-ascii?Q?x4SzQLIA3Qxd92y/sPqiXQ4zE9CeCbX5Vdj3JPkn559949aZ/oYg52P6kO0m?=\n\t=?us-ascii?Q?Btpdpinys+a/6Grp3zvl3YGUlo9OvJmvwPD4ZThankzqu/jmiGN+DwnGcY+d?=\n\t=?us-ascii?Q?nJW9QkCh2ewJvdUx1l5eyICIfpW7CEghLjyk6pqVbZSsABn68ZI3LoDeCLt5?=\n\t=?us-ascii?Q?tPBRvL7kqGEtO11EAWTH4dglCapTvw4Rq4rRnqYcrYQbU937fCTidHWcBIZI?=\n\t=?us-ascii?Q?ozSRBL9c/vBhkF21jAWDrqu5euERBt8b7iLQctSs9Ng=3D=3D?=",
            "1; BLUPR0701MB1714;\n\t5:uQa/e28BQk9KEJSR24XRzJ06tP5iCTup45gHqhumjnXDnMIcIT856Qpp8BcxYIq8bn0rrqIgyF0P55sA/17If+J/y/eVagP0dhSWsSlrPsAsET37SlHR1gc9Xuwe6kgc+057sCUvwdPgqgyn43exEA==;\n\t24:wlhiqVWEIF8WjQvBgiyd2Yuab2syhiIhPmY3MKYjtlwNHf3QD9PETWRpqkI1HMSd0wXmUCe5+zvCpcMkcB+S+mWpbBKoMNL+1d3oI53vWWk="
        ],
        "X-Microsoft-Antispam": "UriScan:;BCL:0;PCL:0;RULEID:;SRVR:BLUPR0701MB1714;",
        "X-MS-Office365-Filtering-Correlation-Id": "9634fb68-4fff-4609-6ad7-08d34960bdba",
        "X-Microsoft-Antispam-PRVS": "<BLUPR0701MB1714467CDD3A2691AF072FEC8CB50@BLUPR0701MB1714.namprd07.prod.outlook.com>",
        "X-Exchange-Antispam-Report-Test": "UriScan:;",
        "X-Exchange-Antispam-Report-CFA-Test": "BCL:0; PCL:0;\n\tRULEID:(601004)(2401047)(5005006)(8121501046)(3002001)(10201501046); \n\tSRVR:BLUPR0701MB1714; BCL:0; PCL:0; RULEID:; SRVR:BLUPR0701MB1714; ",
        "X-Forefront-PRVS": "087894CD3C",
        "X-Forefront-Antispam-Report": "SFV:NSPM;\n\tSFS:(10009020)(4630300001)(6009001)(6069001)(48376002)(33646002)(5003940100001)(2906002)(47776003)(5008740100001)(4001430100002)(66066001)(189998001)(107886002)(50466002)(229853001)(6116002)(50986999)(2351001)(586003)(77096005)(3846002)(19580395003)(76176999)(36756003)(2950100001)(92566002)(4326007)(19580405001)(110136002)(81166005)(86362001)(50226001)(1096002)(5004730100002)(42186005);\n\tDIR:OUT; SFP:1101; SCL:1; SRVR:BLUPR0701MB1714;\n\tH:localhost.localdomain; FPR:; \n\tSPF:None; MLV:sfv; LANG:en; ",
        "SpamDiagnosticOutput": "1:23",
        "SpamDiagnosticMetadata": "NSPM",
        "X-OriginatorOrg": "caviumnetworks.com",
        "X-MS-Exchange-CrossTenant-OriginalArrivalTime": "11 Mar 2016 03:53:40.1450\n\t(UTC)",
        "X-MS-Exchange-CrossTenant-FromEntityHeader": "Hosted",
        "X-MS-Exchange-Transport-CrossTenantHeadersStamped": "BLUPR0701MB1714",
        "Cc": "viktorin@rehivetech.com",
        "Subject": "[dpdk-dev] [PATCH v5 1/3] lpm: make rte_lpm_lookupx4 API definition\n\tarchitecture agnostic",
        "X-BeenThere": "dev@dpdk.org",
        "X-Mailman-Version": "2.1.15",
        "Precedence": "list",
        "List-Id": "patches and discussions about DPDK <dev.dpdk.org>",
        "List-Unsubscribe": "<http://dpdk.org/ml/options/dev>,\n\t<mailto:dev-request@dpdk.org?subject=unsubscribe>",
        "List-Archive": "<http://dpdk.org/ml/archives/dev/>",
        "List-Post": "<mailto:dev@dpdk.org>",
        "List-Help": "<mailto:dev-request@dpdk.org?subject=help>",
        "List-Subscribe": "<http://dpdk.org/ml/listinfo/dev>,\n\t<mailto:dev-request@dpdk.org?subject=subscribe>",
        "Errors-To": "dev-bounces@dpdk.org",
        "Sender": "\"dev\" <dev-bounces@dpdk.org>"
    },
    "content": "-Used architecture agnostic xmm_t to represent 128 bit SIMD variable\n\n-Introduced vect_* API abstraction in app/test to test rte_lpm_lookupx4\nAPI in  architecture agnostic way\n\n-Moved rte_lpm_lookupx4 SSE implementation to architecture specific\nrte_lpm_sse.h file to accommodate new rte_lpm_lookupx4 implementation\nfor a different architecture.\n\nSigned-off-by: Jerin Jacob <jerin.jacob@caviumnetworks.com>\nAcked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>\n---\n MAINTAINERS                  |   1 +\n app/test/test_lpm.c          |  21 +++---\n app/test/test_xmmt_ops.h     |  47 ++++++++++++++\n lib/librte_lpm/Makefile      |   1 +\n lib/librte_lpm/rte_lpm.h     |  99 +---------------------------\n lib/librte_lpm/rte_lpm_sse.h | 149 +++++++++++++++++++++++++++++++++++++++++++\n 6 files changed, 212 insertions(+), 106 deletions(-)\n create mode 100644 app/test/test_xmmt_ops.h\n create mode 100644 lib/librte_lpm/rte_lpm_sse.h",
    "diff": "diff --git a/MAINTAINERS b/MAINTAINERS\nindex 59e981f..fc03ce8 100644\n--- a/MAINTAINERS\n+++ b/MAINTAINERS\n@@ -458,6 +458,7 @@ F: lib/librte_lpm/\n F: doc/guides/prog_guide/lpm*\n F: app/test/test_lpm*\n F: app/test/test_func_reentrancy.c\n+F: app/test/test_xmmt_ops.h\n \n Traffic metering\n M: Cristian Dumitrescu <cristian.dumitrescu@intel.com>\ndiff --git a/app/test/test_lpm.c b/app/test/test_lpm.c\nindex aaf95ec..40fbbc6 100644\n--- a/app/test/test_lpm.c\n+++ b/app/test/test_lpm.c\n@@ -49,6 +49,7 @@\n \n #include \"rte_lpm.h\"\n #include \"test_lpm_routes.h\"\n+#include \"test_xmmt_ops.h\"\n \n #define TEST_LPM_ASSERT(cond) do {                                            \\\n \tif (!(cond)) {                                                        \\\n@@ -345,7 +346,7 @@ test6(void)\n int32_t\n test7(void)\n {\n-\t__m128i ipx4;\n+\txmm_t ipx4;\n \tuint32_t hop[4];\n \tstruct rte_lpm *lpm = NULL;\n \tstruct rte_lpm_config config;\n@@ -366,7 +367,7 @@ test7(void)\n \tstatus = rte_lpm_lookup(lpm, ip, &next_hop_return);\n \tTEST_LPM_ASSERT((status == 0) && (next_hop_return == next_hop_add));\n \n-\tipx4 = _mm_set_epi32(ip, ip + 0x100, ip - 0x100, ip);\n+\tipx4 = vect_set_epi32(ip, ip + 0x100, ip - 0x100, ip);\n \trte_lpm_lookupx4(lpm, ipx4, hop, UINT32_MAX);\n \tTEST_LPM_ASSERT(hop[0] == next_hop_add);\n \tTEST_LPM_ASSERT(hop[1] == UINT32_MAX);\n@@ -396,7 +397,7 @@ test7(void)\n int32_t\n test8(void)\n {\n-\t__m128i ipx4;\n+\txmm_t ipx4;\n \tuint32_t hop[4];\n \tstruct rte_lpm *lpm = NULL;\n \tstruct rte_lpm_config config;\n@@ -428,7 +429,7 @@ test8(void)\n \t\tTEST_LPM_ASSERT((status == 0) &&\n \t\t\t(next_hop_return == next_hop_add));\n \n-\t\tipx4 = _mm_set_epi32(ip2, ip1, ip2, ip1);\n+\t\tipx4 = vect_set_epi32(ip2, ip1, ip2, ip1);\n \t\trte_lpm_lookupx4(lpm, ipx4, hop, UINT32_MAX);\n \t\tTEST_LPM_ASSERT(hop[0] == UINT32_MAX);\n \t\tTEST_LPM_ASSERT(hop[1] == next_hop_add);\n@@ -455,7 +456,7 @@ test8(void)\n \t\tstatus = rte_lpm_lookup(lpm, ip1, &next_hop_return);\n \t\tTEST_LPM_ASSERT(status == -ENOENT);\n \n-\t\tipx4 = _mm_set_epi32(ip1, ip1, ip2, ip2);\n+\t\tipx4 = vect_set_epi32(ip1, ip1, ip2, ip2);\n \t\trte_lpm_lookupx4(lpm, ipx4, hop, UINT32_MAX);\n \t\tif (depth != 1) {\n \t\t\tTEST_LPM_ASSERT(hop[0] == next_hop_add);\n@@ -912,7 +913,7 @@ test11(void)\n int32_t\n test12(void)\n {\n-\t__m128i ipx4;\n+\txmm_t ipx4;\n \tuint32_t hop[4];\n \tstruct rte_lpm *lpm = NULL;\n \tstruct rte_lpm_config config;\n@@ -939,7 +940,7 @@ test12(void)\n \t\tTEST_LPM_ASSERT((status == 0) &&\n \t\t\t\t(next_hop_return == next_hop_add));\n \n-\t\tipx4 = _mm_set_epi32(ip, ip + 1, ip, ip - 1);\n+\t\tipx4 = vect_set_epi32(ip, ip + 1, ip, ip - 1);\n \t\trte_lpm_lookupx4(lpm, ipx4, hop, UINT32_MAX);\n \t\tTEST_LPM_ASSERT(hop[0] == UINT32_MAX);\n \t\tTEST_LPM_ASSERT(hop[1] == next_hop_add);\n@@ -1386,10 +1387,10 @@ perf_test(void)\n \t\tbegin = rte_rdtsc();\n \t\tfor (j = 0; j < BATCH_SIZE; j += RTE_DIM(next_hops)) {\n \t\t\tunsigned k;\n-\t\t\t__m128i ipx4;\n+\t\t\txmm_t ipx4;\n \n-\t\t\tipx4 = _mm_loadu_si128((__m128i *)(ip_batch + j));\n-\t\t\tipx4 = *(__m128i *)(ip_batch + j);\n+\t\t\tipx4 = vect_loadu_sil128((xmm_t *)(ip_batch + j));\n+\t\t\tipx4 = *(xmm_t *)(ip_batch + j);\n \t\t\trte_lpm_lookupx4(lpm, ipx4, next_hops, UINT32_MAX);\n \t\t\tfor (k = 0; k < RTE_DIM(next_hops); k++)\n \t\t\t\tif (unlikely(next_hops[k] == UINT32_MAX))\ndiff --git a/app/test/test_xmmt_ops.h b/app/test/test_xmmt_ops.h\nnew file mode 100644\nindex 0000000..c055912\n--- /dev/null\n+++ b/app/test/test_xmmt_ops.h\n@@ -0,0 +1,47 @@\n+/*-\n+ *   BSD LICENSE\n+ *\n+ *   Copyright(c) 2015 Cavium Networks. All rights reserved.\n+ *   All rights reserved.\n+ *\n+ *   Redistribution and use in source and binary forms, with or without\n+ *   modification, are permitted provided that the following conditions\n+ *   are met:\n+ *\n+ *     * Redistributions of source code must retain the above copyright\n+ *       notice, this list of conditions and the following disclaimer.\n+ *     * Redistributions in binary form must reproduce the above copyright\n+ *       notice, this list of conditions and the following disclaimer in\n+ *       the documentation and/or other materials provided with the\n+ *       distribution.\n+ *     * Neither the name of Cavium Networks nor the names of its\n+ *       contributors may be used to endorse or promote products derived\n+ *       from this software without specific prior written permission.\n+ *\n+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n+ *   \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n+ *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n+ *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n+ *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n+ *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n+ *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n+ *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n+ *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n+ */\n+\n+#ifndef _TEST_XMMT_OPS_H_\n+#define _TEST_XMMT_OPS_H_\n+\n+#include <rte_vect.h>\n+\n+/* vect_* abstraction implementation using SSE */\n+\n+/* loads the xmm_t value from address p(does not need to be 16-byte aligned)*/\n+#define vect_loadu_sil128(p) _mm_loadu_si128(p)\n+\n+/* sets the 4 signed 32-bit integer values and returns the xmm_t variable */\n+#define vect_set_epi32(i3, i2, i1, i0) _mm_set_epi32(i3, i2, i1, i0)\n+\n+#endif /* _TEST_XMMT_OPS_H_ */\ndiff --git a/lib/librte_lpm/Makefile b/lib/librte_lpm/Makefile\nindex 688cfc9..aa51fe4 100644\n--- a/lib/librte_lpm/Makefile\n+++ b/lib/librte_lpm/Makefile\n@@ -46,6 +46,7 @@ SRCS-$(CONFIG_RTE_LIBRTE_LPM) := rte_lpm.c rte_lpm6.c\n \n # install this header file\n SYMLINK-$(CONFIG_RTE_LIBRTE_LPM)-include := rte_lpm.h rte_lpm6.h\n+SYMLINK-$(CONFIG_RTE_LIBRTE_LPM)-include += rte_lpm_sse.h\n \n # this lib needs eal\n DEPDIRS-$(CONFIG_RTE_LIBRTE_LPM) += lib/librte_eal\ndiff --git a/lib/librte_lpm/rte_lpm.h b/lib/librte_lpm/rte_lpm.h\nindex c2b429f..cc55439 100644\n--- a/lib/librte_lpm/rte_lpm.h\n+++ b/lib/librte_lpm/rte_lpm.h\n@@ -475,103 +475,10 @@ rte_lpm_lookup_bulk_func(const struct rte_lpm *lpm, const uint32_t *ips,\n  *   if lookup would fail.\n  */\n static inline void\n-rte_lpm_lookupx4(const struct rte_lpm *lpm, __m128i ip, uint32_t hop[4],\n-\tuint32_t defv)\n-{\n-\t__m128i i24;\n-\trte_xmm_t i8;\n-\tuint32_t tbl[4];\n-\tuint64_t idx, pt, pt2;\n-\tconst uint32_t *ptbl;\n+rte_lpm_lookupx4(const struct rte_lpm *lpm, xmm_t ip, uint32_t hop[4],\n+\tuint32_t defv);\n \n-\tconst __m128i mask8 =\n-\t\t_mm_set_epi32(UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX);\n-\n-\t/*\n-\t * RTE_LPM_VALID_EXT_ENTRY_BITMASK for 2 LPM entries\n-\t * as one 64-bit value (0x0300000003000000).\n-\t */\n-\tconst uint64_t mask_xv =\n-\t\t((uint64_t)RTE_LPM_VALID_EXT_ENTRY_BITMASK |\n-\t\t(uint64_t)RTE_LPM_VALID_EXT_ENTRY_BITMASK << 32);\n-\n-\t/*\n-\t * RTE_LPM_LOOKUP_SUCCESS for 2 LPM entries\n-\t * as one 64-bit value (0x0100000001000000).\n-\t */\n-\tconst uint64_t mask_v =\n-\t\t((uint64_t)RTE_LPM_LOOKUP_SUCCESS |\n-\t\t(uint64_t)RTE_LPM_LOOKUP_SUCCESS << 32);\n-\n-\t/* get 4 indexes for tbl24[]. */\n-\ti24 = _mm_srli_epi32(ip, CHAR_BIT);\n-\n-\t/* extract values from tbl24[] */\n-\tidx = _mm_cvtsi128_si64(i24);\n-\ti24 = _mm_srli_si128(i24, sizeof(uint64_t));\n-\n-\tptbl = (const uint32_t *)&lpm->tbl24[(uint32_t)idx];\n-\ttbl[0] = *ptbl;\n-\tptbl = (const uint32_t *)&lpm->tbl24[idx >> 32];\n-\ttbl[1] = *ptbl;\n-\n-\tidx = _mm_cvtsi128_si64(i24);\n-\n-\tptbl = (const uint32_t *)&lpm->tbl24[(uint32_t)idx];\n-\ttbl[2] = *ptbl;\n-\tptbl = (const uint32_t *)&lpm->tbl24[idx >> 32];\n-\ttbl[3] = *ptbl;\n-\n-\t/* get 4 indexes for tbl8[]. */\n-\ti8.x = _mm_and_si128(ip, mask8);\n-\n-\tpt = (uint64_t)tbl[0] |\n-\t\t(uint64_t)tbl[1] << 32;\n-\tpt2 = (uint64_t)tbl[2] |\n-\t\t(uint64_t)tbl[3] << 32;\n-\n-\t/* search successfully finished for all 4 IP addresses. */\n-\tif (likely((pt & mask_xv) == mask_v) &&\n-\t\t\tlikely((pt2 & mask_xv) == mask_v)) {\n-\t\t*(uint64_t *)hop = pt & RTE_LPM_MASKX4_RES;\n-\t\t*(uint64_t *)(hop + 2) = pt2 & RTE_LPM_MASKX4_RES;\n-\t\treturn;\n-\t}\n-\n-\tif (unlikely((pt & RTE_LPM_VALID_EXT_ENTRY_BITMASK) ==\n-\t\t\tRTE_LPM_VALID_EXT_ENTRY_BITMASK)) {\n-\t\ti8.u32[0] = i8.u32[0] +\n-\t\t\t(uint8_t)tbl[0] * RTE_LPM_TBL8_GROUP_NUM_ENTRIES;\n-\t\tptbl = (const uint32_t *)&lpm->tbl8[i8.u32[0]];\n-\t\ttbl[0] = *ptbl;\n-\t}\n-\tif (unlikely((pt >> 32 & RTE_LPM_VALID_EXT_ENTRY_BITMASK) ==\n-\t\t\tRTE_LPM_VALID_EXT_ENTRY_BITMASK)) {\n-\t\ti8.u32[1] = i8.u32[1] +\n-\t\t\t(uint8_t)tbl[1] * RTE_LPM_TBL8_GROUP_NUM_ENTRIES;\n-\t\tptbl = (const uint32_t *)&lpm->tbl8[i8.u32[1]];\n-\t\ttbl[1] = *ptbl;\n-\t}\n-\tif (unlikely((pt2 & RTE_LPM_VALID_EXT_ENTRY_BITMASK) ==\n-\t\t\tRTE_LPM_VALID_EXT_ENTRY_BITMASK)) {\n-\t\ti8.u32[2] = i8.u32[2] +\n-\t\t\t(uint8_t)tbl[2] * RTE_LPM_TBL8_GROUP_NUM_ENTRIES;\n-\t\tptbl = (const uint32_t *)&lpm->tbl8[i8.u32[2]];\n-\t\ttbl[2] = *ptbl;\n-\t}\n-\tif (unlikely((pt2 >> 32 & RTE_LPM_VALID_EXT_ENTRY_BITMASK) ==\n-\t\t\tRTE_LPM_VALID_EXT_ENTRY_BITMASK)) {\n-\t\ti8.u32[3] = i8.u32[3] +\n-\t\t\t(uint8_t)tbl[3] * RTE_LPM_TBL8_GROUP_NUM_ENTRIES;\n-\t\tptbl = (const uint32_t *)&lpm->tbl8[i8.u32[3]];\n-\t\ttbl[3] = *ptbl;\n-\t}\n-\n-\thop[0] = (tbl[0] & RTE_LPM_LOOKUP_SUCCESS) ? tbl[0] & 0x00FFFFFF : defv;\n-\thop[1] = (tbl[1] & RTE_LPM_LOOKUP_SUCCESS) ? tbl[1] & 0x00FFFFFF : defv;\n-\thop[2] = (tbl[2] & RTE_LPM_LOOKUP_SUCCESS) ? tbl[2] & 0x00FFFFFF : defv;\n-\thop[3] = (tbl[3] & RTE_LPM_LOOKUP_SUCCESS) ? tbl[3] & 0x00FFFFFF : defv;\n-}\n+#include \"rte_lpm_sse.h\"\n \n #ifdef __cplusplus\n }\ndiff --git a/lib/librte_lpm/rte_lpm_sse.h b/lib/librte_lpm/rte_lpm_sse.h\nnew file mode 100644\nindex 0000000..da83099\n--- /dev/null\n+++ b/lib/librte_lpm/rte_lpm_sse.h\n@@ -0,0 +1,149 @@\n+/*-\n+ *   BSD LICENSE\n+ *\n+ *   Copyright(c) 2010-2014 Intel Corporation. All rights reserved.\n+ *   All rights reserved.\n+ *\n+ *   Redistribution and use in source and binary forms, with or without\n+ *   modification, are permitted provided that the following conditions\n+ *   are met:\n+ *\n+ *     * Redistributions of source code must retain the above copyright\n+ *       notice, this list of conditions and the following disclaimer.\n+ *     * Redistributions in binary form must reproduce the above copyright\n+ *       notice, this list of conditions and the following disclaimer in\n+ *       the documentation and/or other materials provided with the\n+ *       distribution.\n+ *     * Neither the name of Intel Corporation nor the names of its\n+ *       contributors may be used to endorse or promote products derived\n+ *       from this software without specific prior written permission.\n+ *\n+ *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n+ *   \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n+ *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n+ *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n+ *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n+ *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n+ *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n+ *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n+ *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n+ *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n+ *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n+ */\n+\n+#ifndef _RTE_LPM_SSE_H_\n+#define _RTE_LPM_SSE_H_\n+\n+#include <rte_branch_prediction.h>\n+#include <rte_byteorder.h>\n+#include <rte_common.h>\n+#include <rte_vect.h>\n+\n+#ifdef __cplusplus\n+extern \"C\" {\n+#endif\n+\n+static inline void\n+rte_lpm_lookupx4(const struct rte_lpm *lpm, xmm_t ip, uint32_t hop[4],\n+\tuint32_t defv)\n+{\n+\t__m128i i24;\n+\trte_xmm_t i8;\n+\tuint32_t tbl[4];\n+\tuint64_t idx, pt, pt2;\n+\tconst uint32_t *ptbl;\n+\n+\tconst __m128i mask8 =\n+\t\t_mm_set_epi32(UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX);\n+\n+\t/*\n+\t * RTE_LPM_VALID_EXT_ENTRY_BITMASK for 2 LPM entries\n+\t * as one 64-bit value (0x0300000003000000).\n+\t */\n+\tconst uint64_t mask_xv =\n+\t\t((uint64_t)RTE_LPM_VALID_EXT_ENTRY_BITMASK |\n+\t\t(uint64_t)RTE_LPM_VALID_EXT_ENTRY_BITMASK << 32);\n+\n+\t/*\n+\t * RTE_LPM_LOOKUP_SUCCESS for 2 LPM entries\n+\t * as one 64-bit value (0x0100000001000000).\n+\t */\n+\tconst uint64_t mask_v =\n+\t\t((uint64_t)RTE_LPM_LOOKUP_SUCCESS |\n+\t\t(uint64_t)RTE_LPM_LOOKUP_SUCCESS << 32);\n+\n+\t/* get 4 indexes for tbl24[]. */\n+\ti24 = _mm_srli_epi32(ip, CHAR_BIT);\n+\n+\t/* extract values from tbl24[] */\n+\tidx = _mm_cvtsi128_si64(i24);\n+\ti24 = _mm_srli_si128(i24, sizeof(uint64_t));\n+\n+\tptbl = (const uint32_t *)&lpm->tbl24[(uint32_t)idx];\n+\ttbl[0] = *ptbl;\n+\tptbl = (const uint32_t *)&lpm->tbl24[idx >> 32];\n+\ttbl[1] = *ptbl;\n+\n+\tidx = _mm_cvtsi128_si64(i24);\n+\n+\tptbl = (const uint32_t *)&lpm->tbl24[(uint32_t)idx];\n+\ttbl[2] = *ptbl;\n+\tptbl = (const uint32_t *)&lpm->tbl24[idx >> 32];\n+\ttbl[3] = *ptbl;\n+\n+\t/* get 4 indexes for tbl8[]. */\n+\ti8.x = _mm_and_si128(ip, mask8);\n+\n+\tpt = (uint64_t)tbl[0] |\n+\t\t(uint64_t)tbl[1] << 32;\n+\tpt2 = (uint64_t)tbl[2] |\n+\t\t(uint64_t)tbl[3] << 32;\n+\n+\t/* search successfully finished for all 4 IP addresses. */\n+\tif (likely((pt & mask_xv) == mask_v) &&\n+\t\t\tlikely((pt2 & mask_xv) == mask_v)) {\n+\t\t*(uint64_t *)hop = pt & RTE_LPM_MASKX4_RES;\n+\t\t*(uint64_t *)(hop + 2) = pt2 & RTE_LPM_MASKX4_RES;\n+\t\treturn;\n+\t}\n+\n+\tif (unlikely((pt & RTE_LPM_VALID_EXT_ENTRY_BITMASK) ==\n+\t\t\tRTE_LPM_VALID_EXT_ENTRY_BITMASK)) {\n+\t\ti8.u32[0] = i8.u32[0] +\n+\t\t\t(uint8_t)tbl[0] * RTE_LPM_TBL8_GROUP_NUM_ENTRIES;\n+\t\tptbl = (const uint32_t *)&lpm->tbl8[i8.u32[0]];\n+\t\ttbl[0] = *ptbl;\n+\t}\n+\tif (unlikely((pt >> 32 & RTE_LPM_VALID_EXT_ENTRY_BITMASK) ==\n+\t\t\tRTE_LPM_VALID_EXT_ENTRY_BITMASK)) {\n+\t\ti8.u32[1] = i8.u32[1] +\n+\t\t\t(uint8_t)tbl[1] * RTE_LPM_TBL8_GROUP_NUM_ENTRIES;\n+\t\tptbl = (const uint32_t *)&lpm->tbl8[i8.u32[1]];\n+\t\ttbl[1] = *ptbl;\n+\t}\n+\tif (unlikely((pt2 & RTE_LPM_VALID_EXT_ENTRY_BITMASK) ==\n+\t\t\tRTE_LPM_VALID_EXT_ENTRY_BITMASK)) {\n+\t\ti8.u32[2] = i8.u32[2] +\n+\t\t\t(uint8_t)tbl[2] * RTE_LPM_TBL8_GROUP_NUM_ENTRIES;\n+\t\tptbl = (const uint32_t *)&lpm->tbl8[i8.u32[2]];\n+\t\ttbl[2] = *ptbl;\n+\t}\n+\tif (unlikely((pt2 >> 32 & RTE_LPM_VALID_EXT_ENTRY_BITMASK) ==\n+\t\t\tRTE_LPM_VALID_EXT_ENTRY_BITMASK)) {\n+\t\ti8.u32[3] = i8.u32[3] +\n+\t\t\t(uint8_t)tbl[3] * RTE_LPM_TBL8_GROUP_NUM_ENTRIES;\n+\t\tptbl = (const uint32_t *)&lpm->tbl8[i8.u32[3]];\n+\t\ttbl[3] = *ptbl;\n+\t}\n+\n+\thop[0] = (tbl[0] & RTE_LPM_LOOKUP_SUCCESS) ? tbl[0] & 0x00FFFFFF : defv;\n+\thop[1] = (tbl[1] & RTE_LPM_LOOKUP_SUCCESS) ? tbl[1] & 0x00FFFFFF : defv;\n+\thop[2] = (tbl[2] & RTE_LPM_LOOKUP_SUCCESS) ? tbl[2] & 0x00FFFFFF : defv;\n+\thop[3] = (tbl[3] & RTE_LPM_LOOKUP_SUCCESS) ? tbl[3] & 0x00FFFFFF : defv;\n+}\n+\n+#ifdef __cplusplus\n+}\n+#endif\n+\n+#endif /* _RTE_LPM_SSE_H_ */\n",
    "prefixes": [
        "dpdk-dev",
        "v5",
        "1/3"
    ]
}