diff options
author | Bradley T. Hughes <bradley.hughes@nokia.com> | 2011-11-07 12:40:10 +0100 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-11-14 23:42:17 +0100 |
commit | 9c7c22f52b5c2333a4ddd587f38f5296a42010b5 (patch) | |
tree | 88f022a110420ba694e02c72084482b718e7ef00 /tests/benchmarks | |
parent | 42ebe717753ff8ffa11bc823adddeb998523020d (diff) | |
download | qtbase-9c7c22f52b5c2333a4ddd587f38f5296a42010b5.tar.gz |
Compile with non-C++11 compilers
Function pointers used as template parameters must have external linkage
according to the C++ standard. The _mm_lddqu_si128() and
_mm_load_si128() intrinsic functions are declared static in most
implementations, which means we need to wrap them in a non-static
function call to be used.
Change-Id: I4e316851df890d77999649d47654f7f9a35d4080
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'tests/benchmarks')
-rw-r--r-- | tests/benchmarks/corelib/tools/qstring/main.cpp | 34 |
1 files changed, 20 insertions, 14 deletions
diff --git a/tests/benchmarks/corelib/tools/qstring/main.cpp b/tests/benchmarks/corelib/tools/qstring/main.cpp index 4d84451e39..640bd7a625 100644 --- a/tests/benchmarks/corelib/tools/qstring/main.cpp +++ b/tests/benchmarks/corelib/tools/qstring/main.cpp @@ -1063,6 +1063,12 @@ static inline int ucstrncmp_ssse3_alignr(const ushort *a, const ushort *b, int l return ucstrncmp_short_tail(a + counter + N/2, b + counter, len); } +// external linkage to be used as the MMLoadFunction template argument for ucstrncmp_ssse3_alignr +__m128i EXT_mm_lddqu_si128(const __m128i *p) +{ return _mm_lddqu_si128(p); } +__m128i EXT_mm_load_si128(__m128i const *p) +{ return _mm_load_si128(p); } + static int ucstrncmp_ssse3(const ushort *a, const ushort *b, int len) { if (len >= 8) { @@ -1070,23 +1076,23 @@ static int ucstrncmp_ssse3(const ushort *a, const ushort *b, int len) a -= val/2; if (val == 10) - return ucstrncmp_ssse3_alignr<10, _mm_lddqu_si128>(a, b, len); + return ucstrncmp_ssse3_alignr<10, EXT_mm_lddqu_si128>(a, b, len); else if (val == 2) - return ucstrncmp_ssse3_alignr<2, _mm_lddqu_si128>(a, b, len); + return ucstrncmp_ssse3_alignr<2, EXT_mm_lddqu_si128>(a, b, len); if (val < 8) { if (val < 4) return ucstrncmp_ssse3_alignr_aligned(a, b, len); else if (val == 4) - return ucstrncmp_ssse3_alignr<4, _mm_lddqu_si128>(a, b, len); + return ucstrncmp_ssse3_alignr<4, EXT_mm_lddqu_si128>(a, b, len); else - return ucstrncmp_ssse3_alignr<6, _mm_lddqu_si128>(a, b, len); + return ucstrncmp_ssse3_alignr<6, EXT_mm_lddqu_si128>(a, b, len); } else { if (val < 12) - return ucstrncmp_ssse3_alignr<8, _mm_lddqu_si128>(a, b, len); + return ucstrncmp_ssse3_alignr<8, EXT_mm_lddqu_si128>(a, b, len); else if (val == 12) - return ucstrncmp_ssse3_alignr<12, _mm_lddqu_si128>(a, b, len); + return ucstrncmp_ssse3_alignr<12, EXT_mm_lddqu_si128>(a, b, len); else - return ucstrncmp_ssse3_alignr<14, _mm_lddqu_si128>(a, b, len); + return ucstrncmp_ssse3_alignr<14, EXT_mm_lddqu_si128>(a, b, len); } } return ucstrncmp_short_tail(a, b, len); @@ -1121,23 +1127,23 @@ static int ucstrncmp_ssse3_aligning(const ushort *a, const ushort *b, int len) a -= val/2; if (val == 8) - return ucstrncmp_ssse3_alignr<8, _mm_load_si128>(a, b, len); + return ucstrncmp_ssse3_alignr<8, EXT_mm_load_si128>(a, b, len); else if (val == 0) return ucstrncmp_sse2_aligned(a, b, len); if (val < 8) { if (val < 4) - return ucstrncmp_ssse3_alignr<2, _mm_load_si128>(a, b, len); + return ucstrncmp_ssse3_alignr<2, EXT_mm_load_si128>(a, b, len); else if (val == 4) - return ucstrncmp_ssse3_alignr<4, _mm_load_si128>(a, b, len); + return ucstrncmp_ssse3_alignr<4, EXT_mm_load_si128>(a, b, len); else - return ucstrncmp_ssse3_alignr<6, _mm_load_si128>(a, b, len); + return ucstrncmp_ssse3_alignr<6, EXT_mm_load_si128>(a, b, len); } else { if (val < 12) - return ucstrncmp_ssse3_alignr<10, _mm_load_si128>(a, b, len); + return ucstrncmp_ssse3_alignr<10, EXT_mm_load_si128>(a, b, len); else if (val == 12) - return ucstrncmp_ssse3_alignr<12, _mm_load_si128>(a, b, len); + return ucstrncmp_ssse3_alignr<12, EXT_mm_load_si128>(a, b, len); else - return ucstrncmp_ssse3_alignr<14, _mm_load_si128>(a, b, len); + return ucstrncmp_ssse3_alignr<14, EXT_mm_load_si128>(a, b, len); } } |