Skip to content

Commit b83f7f1

Browse files
authored
[Headers][X86] Update SSE/AVX and/andnot/or/xor intrinsics to be used in constexpr (#152305)
1 parent f44d8d5 commit b83f7f1

File tree

10 files changed

+95
-40
lines changed

10 files changed

+95
-40
lines changed

clang/lib/Headers/avx2intrin.h

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,14 @@
3131
__min_vector_width__(128)))
3232
#endif
3333

34+
#if defined(__cplusplus) && (__cplusplus >= 201103L)
35+
#define __DEFAULT_FN_ATTRS256_CONSTEXPR __DEFAULT_FN_ATTRS256 constexpr
36+
#define __DEFAULT_FN_ATTRS128_CONSTEXPR __DEFAULT_FN_ATTRS128 constexpr
37+
#else
38+
#define __DEFAULT_FN_ATTRS256_CONSTEXPR __DEFAULT_FN_ATTRS256
39+
#define __DEFAULT_FN_ATTRS128_CONSTEXPR __DEFAULT_FN_ATTRS128
40+
#endif
41+
3442
/* SSE4 Multiple Packed Sums of Absolute Difference. */
3543
/// Computes sixteen sum of absolute difference (SAD) operations on sets of
3644
/// four unsigned 8-bit integers from the 256-bit integer vectors \a X and
@@ -460,7 +468,7 @@ _mm256_adds_epu16(__m256i __a, __m256i __b)
460468
/// \param __b
461469
/// A 256-bit integer vector.
462470
/// \returns A 256-bit integer vector containing the result.
463-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
471+
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
464472
_mm256_and_si256(__m256i __a, __m256i __b)
465473
{
466474
return (__m256i)((__v4du)__a & (__v4du)__b);
@@ -478,7 +486,7 @@ _mm256_and_si256(__m256i __a, __m256i __b)
478486
/// \param __b
479487
/// A 256-bit integer vector.
480488
/// \returns A 256-bit integer vector containing the result.
481-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
489+
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
482490
_mm256_andnot_si256(__m256i __a, __m256i __b)
483491
{
484492
return (__m256i)(~(__v4du)__a & (__v4du)__b);
@@ -1822,7 +1830,7 @@ _mm256_mul_epu32(__m256i __a, __m256i __b)
18221830
/// \param __b
18231831
/// A 256-bit integer vector.
18241832
/// \returns A 256-bit integer vector containing the result.
1825-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
1833+
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
18261834
_mm256_or_si256(__m256i __a, __m256i __b)
18271835
{
18281836
return (__m256i)((__v4du)__a | (__v4du)__b);
@@ -2974,7 +2982,7 @@ _mm256_unpacklo_epi64(__m256i __a, __m256i __b)
29742982
/// \param __b
29752983
/// A 256-bit integer vector.
29762984
/// \returns A 256-bit integer vector containing the result.
2977-
static __inline__ __m256i __DEFAULT_FN_ATTRS256
2985+
static __inline__ __m256i __DEFAULT_FN_ATTRS256_CONSTEXPR
29782986
_mm256_xor_si256(__m256i __a, __m256i __b)
29792987
{
29802988
return (__m256i)((__v4du)__a ^ (__v4du)__b);
@@ -5289,5 +5297,7 @@ _mm_srlv_epi64(__m128i __X, __m128i __Y)
52895297

52905298
#undef __DEFAULT_FN_ATTRS256
52915299
#undef __DEFAULT_FN_ATTRS128
5300+
#undef __DEFAULT_FN_ATTRS256_CONSTEXPR
5301+
#undef __DEFAULT_FN_ATTRS128_CONSTEXPR
52925302

52935303
#endif /* __AVX2INTRIN_H */

clang/lib/Headers/avx512dqintrin.h

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,14 @@
2020
__attribute__((__always_inline__, __nodebug__, \
2121
__target__("avx512dq,no-evex512")))
2222

23+
#if defined(__cplusplus) && (__cplusplus >= 201103L)
24+
#define __DEFAULT_FN_ATTRS512_CONSTEXPR __DEFAULT_FN_ATTRS512 constexpr
25+
#define __DEFAULT_FN_ATTRS_CONSTEXPR __DEFAULT_FN_ATTRS constexpr
26+
#else
27+
#define __DEFAULT_FN_ATTRS512_CONSTEXPR __DEFAULT_FN_ATTRS512
28+
#define __DEFAULT_FN_ATTRS_CONSTEXPR __DEFAULT_FN_ATTRS
29+
#endif
30+
2331
static __inline __mmask8 __DEFAULT_FN_ATTRS
2432
_knot_mask8(__mmask8 __M)
2533
{
@@ -167,7 +175,7 @@ _mm512_maskz_mullo_epi64(__mmask8 __U, __m512i __A, __m512i __B) {
167175
(__v8di)_mm512_setzero_si512());
168176
}
169177

170-
static __inline__ __m512d __DEFAULT_FN_ATTRS512
178+
static __inline__ __m512d __DEFAULT_FN_ATTRS512_CONSTEXPR
171179
_mm512_xor_pd(__m512d __A, __m512d __B) {
172180
return (__m512d)((__v8du)__A ^ (__v8du)__B);
173181
}
@@ -186,7 +194,7 @@ _mm512_maskz_xor_pd(__mmask8 __U, __m512d __A, __m512d __B) {
186194
(__v8df)_mm512_setzero_pd());
187195
}
188196

189-
static __inline__ __m512 __DEFAULT_FN_ATTRS512
197+
static __inline__ __m512 __DEFAULT_FN_ATTRS512_CONSTEXPR
190198
_mm512_xor_ps (__m512 __A, __m512 __B) {
191199
return (__m512)((__v16su)__A ^ (__v16su)__B);
192200
}
@@ -205,7 +213,7 @@ _mm512_maskz_xor_ps(__mmask16 __U, __m512 __A, __m512 __B) {
205213
(__v16sf)_mm512_setzero_ps());
206214
}
207215

208-
static __inline__ __m512d __DEFAULT_FN_ATTRS512
216+
static __inline__ __m512d __DEFAULT_FN_ATTRS512_CONSTEXPR
209217
_mm512_or_pd(__m512d __A, __m512d __B) {
210218
return (__m512d)((__v8du)__A | (__v8du)__B);
211219
}
@@ -224,7 +232,7 @@ _mm512_maskz_or_pd(__mmask8 __U, __m512d __A, __m512d __B) {
224232
(__v8df)_mm512_setzero_pd());
225233
}
226234

227-
static __inline__ __m512 __DEFAULT_FN_ATTRS512
235+
static __inline__ __m512 __DEFAULT_FN_ATTRS512_CONSTEXPR
228236
_mm512_or_ps(__m512 __A, __m512 __B) {
229237
return (__m512)((__v16su)__A | (__v16su)__B);
230238
}
@@ -243,7 +251,7 @@ _mm512_maskz_or_ps(__mmask16 __U, __m512 __A, __m512 __B) {
243251
(__v16sf)_mm512_setzero_ps());
244252
}
245253

