]> granicus.if.org Git - libjpeg-turbo/commit
x86 SIMD: Check for CPUID leaf 07H before using
authorChris Blume <cblume@chromium.org>
Tue, 16 Apr 2019 00:55:47 +0000 (17:55 -0700)
committerDRC <information@libjpeg-turbo.org>
Tue, 16 Apr 2019 22:07:28 +0000 (17:07 -0500)
commitaa9db616774e24af7ab2fbcddd5711057b8a901e
treefa3c29d78d1bc07bff323fc185e09c698b7f8a7f
parent2b05d47bc213232742ee1178a043893c24a208db
x86 SIMD: Check for CPUID leaf 07H before using

According to Intel's manual [1], "If a value entered for CPUID.EAX is
higher than the maximum input value for basic or extended function for
that processor then the data for the highest basic information leaf is
returned."

Right now, libjpeg-turbo doesn't first check that leaf 07H is supported
before attempting to use it, so the ostensible AVX2 bit (Bit 05) of the
CPUID result might actually be Bit 05 from a lower leaf.  That bit might
be set, even if the CPU doesn't support AVX2.

This commit modifies the x86 and x86-64 SIMD feature detection code so
that it first checks whether CPUID leaf 07H is supported before
attempting to use it to check for AVX2 instruction support.

DRC:
This commit should fix
https://bugzilla.mozilla.org/show_bug.cgi?id=1520760
However, I have not personally been able to reproduce that issue,
despite using a Nehalem (pre-AVX2) CPU on which the maximum CPUID leaf
has been limited via a BIOS setting.

Closes #348

[1]
"IntelĀ® 64 and IA-32 Architectures Software Developer's Manual, Volume 2 (2A, 2B, 2C & 2D): Instruction Set Reference, A-Z", https://software.intel.com/sites/default/files/managed/a4/60/325383-sdm-vol-2abcd.pdf, page 3-192.
ChangeLog.md
simd/i386/jsimdcpu.asm
simd/x86_64/jsimdcpu.asm