Skip to content

Commit 9ff51ed

Browse files
committed
e2k-lcc: Deal with deprecated inefficient functions of lcc
1 parent 7fa7150 commit 9ff51ed

File tree

4 files changed

+91
-14
lines changed

4 files changed

+91
-14
lines changed

simde/simde-arch.h

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -191,6 +191,14 @@
191191
#define SIMDE_BUG_LCC_XOP_MISSING
192192
#define SIMDE_BUG_LCC_FMA_WRONG_RESULT
193193
#define SIMDE_BUG_LCC_AVX_NO_LOAD_STORE_U2
194+
195+
/* Some native functions on E2K with instruction set < v6
196+
are declared as deprecated due to inefficiency.
197+
Still they are more efficient than SIMDe implementation.
198+
So we're using them, and switching off these deprecation warnings. */
199+
#define SIMDE_BUG_PCLMUL_XOP_DEPRECATED
200+
#define SIMDE_LCC_DISABLE_DEPRECATED_WARNINGS _Pragma("diag_suppress 1215,1444")
201+
#define SIMDE_LCC_REVERT_DEPRECATED_WARNINGS _Pragma("diag_default 1215,1444")
194202
#endif
195203

196204
/* HP/PA / PA-RISC
@@ -317,7 +325,7 @@
317325
# if defined(__GFNI__)
318326
# define SIMDE_ARCH_X86_GFNI 1
319327
# endif
320-
# if defined(__PCLMUL__) && !defined(SIMDE_ARCH_E2K) /* E2K has inefficient implementation of PCLMUL */
328+
# if defined(__PCLMUL__)
321329
# define SIMDE_ARCH_X86_PCLMUL 1
322330
# endif
323331
# if defined(__VPCLMULQDQ__)

simde/x86/clmul.h

Lines changed: 22 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -203,8 +203,21 @@ simde_mm_clmulepi64_si128 (simde__m128i a, simde__m128i b, const int imm8)
203203