246-
static __inline__ __m512d __DEFAULT_FN_ATTRS512
254+
static __inline__ __m512d __DEFAULT_FN_ATTRS512_CONSTEXPR
247255
_mm512_and_pd(__m512d __A, __m512d __B) {
248256
return (__m512d)((__v8du)__A & (__v8du)__B);
249257
}
@@ -262,7 +270,7 @@ _mm512_maskz_and_pd(__mmask8 __U, __m512d __A, __m512d __B) {
262270
(__v8df)_mm512_setzero_pd());
263271
}
264272

265-
static __inline__ __m512 __DEFAULT_FN_ATTRS512
273+
static __inline__ __m512 __DEFAULT_FN_ATTRS512_CONSTEXPR
266274
_mm512_and_ps(__m512 __A, __m512 __B) {
267275
return (__m512)((__v16su)__A & (__v16su)__B);
268276
}
@@ -281,7 +289,7 @@ _mm512_maskz_and_ps(__mmask16 __U, __m512 __A, __m512 __B) {
281289
(__v16sf)_mm512_setzero_ps());
282290
}
283291

284-
static __inline__ __m512d __DEFAULT_FN_ATTRS512
292+
static __inline__ __m512d __DEFAULT_FN_ATTRS512_CONSTEXPR
285293
_mm512_andnot_pd(__m512d __A, __m512d __B) {
286294
return (__m512d)(~(__v8du)__A & (__v8du)__B);
287295
}
@@ -300,7 +308,7 @@ _mm512_maskz_andnot_pd(__mmask8 __U, __m512d __A, __m512d __B) {
300308
(__v8df)_mm512_setzero_pd());
301309
}
302310

