aboutsummaryrefslogtreecommitdiffstats
path: root/resources
AgeCommit message (Expand)AuthorFilesLines
2019-08-07FIX: Various typos in nf_density + missing KWPeter Mikus1-0/+14
2019-08-12Report: dataTibor Frank1-1/+1
2019-08-12Report: DataTibor Frank1-274/+219
2019-08-12Clean: L2 bridge domainPeter Mikus9-1037/+838
2019-08-09FIX: macip_acl_rule needs binary mac dataJan Gelety1-2/+2
2019-08-09Clean: L2_xconnect keywordsPeter Mikus3-286/+286
2019-08-09Trending: Fix ipsecTibor Frank1-0/+4
2019-08-09Report: ConfigurationTibor Frank2-12/+12
2019-08-09Trending: Set 90 days periodTibor Frank1-10/+191
2019-08-09Trending: TSH ipsec testsTibor Frank2-12/+38
2019-08-09Clean: L2_patchPeter Mikus2-16/+10
2019-08-09Clean: Interface KeywordsPeter Mikus4-504/+97
2019-08-08Trending: Add dnv mrr testsTibor Frank1-2/+483
2019-08-07Clean: IPv6 keywordsPeter Mikus2-220/+206
2019-08-07Clean: IPv4 keywordsPeter Mikus4-567/+539
2019-08-07FIX: PylintPeter Mikus6-83/+74
2019-08-07FIX: IPsecUtil - create IP object separately in ever iterationJan Gelety1-33/+24
2019-08-07FIX: Remove PAPI_MAX_API_BULKJan Gelety3-11/+0
2019-08-07CSIT-1473: Migrate Tap library from VAT to PAPIJan Gelety3-250/+174
2019-08-07Expand comment on API covering triggersVratko Polak1-1/+4
2019-08-06Add: Dot1Q + L2BD + GBPPeter Mikus8-8/+603
2019-08-06Change show hardware detail to show hardware verbosejuraj.linkes1-4/+4
2019-08-06VPPD: Dot1QPeter Mikus6-25/+126
2019-08-06PapiHistory: Use repr strings for argument valuesVratko Polak1-1/+3
2019-08-06FIX: Layer dot1q logicPeter Mikus1-10/+20
2019-08-05Fix CRCs, bump stable VPP versionVratko Polak2-183/+235
2019-08-05Trending: Reduce input dataTibor Frank1-118/+10
2019-08-05FIX: Freeze Vagrant versionPeter Mikus1-0/+1
2019-08-02Add 3n-tsh mrr data to trending docsjuraj.linkes1-0/+407
2019-08-02Trending: Add 8 big input filesTibor Frank2-26/+2
2019-08-02Trending: Implement retries to requestsTibor Frank2-5/+30
2019-08-02Trending: Remove multiprocessing from cptaTibor Frank2-56/+17
2019-08-02FIX: Disable API checker during runtimePeter Mikus1-3/+0
2019-08-02Trending: Fix ignore list processingTibor Frank1-2/+2
2019-08-01Trending: Improve log outputTibor Frank1-2/+2
2019-08-01Trending: remove multitaskingTibor Frank1-68/+22
2019-08-01Trending: Add multiprocessing, remove archivingTibor Frank4-156/+192
2019-08-01Disable CRC checking at runtimeVratko Polak1-2/+3
2019-08-01Trending: Memory consumptionTibor Frank5-10/+75
2019-07-31TOX: Coverage checkPeter Mikus1-0/+100
2019-07-31Add: Prerequisites checkerPeter Mikus5-0/+37
2019-07-31Trending: Reduce input dataTibor Frank1-2/+5
2019-07-31Trending: Set packages versionsTibor Frank1-1/+1
2019-07-31Trending: Set packages versionsTibor Frank2-53/+53
2019-07-31Trending: Reduce input dataTibor Frank2-4/+5
2019-07-31Trending: Reduce input dataTibor Frank2-61/+59
2019-07-31Trending: Remove multiprocessing, part 1Tibor Frank1-78/+27
2019-07-31Trending: MultiprocessingTibor Frank1-0/+3
2019-07-31Trending: MultiprocessingTibor Frank1-43/+43
2019-07-31Add VPP API CRC checkingVratko Polak5-1/+585
xmm2 = _mm_loadu_si128((const __m128i *)((const u8 *)src - offset + 2 * 16)); \ src = (const u8 *)src + 32; \ _mm_storeu_si128((__m128i *)((u8 *)dst + 0 * 16), _mm_alignr_epi8(xmm1, xmm0, offset)); \ _mm_storeu_si128((__m128i *)((u8 *)dst + 1 * 16), _mm_alignr_epi8(xmm2, xmm1, offset)); \ dst = (u8 *)dst + 32; \ } \ tmp = len; \ len = ((len - 16 + offset) & 31) + 16 - offset; \ tmp -= len; \ src = (const u8 *)src + tmp; \ dst = (u8 *)dst + tmp; \ } \ }) /** * Macro for copying unaligned block from one location to another, * 47 bytes leftover maximum, * locations should not overlap. * Use switch here because the aligning instruction requires immediate value for shift count. * Requirements: * - Store is aligned * - Load offset is <offset>, which must be within [1, 15] * - For <src>, make sure <offset> bit backwards & <16 - offset> bit forwards are available for loading * - <dst>, <src>, <len> must be variables * - __m128i <xmm0> ~ <xmm8> used in CLIB_MVUNALIGN_LEFT47_IMM must be pre-defined */ #define CLIB_MVUNALIGN_LEFT47(dst, src, len, offset) \ ({ \ switch (offset) { \ case 0x01: CLIB_MVUNALIGN_LEFT47_IMM(dst, src, n, 0x01); break; \ case 0x02: CLIB_MVUNALIGN_LEFT47_IMM(dst, src, n, 0x02); break; \ case 0x03: CLIB_MVUNALIGN_LEFT47_IMM(dst, src, n, 0x03); break; \ case 0x04: CLIB_MVUNALIGN_LEFT47_IMM(dst, src, n, 0x04); break; \ case 0x05: CLIB_MVUNALIGN_LEFT47_IMM(dst, src, n, 0x05); break; \ case 0x06: CLIB_MVUNALIGN_LEFT47_IMM(dst, src, n, 0x06); break; \ case 0x07: CLIB_MVUNALIGN_LEFT47_IMM(dst, src, n, 0x07); break; \ case 0x08: CLIB_MVUNALIGN_LEFT47_IMM(dst, src, n, 0x08); break; \ case 0x09: CLIB_MVUNALIGN_LEFT47_IMM(dst, src, n, 0x09); break; \ case 0x0A: CLIB_MVUNALIGN_LEFT47_IMM(dst, src, n, 0x0A); break; \ case 0x0B: CLIB_MVUNALIGN_LEFT47_IMM(dst, src, n, 0x0B); break; \ case 0x0C: CLIB_MVUNALIGN_LEFT47_IMM(dst, src, n, 0x0C); break; \ case 0x0D: CLIB_MVUNALIGN_LEFT47_IMM(dst, src, n, 0x0D); break; \ case 0x0E: CLIB_MVUNALIGN_LEFT47_IMM(dst, src, n, 0x0E); break; \ case 0x0F: CLIB_MVUNALIGN_LEFT47_IMM(dst, src, n, 0x0F); break; \ default:; \ } \ }) static inline void * clib_memcpy (void *dst, const void *src, size_t n) { __m128i xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7, xmm8; uword dstu = (uword) dst; uword srcu = (uword) src; void *ret = dst; size_t dstofss; size_t srcofs; /** * Copy less than 16 bytes */ if (n < 16) { if (n & 0x01) { *(u8 *) dstu = *(const u8 *) srcu; srcu = (uword) ((const u8 *) srcu + 1); dstu = (uword) ((u8 *) dstu + 1); } if (n & 0x02) { *(u16 *) dstu = *(const u16 *) srcu; srcu = (uword) ((const u16 *) srcu + 1); dstu = (uword) ((u16 *) dstu + 1); } if (n & 0x04) { *(u32 *) dstu = *(const u32 *) srcu; srcu = (uword) ((const u32 *) srcu + 1); dstu = (uword) ((u32 *) dstu + 1); } if (n & 0x08) { *(u64 *) dstu = *(const u64 *) srcu; } return ret; } /** * Fast way when copy size doesn't exceed 512 bytes */ if (n <= 32) { clib_mov16 ((u8 *) dst, (const u8 *) src); clib_mov16 ((u8 *) dst - 16 + n, (const u8 *) src - 16 + n); return ret; } if (n <= 48) { clib_mov32 ((u8 *) dst, (const u8 *) src); clib_mov16 ((u8 *) dst - 16 + n, (const u8 *) src - 16 + n); return ret; } if (n <= 64) { clib_mov32 ((u8 *) dst, (const u8 *) src); clib_mov16 ((u8 *) dst + 32, (const u8 *) src + 32); clib_mov16 ((u8 *) dst - 16 + n, (const u8 *) src - 16 + n); return ret; } if (n <= 128) { goto COPY_BLOCK_128_BACK15; } if (n <= 512) { if (n >= 256) { n -= 256; clib_mov128 ((u8 *) dst, (const u8 *) src); clib_mov128 ((u8 *) dst + 128, (const u8 *) src + 128); src = (const u8 *) src + 256; dst = (u8 *) dst + 256; } COPY_BLOCK_255_BACK15: if (n >= 128) { n -= 128; clib_mov128 ((u8 *) dst, (const u8 *) src); src = (const u8 *) src + 128; dst = (u8 *) dst + 128; } COPY_BLOCK_128_BACK15: if (n >= 64) { n -= 64; clib_mov64 ((u8 *) dst, (const u8 *) src); src = (const u8 *) src + 64; dst = (u8 *) dst + 64; } COPY_BLOCK_64_BACK15: if (n >= 32) { n -= 32; clib_mov32 ((u8 *) dst, (const u8 *) src); src = (const u8 *) src + 32; dst = (u8 *) dst + 32; } if (n > 16) { clib_mov16 ((u8 *) dst, (const u8 *) src); clib_mov16 ((u8 *) dst - 16 + n, (const u8 *) src - 16 + n); return ret; } if (n > 0) { clib_mov16 ((u8 *) dst - 16 + n, (const u8 *) src - 16 + n); } return ret; } /** * Make store aligned when copy size exceeds 512 bytes, * and make sure the first 15 bytes are copied, because * unaligned copy functions require up to 15 bytes * backwards access. */ dstofss = 16 - ((uword) dst & 0x0F) + 16; n -= dstofss; clib_mov32 ((u8 *) dst, (const u8 *) src); src = (const u8 *) src + dstofss; dst = (u8 *) dst + dstofss; srcofs = ((uword) src & 0x0F); /** * For aligned copy */ if (srcofs == 0) { /** * Copy 256-byte blocks */ for (; n >= 256; n -= 256) { clib_mov256 ((u8 *) dst, (const u8 *) src); dst = (u8 *) dst + 256; src = (const u8 *) src + 256; } /** * Copy whatever left */ goto COPY_BLOCK_255_BACK15; } /** * For copy with unaligned load */ CLIB_MVUNALIGN_LEFT47 (dst, src, n, srcofs); /** * Copy whatever left */ goto COPY_BLOCK_64_BACK15; } #undef CLIB_MVUNALIGN_LEFT47_IMM #undef CLIB_MVUNALIGN_LEFT47 #endif /* included_clib_memcpy_sse3_h */ /* * fd.io coding-style-patch-verification: ON * * Local Variables: * eval: (c-set-style "gnu") * End: */