diff options
author | Brecht Van Lommel <brecht@blender.org> | 2022-01-05 21:42:53 +0300 |
---|---|---|
committer | Brecht Van Lommel <brecht@blender.org> | 2022-01-05 22:29:57 +0300 |
commit | 2bd6a9d8821121fbe1b3208ec9b437140bf6b405 (patch) | |
tree | 272dc9af58f0d4624cae75d55aa38bb62db47f76 | |
parent | 22cf8b9532568ee47ef1c6b7bd60bf9e8a50b508 (diff) |
Fix Cycles AVX test failure with x86_64 build running on Arm
Don't create const avx vectors before validating if CPU supports AVX.
-rw-r--r-- | intern/cycles/test/util_avxf_test.h | 43 |
1 files changed, 22 insertions, 21 deletions
diff --git a/intern/cycles/test/util_avxf_test.h b/intern/cycles/test/util_avxf_test.h index d93563fdb3f..832c9e6e5d8 100644 --- a/intern/cycles/test/util_avxf_test.h +++ b/intern/cycles/test/util_avxf_test.h @@ -32,9 +32,13 @@ bool validate_cpu_capabilities() #endif } -#define VALIDATECPU \ +#define INIT_AVX_TEST \ if (!validate_cpu_capabilities()) \ - return; + return; \ +\ + const avxf avxf_a(0.1f, 0.2f, 0.3f, 0.4f, 0.5f, 0.6f, 0.7f, 0.8f); \ + const avxf avxf_b(1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f); \ + const avxf avxf_c(1.1f, 2.2f, 3.3f, 4.4f, 5.5f, 6.6f, 7.7f, 8.8f); #define compare_vector_scalar(a, b) \ for (size_t index = 0; index < a.size; index++) \ @@ -49,22 +53,19 @@ bool validate_cpu_capabilities() EXPECT_NEAR(a[index], b[index], abserror); #define basic_test_vv(a, b, op) \ - VALIDATECPU \ + INIT_AVX_TEST \ avxf c = a op b; \ for (size_t i = 0; i < a.size; i++) \ EXPECT_FLOAT_EQ(c[i], a[i] op b[i]); /* vector op float tests */ #define basic_test_vf(a, b, op) \ - VALIDATECPU \ + INIT_AVX_TEST \ avxf c = a op b; \ for (size_t i = 0; i < a.size; i++) \ EXPECT_FLOAT_EQ(c[i], a[i] op b); -const avxf avxf_a(0.1f, 0.2f, 0.3f, 0.4f, 0.5f, 0.6f, 0.7f, 0.8f); -const avxf avxf_b(1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f); -const avxf avxf_c(1.1f, 2.2f, 3.3f, 4.4f, 5.5f, 6.6f, 7.7f, 8.8f); -const float float_b = 1.5f; +static const float float_b = 1.5f; TEST(util_avx, avxf_add_vv){basic_test_vv(avxf_a, avxf_b, +)} TEST(util_avx, avxf_sub_vv){ basic_test_vv(avxf_a, avxf_b, -)} TEST(util_avx, avxf_mul_vv){ @@ -77,7 +78,7 @@ TEST(util_avx, avxf_add_vv){basic_test_vv(avxf_a, avxf_b, +)} TEST(util_avx, avx TEST(util_avx, avxf_ctor) { - VALIDATECPU + INIT_AVX_TEST compare_vector_scalar(avxf(7.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f, 0.0f), static_cast<float>(index)); compare_vector_scalar(avxf(1.0f), 1.0f); @@ -90,28 +91,28 @@ TEST(util_avx, avxf_ctor) TEST(util_avx, avxf_sqrt) { - VALIDATECPU + INIT_AVX_TEST compare_vector_vector(mm256_sqrt(avxf(1.0f, 4.0f, 9.0f, 16.0f, 25.0f, 36.0f, 49.0f, 64.0f)), avxf(1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f)); } TEST(util_avx, avxf_min_max) { - VALIDATECPU + INIT_AVX_TEST compare_vector_vector(min(avxf_a, avxf_b), avxf_a); compare_vector_vector(max(avxf_a, avxf_b), avxf_b); } TEST(util_avx, avxf_set_sign) { - VALIDATECPU + INIT_AVX_TEST avxf res = set_sign_bit<1, 0, 0, 0, 0, 0, 0, 0>(avxf_a); compare_vector_vector(res, avxf(0.1f, 0.2f, 0.3f, 0.4f, 0.5f, 0.6f, 0.7f, -0.8f)); } TEST(util_avx, avxf_msub) { - VALIDATECPU + INIT_AVX_TEST avxf res = msub(avxf_a, avxf_b, avxf_c); avxf exp = avxf((avxf_a[7] * avxf_b[7]) - avxf_c[7], (avxf_a[6] * avxf_b[6]) - avxf_c[6], @@ -126,7 +127,7 @@ TEST(util_avx, avxf_msub) TEST(util_avx, avxf_madd) { - VALIDATECPU + INIT_AVX_TEST avxf res = madd(avxf_a, avxf_b, avxf_c); avxf exp = avxf((avxf_a[7] * avxf_b[7]) + avxf_c[7], (avxf_a[6] * avxf_b[6]) + avxf_c[6], @@ -141,7 +142,7 @@ TEST(util_avx, avxf_madd) TEST(util_avx, avxf_nmadd) { - VALIDATECPU + INIT_AVX_TEST avxf res = nmadd(avxf_a, avxf_b, avxf_c); avxf exp = avxf(avxf_c[7] - (avxf_a[7] * avxf_b[7]), avxf_c[6] - (avxf_a[6] * avxf_b[6]), @@ -156,7 +157,7 @@ TEST(util_avx, avxf_nmadd) TEST(util_avx, avxf_compare) { - VALIDATECPU + INIT_AVX_TEST avxf a(0.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f); avxf b(7.0f, 6.0f, 5.0f, 4.0f, 3.0f, 2.0f, 1.0f, 0.0f); avxb res = a <= b; @@ -175,28 +176,28 @@ TEST(util_avx, avxf_compare) TEST(util_avx, avxf_permute) { - VALIDATECPU + INIT_AVX_TEST avxf res = permute<3, 0, 1, 7, 6, 5, 2, 4>(avxf_b); compare_vector_vector(res, avxf(4.0f, 6.0f, 3.0f, 2.0f, 1.0f, 7.0f, 8.0f, 5.0f)); } TEST(util_avx, avxf_blend) { - VALIDATECPU + INIT_AVX_TEST avxf res = blend<0, 0, 1, 0, 1, 0, 1, 0>(avxf_a, avxf_b); compare_vector_vector(res, avxf(0.1f, 0.2f, 3.0f, 0.4f, 5.0f, 0.6f, 7.0f, 0.8f)); } TEST(util_avx, avxf_shuffle) { - VALIDATECPU + INIT_AVX_TEST avxf res = shuffle<0, 1, 2, 3, 1, 3, 2, 0>(avxf_a); compare_vector_vector(res, avxf(0.4f, 0.2f, 0.1f, 0.3f, 0.5f, 0.6f, 0.7f, 0.8f)); } TEST(util_avx, avxf_cross) { - VALIDATECPU + INIT_AVX_TEST avxf res = cross(avxf_b, avxf_c); compare_vector_vector_near(res, avxf(0.0f, @@ -212,7 +213,7 @@ TEST(util_avx, avxf_cross) TEST(util_avx, avxf_dot3) { - VALIDATECPU + INIT_AVX_TEST float den, den2; dot3(avxf_a, avxf_b, den, den2); EXPECT_FLOAT_EQ(den, 14.9f); |