summaryrefslogtreecommitdiff
path: root/lib/igt_x86.c
diff options
context:
space:
mode:
authorKevin Strasser <kevin.strasser@intel.com>2019-04-05 13:14:03 -0700
committerVille Syrjälä <ville.syrjala@linux.intel.com>2019-04-18 22:17:09 +0300
commit99cc81472c278fdf1eb55143779378b45c79c33f (patch)
tree396a7955aa934922a5173658b7fbd581f39473d9 /lib/igt_x86.c
parent0dc1d6e4d4305a62c64242ec65709e44f5036cf4 (diff)
lib: Add halffloat implementation
Probe for and make an API available for tests to use f16c intrinsics to generate needed fp16 pixel data. Also import a pure c fp32 <-> fp16 conversion implementation from Mesa 18.3.4, which will act as a fallback when f16c is unavailable. rfc2: - Change API to reduce number of function calls (Maarten) v1: - Move pragma so AVX code isn't emitted for fallbacks (Ville) - Change edx to ecx (Ville) Signed-off-by: Kevin Strasser <kevin.strasser@intel.com> Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com> Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Diffstat (limited to 'lib/igt_x86.c')
-rw-r--r--lib/igt_x86.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/lib/igt_x86.c b/lib/igt_x86.c
index 88e514df..6ac700df 100644
--- a/lib/igt_x86.c
+++ b/lib/igt_x86.c
@@ -88,6 +88,10 @@
#define bit_AVX (1 << 28)
#endif
+#ifndef bit_F16C
+#define bit_F16C (1 << 29)
+#endif
+
#ifndef bit_AVX2
#define bit_AVX2 (1<<5)
#endif
@@ -138,6 +142,9 @@ unsigned igt_x86_features(void)
if (edx & bit_SSE2)
features |= SSE2;
+
+ if (ecx & bit_F16C)
+ features |= F16C;
}
if (max >= 7) {
@@ -174,6 +181,8 @@ char *igt_x86_features_to_string(unsigned features, char *line)
line += sprintf(line, ", avx");
if (features & AVX2)
line += sprintf(line, ", avx2");
+ if (features & F16C)
+ line += sprintf(line, ", f16c");
(void)line;