303-
static __inline__ __m512 __DEFAULT_FN_ATTRS512
311+
static __inline__ __m512 __DEFAULT_FN_ATTRS512_CONSTEXPR
304312
_mm512_andnot_ps(__m512 __A, __m512 __B) {
305313
return (__m512)(~(__v16su)__A & (__v16su)__B);
306314
}
@@ -1375,5 +1383,7 @@ _mm512_maskz_broadcast_i64x2(__mmask8 __M, __m128i __A)
13751383

13761384
#undef __DEFAULT_FN_ATTRS512
13771385
#undef __DEFAULT_FN_ATTRS
1386+
#undef __DEFAULT_FN_ATTRS512_CONSTEXPR
1387+
#undef __DEFAULT_FN_ATTRS_CONSTEXPR
13781388

13791389
#endif

clang/lib/Headers/avx512fintrin.h

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -645,7 +645,7 @@ _mm512_zextsi256_si512(__m256i __a)
645645
}
646646

647647
/* Bitwise operators */
648-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
648+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
649649
_mm512_and_epi32(__m512i __a, __m512i __b)
650650
{
651651
return (__m512i)((__v16su)__a & (__v16su)__b);
@@ -666,7 +666,7 @@ _mm512_maskz_and_epi32(__mmask16 __k, __m512i __a, __m512i __b)
666666
__k, __a, __b);
667667
}
668668

669-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
669+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
670670
_mm512_and_epi64(__m512i __a, __m512i __b)
671671
{
672672
return (__m512i)((__v8du)__a & (__v8du)__b);
@@ -687,13 +687,13 @@ _mm512_maskz_and_epi64(__mmask8 __k, __m512i __a, __m512i __b)
687687
__k, __a, __b);
688688
}
689689

690-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
690+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
691691
_mm512_andnot_si512 (__m512i __A, __m512i __B)
692692
{
693693
return (__m512i)(~(__v8du)__A & (__v8du)__B);
694694
}
695695

696-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
696+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
697697
_mm512_andnot_epi32 (__m512i __A, __m512i __B)
698698
{
699699
return (__m512i)(~(__v16su)__A & (__v16su)__B);
@@ -714,7 +714,7 @@ _mm512_maskz_andnot_epi32(__mmask16 __U, __m512i __A, __m512i __B)
714714
__U, __A, __B);
715715
}
716716

717-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
717+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
718718
_mm512_andnot_epi64(__m512i __A, __m512i __B)
719719
{
720720
return (__m512i)(~(__v8du)__A & (__v8du)__B);
@@ -735,7 +735,7 @@ _mm512_maskz_andnot_epi64(__mmask8 __U, __m512i __A, __m512i __B)
735735
__U, __A, __B);
736736
}
737737

738-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
738+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
739739
_mm512_or_epi32(__m512i __a, __m512i __b)
740740
{
741741
return (__m512i)((__v16su)__a | (__v16su)__b);
@@ -755,7 +755,7 @@ _mm512_maskz_or_epi32(__mmask16 __k, __m512i __a, __m512i __b)
755755
return (__m512i)_mm512_mask_or_epi32(_mm512_setzero_si512(), __k, __a, __b);
756756
}
757757

758-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
758+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
759759
_mm512_or_epi64(__m512i __a, __m512i __b)
760760
{
761761
return (__m512i)((__v8du)__a | (__v8du)__b);
@@ -775,7 +775,7 @@ _mm512_maskz_or_epi64(__mmask8 __k, __m512i __a, __m512i __b)
775775
return (__m512i)_mm512_mask_or_epi64(_mm512_setzero_si512(), __k, __a, __b);
776776
}
777777

778-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
778+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
779779
_mm512_xor_epi32(__m512i __a, __m512i __b)
780780
{
781781
return (__m512i)((__v16su)__a ^ (__v16su)__b);
@@ -795,7 +795,7 @@ _mm512_maskz_xor_epi32(__mmask16 __k, __m512i __a, __m512i __b)
795795
return (__m512i)_mm512_mask_xor_epi32(_mm512_setzero_si512(), __k, __a, __b);
796796
}
797797

