I have successfully detected CRC32 instruction support on my Nexus 5x.
Use of these instructions to follow... I am not yet sure which compilers if any will give me instrinsics or let me write them in asm.
defined(__ARM_FEATURE_CRC32) should cover users like Android Framework who build with the best settings possible. cpu-features.h covers use cases like Clank and our bots.
BUG=skia:
GOLD_TRYBOT_URL= https://gold.skia.org/search?issue=
2259133002
Review-Url: https://codereview.chromium.org/
2259133002
return features;
}
+#elif defined(SK_CPU_ARM64) && \
+ defined(SK_BUILD_FOR_ANDROID) && \
+ !defined(SK_BUILD_FOR_ANDROID_FRAMEWORK)
+ #include <cpu-features.h>
+
+ static uint32_t read_cpu_features() {
+ uint32_t features = 0;
+
+ uint64_t android_features = android_getCpuFeatures();
+ if (android_features & ANDROID_CPU_ARM64_FEATURE_CRC32) { features |= SkCpu::CRC32; }
+ return features;
+ }
+
#else
static uint32_t read_cpu_features() {
return 0;
NEON = 1 << 0,
NEON_FMA = 1 << 1,
VFP_FP16 = 1 << 2,
+ CRC32 = 1 << 3,
};
static void CacheRuntimeFeatures();
features |= NEON|NEON_FMA|VFP_FP16;
#endif
+ #if defined(__ARM_FEATURE_CRC32)
+ features |= CRC32;
+ #endif
+
#endif
return (features & mask) == mask;
}