From ef9e03b84786c4b8be63537eb9a1f58e991b19f3 Mon Sep 17 00:00:00 2001 From: Jussi Pakkanen Date: Sun, 19 Feb 2017 21:45:54 +0200 Subject: [PATCH] Hardcode processor features on OSX because it ships a broken __builtin_cpu_supports. --- test cases/common/139 simd/meson.build | 2 +- test cases/common/139 simd/simd_avx.c | 6 +++++- test cases/common/139 simd/simd_avx2.c | 4 ++++ test cases/common/139 simd/simd_mmx.c | 6 +++++- test cases/common/139 simd/simd_sse.c | 5 +++++ test cases/common/139 simd/simd_sse2.c | 4 ++++ test cases/common/139 simd/simd_sse3.c | 5 +++++ test cases/common/139 simd/simd_sse41.c | 5 ++++- test cases/common/139 simd/simd_sse42.c | 7 +++++++ 9 files changed, 40 insertions(+), 4 deletions(-) diff --git a/test cases/common/139 simd/meson.build b/test cases/common/139 simd/meson.build index 26a291b77..9eff0a5eb 100644 --- a/test cases/common/139 simd/meson.build +++ b/test cases/common/139 simd/meson.build @@ -12,7 +12,7 @@ if not meson.is_cross_build() and host_machine.cpu_family() == 'arm' and cc.get_ add_project_arguments('-march=armv7', language : 'c') endif -if cc.get_id() == 'msvc' and version_compare(cc.version(), '<17') +if cc.get_id() == 'msvc' and cc.version().version_compare('<17') error('MESON_SKIP_TEST VS2010 produces broken binaries on x86.') endif diff --git a/test cases/common/139 simd/simd_avx.c b/test cases/common/139 simd/simd_avx.c index 771c9d9e7..aa259330c 100644 --- a/test cases/common/139 simd/simd_avx.c +++ b/test cases/common/139 simd/simd_avx.c @@ -8,14 +8,18 @@ int avx_available() { return 1; } #else - #include #include +#ifdef __APPLE__ +int avx_available() { return 1; } +#else + int avx_available() { return __builtin_cpu_supports("avx"); } #endif +#endif void increment_avx(float arr[4]) { double darr[4]; diff --git a/test cases/common/139 simd/simd_avx2.c b/test cases/common/139 simd/simd_avx2.c index b912ee1aa..15297eb2b 100644 --- a/test cases/common/139 simd/simd_avx2.c +++ b/test cases/common/139 simd/simd_avx2.c @@ -15,10 +15,14 @@ int avx2_available() { #include #include +#if defined(__APPLE__) +int avx2_available() { return 0; } +#else int avx2_available() { return __builtin_cpu_supports("avx2"); } #endif +#endif void increment_avx2(float arr[4]) { double darr[4]; diff --git a/test cases/common/139 simd/simd_mmx.c b/test cases/common/139 simd/simd_mmx.c index 17f42dde2..731abd14a 100644 --- a/test cases/common/139 simd/simd_mmx.c +++ b/test cases/common/139 simd/simd_mmx.c @@ -32,10 +32,14 @@ void increment_mmx(float arr[4]) { #else #include #include + +#if defined(__APPLE__) +int mmx_available() { return 1; } +#else int mmx_available() { return __builtin_cpu_supports("mmx"); } - +#endif void increment_mmx(float arr[4]) { /* Super ugly but we know that values in arr are always small * enough to fit in int16; diff --git a/test cases/common/139 simd/simd_sse.c b/test cases/common/139 simd/simd_sse.c index bfd7276bb..3c9fe622e 100644 --- a/test cases/common/139 simd/simd_sse.c +++ b/test cases/common/139 simd/simd_sse.c @@ -7,14 +7,19 @@ int sse_available() { return 1; } #else + #include #include #include +#if defined(__APPLE__) +int sse_available() { return 1; } +#else int sse_available() { return __builtin_cpu_supports("sse"); } #endif +#endif void increment_sse(float arr[4]) { __m128 val = _mm_load_ps(arr); diff --git a/test cases/common/139 simd/simd_sse2.c b/test cases/common/139 simd/simd_sse2.c index b2e4f11c2..02745337b 100644 --- a/test cases/common/139 simd/simd_sse2.c +++ b/test cases/common/139 simd/simd_sse2.c @@ -11,10 +11,14 @@ int sse2_available() { #include #include +#if defined(__APPLE__) +int sse2_available() { return 1; } +#else int sse2_available() { return __builtin_cpu_supports("sse2"); } #endif +#endif void increment_sse2(float arr[4]) { double darr[4]; diff --git a/test cases/common/139 simd/simd_sse3.c b/test cases/common/139 simd/simd_sse3.c index 90630b1c8..e97d10285 100644 --- a/test cases/common/139 simd/simd_sse3.c +++ b/test cases/common/139 simd/simd_sse3.c @@ -7,14 +7,19 @@ int sse3_available() { return 1; } #else + #include #include #include +#if defined(__APPLE__) +int sse3_available() { return 1; } +#else int sse3_available() { return __builtin_cpu_supports("sse3"); } #endif +#endif void increment_sse3(float arr[4]) { double darr[4]; diff --git a/test cases/common/139 simd/simd_sse41.c b/test cases/common/139 simd/simd_sse41.c index 8555ddc1e..0308c7e49 100644 --- a/test cases/common/139 simd/simd_sse41.c +++ b/test cases/common/139 simd/simd_sse41.c @@ -14,10 +14,13 @@ int sse41_available() { #include #include +#if defined(__APPLE__) +int sse41_available() { return 1; } +#else int sse41_available() { return __builtin_cpu_supports("sse4.1"); } - +#endif #endif void increment_sse41(float arr[4]) { diff --git a/test cases/common/139 simd/simd_sse42.c b/test cases/common/139 simd/simd_sse42.c index aee1837a9..137ffc441 100644 --- a/test cases/common/139 simd/simd_sse42.c +++ b/test cases/common/139 simd/simd_sse42.c @@ -14,11 +14,18 @@ int sse42_available() { #include #include +#ifdef __APPLE__ +int sse42_available() { + return 1; +} +#else int sse42_available() { return __builtin_cpu_supports("sse4.2"); } #endif +#endif + void increment_sse42(float arr[4]) { double darr[4]; __m128d val1 = _mm_set_pd(arr[0], arr[1]);