798-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
798+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
799799
_mm512_xor_epi64(__m512i __a, __m512i __b)
800800
{
801801
return (__m512i)((__v8du)__a ^ (__v8du)__b);
@@ -815,19 +815,19 @@ _mm512_maskz_xor_epi64(__mmask8 __k, __m512i __a, __m512i __b)
815815
return (__m512i)_mm512_mask_xor_epi64(_mm512_setzero_si512(), __k, __a, __b);
816816
}
817817

818-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
818+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
819819
_mm512_and_si512(__m512i __a, __m512i __b)
820820
{
821821
return (__m512i)((__v8du)__a & (__v8du)__b);
822822
}
823823

824-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
824+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
825825
_mm512_or_si512(__m512i __a, __m512i __b)
826826
{
827827
return (__m512i)((__v8du)__a | (__v8du)__b);
828828
}
829829

830-
static __inline__ __m512i __DEFAULT_FN_ATTRS512
830+
static __inline__ __m512i __DEFAULT_FN_ATTRS512_CONSTEXPR
831831
_mm512_xor_si512(__m512i __a, __m512i __b)
832832
{
833833
return (__m512i)((__v8du)__a ^ (__v8du)__b);

clang/lib/Headers/avxintrin.h

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -555,7 +555,7 @@ _mm256_rcp_ps(__m256 __a)
555555
/// A 256-bit vector of [4 x double] containing one of the source operands.
556556
/// \returns A 256-bit vector of [4 x double] containing the bitwise AND of the
557557
/// values between both operands.
558-
static __inline __m256d __DEFAULT_FN_ATTRS
558+
static __inline __m256d __DEFAULT_FN_ATTRS_CONSTEXPR
559559
_mm256_and_pd(__m256d __a, __m256d __b)
560560
{
561561
return (__m256d)((__v4du)__a & (__v4du)__b);
@@ -573,7 +573,7 @@ _mm256_and_pd(__m256d __a, __m256d __b)
573573
/// A 256-bit vector of [8 x float] containing one of the source operands.
574574
/// \returns A 256-bit vector of [8 x float] containing the bitwise AND of the
575575
/// values between both operands.
576-
static __inline __m256 __DEFAULT_FN_ATTRS
576+
static __inline __m256 __DEFAULT_FN_ATTRS_CONSTEXPR
577577
_mm256_and_ps(__m256 __a, __m256 __b)
578578
{
579579
return (__m256)((__v8su)__a & (__v8su)__b);
@@ -594,7 +594,7 @@ _mm256_and_ps(__m256 __a, __m256 __b)
594594
/// \returns A 256-bit vector of [4 x double] containing the bitwise AND of the
595595
/// values of the second operand and the one's complement of the first
596596
/// operand.
597-
static __inline __m256d __DEFAULT_FN_ATTRS
597+
static __inline __m256d __DEFAULT_FN_ATTRS_CONSTEXPR
598598
_mm256_andnot_pd(__m256d __a, __m256d __b)
599599
{
600600
return (__m256d)(~(__v4du)__a & (__v4du)__b);
@@ -615,7 +615,7 @@ _mm256_andnot_pd(__m256d __a, __m256d __b)
615615
/// \returns A 256-bit vector of [8 x float] containing the bitwise AND of the
616616
/// values of the second operand and the one's complement of the first
617617
/// operand.
618-
static __inline __m256 __DEFAULT_FN_ATTRS
618+
static __inline __m256 __DEFAULT_FN_ATTRS_CONSTEXPR
619619
_mm256_andnot_ps(__m256 __a, __m256 __b)
620620
{
621621
return (__m256)(~(__v8su)__a & (__v8su)__b);
@@ -633,7 +633,7 @@ _mm256_andnot_ps(__m256 __a, __m256 __b)
633633
/// A 256-bit vector of [4 x double] containing one of the source operands.
634634
/// \returns A 256-bit vector of [4 x double] containing the bitwise OR of the
635635
/// values between both operands.
636-
static __inline __m256d __DEFAULT_FN_ATTRS
636+
static __inline __m256d __DEFAULT_FN_ATTRS_CONSTEXPR
637637
_mm256_or_pd(__m256d __a, __m256d __b)
638638
{
639639
return (__m256d)((__v4du)__a | (__v4du)__b);
@@ -651,7 +651,7 @@ _mm256_or_pd(__m256d __a, __m256d __b)
651651
/// A 256-bit vector of [8 x float] containing one of the source operands.
652652
/// \returns A 256-bit vector of [8 x float] containing the bitwise OR of the
653653
/// values between both operands.
654-
static __inline __m256 __DEFAULT_FN_ATTRS
654+
static __inline __m256 __DEFAULT_FN_ATTRS_CONSTEXPR
655655
_mm256_or_ps(__m256 __a, __m256 __b)
656656
{
657657
return (__m256)((__v8su)__a | (__v8su)__b);
@@ -669,7 +669,7 @@ _mm256_or_ps(__m256 __a, __m256 __b)
669669
/// A 256-bit vector of [4 x double] containing one of the source operands.
670670
/// \returns A 256-bit vector of [4 x double] containing the bitwise XOR of the
671671
/// values between both operands.
672-
static __inline __m256d __DEFAULT_FN_ATTRS
672+
static __inline __m256d __DEFAULT_FN_ATTRS_CONSTEXPR
673673
_mm256_xor_pd(__m256d __a, __m256d __b)
674674
{
675675
return (__m256d)((__v4du)__a ^ (__v4du)__b);
@@ -687,7 +687,7 @@ _mm256_xor_pd(__m256d __a, __m256d __b)
687687
/// A 256-bit vector of [8 x float] containing one of the source operands.
688688
/// \returns A 256-bit vector of [8 x float] containing the bitwise XOR of the
689689
/// values between both operands.
690-
static __inline __m256 __DEFAULT_FN_ATTRS
690+
static __inline __m256 __DEFAULT_FN_ATTRS_CONSTEXPR
691691
_mm256_xor_ps(__m256 __a, __m256 __b)
692692
{
693693
return (__m256)((__v8su)__a ^ (__v8su)__b);

clang/lib/Headers/emmintrin.h

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2678,8 +2678,8 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_subs_epu16(__m128i __a,
26782678
/// A 128-bit integer vector containing one of the source operands.
26792679
/// \returns A 128-bit integer vector containing the bitwise AND of the values
26802680
/// in both operands.
2681-
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_and_si128(__m128i __a,
2682-
__m128i __b) {
2681+
static __inline__ __m128i __DEFAULT_FN_ATTRS_CONSTEXPR
2682+
_mm_and_si128(__m128i __a, __m128i __b) {
26832683
return (__m128i)((__v2du)__a & (__v2du)__b);
26842684
}
26852685

@@ -2697,8 +2697,8 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_and_si128(__m128i __a,
26972697
/// A 128-bit vector containing the right source operand.
26982698
/// \returns A 128-bit integer vector containing the bitwise AND of the one's
26992699
/// complement of the first operand and the values in the second operand.
2700-
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_andnot_si128(__m128i __a,
2701-
__m128i __b) {
2700+
static __inline__ __m128i __DEFAULT_FN_ATTRS_CONSTEXPR
2701+
_mm_andnot_si128(__m128i __a, __m128i __b) {
27022702
return (__m128i)(~(__v2du)__a & (__v2du)__b);
27032703
}
27042704
/// Performs a bitwise OR of two 128-bit integer vectors.
@@ -2713,8 +2713,8 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_andnot_si128(__m128i __a,
27132713
/// A 128-bit integer vector containing one of the source operands.
27142714
/// \returns A 128-bit integer vector containing the bitwise OR of the values
27152715
/// in both operands.
2716-
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_or_si128(__m128i __a,
2717-
__m128i __b) {
2716+
static __inline__ __m128i __DEFAULT_FN_ATTRS_CONSTEXPR
2717+
_mm_or_si128(__m128i __a, __m128i __b) {
27182718
return (__m128i)((__v2du)__a | (__v2du)__b);
27192719
}
27202720

@@ -2730,8 +2730,8 @@ static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_or_si128(__m128i __a,
27302730
/// A 128-bit integer vector containing one of the source operands.
27312731
/// \returns A 128-bit integer vector containing the bitwise exclusive OR of the
27322732
/// values in both operands.
2733-
static __inline__ __m128i __DEFAULT_FN_ATTRS _mm_xor_si128(__m128i __a,
2734-
__m128i __b) {
2733+
static __inline__ __m128i __DEFAULT_FN_ATTRS_CONSTEXPR
2734+
_mm_xor_si128(__m128i __a, __m128i __b) {
27352735
return (__m128i)((__v2du)__a ^ (__v2du)__b);
27362736
}
27372737

0 commit comments

Comments
 (0)