Skip to content

Commit 2a0486c

Browse files
committed
various fixes inspired by gcc -fanalyzer
1 parent c86a433 commit 2a0486c

File tree

7 files changed

+82
-26
lines changed

7 files changed

+82
-26
lines changed

simde/arm/neon/xar.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ simde_vxarq_u64(simde_uint64x2_t a, simde_uint64x2_t b, const int d)
4444

4545
SIMDE_VECTORIZE
4646
for (size_t i=0 ; i < (sizeof(r_.values) / sizeof(r_.values[0])) ; i++) {
47-
r_.values[i] = ((t.values[i] >> d) | (t.values[i] << (64 - d)));
47+
r_.values[i] = ((t.values[i] >> d) | (t.values[i] << ((64 - d) & 63 )));
4848
}
4949

5050
return simde_uint64x2_from_private(r_);

simde/x86/avx.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -519,6 +519,8 @@ simde_mm256_setzero_si256 (void) {
519519
#if SIMDE_NATURAL_VECTOR_SIZE_LE(128)
520520
r_.m128i[0] = simde_mm_setzero_si128();
521521
r_.m128i[1] = simde_mm_setzero_si128();
522+
#elif defined(SIMDE_VECTOR_SUBSCRIPT)
523+
r_.i32 = __extension__ (__typeof__(r_.i32)) { 0, 0, 0, 0, 0, 0, 0, 0 };
522524
#else
523525
SIMDE_VECTORIZE
524526
for (size_t i = 0 ; i < (sizeof(r_.i32f) / sizeof(r_.i32f[0])) ; i++) {

simde/x86/sse.h

Lines changed: 25 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4101,9 +4101,16 @@ simde_mm_setzero_ps (void) {
41014101
#elif defined(SIMDE_LOONGARCH_LSX_NATIVE)
41024102
return (simde__m128)__lsx_vreplgr2vr_w(0);
41034103
#else
4104-
simde__m128 r;
4105-
simde_memset(&r, 0, sizeof(r));
4106-
return r;
4104+
simde__m128_private r_;
4105+
#if defined(SIMDE_VECTOR_SUBSCRIPT)
4106+
r_.f32 = __extension__ (__typeof__(r_.f32)) { 0.0f, 0.0f, 0.0f, 0.0f };
4107+
#else
4108+
SIMDE_VECTORIZE
4109+
for (size_t i = 0 ; i < (sizeof(r_.f32) / sizeof(r_.f32[0])) ; i++) {
4110+
r_.f32[i] = 0.0f;
4111+
}
4112+
#endif
4113+
return simde__m128_from_private(r_);
41074114
#endif
41084115
}
41094116
#if defined(SIMDE_X86_SSE_ENABLE_NATIVE_ALIASES)
@@ -4115,18 +4122,29 @@ HEDLEY_DIAGNOSTIC_PUSH
41154122
SIMDE_DIAGNOSTIC_DISABLE_UNINITIALIZED_
41164123
#endif
41174124

4125+
#if defined(SIMDE_X86_SSE_NATIVE)
4126+
# if defined(__has_builtin)
4127+
# if __has_builtin(__builtin_ia32_undef128)
4128+
# define SIMDE_HAVE_UNDEFINED128
4129+
# endif
4130+
# elif !defined(__PGI) && !defined(SIMDE_BUG_GCC_REV_208793) && !defined(_MSC_VER)
4131+
# define SIMDE_HAVE_UNDEFINED128
4132+
# endif
4133+
#endif
4134+
41184135
SIMDE_FUNCTION_ATTRIBUTES
41194136
simde__m128
41204137
simde_mm_undefined_ps (void) {
4121-
simde__m128_private r_;
41224138

41234139
#if defined(SIMDE_HAVE_UNDEFINED128)
4124-
r_.n = _mm_undefined_ps();
4140+
return _mm_undefined_ps();
41254141
#elif !defined(SIMDE_DIAGNOSTIC_DISABLE_UNINITIALIZED_)
4126-
r_ = simde__m128_to_private(simde_mm_setzero_ps());
4142+
return simde_mm_setzero_ps();
4143+
#else
4144+
simde__m128_private r_;
4145+
return simde__m128_from_private(r_);
41274146
#endif
41284147

4129-
return simde__m128_from_private(r_);
41304148
}
41314149
#if defined(SIMDE_X86_SSE_ENABLE_NATIVE_ALIASES)
41324150
# define _mm_undefined_ps() simde_mm_undefined_ps()
@@ -4835,16 +4853,6 @@ simde_mm_ucomineq_ss (simde__m128 a, simde__m128 b) {
48354853
# define _mm_ucomineq_ss(a, b) simde_mm_ucomineq_ss((a), (b))
48364854
#endif
48374855

4838-
#if defined(SIMDE_X86_SSE_NATIVE)
4839-
# if defined(__has_builtin)
4840-
# if __has_builtin(__builtin_ia32_undef128)
4841-
# define SIMDE_HAVE_UNDEFINED128
4842-
# endif
4843-
# elif !defined(__PGI) && !defined(SIMDE_BUG_GCC_REV_208793) && !defined(_MSC_VER)
4844-
# define SIMDE_HAVE_UNDEFINED128
4845-
# endif
4846-
#endif
4847-
48484856
SIMDE_FUNCTION_ATTRIBUTES
48494857
simde__m128
48504858
simde_mm_unpackhi_ps (simde__m128 a, simde__m128 b) {

simde/x86/sse2.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5839,7 +5839,7 @@ simde_mm_loadu_si64 (void const* mem_addr) {
58395839
r_.lsx_i64 = __lsx_vbsrl_v(__lsx_vldrepl_d(mem_addr, 0), 8);
58405840
return simde__m128i_from_private(r_);
58415841
#else
5842-
int64_t val;
5842+
int64_t val;
58435843
simde_memcpy(&val, mem_addr, sizeof(val));
58445844
return simde_mm_cvtsi64_si128(val);
58455845
#endif

test/x86/avx.c

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15009,10 +15009,13 @@ test_simde_mm256_sub_pd(SIMDE_MUNIT_TEST_ARGS) {
1500915009
}
1501015010

1501115011
#if defined(SIMDE_DIAGNOSTIC_DISABLE_UNINITIALIZED_)
15012-
HEDLEY_DIAGNOSTIC_PUSH
15013-
SIMDE_DIAGNOSTIC_DISABLE_UNINITIALIZED_
15012+
HEDLEY_DIAGNOSTIC_PUSH
15013+
SIMDE_DIAGNOSTIC_DISABLE_UNINITIALIZED_
15014+
#endif
15015+
#if defined(HEDLEY_GCC_VERSION) && HEDLEY_GCC_VERSION_CHECK(12,0,0)
15016+
HEDLEY_DIAGNOSTIC_PUSH
15017+
#pragma GCC diagnostic ignored "-Wanalyzer-use-of-uninitialized-value"
1501415018
#endif
15015-
1501615019
static int
1501715020
test_simde_mm256_undefined_ps(SIMDE_MUNIT_TEST_ARGS) {
1501815021
simde__m256 r;
@@ -15050,9 +15053,11 @@ test_simde_mm256_undefined_si256(SIMDE_MUNIT_TEST_ARGS) {
1505015053
simde_assert_m256i_equal(simde_mm256_castpd_si256(r), simde_mm256_castpd_si256(e));
1505115054
return 0;
1505215055
}
15053-
15056+
#if defined(HEDLEY_GCC_VERSION) && HEDLEY_GCC_VERSION_CHECK(12,0,0)
15057+
HEDLEY_DIAGNOSTIC_POP
15058+
#endif
1505415059
#if defined(SIMDE_DIAGNOSTIC_DISABLE_UNINITIALIZED_)
15055-
HEDLEY_DIAGNOSTIC_POP
15060+
HEDLEY_DIAGNOSTIC_POP
1505615061
#endif
1505715062

1505815063
static int

test/x86/sse.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5500,6 +5500,10 @@ test_simde_mm_unpacklo_ps(SIMDE_MUNIT_TEST_ARGS) {
55005500
return 0;
55015501
}
55025502

5503+
#if defined(HEDLEY_GCC_VERSION) && HEDLEY_GCC_VERSION_CHECK(12,0,0)
5504+
HEDLEY_DIAGNOSTIC_PUSH
5505+
#pragma GCC diagnostic ignored "-Wanalyzer-use-of-uninitialized-value"
5506+
#endif
55035507
static int
55045508
test_simde_mm_undefined_ps(SIMDE_MUNIT_TEST_ARGS) {
55055509
simde__m128 z = simde_mm_setzero_ps();
@@ -5510,6 +5514,9 @@ test_simde_mm_undefined_ps(SIMDE_MUNIT_TEST_ARGS) {
55105514

55115515
return 0;
55125516
}
5517+
#if defined(HEDLEY_GCC_VERSION) && HEDLEY_GCC_VERSION_CHECK(12,0,0)
5518+
HEDLEY_DIAGNOSTIC_POP
5519+
#endif
55135520

55145521
static int
55155522
test_simde_mm_xor_ps(SIMDE_MUNIT_TEST_ARGS) {

test/x86/sse2.c

Lines changed: 36 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4719,11 +4719,20 @@ test_simde_mm_loadu_si64 (SIMDE_MUNIT_TEST_ARGS) {
47194719
{ INT64_C( 7628307720165229322), INT64_C( 0) } }
47204720
};
47214721

4722+
#if defined(HEDLEY_GCC_VERSION) && HEDLEY_GCC_VERSION_CHECK(13,0,0)
4723+
HEDLEY_DIAGNOSTIC_PUSH
4724+
#pragma GCC diagnostic ignored "-Wanalyzer-allocation-size"
4725+
// False positive that goes away if the underlying call to native
4726+
// _mm_loadu_si64 is removed
4727+
#endif
47224728
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
4723-
int64_t a = test_vec[i].a;
4729+
const int64_t a = test_vec[i].a;
47244730
simde__m128i r = HEDLEY_CONCAT(simde,_mm_loadu_si64)(&a);
47254731
simde_test_x86_assert_equal_i64x2(r, simde_x_mm_loadu_epi64(test_vec[i].r));
47264732
}
4733+
#if defined(HEDLEY_GCC_VERSION) && HEDLEY_GCC_VERSION_CHECK(13,0,0)
4734+
HEDLEY_DIAGNOSTIC_POP
4735+
#endif
47274736

47284737
return 0;
47294738
}
@@ -8842,12 +8851,21 @@ test_simde_mm_storeu_si32 (SIMDE_MUNIT_TEST_ARGS) {
88428851
INT32_C( 548763692) }
88438852
};
88448853

8854+
#if defined(HEDLEY_GCC_VERSION) && HEDLEY_GCC_VERSION_CHECK(13,0,0)
8855+
HEDLEY_DIAGNOSTIC_PUSH
8856+
#pragma GCC diagnostic ignored "-Wanalyzer-allocation-size"
8857+
// False positive that goes away if the underlying call to native
8858+
// _mm_storeu_si64 is removed
8859+
#endif
88458860
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
88468861
simde__m128i a = simde_x_mm_loadu_epi32(test_vec[i].a);
88478862
int32_t r;
88488863
HEDLEY_CONCAT(simde,_mm_storeu_si32)(&r, a);
88498864
simde_assert_equal_i32(r, test_vec[i].r);
88508865
}
8866+
#if defined(HEDLEY_GCC_VERSION) && HEDLEY_GCC_VERSION_CHECK(13,0,0)
8867+
HEDLEY_DIAGNOSTIC_POP
8868+
#endif
88518869

88528870
return 0;
88538871
}
@@ -8876,12 +8894,21 @@ test_simde_mm_storeu_si64 (SIMDE_MUNIT_TEST_ARGS) {
88768894
INT64_C( 407001106525339075) }
88778895
};
88788896

8897+
#if defined(HEDLEY_GCC_VERSION) && HEDLEY_GCC_VERSION_CHECK(13,0,0)
8898+
HEDLEY_DIAGNOSTIC_PUSH
8899+
#pragma GCC diagnostic ignored "-Wanalyzer-allocation-size"
8900+
// False positive that goes away if the underlying call to native
8901+
// _mm_loadu_si128 is removed
8902+
#endif
88798903
for (size_t i = 0 ; i < (sizeof(test_vec) / sizeof(test_vec[0])) ; i++) {
88808904
simde__m128i a = simde_x_mm_loadu_epi64(test_vec[i].a);
88818905
int64_t r;
88828906
HEDLEY_CONCAT(simde,_mm_storeu_si64)(&r, a);
88838907
simde_assert_equal_i64(r, test_vec[i].r);
88848908
}
8909+
#if defined(HEDLEY_GCC_VERSION) && HEDLEY_GCC_VERSION_CHECK(13,0,0)
8910+
HEDLEY_DIAGNOSTIC_POP
8911+
#endif
88858912

88868913
return 0;
88878914
}
@@ -9865,6 +9892,11 @@ test_simde_mm_ucomilt_sd(SIMDE_MUNIT_TEST_ARGS) {
98659892
return 0;
98669893
}
98679894

9895+
9896+
#if defined(HEDLEY_GCC_VERSION) && HEDLEY_GCC_VERSION_CHECK(12,0,0)
9897+
HEDLEY_DIAGNOSTIC_PUSH
9898+
#pragma GCC diagnostic ignored "-Wanalyzer-use-of-uninitialized-value"
9899+
#endif
98689900
static int
98699901
test_simde_mm_undefined_pd(SIMDE_MUNIT_TEST_ARGS) {
98709902
simde__m128d z = simde_mm_setzero_pd();
@@ -9886,7 +9918,9 @@ test_simde_mm_undefined_si128(SIMDE_MUNIT_TEST_ARGS) {
98869918

98879919
return 0;
98889920
}
9889-
9921+
#if defined(HEDLEY_GCC_VERSION) && HEDLEY_GCC_VERSION_CHECK(12,0,0)
9922+
HEDLEY_DIAGNOSTIC_POP
9923+
#endif
98909924

98919925
static int
98929926
test_simde_mm_ucomineq_sd(SIMDE_MUNIT_TEST_ARGS) {

0 commit comments

Comments
 (0)