cutils: allow compilation with icc
v2 cover cutils: allow compilation with icc
changes from the initial version: create a VEC_OR macro as suggested by Paolo
Artyom Tarasenko (2):
qemu-common: add VEC_OR macro
cutils: allow compilation with icc
include/qemu-common.h | 3 +++ util/cutils.c | 14 +++++++------- 2 files changed, 10 insertions(+), 7 deletions(-)
Signature · 1 line
1.8.3.1
PATCH v2 1/2 qemu-common: add VEC_OR macro
Intel C Compiler version 15.0.3.187 Build 20150407 doesn't support '|' function for non floating-point simd operands.
Define VEC_OR macro which uses _mm_or_si128 supported both in icc and gcc on x86 platform.
Signed-off-by Artyom Tarasenko <[email protected]>
--- include/qemu-common.h | 3 +++ 1 file changed, 3 insertions(+)
include/qemu-common.h +3 -0
@@ -455,6 +455,7 @@ void qemu_hexdump(const char *buf, FILE *fp, const char *prefix, size_t size);#define VECTYPE __vector unsigned char#define SPLAT (p) vec_splat(vec_ld(0, p), 0)#define ALL_EQ (v1, v2) vec_all_eq(v1, v2) +#define VEC_OR (v1, v2) ((v1) | (v2))/* altivec.h may redefine the bool macro as vector type. * Reset it to POSIX semantics. */ #define bool _Bool
@@ -463,10 +464,12 @@ void qemu_hexdump(const char *buf, FILE *fp, const char *prefix, size_t size);#define VECTYPE __m128i#define SPLAT (p) _mm_set1_epi8(*(p))#define ALL_EQ (v1, v2) (_mm_movemask_epi8(_mm_cmpeq_epi8(v1, v2)) == 0xFFFF) +#define VEC_OR (v1, v2) (_mm_or_si128(v1, v2))#else #define VECTYPE unsigned long#define SPLAT (p) (*(p) * (~0UL / 255))#define ALL_EQ (v1, v2) ((v1) == (v2)) +#define VEC_OR (v1, v2) ((v1) | (v2))#endif #define BUFFER_FIND_NONZERO_OFFSET_UNROLL_FACTOR 8
Signature · 1 line
1.8.3.1
PATCH v2 2/2 cutils: allow compilation with icc
In reply to Artyom TarasenkoUse VEC_OR macro for operations on VECTYPE operands
Signed-off-by Artyom Tarasenko <[email protected]>
--- util/cutils.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-)
util/cutils.c +7 -7
@@ -207,13 +207,13 @@ size_t buffer_find_nonzero_offset(const void *buf, size_t len)for (i =BUFFER_FIND_NONZERO_OFFSET_UNROLL_FACTOR ; i < len /sizeof (VECTYPE ); i +=BUFFER_FIND_NONZERO_OFFSET_UNROLL_FACTOR ) { -VECTYPE tmp0 = p[i +0 ] | p[i +1 ]; -VECTYPE tmp1 = p[i +2 ] | p[i +3 ]; -VECTYPE tmp2 = p[i +4 ] | p[i +5 ]; -VECTYPE tmp3 = p[i +6 ] | p[i +7 ]; -VECTYPE tmp01 = tmp0 | tmp1; -VECTYPE tmp23 = tmp2 | tmp3; -if (!ALL_EQ (tmp01 | tmp23, zero)) { +VECTYPE tmp0 =VEC_OR (p[i +0 ], p[i +1 ]); +VECTYPE tmp1 =VEC_OR (p[i +2 ], p[i +3 ]); +VECTYPE tmp2 =VEC_OR (p[i +4 ], p[i +5 ]); +VECTYPE tmp3 =VEC_OR (p[i +6 ], p[i +7 ]); +VECTYPE tmp01 =VEC_OR (tmp0, tmp1); +VECTYPE tmp23 =VEC_OR (tmp2, tmp3); +if (!ALL_EQ (VEC_OR (tmp01, tmp23), zero)) {break ; } }
Signature · 1 line
1.8.3.1