This is the mail archive of the gcc@gcc.gnu.org mailing list for the GCC project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
I am now printing the return value from __get_cpuid_max()I hacked on that test program to get the attached program. I ran it multiple times on qemu.
ext=0x0 sig=0x756e6547 0x781abfd YES on SSE2
ext=0x0 sig=0x756e6547 returned=0x2 0x781abfd YES on SSE2
Isn't the "sig" supposed to be >= 0x80000000?
I added a print before the return on !__get_cpuid and it is returning non zero.I ran the same program natively and got this:
ext=0x0 sig=0x756e6547 0xbfebfbff YES on SSE2
I wonder if qemu is just reporting things wrong. :( I searched the qemu manual and googled some but didn't see anything that jumped out.
Does this look like qemu reporting a bogus cpuid or
gcc not parsing it correctly?
This all depends on the return value of __get_cpuid_max(). It returns max value of base cpuid level (5 in my case), and shoould return 0 if cpuid is not supported. This follows the procedure outlined in http://download.intel.com/design/processor/applnots/24161832.pdf, section 2: "Detecting the CPUID Instruction".
The call to __get_cpuid is checking against level 1 and this is a level 2.It is true, that this is not the most maintained code on the planet, so some bitrot is possible. The return value of __get_cpuid_max() on your target will tell...
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |