vppinfra: use unaligned non-vector load/stores in x86 memcpy
Type: fix Change-Id: I54ef23a52f05cc95210a736f84b927dd69b8a6f7 Signed-off-by: Damjan Marion <damarion@cisco.com>
This commit is contained in:
committed by
Florin Coras
parent
e8f57d593e
commit
21b4e337b6
@@ -135,19 +135,19 @@ clib_memcpy_fast_avx2 (void *dst, const void *src, size_t n)
|
||||
}
|
||||
if (n & 0x02)
|
||||
{
|
||||
*(u16 *) dstu = *(const u16 *) srcu;
|
||||
srcu = (uword) ((const u16 *) srcu + 1);
|
||||
dstu = (uword) ((u16 *) dstu + 1);
|
||||
*(u16u *) dstu = *(const u16u *) srcu;
|
||||
srcu = (uword) ((const u16u *) srcu + 1);
|
||||
dstu = (uword) ((u16u *) dstu + 1);
|
||||
}
|
||||
if (n & 0x04)
|
||||
{
|
||||
*(u32 *) dstu = *(const u32 *) srcu;
|
||||
srcu = (uword) ((const u32 *) srcu + 1);
|
||||
dstu = (uword) ((u32 *) dstu + 1);
|
||||
*(u32u *) dstu = *(const u32u *) srcu;
|
||||
srcu = (uword) ((const u32u *) srcu + 1);
|
||||
dstu = (uword) ((u32u *) dstu + 1);
|
||||
}
|
||||
if (n & 0x08)
|
||||
{
|
||||
*(u64 *) dstu = *(const u64 *) srcu;
|
||||
*(u64u *) dstu = *(const u64u *) srcu;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -165,18 +165,18 @@ clib_memcpy_fast_avx512 (void *dst, const void *src, size_t n)
|
||||
}
|
||||
if (n & 0x02)
|
||||
{
|
||||
*(u16 *) dstu = *(const u16 *) srcu;
|
||||
srcu = (uword) ((const u16 *) srcu + 1);
|
||||
dstu = (uword) ((u16 *) dstu + 1);
|
||||
*(u16u *) dstu = *(const u16u *) srcu;
|
||||
srcu = (uword) ((const u16u *) srcu + 1);
|
||||
dstu = (uword) ((u16u *) dstu + 1);
|
||||
}
|
||||
if (n & 0x04)
|
||||
{
|
||||
*(u32 *) dstu = *(const u32 *) srcu;
|
||||
srcu = (uword) ((const u32 *) srcu + 1);
|
||||
dstu = (uword) ((u32 *) dstu + 1);
|
||||
*(u32u *) dstu = *(const u32u *) srcu;
|
||||
srcu = (uword) ((const u32u *) srcu + 1);
|
||||
dstu = (uword) ((u32u *) dstu + 1);
|
||||
}
|
||||
if (n & 0x08)
|
||||
*(u64 *) dstu = *(const u64 *) srcu;
|
||||
*(u64u *) dstu = *(const u64u *) srcu;
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
@@ -210,19 +210,19 @@ clib_memcpy_fast_sse3 (void *dst, const void *src, size_t n)
|
||||
}
|
||||
if (n & 0x02)
|
||||
{
|
||||
*(u16 *) dstu = *(const u16 *) srcu;
|
||||
srcu = (uword) ((const u16 *) srcu + 1);
|
||||
dstu = (uword) ((u16 *) dstu + 1);
|
||||
*(u16u *) dstu = *(const u16u *) srcu;
|
||||
srcu = (uword) ((const u16u *) srcu + 1);
|
||||
dstu = (uword) ((u16u *) dstu + 1);
|
||||
}
|
||||
if (n & 0x04)
|
||||
{
|
||||
*(u32 *) dstu = *(const u32 *) srcu;
|
||||
srcu = (uword) ((const u32 *) srcu + 1);
|
||||
dstu = (uword) ((u32 *) dstu + 1);
|
||||
*(u32u *) dstu = *(const u32u *) srcu;
|
||||
srcu = (uword) ((const u32u *) srcu + 1);
|
||||
dstu = (uword) ((u32u *) dstu + 1);
|
||||
}
|
||||
if (n & 0x08)
|
||||
{
|
||||
*(u64 *) dstu = *(const u64 *) srcu;
|
||||
*(u64u *) dstu = *(const u64u *) srcu;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -163,6 +163,13 @@ typedef f64 fword;
|
||||
__attribute__ ((aligned (align), packed)); \
|
||||
} *) (addr))->_data)
|
||||
|
||||
typedef u16 u16u __attribute__ ((aligned (1)));
|
||||
typedef u32 u32u __attribute__ ((aligned (1)));
|
||||
typedef u64 u64u __attribute__ ((aligned (1)));
|
||||
typedef i16 i16u __attribute__ ((aligned (1)));
|
||||
typedef i32 i32u __attribute__ ((aligned (1)));
|
||||
typedef i64 i64u __attribute__ ((aligned (1)));
|
||||
|
||||
#endif /* included_clib_types_h */
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user