I think we better bring this to a close, else we're going to argue in circles. So, just a few more points:
StudlyCaps wrote:That's the thing though, the "best" answer is "I don't know". You could test and find out it wraps, and this is evidently what some people did, but it is literally undefined behaviour in the purest sense of the term. You wouldn't use undefined behaviour from the C standard, right? Even if your compiler does something neat when you do, your code isn't correct C any more. Programming to a standard is IMO a better way to go than programming to a specific implementation unless you personally build the platform.
Depends on your circumstances. If you are building an application for an OS, then by all means. You have your standard and you build against it. I, however, have to make one specific hardware platform do things. That is the difference between application development and embedded development.
Oh, and the thing about the different oscilator? Well, thankfully the company that makes those MoBos has my employer as their only customer for these boards. Which means, if they come up with a hardware revision, they have to come to us for acceptance testing. And we test for the frequency of the timer. Also, they don't change things unless necessary, because industry, not consumer electronics. Seriously, if they change something without telling us, and that gets our application to misbehave in such a way that an important screw wasn't fastened on a car the way it should have been, and the screw fails and causes an accident with injuries, then they are at fault, legally speaking. Would take a while to get to that point, though. The investigators would come to the car manufacturer fist, then to us, then we'd have to prove it was the MoBo vendor's fault.
See in this case I think it is rather clear cut. Before all those other platforms faded to obscurity floppies said on them "IBM format" "Amiga format" "PC-DOS" etc. If you say your OS requires a PC compatible, yes you should check the model before using CPUID. If you say it requires a 486 or better though for example then you are coding to that standard, and the capabilities of the 8086 are irrelevant.
I say it requires a 64-bit CPU. Me using CPUID at all to verify it is one is a courtesy on my part. And indeed I'm thinking of putting the check only into the installer and let the rest of the OS just assume the CPU to be 64-bit. Which includes a whole bunch of other things, at least PAE, SSE, SSE2, FXSAVE, FPU, and SYSCALL (not that I use it).
I should probably clear this up as well: The first comment pertains to my day job, the second to my OS project. The two are not the same. Not that anyone gets confused.