[gegl] gegl: extend cpuaccel with more features
- From: Øyvind "pippin" Kolås <ok src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gegl] gegl: extend cpuaccel with more features
- Date: Sun, 16 Jan 2022 07:01:59 +0000 (UTC)
commit 92c0d2f34171c6d6399545bc4760c65ff46edec9
Author: Øyvind Kolås <pippin gimp org>
Date: Sun Jan 16 04:14:14 2022 +0100
gegl: extend cpuaccel with more features
gegl/gegl-cpuaccel.c | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++
gegl/gegl-cpuaccel.h | 34 ++++++++++++++++++++++++++---
2 files changed, 91 insertions(+), 3 deletions(-)
---
diff --git a/gegl/gegl-cpuaccel.c b/gegl/gegl-cpuaccel.c
index 2e8d5df60..73854283d 100644
--- a/gegl/gegl-cpuaccel.c
+++ b/gegl/gegl-cpuaccel.c
@@ -117,6 +117,22 @@ enum
enum
{
ARCH_X86_INTEL_FEATURE_PNI = 1 << 0
+ ARCH_X86_INTEL_FEATURE_SSSE3 = 1 << 9,
+ ARCH_X86_INTEL_FEATURE_FMA = 1 << 12,
+ ARCH_X86_INTEL_FEATURE_SSE4_1 = 1 << 19,
+ ARCH_X86_INTEL_FEATURE_SSE4_2 = 1 << 20,
+ ARCH_X86_INTEL_FEATURE_MOVBE = 1 << 22,
+ ARCH_X86_INTEL_FEATURE_POPCNT = 1 << 23,
+ ARCH_X86_INTEL_FEATURE_XSAVE = 1 << 26,
+ ARCH_X86_INTEL_FEATURE_OSXSAVE = 1 << 27,
+ ARCH_X86_INTEL_FEATURE_AVX = 1 << 28,
+ ARCH_X86_INTEL_FEATURE_F16C = 1 << 29
+
+ // extended features
+
+ ARCH_X86_INTEL_FEATURE_BMI1 = 1 << 3,
+ ARCH_X86_INTEL_FEATURE_BMI2 = 1 << 8,
+ ARCH_X86_INTEL_FEATURE_AVX2 = 1 << 5,
};
#if !defined(ARCH_X86_64) && (defined(PIC) || defined(__PIC__))
@@ -240,6 +256,50 @@ arch_accel_intel (void)
if (ecx & ARCH_X86_INTEL_FEATURE_PNI)
caps |= GEGL_CPU_ACCEL_X86_SSE3;
+
+ if (ecx & ARCH_X86_INTEL_FEATURE_SSSE3)
+ caps |= GEGL_CPU_ACCEL_X86_SSSE3;
+
+ if (ecx & ARCH_X86_INTEL_FEATURE_SSE4_1)
+ caps |= GEGL_CPU_ACCEL_X86_SSE4_1;
+
+ if (ecx & ARCH_X86_INTEL_FEATURE_SSE4_2)
+ caps |= GEGL_CPU_ACCEL_X86_SSE4_2;
+
+ if (ecx & ARCH_X86_INTEL_FEATURE_AVX)
+ caps |= GEGL_CPU_ACCEL_X86_AVX;
+
+ if (ecx & ARCH_X86_INTEL_FEATURE_POPCNT)
+ caps |= GEGL_CPU_ACCEL_X86_POPCNT;
+
+ if (ecx & ARCH_X86_INTEL_FEATURE_XSAVE)
+ caps |= GEGL_CPU_ACCEL_X86_XSAVE;
+
+ if (ecx & ARCH_X86_INTEL_FEATURE_OSXSAVE)
+ caps |= GEGL_CPU_ACCEL_X86_OSXSAVE;
+
+ if (ecx & ARCH_X86_INTEL_FEATURE_FMA)
+ caps |= GEGL_CPU_ACCEL_X86_FMA;
+
+ if (ecx & ARCH_X86_INTEL_FEATURE_F16C)
+ caps |= GEGL_CPU_ACCEL_X86_F16C;
+
+ if (ecx & ARCH_X86_INTEL_FEATURE_MOVBE)
+ caps |= GEGL_CPU_ACCEL_X86_MOVBE;
+
+ cpuid (0, eax, ebx, ecx, edx);
+ if (eax >= 7)
+ {
+ cpuid (7, eax, ebx, ecs, edx);
+ if (ebx & ARCH_X86_INTEL_FEATURE_AVX2)
+ caps |= GEGL_CPU_ACCEL_X86_AVX2;
+ if (ebx & ARCH_X86_INTEL_FEATURE_BMI1)
+ caps |= GEGL_CPU_ACCEL_X86_BMI1;
+ if (ebx & ARCH_X86_INTEL_FEATURE_BMI2)
+ caps |= GEGL_CPU_ACCEL_X86_BMI2;
+ }
+
+
#endif /* USE_SSE */
}
#endif /* USE_MMX */
diff --git a/gegl/gegl-cpuaccel.h b/gegl/gegl-cpuaccel.h
index 66b716396..ef861b2f8 100644
--- a/gegl/gegl-cpuaccel.h
+++ b/gegl/gegl-cpuaccel.h
@@ -28,15 +28,43 @@ typedef enum
GEGL_CPU_ACCEL_NONE = 0x0,
/* x86 accelerations */
- GEGL_CPU_ACCEL_X86_MMX = 0x01000000,
+ GEGL_CPU_ACCEL_X86_MMX = 0x80000000,
GEGL_CPU_ACCEL_X86_3DNOW = 0x40000000,
GEGL_CPU_ACCEL_X86_MMXEXT = 0x20000000,
GEGL_CPU_ACCEL_X86_SSE = 0x10000000,
GEGL_CPU_ACCEL_X86_SSE2 = 0x08000000,
- GEGL_CPU_ACCEL_X86_SSE3 = 0x02000000,
+ GEGL_CPU_ACCEL_X86_SSE3 = 0x04000000,
+ GEGL_CPU_ACCEL_X86_SSSE3 = 0x02000000,
+ GEGL_CPU_ACCEL_X86_SSE4_1 = 0x01000000,
+ GEGL_CPU_ACCEL_X86_SSE4_2 = 0x00800000,
+ GEGL_CPU_ACCEL_X86_AVX = 0x00400000,
+ GEGL_CPU_ACCEL_X86_POPCNT = 0x00200000,
+ GEGL_CPU_ACCEL_X86_FMA = 0x00100000,
+ GEGL_CPU_ACCEL_X86_MOVBE = 0x00080000,
+ GEGL_CPU_ACCEL_X86_F16C = 0x00040000,
+ GEGL_CPU_ACCEL_X86_XSAVE = 0x00020000,
+ GEGL_CPU_ACCEL_X86_OSXSAVE = 0x00010000,
+ GEGL_CPU_ACCEL_X86_BMI1 = 0x00008000,
+ GEGL_CPU_ACCEL_X86_BMI2 = 0x00004000,
+ GEGL_CPU_ACCEL_X86_AVX2 = 0x00002000,
+
+ GEGL_CPU_ACCEL_X86_64_V2 =
+ (GEGL_CPU_ACCEL_X86_POPCNT|
+ GEGL_CPU_ACCEL_X86_SSE4_1|
+ GEGL_CPU_ACCEL_X86_SSE4_2|
+ GEGL_CPU_ACCEL_X86_SSSE3),
+
+ GEGL_CPU_ACCEL_X86_64_V3 =
+ (GEGL_CPU_ACCEL_X86_64_V2|
+ GEGL_CPU_ACCEL_X86_BMI1|
+ GEGL_CPU_ACCEL_X86_BMI2|
+ GEGL_CPU_ACCEL_X86_AVX|
+ GEGL_CPU_ACCEL_X86_AVX2|
+ GEGL_CPU_ACCEL_X86_OSXSAVE|
+ GEGL_CPU_ACCEL_X86_MOVBE),
/* powerpc accelerations */
- GEGL_CPU_ACCEL_PPC_ALTIVEC = 0x04000000
+ GEGL_CPU_ACCEL_PPC_ALTIVEC = 0x00000010,
} GeglCpuAccelFlags;
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]