204204
return simde__m128i_from_private(r_);
205205
}
206+
207+
#if defined(SIMDE_X86_PCLMUL_NATIVE) && defined(SIMDE_BUG_PCLMUL_XOP_DEPRECATED)
208+
SIMDE_LCC_DISABLE_DEPRECATED_WARNINGS
209+
SIMDE_FUNCTION_ATTRIBUTES
210+
simde__m128i
211+
simde_undeprecated_mm_clmulepi64_si128 (simde__m128i a, simde__m128i b, const int imm8) {
212+
return _mm_clmulepi64_si128(a, b, imm8);
213+
}
214+
SIMDE_LCC_REVERT_DEPRECATED_WARNINGS
215+
#else
216+
#define simde_undeprecated_mm_clmulepi64_si128 _mm_clmulepi64_si128
217+
#endif
218+
206219
#if defined(SIMDE_X86_PCLMUL_NATIVE)
207-
#define simde_mm_clmulepi64_si128(a, b, imm8) _mm_clmulepi64_si128(a, b, imm8)
220+
#define simde_mm_clmulepi64_si128(a, b, imm8) simde_undeprecated_mm_clmulepi64_si128(a, b, imm8)
208221
#elif defined(SIMDE_ARM_NEON_A64V8_NATIVE) && defined(__ARM_FEATURE_AES)
209222
#define simde_mm_clmulepi64_si128(a, b, imm8) \
210223
simde__m128i_from_neon_u64( \
@@ -233,20 +246,20 @@ simde_mm256_clmulepi64_epi128 (simde__m256i a, simde__m256i b, const int imm8)
233246
#if defined(SIMDE_X86_PCLMUL_NATIVE)
234247
switch (imm8 & 0x11) {
235248
case 0x00:
236-
r_.m128i[0] = _mm_clmulepi64_si128(a_.m128i[0], b_.m128i[0], 0x00);
237-
r_.m128i[1] = _mm_clmulepi64_si128(a_.m128i[1], b_.m128i[1], 0x00);
249+
r_.m128i[0] = simde_undeprecated_mm_clmulepi64_si128(a_.m128i[0], b_.m128i[0], 0x00);
250+
r_.m128i[1] = simde_undeprecated_mm_clmulepi64_si128(a_.m128i[1], b_.m128i[1], 0x00);
238251
break;
239252
case 0x01:
240-
r_.m128i[0] = _mm_clmulepi64_si128(a_.m128i[0], b_.m128i[0], 0x01);
241-
r_.m128i[1] = _mm_clmulepi64_si128(a_.m128i[1], b_.m128i[1], 0x01);
253+
r_.m128i[0] = simde_undeprecated_mm_clmulepi64_si128(a_.m128i[0], b_.m128i[0], 0x01);
254+
r_.m128i[1] = simde_undeprecated_mm_clmulepi64_si128(a_.m128i[1], b_.m128i[1], 0x01);
242255
break;
243256
case 0x10:
244-
r_.m128i[0] = _mm_clmulepi64_si128(a_.m128i[0], b_.m128i[0], 0x10);
245-
r_.m128i[1] = _mm_clmulepi64_si128(a_.m128i[1], b_.m128i[1], 0x10);
257+
r_.m128i[0] = simde_undeprecated_mm_clmulepi64_si128(a_.m128i[0], b_.m128i[0], 0x10);
258+
r_.m128i[1] = simde_undeprecated_mm_clmulepi64_si128(a_.m128i[1], b_.m128i[1], 0x10);
246259
break;
247260
case 0x11:
248-
r_.m128i[0] = _mm_clmulepi64_si128(a_.m128i[0], b_.m128i[0], 0x11);
249-
r_.m128i[1] = _mm_clmulepi64_si128(a_.m128i[1], b_.m128i[1], 0x11);
261+
r_.m128i[0] = simde_undeprecated_mm_clmulepi64_si128(a_.m128i[0], b_.m128i[0], 0x11);
262+
r_.m128i[1] = simde_undeprecated_mm_clmulepi64_si128(a_.m128i[1], b_.m128i[1], 0x11);
250263
break;
251264
}
252265
#else

simde/x86/f16c.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,12 +45,14 @@ SIMDE_FUNCTION_ATTRIBUTES
4545
simde__m128i
4646
simde_mm_cvtps_ph(simde__m128 a, const int sae) {
4747
#if defined(SIMDE_X86_F16C_NATIVE)
48+
SIMDE_LCC_DISABLE_DEPRECATED_WARNINGS
4849
switch (sae & SIMDE_MM_FROUND_NO_EXC) {
4950
case SIMDE_MM_FROUND_NO_EXC:
5051
return _mm_cvtps_ph(a, SIMDE_MM_FROUND_NO_EXC);
5152
default:
5253
return _mm_cvtps_ph(a, 0);
5354
}
55+
SIMDE_LCC_REVERT_DEPRECATED_WARNINGS
5456
#else
5557
simde__m128_private a_ = simde__m128_to_private(a);
5658
simde__m128i_private r_ = simde__m128i_to_private(simde_mm_setzero_si128());
@@ -102,12 +104,14 @@ SIMDE_FUNCTION_ATTRIBUTES
102104
simde__m128i
103105
simde_mm256_cvtps_ph(simde__m256 a, const int sae) {
104106
#if defined(SIMDE_X86_F16C_NATIVE) && defined(SIMDE_X86_AVX_NATIVE)
107+
SIMDE_LCC_DISABLE_DEPRECATED_WARNINGS
105108
switch (sae & SIMDE_MM_FROUND_NO_EXC) {
106109
case SIMDE_MM_FROUND_NO_EXC:
107110
return _mm256_cvtps_ph(a, SIMDE_MM_FROUND_NO_EXC);
108111
default:
109112
return _mm256_cvtps_ph(a, 0);
110113
}
114+
SIMDE_LCC_REVERT_DEPRECATED_WARNINGS
111115
#else
112116
simde__m256_private a_ = simde__m256_to_private(a);
113117
simde__m128i_private r_;

simde/x86/xop.h

Lines changed: 56 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3511,8 +3511,21 @@ simde_mm_permute2_ps (simde__m128 a, simde__m128 b, simde__m128i c, const int im
35113511

35123512
return simde__m128_from_private(r_);
35133513
}
3514+
3515+
#if defined(SIMDE_X86_XOP_NATIVE) && defined(SIMDE_BUG_PCLMUL_XOP_DEPRECATED)
3516+
SIMDE_LCC_DISABLE_DEPRECATED_WARNINGS
3517+
SIMDE_FUNCTION_ATTRIBUTES
3518+
simde__m128
3519+
simde_undeprecated_mm_permute2_ps (simde__m128 a, simde__m128 b, simde__m128i c, const int imm8) {
3520+
return _mm_permute2_ps(a, b, c, imm8);
3521+
}
3522+
SIMDE_LCC_REVERT_DEPRECATED_WARNINGS
3523+
#else
3524+
#define simde_undeprecated_mm_permute2_ps _mm_permute2_ps
3525+
#endif
3526+
35143527
#if defined(SIMDE_X86_XOP_NATIVE)
3515-
#define simde_mm_permute2_ps(a, b, c, imm8) _mm_permute2_ps((a), (b), (c), (imm8))
3528+
#define simde_mm_permute2_ps(a, b, c, imm8) simde_undeprecated_mm_permute2_ps((a), (b), (c), (imm8))
35163529
#endif
35173530
#if defined(SIMDE_X86_XOP_ENABLE_NATIVE_ALIASES)
35183531
#define _mm_permute2_ps(a, b, c, imm8) simde_mm_permute2_ps((a), (b), (c), (imm8))
@@ -3547,8 +3560,21 @@ simde_mm_permute2_pd (simde__m128d a, simde__m128d b, simde__m128i c, const int
35473560

35483561
return simde__m128d_from_private(r_);
35493562
}
3563+
3564+
#if defined(SIMDE_X86_XOP_NATIVE) && defined(SIMDE_BUG_PCLMUL_XOP_DEPRECATED)
3565+
SIMDE_LCC_DISABLE_DEPRECATED_WARNINGS
3566+
SIMDE_FUNCTION_ATTRIBUTES
3567+
simde__m128d
3568+
simde_undeprecated_mm_permute2_pd (simde__m128d a, simde__m128d b, simde__m128i c, const int imm8) {
3569+
return _mm_permute2_pd(a, b, c, imm8);
3570+
}
3571+
SIMDE_LCC_REVERT_DEPRECATED_WARNINGS
3572+
#else
3573+
#define simde_undeprecated_mm_permute2_pd _mm_permute2_pd
3574+
#endif
3575+
35503576
#if defined(SIMDE_X86_XOP_NATIVE)
3551-
#define simde_mm_permute2_pd(a, b, c, imm8) _mm_permute2_pd((a), (b), (c), (imm8))
3577+
#define simde_mm_permute2_pd(a, b, c, imm8) simde_undeprecated_mm_permute2_pd((a), (b), (c), (imm8))
35523578
#endif
35533579
#if defined(SIMDE_X86_XOP_ENABLE_NATIVE_ALIASES)
35543580
#define _mm_permute2_pd(a, b, c, imm8) simde_mm_permute2_pd((a), (b), (c), (imm8))
@@ -3589,8 +3615,21 @@ simde_mm256_permute2_ps (simde__m256 a, simde__m256 b, simde__m256i c, const int
35893615

35903616
return simde__m256_from_private(r_);
35913617
}
3618+
3619+
#if defined(SIMDE_X86_XOP_NATIVE) && defined(SIMDE_BUG_PCLMUL_XOP_DEPRECATED)
3620+
SIMDE_LCC_DISABLE_DEPRECATED_WARNINGS
3621+
SIMDE_FUNCTION_ATTRIBUTES
3622+
simde__m256
3623+
simde_undeprecated_mm256_permute2_ps (simde__m256 a, simde__m256 b, simde__m256i c, const int imm8) {
3624+
return _mm256_permute2_ps(a, b, c, imm8);
3625+
}
3626+
SIMDE_LCC_REVERT_DEPRECATED_WARNINGS
3627+
#else
3628+
#define simde_undeprecated_mm256_permute2_ps _mm256_permute2_ps
3629+
#endif
3630+
35923631
#if defined(SIMDE_X86_XOP_NATIVE)
3593-
#define simde_mm256_permute2_ps(a, b, c, imm8) _mm256_permute2_ps((a), (b), (c), (imm8))
3632+
#define simde_mm256_permute2_ps(a, b, c, imm8) simde_undeprecated_mm256_permute2_ps((a), (b), (c), (imm8))
35943633
#endif
35953634
#if defined(SIMDE_X86_XOP_ENABLE_NATIVE_ALIASES)
35963635
#define _mm256_permute2_ps(a, b, c, imm8) simde_mm256_permute2_ps((a), (b), (c), (imm8))
@@ -3631,8 +3670,21 @@ simde_mm256_permute2_pd (simde__m256d a, simde__m256d b, simde__m256i c, const i
36313670

36323671
return simde__m256d_from_private(r_);
36333672
}
3673+
3674+
#if defined(SIMDE_X86_XOP_NATIVE) && defined(SIMDE_BUG_PCLMUL_XOP_DEPRECATED)
3675+
SIMDE_LCC_DISABLE_DEPRECATED_WARNINGS
3676+
SIMDE_FUNCTION_ATTRIBUTES
3677+
simde__m256d
3678+
simde_undeprecated_mm256_permute2_pd (simde__m256d a, simde__m256d b, simde__m256i c, const int imm8) {
3679+
return _mm256_permute2_pd(a, b, c, imm8);
3680+
}
3681+
SIMDE_LCC_REVERT_DEPRECATED_WARNINGS
3682+
#else
3683+
#define simde_undeprecated_mm256_permute2_pd _mm256_permute2_pd
3684+
#endif
3685+
36343686
#if defined(SIMDE_X86_XOP_NATIVE)
3635-
#define simde_mm256_permute2_pd(a, b, c, imm8) _mm256_permute2_pd((a), (b), (c), (imm8))
3687+
#define simde_mm256_permute2_pd(a, b, c, imm8) simde_undeprecated_mm256_permute2_pd((a), (b), (c), (imm8))
36363688
#endif
36373689
#if defined(SIMDE_X86_XOP_ENABLE_NATIVE_ALIASES)
36383690
#define _mm256_permute2_pd(a, b, c, imm8) simde_mm256_permute2_pd((a), (b), (c), (imm8))

0 commit comments

Comments
 (0)